<?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>234524</bug_id>
          
          <creation_ts>2021-12-20 13:29:00 -0800</creation_ts>
          <short_desc>[LBSE] Begin layer-aware RenderSVGModelObject implementation</short_desc>
          <delta_ts>2022-01-05 04:42:28 -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>SVG</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>234235</dependson>
          <blocked>90738</blocked>
    
    <blocked>234632</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1825712</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-20 13:29:00 -0800</bug_when>
    <thetext>Following the move RenderSVGModelObject -&gt; LegacyRenderSVGModelObject (bug #234235), a new RenderSVGModelObject implementation, tied to ENABLE(LAYER_BASED_SVG_ENGINE) is needed. Unlike LegacyRenderSVGModelObject it inherits from RenderLayerModelObject of RenderElement, since SVG elements in LBSE may create layers (to be upstreamed in future patches).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825770</commentid>
    <comment_count>1</comment_count>
      <attachid>447652</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-20 15:10:45 -0800</bug_when>
    <thetext>Created attachment 447652
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825996</commentid>
    <comment_count>2</comment_count>
      <attachid>447652</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-21 07:41:28 -0800</bug_when>
    <thetext>Comment on attachment 447652
Patch, v1

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

&gt; Source/WebCore/ChangeLog:21
&gt; +        the reason for the unnecessary confusing SVG inheritance structure Furthermore we explicitly

Forgot a period before &quot;Furthermore&quot;.

&gt; Source/WebCore/Sources.txt:2483
&gt; +rendering/svg/RenderSVGModelObject.cpp

These additions break the sorted list.

&gt; Source/WebCore/rendering/RenderLayerModelObject.cpp:239
&gt; +    if (!is&lt;RenderSVGModelObject&gt;(*this))

Is the only time this can be hit when we deal with RenderLineBreak? If so then maybe it is nicer to add a computeVisibleRectInContainer to RenderLineBreak that skips straight to RenderObject:: computeVisibleRectInContainer and make this an ASSERT.

&gt; Source/WebCore/rendering/RenderLayerModelObject.cpp:281
&gt; +    if (!is&lt;RenderSVGModelObject&gt;(*this))

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:2
&gt; + * Copyright (c) 2009, Google Inc. All rights reserved.

Why Google and why 2009? Also if you added code (I assume you did) then maybe Igalia 2021 is in order.

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.h:2
&gt; + * Copyright (c) 2009, Google Inc. All rights reserved.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826086</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-21 12:37:36 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #2)
Thanks for the review!

&gt; &gt; Source/WebCore/ChangeLog:21
&gt; &gt; +        the reason for the unnecessary confusing SVG inheritance structure Furthermore we explicitly
&gt; 
&gt; Forgot a period before &quot;Furthermore&quot;.
Fixed.
 
&gt; &gt; Source/WebCore/Sources.txt:2483
&gt; &gt; +rendering/svg/RenderSVGModelObject.cpp
&gt; 
&gt; These additions break the sorted list.
Oh, not checked by EWS apparently. Fixed.

&gt; &gt; Source/WebCore/rendering/RenderLayerModelObject.cpp:239
&gt; &gt; +    if (!is&lt;RenderSVGModelObject&gt;(*this))
&gt; 
&gt; Is the only time this can be hit when we deal with RenderLineBreak? If so
&gt; then maybe it is nicer to add a computeVisibleRectInContainer to
&gt; RenderLineBreak that skips straight to RenderObject::
&gt; computeVisibleRectInContainer and make this an ASSERT.
Hmm, what&apos;s the relation to RenderLineBreak? Cannot follow you here.
In the full LBSE, only RenderSVGModelObject / RenderSVGBlock need a computeVisibleRectInContainer() implementation, and RenderLayerModelObject is the common base class for them.
 
&gt; &gt; Source/WebCore/rendering/RenderLayerModelObject.cpp:281
&gt; &gt; +    if (!is&lt;RenderSVGModelObject&gt;(*this))
&gt; 
&gt; Ditto.
Same as above, not sure what you mean.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:2
&gt; &gt; + * Copyright (c) 2009, Google Inc. All rights reserved.
&gt; 
&gt; Why Google and why 2009? Also if you added code (I assume you did) then
&gt; maybe Igalia 2021 is in order.
Well that&apos;s a straight copy from LegacyRenderSVGModelObject, and I have to preserve copyright. But you&apos;re right: Igalia is missing.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.h:2
&gt; &gt; + * Copyright (c) 2009, Google Inc. All rights reserved.
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826092</commentid>
    <comment_count>4</comment_count>
      <attachid>447745</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-21 12:42:27 -0800</bug_when>
    <thetext>Created attachment 447745
Patch, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826238</commentid>
    <comment_count>5</comment_count>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-22 01:24:07 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #2)
&gt; Comment on attachment 447652 [details]
&gt; &gt; Is the only time this can be hit when we deal with RenderLineBreak? If so
&gt; &gt; then maybe it is nicer to add a computeVisibleRectInContainer to
&gt; &gt; RenderLineBreak that skips straight to RenderObject::
&gt; &gt; computeVisibleRectInContainer and make this an ASSERT.
&gt; Hmm, what&apos;s the relation to RenderLineBreak? Cannot follow you here.
&gt; In the full LBSE, only RenderSVGModelObject / RenderSVGBlock need a
&gt; computeVisibleRectInContainer() implementation, and RenderLayerModelObject
&gt; is the common base class for them.

computeVisibleRectInContainer is overridden in all subclasses except in RenderLineBreak. So by adding computeVisibleRectInContainer to RenderLineBreak,
RenderLayerModelObject::computeVisibleRectInContainer should only by called by SVG subclasses, so the if should be able to be converted into an ASSERT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826274</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-22 05:57:54 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #5)
&gt; (In reply to Rob Buis from comment #2)
&gt; &gt; Comment on attachment 447652 [details]
&gt; &gt; &gt; Is the only time this can be hit when we deal with RenderLineBreak? If so
&gt; &gt; &gt; then maybe it is nicer to add a computeVisibleRectInContainer to
&gt; &gt; &gt; RenderLineBreak that skips straight to RenderObject::
&gt; &gt; &gt; computeVisibleRectInContainer and make this an ASSERT.
&gt; &gt; Hmm, what&apos;s the relation to RenderLineBreak? Cannot follow you here.
&gt; &gt; In the full LBSE, only RenderSVGModelObject / RenderSVGBlock need a
&gt; &gt; computeVisibleRectInContainer() implementation, and RenderLayerModelObject
&gt; &gt; is the common base class for them.
&gt; 
&gt; computeVisibleRectInContainer is overridden in all subclasses except in
&gt; RenderLineBreak. So by adding computeVisibleRectInContainer to
&gt; RenderLineBreak,
&gt; RenderLayerModelObject::computeVisibleRectInContainer should only by called
&gt; by SVG subclasses, so the if should be able to be converted into an ASSERT.

That sounds fishy to me:

a) I would not expect a function in RenderLayerModelObject to assert that it‘s called on a RenderSVGModelObject/RenderSVGBlock only.

b) It hurting extensibility: a new HTML/CSS renderer class inheriting from RenderLayerModelObject has to implement mapLocalToContainer() and call the super-super class implementation (e.g. RenderLineBreak needs to skip RenderLayerModelObject::mapLocalToContainer()). The „short cut“ to implement the SVG-style mapLocalToContainer() implementation would affect all non-SVG callsites for no reason. 

But still you have a valid point. I propose to add only a protected mapLocalToContainerForSVG() method and not implement RenderLayerModelObject::mapLocalToContainer(). Each SVG renderers that needs mapLocalToContainer() can implement it and just call mapLocalToContainerSVG()…

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826280</commentid>
    <comment_count>7</comment_count>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-22 06:23:14 -0800</bug_when>
    <thetext>(In reply to Nikolas Zimmermann from comment #6)
&gt; That sounds fishy to me:
&gt; 
&gt; a) I would not expect a function in RenderLayerModelObject to assert that
&gt; it‘s called on a RenderSVGModelObject/RenderSVGBlock only.
&gt; 
&gt; b) It hurting extensibility: a new HTML/CSS renderer class inheriting from
&gt; RenderLayerModelObject has to implement mapLocalToContainer() and call the
&gt; super-super class implementation (e.g. RenderLineBreak needs to skip
&gt; RenderLayerModelObject::mapLocalToContainer()). The „short cut“ to implement
&gt; the SVG-style mapLocalToContainer() implementation would affect all non-SVG
&gt; callsites for no reason. 
&gt; 
&gt; But still you have a valid point. I propose to add only a protected
&gt; mapLocalToContainerForSVG() method and not implement
&gt; RenderLayerModelObject::mapLocalToContainer(). Each SVG renderers that needs
&gt; mapLocalToContainer() can implement it and just call
&gt; mapLocalToContainerSVG()…
&gt; 
&gt; What do you think?

I was more looking at computeVisibleRectInContainer. But your suggestion sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826336</commentid>
    <comment_count>8</comment_count>
      <attachid>447817</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-22 10:34:21 -0800</bug_when>
    <thetext>Created attachment 447817
Patch, v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826350</commentid>
    <comment_count>9</comment_count>
      <attachid>447819</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-22 11:11:15 -0800</bug_when>
    <thetext>Created attachment 447819
Patch, v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826511</commentid>
    <comment_count>10</comment_count>
      <attachid>447819</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-23 01:08:42 -0800</bug_when>
    <thetext>Comment on attachment 447819
Patch, v4

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

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.h:95
&gt; +    virtual Path computeClipPath(AffineTransform&amp;) const;

I think it is better to introduce these (RenderLayer specific) APIs when we start calling them.

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.h:116
&gt; +    void paintSVGOutline(PaintInfo&amp;, const LayoutPoint&amp; adjustedPaintOffset);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826518</commentid>
    <comment_count>11</comment_count>
      <attachid>447866</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-23 02:12:18 -0800</bug_when>
    <thetext>Created attachment 447866
Patch, v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826519</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-23 02:12:37 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #10)
&gt; Comment on attachment 447819 [details]
&gt; Patch, v4
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=447819&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.h:95
&gt; &gt; +    virtual Path computeClipPath(AffineTransform&amp;) const;
&gt; 
&gt; I think it is better to introduce these (RenderLayer specific) APIs when we
&gt; start calling them.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.h:116
&gt; &gt; +    void paintSVGOutline(PaintInfo&amp;, const LayoutPoint&amp; adjustedPaintOffset);
&gt; 
&gt; Ditto.

I agree with both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826521</commentid>
    <comment_count>13</comment_count>
      <attachid>447866</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-12-23 02:25:27 -0800</bug_when>
    <thetext>Comment on attachment 447866
Patch, v5

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

Getting closer :)

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:179
&gt; +    auto* container = this-&gt;parent();

Probably this can be removed.

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:212
&gt; +    auto repaintBoundingBox = enclosingLayoutRect(this-&gt;repaintRectInLocalCoordinates());

Ditto?

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:228
&gt; +    if (style().visibility() == Visibility::Hidden || style().display() == DisplayType::None)

Can DisplayType::None really happen? What about display: contents?

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:278
&gt; +Path RenderSVGModelObject::computeClipPath(AffineTransform&amp; transform) const

Needs to be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826579</commentid>
    <comment_count>14</comment_count>
      <attachid>447887</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-12-23 11:19:03 -0800</bug_when>
    <thetext>Created attachment 447887
Patch, v6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826972</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-27 13:29:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/86944226&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827646</commentid>
    <comment_count>16</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-03 00:17:52 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #13)
&gt; Getting closer :)
Step by step :-)

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:179
&gt; &gt; +    auto* container = this-&gt;parent();
&gt; 
&gt; Probably this can be removed.
Done.

&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:212
&gt; &gt; +    auto repaintBoundingBox = enclosingLayoutRect(this-&gt;repaintRectInLocalCoordinates());
&gt; 
&gt; Ditto?
Indeed, the function call used to be named &apos;repaintBoundingBox&apos; in the downstream branch, that&apos;s a left-over from renaming back to legacy nomenclature: &apos;repaintRectInLocalCoordinates&apos; (to minimize patch size).
 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:228
&gt; &gt; +    if (style().visibility() == Visibility::Hidden || style().display() == DisplayType::None)
&gt; 
&gt; Can DisplayType::None really happen? What about display: contents?
DisplayType::None can happen -- we create renderers for e.g. &lt;g display=&quot;none&quot;&gt;. No idea about &quot;display: contents&quot; - never used it nor thought about its usage within SVG context. That&apos;s a general issue I think, out of scope for this patch -- shouldPaintSVGRenderer() behaves the same in the legacy engine.

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:278
&gt; &gt; +Path RenderSVGModelObject::computeClipPath(AffineTransform&amp; transform) const
&gt; 
&gt; Needs to be removed.
Already done in patch v6, which was posted before I saw these comments.

New patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827648</commentid>
    <comment_count>17</comment_count>
      <attachid>448214</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-03 00:34:53 -0800</bug_when>
    <thetext>Created attachment 448214
Patch, v7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827653</commentid>
    <comment_count>18</comment_count>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-03 01:19:20 -0800</bug_when>
    <thetext>(In reply to Nikolas Zimmermann from comment #16)
&gt; &gt; Can DisplayType::None really happen? What about display: contents?
&gt; DisplayType::None can happen -- we create renderers for e.g. &lt;g
&gt; display=&quot;none&quot;&gt;. No idea about &quot;display: contents&quot; - never used it nor
&gt; thought about its usage within SVG context. That&apos;s a general issue I think,
&gt; out of scope for this patch -- shouldPaintSVGRenderer() behaves the same in
&gt; the legacy engine.

Agreed that display: contents is out of scope for this patch, we should remember to look into it at some point though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827660</commentid>
    <comment_count>19</comment_count>
      <attachid>448214</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-03 02:05:13 -0800</bug_when>
    <thetext>Comment on attachment 448214
Patch, v7

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

Probably by now copyright info has to be updated to include 2022 if changes are made in the file(s).

&gt; Source/WebCore/rendering/RenderLayerModelObject.cpp:252
&gt; +    ASSERT_UNUSED(containerIsSkipped, !containerIsSkipped);

What is this for?

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:64
&gt; +    if (RenderObject::node() &amp;&amp; is&lt;SVGGraphicsElement&gt;(nodeForNonAnonymous()))

Can we have anonymous nodes in SVG?

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:107
&gt; +    ASSERT_UNUSED(ancestorSkipped, !ancestorSkipped);

Ditto.

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:187
&gt; +    bool preserve3D = mode &amp; UseTransforms &amp;&amp; (container-&gt;style().preserves3D() || style().preserves3D());

The preserve3D checks below could be stored in a temp variable at this line, making things a bit more readable hopefully.

&gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:242
&gt; +    if (other.isEmpty() &amp;&amp; !r.isEmpty())

Looks like r.isEmpty() is already proven to be false!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827675</commentid>
    <comment_count>20</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-03 03:30:51 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #19)
&gt; Comment on attachment 448214 [details]
&gt; Patch, v7
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=448214&amp;action=review
&gt; 
&gt; Probably by now copyright info has to be updated to include 2022 if changes
&gt; are made in the file(s).
Correct, done.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerModelObject.cpp:252
&gt; &gt; +    ASSERT_UNUSED(containerIsSkipped, !containerIsSkipped);
&gt; 
&gt; What is this for?
This is a copy of the generic computeVisibleRectInContainer() method, adapted for SVG. Since containerIsSkipped is always false in SVG content, this is assert&apos;ed here.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:64
&gt; &gt; +    if (RenderObject::node() &amp;&amp; is&lt;SVGGraphicsElement&gt;(nodeForNonAnonymous()))
&gt; 
&gt; Can we have anonymous nodes in SVG?
We indeed had at some point in the LBSE prototype, when I modelled SVG view box, by creating an anonymous RenderSVGViewportContainer as direct child of the RenderSVGRoot, encapsulating all SVG content. While this has some benefits, the complexity increase is not worth it, so I&apos;ve abandoned this.

I&apos;ll adapt the code to remove the node() check (it would then assert in nodeForNonAnymous() when called for anonymous nodes).
 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:107
&gt; &gt; +    ASSERT_UNUSED(ancestorSkipped, !ancestorSkipped);
&gt; 
&gt; Ditto.
I&apos;d like to keep this...

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:187
&gt; &gt; +    bool preserve3D = mode &amp; UseTransforms &amp;&amp; (container-&gt;style().preserves3D() || style().preserves3D());
&gt; 
... and also that, since it&apos;s a 1:1 copy of the generic methods, adapted for SVG.

&gt; The preserve3D checks below could be stored in a temp variable at this line,
&gt; making things a bit more readable hopefully.
I agree, but maybe we&apos;ll save this for refactoring all of the preserve3D checks in the render tree?

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:242
&gt; &gt; +    if (other.isEmpty() &amp;&amp; !r.isEmpty())
&gt; 
&gt; Looks like r.isEmpty() is already proven to be false!
Hehe, yes, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827676</commentid>
    <comment_count>21</comment_count>
      <attachid>448222</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-03 03:34:55 -0800</bug_when>
    <thetext>Created attachment 448222
Patch, v8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827699</commentid>
    <comment_count>22</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-03 06:01:41 -0800</bug_when>
    <thetext>Committed r287538 (245673@trunk): &lt;https://commits.webkit.org/245673@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1827700</commentid>
    <comment_count>23</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-03 06:11:16 -0800</bug_when>
    <thetext>Thanks Rob!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447652</attachid>
            <date>2021-12-20 15:10:45 -0800</date>
            <delta_ts>2021-12-21 12:42:21 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-234524-20211220151044.patch</filename>
            <type>text/plain</type>
            <size>38745</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDk3NWE5ZTc1ZDBhY2Y1
MWU2OTlhNWRjNWUwZWE0NDJjMTQ1YzU3ZC4uZWNlZTczMGI4MTIyNTFlODA3ZjA3NjliOGI2MDhm
MTIxMmQwYzcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMS0xMi0yMCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGlt
cGxlbWVudGluZyBSZW5kZXJTVkdNb2RlbE9iamVjdCAtIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0
IGdyYXBoaWNzCisgICAgICAgIHByaW1pdGl2ZXMgaW4gU1ZHIChwYXRoIC8gcmVjdCAvIGNpcmNs
ZSAvIGltYWdlIC8gLi4uKSBmb3IgdGhlIExCU0UuCisKKyAgICAgICAgSW4gdGhlIGxlZ2FjeSBl
bmdpbmUsIFJlbmRlclNWR0ltYWdlIC8gUmVuZGVyU1ZHU2hhcGUgLyBSZW5kZXJTVkdDb250YWlu
ZXIgaW5oZXJpdAorICAgICAgICBmcm9tIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LCB3aGlj
aCBpbiB0dXJuIGluaGVyaXRzIGZyb20gUmVuZGVyRWxlbWVudC4gVGhlIFNWRworICAgICAgICA8
dGV4dD4gLyA8Zm9yZWlnbk9iamVjdD4gcmVuZGVyZXJzIGluaGVyaXQgZnJvbSB0aGVpciBleGlz
dGluZyAiSFRNTCBjb3VudGVycGFydHMiCisgICAgICAgIGUuZy4gUmVuZGVyU1ZHQmxvY2sgZnJv
bSBSZW5kZXJCbG9ja0Zsb3csIG9yIFJlbmRlclNWR0lubGluZSBmcm9tIFJlbmRlcklubGluZS4K
KworICAgICAgICBUaGlzIGhhcyBoaXN0b3JpY2FsIHJlYXNvbnM6IFdoZW4gU1ZHIHRleHQgcmVu
ZGVyaW5nIHdhcyBwcm90b3R5cGVkIGluIFdlYkNvcmUsIGEgZ29hbCB3YXMgdG8KKyAgICAgICAg
cmUtdXNlIHRoZSBleGlzdGluZyBIVE1ML0NTUyB0ZXh0IHJlbmRlcmluZyBjb2RlIHdoZW5ldmVy
IHBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIFNWRyB0ZXh0CisgICAgICAgIHJlbmRlcmVycyB3ZXJl
IG1vZGVsbGVkIGluIHRoZSB0ZXJtaW5vbG9neSBvZiBIVE1ML0NTUzogQSBuYXR1cmFsIGNob2lj
ZSBpcyB0byB0cmVhdCBhIFNWRworICAgICAgICA8dGV4dD4gZWxlbWVudCBhcyBhIENTUyAiYmxv
Y2stbGV2ZWwgZWxlbWVudCIgYW5kIDx0c3Bhbj4gLyA8dGV4dFBhdGg+IC8gPHRyZWY+IC8gLi4u
CisgICAgICAgIGVsZW1lbnRzIGFzIENTUyAiaW5saW5lIGVsZW1lbnRzIi4gVGhlc2UgZGVzaWdu
IGNob2ljZXMgZnJvbSBhbG1vc3QgdHdvIGRlY2FkZXMgYWdvLCBhcmUKKyAgICAgICAgdGhlIHJl
YXNvbiBmb3IgdGhlIHVubmVjZXNzYXJ5IGNvbmZ1c2luZyBTVkcgaW5oZXJpdGFuY2Ugc3RydWN0
dXJlIEZ1cnRoZXJtb3JlIHdlIGV4cGxpY2l0bHkKKyAgICAgICAgZGlzYWJsZSBsYXllciBzdXBw
b3J0IGluIGFsbCBTVkcgY2xhc3NlcyB0aGF0IGluZGlyZWN0bHkgaW5oZXJpdCBmcm9tIFJlbmRl
ckxheWVyTW9kZWxPYmplY3QuCisKKyAgICAgICAgSG93ZXZlciBmb3IgTEJTRSB3ZSBkbyB3YW50
IFNWRyB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgbGF5ZXIgdHJlZS4KKyAgICAgICAgVGhlcmVmb3Jl
IGxldCBSZW5kZXJTVkdNb2RlbE9iamVjdCBpbmhlcml0IGZyb20gUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC4gVGhpcyB0dXJucworICAgICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0IGludG8gdGhl
IGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgU1ZHIHJlbmRlcmVycyBpbiBMQlNFLgorCisgICAg
ICAgIFRoZSBwcmljZSBmb3IgdGhlIGxheWVyIHN1cHBvcnQgaXMgdGhhdCBhbGwgU1ZHIHJlbmRl
cmVycyBuZWVkIHRvIGJlIGFibGUgdG8gYW5zd2VyIHF1ZXN0aW9ucworICAgICAgICBpbiBIVE1M
L0NTUyBsYW5ndWFnZSAod2hhdCdzIHlvdXIgJ2JvcmRlciBib3ggcmVjdCc/IGRvIHlvdSBoYXZl
IHZpc3VhbCBvdmVyZmxvdz8gZXRjLikuCisgICAgICAgIEZpbmRpbmcgY29uc2lzdGVudCBkZWZp
bml0aW9ucy9tYXBwaW5ncyB3YXMgYSB0ZWRpb3VzIGpvYiwgdGhhdCBpcyBmdWxseSBzb2x2ZWQg
aW4gTEJTRSBhbmQKKyAgICAgICAgd2lsbCBiZSB1cHN0cmVhbWVkIGluIHBpZWNlcy4gVGhpcyBw
YXRjaCBpcyBvbmUgbWFpbiBwaWVjZSBvZiB0aGUgd29yay4KKworICAgICAgICBJZiB3ZSBmb3Jn
ZXQgYWJvdXQgdGhlIGxlZ2FjeSBlbmdpbmUsIHRoZSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUgbm93
IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgICAgICArIFJlbmRlck9iamVjdAorICAg
ICAgICAgICAgKyBSZW5kZXJFbGVtZW50CisgICAgICAgICAgICB8ICAgICsgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdAorICAgICAgICAgICAgfCAgICAgICAgKyBSZW5kZXJCb3hNb2RlbE9iamVjdAor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICArIFJlbmRlckJveAorICAgICAgICAgICAgfCAgICAg
ICAgfCAgICB8ICAgICsgUmVuZGVyUmVwbGFjZWQgKENTUyAicmVwbGFjZWQiIGVsZW1lbnRzKQor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgIHwgICAgKyBSZW5kZXJTVkdSb290IChvdXRl
cm1vc3QgPHN2Zz4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICB8Cisg
ICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgKyBSZW5kZXJCbG9jayAoQ1NTICJibG9jay1s
ZXZlbCIgZWxlbWVudHMpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICsgUmVu
ZGVyQmxvY2tGbG93CisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgICArIFJl
bmRlclNWR0Jsb2NrIChIVE1ML1NWRyBnbHVlIGNvZGUpCisgICAgICAgICAgICB8ICAgICAgICB8
ICAgIHwgICAgICAgICAgICAgICAgKyBSZW5kZXJTVkdGb3JlaWduT2JqZWN0ICg8Zm9yZWlnbk9i
amVjdD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICAgICAgICAgICAg
ICArIFJlbmRlclNWR1RleHQgKDx0ZXh0PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAg
fCAgICB8CisgICAgICAgICAgICB8ICAgICAgICB8ICAgICsgUmVuZGVySW5saW5lIChDU1MgImlu
bGluZSIgZWxlbWVudHMpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICArIFJlbmRlclNW
R0lubGluZSAoSFRNTC9TVkcgZ2x1ZSBjb2RlKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICAg
ICAgICAgICsgUmVuZGVyU1ZHVFNwYW4gKDx0c3Bhbj4gZWxlbWVudCkKKyAgICAgICAgICAgIHwg
ICAgICAgIHwgICAgICAgICAgICArIFJlbmRlclNWR1RleHRQYXRoICg8dGV4dFBhdGg+IGVsZW1l
bnQpCisgICAgICAgICAgICB8ICAgICAgICB8CisgICAgICAgICAgICB8ICAgICAgICArIFJlbmRl
clNWR01vZGVsT2JqZWN0CisgICAgICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdDb250
YWluZXIKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICsgUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyICg8ZGVmcz4gLyA8Zz4gd2l0aCAnZGlzcGxheTogbm9uZScgLyA8c3ltYm9sPiBlbGVt
ZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgKyBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lcgorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIgKDxjbGlwUGF0aD4gZWxlbWVudCkKKyAgICAgICAgICAg
IHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgKDxm
aWx0ZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICAr
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlCisgICAgICAgICAgICB8ICAgICAgICAg
ICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQKKyAgICAgICAgICAg
IHwgICAgICAgICAgICB8ICAgIHwgICAgICAgIHwgICAgKyBSZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50ICg8bGluZWFyR3JhZGllbnQ+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAg
ICAgICAgfCAgICB8ICAgICAgICB8ICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVu
dCAoPHJhZGlhbEdyYWRpZW50PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwg
ICAgfCAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlciAoPG1hcmtlcj4gZWxlbWVudCkKKyAgICAgICAgICAgIHwg
ICAgICAgICAgICB8ICAgIHwgICAgICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIgKDxtYXNr
ZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJl
bmRlclNWR1Jlc291cmNlUGF0dGVybiAoPHBhdHRlcm4+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcgor
ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgfCAgICAgICAgICAg
IHwgICAgKyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyICg8YT4gLyA8Zz4gLyA8c3dp
dGNoPiAvIDx1c2U+IGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKyAgICAg
ICAgICAgIHwgICAgICAgICAgICArIFJlbmRlclNWR0ltYWdlICg8aW1hZ2U+IGVsZW1lbnQpCisg
ICAgICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdTaGFwZSAoPHJlY3Q+IC8gPGNpcmNs
ZT4gLyA8cGF0aD4gLi4uIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAr
IFJlbmRlclNWR0VsbGlwc2UKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgKyBSZW5kZXJT
VkdQYXRoCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHUmVjdAorICAg
ICAgICAgICAgfAorICAgICAgICAgICAgKyBSZW5kZXJUZXh0ICgjdGV4dCBub2RlcyBpbiBIVE1M
KQorICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHSW5saW5lVGV4dCAoI3RleHQgbm9kZXMgaW4g
U1ZHKQorCisgICAgICAgIFRoaXMgaXMgd2F5IGxlc3MgY29uZnVzaW5nIHRoZW4gdGhlIHByZXZp
b3VzIHZlcnNpb24gb2YgdGhlIFNWRyByZW5kZXIgdHJlZS4KKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRh
aW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpt
YXBMb2NhbFRvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjpSZW5kZXJTVkdNb2RlbE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6dXBkYXRlRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01v
ZGVsT2JqZWN0Ojpib3JkZXJCb3hSZWN0SW5GcmFnbWVudEVxdWl2YWxlbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93Q2xpcFJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNsaXBwZWRPdmVy
Zmxvd1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OnB1c2hNYXBwaW5nVG9Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBBYnNvbHV0
ZVRvTG9jYWxQb2ludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6b2Zmc2V0RnJvbUNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNob3VsZFBhaW50U1ZHUmVuZGVyZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0c0FsbG93aW5nRW1wdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNHcmFwaGljc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01v
ZGVsT2JqZWN0OjpjaGVja0VuY2xvc3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6Y29tcHV0ZUNsaXBQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR01vZGVsT2JqZWN0OjphcHBseVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cGFpbnRTVkdPdXRsaW5lKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmVsZW1lbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmJvcmRlckJveFJlY3RFcXVpdmFsZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb250ZW50Qm94UmVj
dEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmZyYW1lUmVjdEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFwcGx5VG9wTGVmdExvY2F0aW9u
T2Zmc2V0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6bGF5b3V0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6c2V0TGF5b3V0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6c2V0TGF5b3V0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnBhaW50aW5nTG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dExvY2F0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRMb2NhdGlvbk9mZnNldCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bGF5b3V0U2l6ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3ZlcmZsb3dD
bGlwUmVjdEZvckNoaWxkTGF5ZXJzKToKKwogMjAyMS0xMi0yMCAgV2Vuc29uIEhzaWVoICA8d2Vu
c29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBBZG9wdCBDaHJvbWVDbGllbnQ6OmNsYXNz
aWZ5TW9kYWxDb250YWluZXJDb250cm9scygpIGluIE1vZGFsQ29udGFpbmVyT2JzZXJ2ZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggYzQzZjU5OTM2YTQ1YTY0MmM2MGFmMzVlMjlmNWZkMjhiYWZiYjliMS4u
NWY5NjU4YTJjOTc4Nzg3YzdmMzQ5MjhkZGQ1ZjA1Yjc5ZmM1ZjljMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
QEAgLTI0NzcsOSArMjQ3NywxMCBAQCByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRh
aW5lci5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZS5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5j
cHAKLXJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5jcHAKK3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCityZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2Jq
ZWN0LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZmE2ODI4OTIxMWQ3NmNjZjFlMjhkZTVi
Yzc1NWZlYmVmYTZkZThjLi4yMzQxOGQ2NzM2NGZlNjIxYTgzMjVlNTZmMDE2NTBhYTc4NWY5OGJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMjQ0LDYgKzEyNDQsNyBAQAogCQk0MzY3MDhDNzEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4ODEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmggKi87IH07CiAJCTQzNjcwOEM5MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDM2NzA4OEExMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmggKi87IH07CiAJ
CTQzNjcwOENCMTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OEMx
MkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmggKi87IH07CisJ
CTQzNjcwQzkzNDJEOUJDNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4RkQxMkQ5Q0E0
QTAwMDMyMTE0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggKi87IH07CiAJCTQzNjcwOENEMTJE
OUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OEUxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJl
bmRlclNWR1Jlc291cmNlLmggKi87IH07CiAJCTQzNjcwOENGMTJEOUNBNEIwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQzNjcwODkwMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuaCAqLzsgfTsKIAkJNDM2NzA4RDExMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MzY3MDg5MjEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuaCAqLzsgfTsKQEAgLTg5NzgsNiArODk3OSw4IEBACiAJCTQzNjcwODg4MTJE
OUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODg5MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJT
VkdJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJT
VkdJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODhBMTJEOUNB
NEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJTVkdJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MzY3MDg4RDM0RTlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDhGRDEyRDlDQTRBMDAwMzIxMTQg
LyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDM2NzA4OEIxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeVJlbmRlclNWR01v
ZGVsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4OEMxMkQ5
Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODhEMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJTVkdSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODkx
NSw2ICsxODkxOCw4IEBACiAJCQkJQ0RGNzQ3RTgyNzBGNkNBRTAwOEZFRUVDIC8qIFJlbmRlclNW
R0lubGluZUlubGluZXMuaCAqLywKIAkJCQkwODU0QjAwNDEyNTVFNEU2MDBCOUNERDAgLyogUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8sCiAJCQkJMDg1NEIwMDUxMjU1RTRFNjAwQjlDREQwIC8q
IFJlbmRlclNWR0lubGluZVRleHQuaCAqLywKKwkJCQk0MzY3MDg4RDM0RTlDQTRBMDAwNDQyMzQg
LyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovLAorCQkJCTQzNjcwOEZEMTJEOUNBNEEwMDAz
MjExNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICovLAogCQkJCUFEREYxQUQ0MTI1N0NEOUEw
MDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmNwcCAqLywKIAkJCQlBRERGMUFENTEyNTdDRDlBMDAw
M0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovLAogCQkJCUExMEJCNTgyMTQ4NEUzQTcwMEIyRTg3
QSAvKiBSZW5kZXJTVkdSZWN0LmNwcCAqLywKQEAgLTM2NjkyLDYgKzM2Njk3LDcgQEAKIAkJCQkw
ODU0QjAxNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDREY3NDdFOTI3MEY2Q0FFMDA4RkVFRUMgLyogUmVuZGVyU1ZHSW5saW5lSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMTcxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRl
clNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwQzkzNDJEOUJDNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQURERjFB
RDcxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExMEJCNTg1MTQ4NEUzQTcwMEIyRTg3QSAvKiBSZW5kZXJTVkdSZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzY3MDhDRDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IGYyOTUwNGEyZjMyZTg1YWQ1ODMyN2Y2NmEzNGIxOTEy
OGI2ZDY4NzguLmJiMTUxYTE2ZDA3OTVmOGY5ZTM5M2QwNTY0ZmRkY2VjMzY0OTkxMGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5j
cHAKQEAgLTI5LDkgKzI5LDExIEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5
bGVTY3JvbGxTbmFwUG9pbnRzLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0y
MjksNSArMjMxLDkzIEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3VzcGVuZEFuaW1h
dGlvbnMoTW9ub3RvbmljVGltZSB0aW1lKQogICAgIGxheWVyKCktPmJhY2tpbmcoKS0+c3VzcGVu
ZEFuaW1hdGlvbnModGltZSk7CiB9CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKK3N0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29t
cHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBSZW5kZXJPYmplY3Q6OlZpc2libGVS
ZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJl
YW0gUmVuZGVyU1ZHQmxvY2sgY2hhbmdlcworICAgIC8vIGlmICghaXM8UmVuZGVyU1ZHTW9kZWxP
YmplY3Q+KCp0aGlzKSAmJiAhaXM8UmVuZGVyU1ZHQmxvY2s+KHRoaXMpKSB7CisgICAgaWYgKCFp
czxSZW5kZXJTVkdNb2RlbE9iamVjdD4oKnRoaXMpKQorICAgICAgICByZXR1cm4gUmVuZGVyRWxl
bWVudDo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIocmVjdCwgY29udGFpbmVyLCBjb250
ZXh0KTsKKworICAgIEFTU0VSVCghc3R5bGUoKS5oYXNJbkZsb3dQb3NpdGlvbigpKTsKKyAgICBB
U1NFUlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENh
Y2hlRW5hYmxlZCgpKTsKKworICAgIGlmIChjb250YWluZXIgPT0gdGhpcykKKyAgICAgICAgcmV0
dXJuIHJlY3Q7CisKKyAgICBib29sIGNvbnRhaW5lcklzU2tpcHBlZDsKKyAgICBhdXRvKiBsb2Nh
bENvbnRhaW5lciA9IHRoaXMtPmNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lcklzU2tpcHBl
ZCk7CisgICAgaWYgKCFsb2NhbENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisKKyAg
ICBBU1NFUlRfVU5VU0VEKGNvbnRhaW5lcklzU2tpcHBlZCwgIWNvbnRhaW5lcklzU2tpcHBlZCk7
CisKKyAgICBMYXlvdXRSZWN0IGFkanVzdGVkUmVjdCA9IHJlY3Q7CisKKyAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QgY2hhbmdlcworICAgIC8vIE1v
dmUgdG8gb3JpZ2luIG9mIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLCBpZiB0aGlzIGlzIHRoZSBm
aXJzdCBjYWxsIHRvIGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKCkgb3JpZ2luYXRpbmcK
KyAgICAvLyBmcm9tIGEgU1ZHIHJlbmRlcmVyIChSZW5kZXJTVkdNb2RlbE9iamVjdCAvIFJlbmRl
clNWR0Jsb2NrKSBvciBpZiB3ZSBjcm9zcyB0aGUgYm91bmRhcnkgZnJvbSBIVE1MIC0+IFNWRyB2
aWEgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC4KKyAgICAvLyBib29sIG1vdmVUb09yaWdpbiA9IGlz
PFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q+KHJlbmRlcmVyKTsKKyAgICBib29sIG1vdmVUb09yaWdp
biA9IGZhbHNlOworCisgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJPYmplY3Qg
Y2hhbmdlcworICAgIGlmIChjb250ZXh0Lm9wdGlvbnMuY29udGFpbnMoUmVuZGVyT2JqZWN0OjpW
aXNpYmxlUmVjdENvbnRleHRPcHRpb246OlRyYW5zbGF0ZVRvU1ZHUmVuZGVyZXJPcmlnaW4pKSB7
CisgICAgICAgIGNvbnRleHQub3B0aW9ucy5yZW1vdmUoUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVj
dENvbnRleHRPcHRpb246OlRyYW5zbGF0ZVRvU1ZHUmVuZGVyZXJPcmlnaW4pOworICAgICAgICBt
b3ZlVG9PcmlnaW4gPSB0cnVlOworICAgIH0KKyAgICAqLworCisgICAgaWYgKG1vdmVUb09yaWdp
bikKKyAgICAgICAgYWRqdXN0ZWRSZWN0Lm1vdmVCeShmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0
Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7CisKKyAgICBpZiAoYXV0byogdHJhbnNm
b3JtID0gbGF5ZXIoKS0+dHJhbnNmb3JtKCkpCisgICAgICAgIGFkanVzdGVkUmVjdCA9IHRyYW5z
Zm9ybS0+bWFwUmVjdChhZGp1c3RlZFJlY3QpOworCisgICAgcmV0dXJuIGxvY2FsQ29udGFpbmVy
LT5jb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcihhZGp1c3RlZFJlY3QsIGNvbnRhaW5lciwg
Y29udGV4dCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6bWFwTG9jYWxUb0Nv
bnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwg
VHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNN
b2RlPiBtb2RlLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBpZiAoIWlzPFJlbmRlclNW
R01vZGVsT2JqZWN0PigqdGhpcykpCisgICAgICAgIHJldHVybiBSZW5kZXJFbGVtZW50OjptYXBM
b2NhbFRvQ29udGFpbmVyKGFuY2VzdG9yQ29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9kZSwg
d2FzRml4ZWQpOworCisgICAgQVNTRVJUKHN0eWxlKCkucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5
cGU6OlN0YXRpYyk7CisKKyAgICBpZiAoYW5jZXN0b3JDb250YWluZXIgPT0gdGhpcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4
dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CisKKyAgICBib29sIGFuY2VzdG9yU2tp
cHBlZDsKKyAgICBhdXRvKiBjb250YWluZXIgPSB0aGlzLT5jb250YWluZXIoYW5jZXN0b3JDb250
YWluZXIsIGFuY2VzdG9yU2tpcHBlZCk7CisgICAgaWYgKCFjb250YWluZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVF9VTlVTRUQoYW5jZXN0b3JTa2lwcGVkLCAhYW5jZXN0b3JTa2lw
cGVkKTsKKworICAgIC8vIElmIHRoaXMgYm94IGhhcyBhIHRyYW5zZm9ybSwgaXQgYWN0cyBhcyBh
IGZpeGVkIHBvc2l0aW9uIGNvbnRhaW5lciBmb3IgZml4ZWQgZGVzY2VuZGFudHMsCisgICAgLy8g
YW5kIG1heSBpdHNlbGYgYWxzbyBiZSBmaXhlZCBwb3NpdGlvbi4gU28gcHJvcGFnYXRlICdmaXhl
ZCcgdXAgb25seSBpZiB0aGlzIGJveCBpcyBmaXhlZCBwb3NpdGlvbi4KKyAgICBpZiAoaGFzVHJh
bnNmb3JtKCkpCisgICAgICAgIG1vZGUucmVtb3ZlKElzRml4ZWQpOworCisgICAgaWYgKHdhc0Zp
eGVkKQorICAgICAgICAqd2FzRml4ZWQgPSBtb2RlLmNvbnRhaW5zKElzRml4ZWQpOworCisgICAg
YXV0byBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKCpjb250YWluZXIsIExh
eW91dFBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCkpKTsKKworICAgIGJvb2wgcHJl
c2VydmUzRCA9IG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIChjb250YWluZXItPnN0eWxlKCkucHJl
c2VydmVzM0QoKSB8fCBzdHlsZSgpLnByZXNlcnZlczNEKCkpOworICAgIGlmIChtb2RlICYgVXNl
VHJhbnNmb3JtcyAmJiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lcikp
IHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3Jt
RnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lck9mZnNldCwgdCk7CisgICAgICAgIHRy
YW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNmb3JtKHQsIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0
ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3Jt
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZShjb250YWluZXJPZmZz
ZXQud2lkdGgoKSwgY29udGFpbmVyT2Zmc2V0LmhlaWdodCgpLCBwcmVzZXJ2ZTNEID8gVHJhbnNm
b3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRy
YW5zZm9ybSk7CisKKyAgICBtb2RlLnJlbW92ZShBcHBseUNvbnRhaW5lckZsaXApOworCisgICAg
Y29udGFpbmVyLT5tYXBMb2NhbFRvQ29udGFpbmVyKGFuY2VzdG9yQ29udGFpbmVyLCB0cmFuc2Zv
cm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVs
T2JqZWN0LmgKaW5kZXggZDExOGRjODFhNmE3YzYwYmI0M2IyNzFjNzM1YjIxZDY2OThjODcxZS4u
ZGZiZWVhMDdjNjA4YmE5MzlhNDA0NDVjMjZmYzRjYTEyZTJlMjNhYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCkBAIC02Nyw2ICs2
NywxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1Rp
bWUgPSBNb25vdG9uaWNUaW1lKCkpIG92ZXJyaWRlOwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VE
X1NWR19FTkdJTkUpCisgICAgLy8gUHJvdmlkZXMgdGhlIFNWRyBpbXBsZW1lbnRhdGlvbiBmb3Ig
Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoKS4KKyAgICAvLyBUaGlzIGxpdmVzIGluIFJl
bmRlckxheWVyTW9kZWxPYmplY3QsIHdoaWNoIGlzIHRoZSBjb21tb24gYmFzZS1jbGFzcyBmb3Ig
YWxsIFNWRyByZW5kZXJlcnMuCisgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBjb21wdXRl
VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgLy8gUHJvdmlkZXMgdGhlIFNWRyBpbXBsZW1lbnRhdGlvbiBmb3IgbWFwTG9j
YWxUb0NvbnRhaW5lcigpLgorICAgIC8vIFRoaXMgbGl2ZXMgaW4gUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCwgd2hpY2ggaXMgdGhlIGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgU1ZHIHJlbmRlcmVy
cy4KKyAgICB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogYW5jZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENv
b3JkaW5hdGVzTW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgor
CiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChFbGVtZW50JiwgUmVuZGVy
U3R5bGUmJiwgQmFzZVR5cGVGbGFncyk7CiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChEb2N1
bWVudCYsIFJlbmRlclN0eWxlJiYsIEJhc2VUeXBlRmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lOWJmMDc4OTEwMWVlOTI5Mzk5YTQ3NDc2NTUyY2EzZjg0OWFmMjAxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
bmRlclNWR01vZGVsT2JqZWN0LmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKKyNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR0dy
YXBoaWNzRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgorI2luY2x1ZGUgIlNW
R05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aERhdGEuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJj
ZXNDYWNoZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoUmVuZGVyU1ZHTW9kZWxPYmplY3QpOworCitSZW5kZXJTVkdNb2RlbE9i
amVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5
bGUmJiBzdHlsZSkKKyAgICA6IFJlbmRlckxheWVyTW9kZWxPYmplY3QoZWxlbWVudCwgV1RGTW92
ZShzdHlsZSksIDApCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZy
b21TdHlsZSgpCit7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBkYXRlRnJvbVN0eWxl
KCk7CisgICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KHN0eWxlKCkuaGFzVHJhbnNm
b3JtUmVsYXRlZFByb3BlcnR5KCkpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsK
KyAgICBpZiAoUmVuZGVyT2JqZWN0Ojpub2RlKCkgJiYgaXM8U1ZHR3JhcGhpY3NFbGVtZW50Pihu
b2RlRm9yTm9uQW5vbnltb3VzKCkpKQorICAgICAgICB0cmFuc2Zvcm0gPSBkb3duY2FzdDxTVkdH
cmFwaGljc0VsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSkuYW5pbWF0ZWRMb2NhbFRyYW5z
Zm9ybSgpOworCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJPYmplY3QgY2hh
bmdlcworICAgIC8vIGlmICghdHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAvLyAgICAgc2V0
SGFzU1ZHVHJhbnNmb3JtKCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiwgUmVuZGVyQm94OjpSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFncykgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJT
VkdNb2RlbE9iamVjdDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYsIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIFBhaW50
UGhhc2UpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2xpcHBl
ZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoc3R5bGUo
KS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiAhZW5jbG9zaW5nTGF5ZXIo
KS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKwor
ICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zm
c2V0Q2FjaGVFbmFibGVkKCkpOworICAgIHJldHVybiBjb21wdXRlUmVjdCh2aXN1YWxPdmVyZmxv
d1JlY3RFcXVpdmFsZW50KCksIHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOworfQorCitjb25z
dCBSZW5kZXJPYmplY3QqIFJlbmRlclNWR01vZGVsT2JqZWN0OjpwdXNoTWFwcGluZ1RvQ29udGFp
bmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRl
ckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICBBU1NFUlQoYW5jZXN0b3JU
b1N0b3BBdCAhPSB0aGlzKTsKKyAgICBBU1NFUlQoc3R5bGUoKS5wb3NpdGlvbigpID09IFBvc2l0
aW9uVHlwZTo6U3RhdGljKTsKKworICAgIGJvb2wgYW5jZXN0b3JTa2lwcGVkOworICAgIFJlbmRl
ckVsZW1lbnQqIGNvbnRhaW5lciA9IHRoaXMtPmNvbnRhaW5lcihhbmNlc3RvclRvU3RvcEF0LCBh
bmNlc3RvclNraXBwZWQpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEFTU0VSVF9VTlVTRUQoYW5jZXN0b3JTa2lwcGVkLCAhYW5jZXN0b3JTa2lw
cGVkKTsKKworICAgIGJvb2wgb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSBmYWxzZTsKKyAgICBMYXlv
dXRTaXplIGNvbnRhaW5lck9mZnNldCA9IG9mZnNldEZyb21Db250YWluZXIoKmNvbnRhaW5lciwg
TGF5b3V0UG9pbnQoKSwgJm9mZnNldERlcGVuZHNPblBvaW50KTsKKworICAgIGJvb2wgcHJlc2Vy
dmUzRCA9IGNvbnRhaW5lci0+c3R5bGUoKS5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxlKCkucHJlc2Vy
dmVzM0QoKTsKKyAgICBpZiAoc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWlu
ZXIpICYmIChnZW9tZXRyeU1hcC5tYXBDb29yZGluYXRlc0ZsYWdzKCkgJiBVc2VUcmFuc2Zvcm1z
KSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zv
cm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0KTsKKyAgICAgICAg
Z2VvbWV0cnlNYXAucHVzaCh0aGlzLCB0LCBwcmVzZXJ2ZTNELCBvZmZzZXREZXBlbmRzT25Qb2lu
dCwgZmFsc2UgLyogaXNGaXhlZFBvcyAqLywgaGFzVHJhbnNmb3JtKCkpOworICAgIH0gZWxzZQor
ICAgICAgICBnZW9tZXRyeU1hcC5wdXNoKHRoaXMsIGNvbnRhaW5lck9mZnNldCwgcHJlc2VydmUz
RCwgb2Zmc2V0RGVwZW5kc09uUG9pbnQsIGZhbHNlIC8qIGlzRml4ZWRQb3MgKi8sIGhhc1RyYW5z
Zm9ybSgpKTsKKworICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK0xheW91dFJlY3QgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiBn
ZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlv
dXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsKKworICAgIGF1dG8gb3V0
bGluZUJvdW5kcyA9IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKTsKKworICAgIGlmIChy
ZXBhaW50Q29udGFpbmVyICE9IHRoaXMpIHsKKyAgICAgICAgRmxvYXRRdWFkIGNvbnRhaW5lclJl
bGF0aXZlUXVhZDsKKyAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQorICAgICAgICAgICAgY29udGFp
bmVyUmVsYXRpdmVRdWFkID0gZ2VvbWV0cnlNYXAtPm1hcFRvQ29udGFpbmVyKG91dGxpbmVCb3Vu
ZHMsIHJlcGFpbnRDb250YWluZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb250YWlu
ZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3Qob3V0bGluZUJv
dW5kcyksIHJlcGFpbnRDb250YWluZXIpOworCisgICAgICAgIG91dGxpbmVCb3VuZHMgPSBMYXlv
dXRSZWN0KGNvbnRhaW5lclJlbGF0aXZlUXVhZC5ib3VuZGluZ0JveCgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gb3V0bGluZUJvdW5kczsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0Cit7CisgICAgcmVjdHMuYXBwZW5kKHNuYXBwZWRJbnRS
ZWN0KExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpLCBsYXlv
dXRTaXplKCkpKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVh
ZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAg
ICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChvYmplY3RCb3VuZGluZ0JveCgpLCBV
c2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojp3aWxsQmVEZXN0cm95ZWQoKQoreworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0
cm95ZWQoKnRoaXMpOworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3ll
ZCgpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJl
bmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKwor
ICAgIC8vIFNWRyBtYXNrcyBhcmUgcGFpbnRlZCBpbmRlcGVuZGVudCBvZiB0aGUgdGFyZ2V0IHJl
bmRlcmVycyB2aXNpYmlsaXR5LgorICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVy
RWxlbWVudCBjaGFuZ2VzCisgICAgLy8gYm9vbCBoYXNTVkdNYXNrID0gaGFzU1ZHTWFzaygpOwor
ICAgIGJvb2wgaGFzU1ZHTWFzayA9IGZhbHNlOworICAgIGlmIChoYXNTVkdNYXNrICYmIGhhc0xh
eWVyKCkgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSkKKyAg
ICAgICAgbGF5ZXIoKS0+c2V0SGFzVmlzaWJsZUNvbnRlbnQoKTsKKworICAgIFNWR1Jlc291cmNl
c0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQoKnRoaXMsIGRpZmYsIHN0eWxlKCkpOworfQorCit2
b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChPcHRpb25T
ZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBtb2RlLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3Rh
dGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0eWxlKCkucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5
cGU6OlN0YXRpYyk7CisKKyAgICBpZiAoaGFzVHJhbnNmb3JtKCkpCisgICAgICAgIG1vZGUucmVt
b3ZlKElzRml4ZWQpOworCisgICAgYXV0byogY29udGFpbmVyID0gdGhpcy0+cGFyZW50KCk7Cisg
ICAgaWYgKCFjb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRhaW5lci0+bWFw
QWJzb2x1dGVUb0xvY2FsUG9pbnQobW9kZSwgdHJhbnNmb3JtU3RhdGUpOworCisgICAgTGF5b3V0
U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKCpjb250YWluZXIsIExh
eW91dFBvaW50KCkpOworCisgICAgYm9vbCBwcmVzZXJ2ZTNEID0gbW9kZSAmIFVzZVRyYW5zZm9y
bXMgJiYgKGNvbnRhaW5lci0+c3R5bGUoKS5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxlKCkucHJlc2Vy
dmVzM0QoKSk7CisgICAgaWYgKG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIHNob3VsZFVzZVRyYW5z
Zm9ybUZyb21Db250YWluZXIoY29udGFpbmVyKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY29u
dGFpbmVyT2Zmc2V0LCB0KTsKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zvcm0o
dCwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJh
bnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgIH0gZWxzZQorICAgICAgICB0cmFu
c2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9mZnNldC53aWR0aCgpLCBjb250YWluZXJPZmZzZXQu
aGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9y
bSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKK30KKworTGF5b3V0U2l6ZSBS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiBj
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCopIGNvbnN0Cit7CisgICAgQVNTRVJU
X1VOVVNFRChjb250YWluZXIsICZjb250YWluZXIgPT0gdGhpcy0+Y29udGFpbmVyKCkpOworICAg
IEFTU0VSVCghaXNJbkZsb3dQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVCghaXNBYnNvbHV0ZWx5
UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIExheW91
dFNpemUoKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9u
YWxPZmZzZXQsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqKQoreworICAgIGF1dG8gcmVw
YWludEJvdW5kaW5nQm94ID0gZW5jbG9zaW5nTGF5b3V0UmVjdCh0aGlzLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBpZiAocmVwYWludEJvdW5kaW5nQm94LnNpemUoKS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChh
ZGRpdGlvbmFsT2Zmc2V0LCByZXBhaW50Qm91bmRpbmdCb3guc2l6ZSgpKSk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNob3VsZFBhaW50U1ZHUmVuZGVyZXIoY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFwYWludEluZm8uY29udGV4dCgp
LnBhaW50aW5nRGlzYWJsZWQoKSk7CisKKyAgICBpZiAoKHBhaW50SW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlOjpGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpDbGlw
cGluZ01hc2sgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6Ok1hc2sgJiYgcGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2U6Ok91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBh
aW50UGhhc2U6OlNlbGZPdXRsaW5lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6Okhp
ZGRlbiB8fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Tm9uZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZsb2F0UmVjdDo6aW50
ZXJzZWN0cyBkb2VzIG5vdCBjb25zaWRlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGxpbmVzIChi
ZWNhdXNlIG9mIGlzRW1wdHkoKSkuCisvLyBTbyBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgb2Ygc3Vj
aCBsaW5lcy4KK3N0YXRpYyBib29sIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KGNvbnN0IEZsb2F0
UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKK3sKKyAgICBpZiAoci5pc0VtcHR5KCkg
JiYgb3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHIuaXNF
bXB0eSgpICYmICFvdGhlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAob3RoZXIuY29udGFp
bnMoci54KCksIHIueSgpKSAmJiAhb3RoZXIuY29udGFpbnMoci5tYXhYKCksIHIubWF4WSgpKSkg
fHwgKCFvdGhlci5jb250YWlucyhyLngoKSwgci55KCkpICYmIG90aGVyLmNvbnRhaW5zKHIubWF4
WCgpLCByLm1heFkoKSkpOworICAgIGlmIChvdGhlci5pc0VtcHR5KCkgJiYgIXIuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkob3RoZXIsIHIpOworICAg
IHJldHVybiByLmludGVyc2VjdHMob3RoZXIpOworfQorCisvLyBPbmUgb2YgdGhlIGVsZW1lbnQg
dHlwZXMgdGhhdCBjYW4gY2F1c2UgZ3JhcGhpY3MgdG8gYmUgZHJhd24gb250byB0aGUgdGFyZ2V0
IGNhbnZhcy4gU3BlY2lmaWNhbGx5OiBjaXJjbGUsIGVsbGlwc2UsCisvLyBpbWFnZSwgbGluZSwg
cGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3QsIHRleHQgYW5kIHVzZS4KK3N0YXRpYyBib29s
IGlzR3JhcGhpY3NFbGVtZW50KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQoreworICAg
IHJldHVybiByZW5kZXJlci5pc1NWR1NoYXBlKCkgfHwgcmVuZGVyZXIuaXNTVkdUZXh0KCkgfHwg
cmVuZGVyZXIuaXNTVkdJbWFnZSgpIHx8IHJlbmRlcmVyLmVsZW1lbnQoKS0+aGFzVGFnTmFtZShT
VkdOYW1lczo6dXNlVGFnKTsKK30KKworYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJ
bnRlcnNlY3Rpb24oUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLnBvaW50ZXJFdmVu
dHMoKSA9PSBQb2ludGVyRXZlbnRzOjpOb25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFpc0dyYXBoaWNzRWxlbWVudCgqcmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRl
cmVyLT5lbGVtZW50KCkpOworICAgIEFTU0VSVChpczxTVkdHcmFwaGljc0VsZW1lbnQ+KHN2Z0Vs
ZW1lbnQpKTsKKyAgICBhdXRvIGN0bSA9IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKnN2
Z0VsZW1lbnQpLmdldENUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOworICAg
IHJldHVybiBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0eShyZWN0LCBjdG0ubWFwUmVjdChyZW5kZXJl
ci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworfQorCitib29sIFJlbmRlclNW
R01vZGVsT2JqZWN0OjpjaGVja0VuY2xvc3VyZShSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0
eWxlKCkucG9pbnRlckV2ZW50cygpID09IFBvaW50ZXJFdmVudHM6Ok5vbmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWlzR3JhcGhpY3NFbGVtZW50KCpyZW5kZXJlcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gZG93bmNhc3Q8
U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVsZW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPFNWR0dyYXBo
aWNzRWxlbWVudD4oc3ZnRWxlbWVudCkpOworICAgIGF1dG8gY3RtID0gZG93bmNhc3Q8U1ZHR3Jh
cGhpY3NFbGVtZW50Pigqc3ZnRWxlbWVudCkuZ2V0Q1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dT
dHlsZVVwZGF0ZSk7CisgICAgcmV0dXJuIHJlY3QuY29udGFpbnMoY3RtLm1hcFJlY3QocmVuZGVy
ZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKK30KKworUGF0aCBSZW5kZXJT
VkdNb2RlbE9iamVjdDo6Y29tcHV0ZUNsaXBQYXRoKEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KSBjb25zdAoreworICAgIGlmIChsYXllcigpLT5oYXNUcmFuc2Zvcm0oKSkKKyAgICAgICAgdHJh
bnNmb3JtLm11bHRpcGx5KGxheWVyKCktPmN1cnJlbnRUcmFuc2Zvcm0oUmVuZGVyU3R5bGU6Omlu
ZGl2aWR1YWxUcmFuc2Zvcm1PcGVyYXRpb25zKS50b0FmZmluZVRyYW5zZm9ybSgpKTsKKworICAg
IHJldHVybiBwYXRoRnJvbUdyYXBoaWNzRWxlbWVudCgmZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVt
ZW50PihlbGVtZW50KCkpKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlU
cmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8UmVuZGVy
U3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbj4gb3B0aW9ucykgY29uc3QKK3sKKyAgICBV
TlVTRURfUEFSQU0odHJhbnNmb3JtKTsKKyAgICBVTlVTRURfUEFSQU0oc3R5bGUpOworICAgIFVO
VVNFRF9QQVJBTShib3VuZGluZ0JveCk7CisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOworICAg
IC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAg
Ly8gU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlUcmFuc2Zvcm0oKnRoaXMsIHRyYW5zZm9ybSwgc3R5
bGUsIGJvdW5kaW5nQm94LCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgb3B0aW9ucyk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnBhaW50U1ZHT3V0bGluZShQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGFkanVzdGVkUGFpbnRPZmZzZXQpCit7Cisg
ICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mbywgTGF5b3V0UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0
LCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpLnNpemUoKSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZTVmZTlhZWZiODQ4YWY4OWYwNzZiNmM5NDQ3OWUxMGQ5YzU1
NjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKy8vICNpbmNsdWRlICJTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBNb3N0IHJl
bmRlcmVycyBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlIHdpbGwgaW5oZXJpdCBmcm9tIHRoaXMg
Y2xhc3MKKy8vIGJ1dCBub3QgYWxsLiBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LCBSZW5kZXJTVkdC
bG9jaywgZXRjLiBpbmhlcml0IGZyb20KKy8vIGV4aXN0aW5nIFJlbmRlckJsb2NrIGNsYXNzZXMs
IHRoYXQgYWxsIGluaGVyaXQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2JqZWN0CisvLyBkaXJlY3Rs
eSwgd2l0aG91dCBSZW5kZXJTVkdNb2RlbE9iamVjdCBpbmJldHdlZW4uIFRoZXJlZm9yZSBjb2Rl
IHdoaWNoCisvLyBuZWVkcyB0byBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgU1ZHIHJlbmRlcmVycyBn
b2VzIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QuCitjbGFzcyBTVkdFbGVtZW50OworCitjbGFz
cyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJMYXllck1vZGVsT2JqZWN0IHsK
KyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR01vZGVsT2JqZWN0KTsKK3B1Ymxp
YzoKKyAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKKworICAgIHN0YXRpYyBib29sIGNoZWNrSW50
ZXJzZWN0aW9uKFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBjaGVja0VuY2xvc3VyZShSZW5kZXJFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7CisK
KyAgICBTVkdFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8U1ZHRWxl
bWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQorCisgICAgLy8gRklYTUU6IFtMQlNFXSBN
YXJrIGZpbmFsLCBhZGQgYXBwbHlUcmFuc2Zvcm0gdG8gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdAor
ICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJT
dHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisKKyAgICAvLyBNaW1pYyB0
aGUgUmVuZGVyQm94IGFjY2Vzc29ycyAtIGJ5IHNoYXJpbmcgdGhlIHNhbWUgdGVybWlub2xvZ3kg
dGhlIHBhaW50aW5nIC8gaGl0IHRlc3RpbmcgLyBsYXlvdXQgbG9naWMgaXMKKyAgICAvLyBzaW1p
bGFyIHRvIHJlYWQgY29tcGFyZWQgdG8gbm9uLVNWRyByZW5kZXJlcnMgc3VjaCBhcyBSZW5kZXJC
b3ggJiBmcmllbmRzLgorICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKSBj
b25zdCB7IHJldHVybiB7IExheW91dFBvaW50KCksIG1fbGF5b3V0UmVjdC5zaXplKCkgfTsgfQor
ICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4g
Ym9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsgfQorICAgIExheW91dFJlY3QgZnJhbWVSZWN0RXF1
aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQorCisgICAgTGF5b3V0UmVj
dCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAg
ICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJm
bG93UmVjdCgqdGhpcyk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisgICAgfQorCisg
ICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQoTGF5b3V0UG9pbnQm
IHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlvbigpKTsgfQorCisgICAg
TGF5b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Cisg
ICAgdm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheW91dFJlY3QpIHsgbV9s
YXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0TGF5b3V0TG9jYXRpb24oY29u
c3QgTGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0UmVjdC5zZXRMb2NhdGlv
bihsYXlvdXRMb2NhdGlvbik7IH0KKworICAgIExheW91dFBvaW50IHBhaW50aW5nTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0aW9uKCkgLSBmbG9vcmVk
TGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7IH0KKyAg
ICBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVj
dC5sb2NhdGlvbigpOyB9CisgICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2NhdGlvbk9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9jYXRpb24oKSk7IH0KKyAg
ICBMYXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Quc2l6
ZSgpOyB9CisKKyAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAgIEZsb2F0UmVjdCBib3Jk
ZXJCb3hSZWN0SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBS
ZW5kZXJCb3g6OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gUmVuZGVyQm94OjpDYWNoZVJl
bmRlckJveEZyYWdtZW50SW5mbykgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJm
bG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZTo6QmxvY2tCYWNr
Z3JvdW5kKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExh
eWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBmcmFnbWVudCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSB7IHJl
dHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsgfQor
CisgICAgdmlydHVhbCBQYXRoIGNvbXB1dGVDbGlwUGF0aChBZmZpbmVUcmFuc2Zvcm0mKSBjb25z
dDsKKworcHJvdGVjdGVkOgorICAgIFJlbmRlclNWR01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmLCBS
ZW5kZXJTdHlsZSYmKTsKKworICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB1cGRhdGVGcm9tU3R5bGUoKSBvdmVycmlkZTsKKyAgICBib29sIHNob3VsZFBhaW50
U1ZHUmVuZGVyZXIoY29uc3QgUGFpbnRJbmZvJikgY29uc3Q7CisKKyAgICBMYXlvdXRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIG1h
cEFic29sdXRlVG9Mb2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBUcmFu
c2Zvcm1TdGF0ZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIExheW91dFJlY3Qgb3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZW5k
ZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCosIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGF5b3V0U2l6
ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQb2ludCYs
IGJvb2wqIG9mZnNldERlcGVuZHNPblBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0
IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBwYWludENvbnRhaW5lciA9IDApIG92ZXJyaWRlOworICAgIHZvaWQgcGFpbnRTVkdPdXRs
aW5lKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBhaW50T2Zmc2V0KTsK
KworcHJpdmF0ZToKKyAgICBib29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBMYXlvdXRSZWN0IG1fbGF5b3V0UmVjdDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJf
T0JKRUNUKFJlbmRlclNWR01vZGVsT2JqZWN0LCBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkpCisK
KyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447745</attachid>
            <date>2021-12-21 12:42:27 -0800</date>
            <delta_ts>2021-12-22 10:34:16 -0800</delta_ts>
            <desc>Patch, v2</desc>
            <filename>bug-234524-20211221124225.patch</filename>
            <type>text/plain</type>
            <size>38631</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ0ZjRjMTM5ODVjN2E1
ZmViZThlNTQxMzQ5M2Q5NTFhODQ3ZTA2OS4uNTc4MDRiNjQ5NmUzNWVhZWI2Mjk2ZTAxNTI0ODFk
ZWE3NjVkNDMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMS0xMi0yMCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGlt
cGxlbWVudGluZyBSZW5kZXJTVkdNb2RlbE9iamVjdCAtIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0
IGdyYXBoaWNzCisgICAgICAgIHByaW1pdGl2ZXMgaW4gU1ZHIChwYXRoIC8gcmVjdCAvIGNpcmNs
ZSAvIGltYWdlIC8gLi4uKSBmb3IgdGhlIExCU0UuCisKKyAgICAgICAgSW4gdGhlIGxlZ2FjeSBl
bmdpbmUsIFJlbmRlclNWR0ltYWdlIC8gUmVuZGVyU1ZHU2hhcGUgLyBSZW5kZXJTVkdDb250YWlu
ZXIgaW5oZXJpdAorICAgICAgICBmcm9tIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LCB3aGlj
aCBpbiB0dXJuIGluaGVyaXRzIGZyb20gUmVuZGVyRWxlbWVudC4gVGhlIFNWRworICAgICAgICA8
dGV4dD4gLyA8Zm9yZWlnbk9iamVjdD4gcmVuZGVyZXJzIGluaGVyaXQgZnJvbSB0aGVpciBleGlz
dGluZyAiSFRNTCBjb3VudGVycGFydHMiCisgICAgICAgIGUuZy4gUmVuZGVyU1ZHQmxvY2sgZnJv
bSBSZW5kZXJCbG9ja0Zsb3csIG9yIFJlbmRlclNWR0lubGluZSBmcm9tIFJlbmRlcklubGluZS4K
KworICAgICAgICBUaGlzIGhhcyBoaXN0b3JpY2FsIHJlYXNvbnM6IFdoZW4gU1ZHIHRleHQgcmVu
ZGVyaW5nIHdhcyBwcm90b3R5cGVkIGluIFdlYkNvcmUsIGEgZ29hbCB3YXMgdG8KKyAgICAgICAg
cmUtdXNlIHRoZSBleGlzdGluZyBIVE1ML0NTUyB0ZXh0IHJlbmRlcmluZyBjb2RlIHdoZW5ldmVy
IHBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIFNWRyB0ZXh0CisgICAgICAgIHJlbmRlcmVycyB3ZXJl
IG1vZGVsbGVkIGluIHRoZSB0ZXJtaW5vbG9neSBvZiBIVE1ML0NTUzogQSBuYXR1cmFsIGNob2lj
ZSBpcyB0byB0cmVhdCBhIFNWRworICAgICAgICA8dGV4dD4gZWxlbWVudCBhcyBhIENTUyAiYmxv
Y2stbGV2ZWwgZWxlbWVudCIgYW5kIDx0c3Bhbj4gLyA8dGV4dFBhdGg+IC8gPHRyZWY+IC8gLi4u
CisgICAgICAgIGVsZW1lbnRzIGFzIENTUyAiaW5saW5lIGVsZW1lbnRzIi4gVGhlc2UgZGVzaWdu
IGNob2ljZXMgZnJvbSBhbG1vc3QgdHdvIGRlY2FkZXMgYWdvLCBhcmUKKyAgICAgICAgdGhlIHJl
YXNvbiBmb3IgdGhlIHVubmVjZXNzYXJ5IGNvbmZ1c2luZyBTVkcgaW5oZXJpdGFuY2Ugc3RydWN0
dXJlLiBGdXJ0aGVybW9yZSB3ZSBleHBsaWNpdGx5CisgICAgICAgIGRpc2FibGUgbGF5ZXIgc3Vw
cG9ydCBpbiBhbGwgU1ZHIGNsYXNzZXMgdGhhdCBpbmRpcmVjdGx5IGluaGVyaXQgZnJvbSBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LgorCisgICAgICAgIEhvd2V2ZXIgZm9yIExCU0Ugd2UgZG8gd2Fu
dCBTVkcgdG8gcGFydGljaXBhdGUgaW4gdGhlIGxheWVyIHRyZWUuCisgICAgICAgIFRoZXJlZm9y
ZSBsZXQgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuIFRoaXMgdHVybnMKKyAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbnRvIHRo
ZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMgaW4gTEJTRS4KKworICAg
ICAgICBUaGUgcHJpY2UgZm9yIHRoZSBsYXllciBzdXBwb3J0IGlzIHRoYXQgYWxsIFNWRyByZW5k
ZXJlcnMgbmVlZCB0byBiZSBhYmxlIHRvIGFuc3dlciBxdWVzdGlvbnMKKyAgICAgICAgaW4gSFRN
TC9DU1MgbGFuZ3VhZ2UgKHdoYXQncyB5b3VyICdib3JkZXIgYm94IHJlY3QnPyBkbyB5b3UgaGF2
ZSB2aXN1YWwgb3ZlcmZsb3c/IGV0Yy4pLgorICAgICAgICBGaW5kaW5nIGNvbnNpc3RlbnQgZGVm
aW5pdGlvbnMvbWFwcGluZ3Mgd2FzIGEgdGVkaW91cyBqb2IsIHRoYXQgaXMgZnVsbHkgc29sdmVk
IGluIExCU0UgYW5kCisgICAgICAgIHdpbGwgYmUgdXBzdHJlYW1lZCBpbiBwaWVjZXMuIFRoaXMg
cGF0Y2ggaXMgb25lIG1haW4gcGllY2Ugb2YgdGhlIHdvcmsuCisKKyAgICAgICAgSWYgd2UgZm9y
Z2V0IGFib3V0IHRoZSBsZWdhY3kgZW5naW5lLCB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlIG5v
dyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgKyBSZW5kZXJPYmplY3QKKyAg
ICAgICAgICAgICsgUmVuZGVyRWxlbWVudAorICAgICAgICAgICAgfCAgICArIFJlbmRlckxheWVy
TW9kZWxPYmplY3QKKyAgICAgICAgICAgIHwgICAgICAgICsgUmVuZGVyQm94TW9kZWxPYmplY3QK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgKyBSZW5kZXJCb3gKKyAgICAgICAgICAgIHwgICAg
ICAgIHwgICAgfCAgICArIFJlbmRlclJlcGxhY2VkIChDU1MgInJlcGxhY2VkIiBlbGVtZW50cykK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUm9vdCAob3V0
ZXJtb3N0IDxzdmc+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgfAor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyQmxvY2sgKENTUyAiYmxvY2st
bGV2ZWwiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICArIFJl
bmRlckJsb2NrRmxvdworICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICAgKyBS
ZW5kZXJTVkdCbG9jayAoSFRNTC9TVkcgZ2x1ZSBjb2RlKQorICAgICAgICAgICAgfCAgICAgICAg
fCAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCAoPGZvcmVpZ25P
YmplY3Q+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgICAg
ICAgKyBSZW5kZXJTVkdUZXh0ICg8dGV4dD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAg
IHwgICAgfAorICAgICAgICAgICAgfCAgICAgICAgfCAgICArIFJlbmRlcklubGluZSAoQ1NTICJp
bmxpbmUiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgKyBSZW5kZXJT
VkdJbmxpbmUgKEhUTUwvU1ZHIGdsdWUgY29kZSkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAg
ICAgICAgICArIFJlbmRlclNWR1RTcGFuICg8dHNwYW4+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdUZXh0UGF0aCAoPHRleHRQYXRoPiBlbGVt
ZW50KQorICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgKyBSZW5k
ZXJTVkdNb2RlbE9iamVjdAorICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHQ29u
dGFpbmVyCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICArIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lciAoPGRlZnM+IC8gPGc+IHdpdGggJ2Rpc3BsYXk6IG5vbmUnIC8gPHN5bWJvbD4gZWxl
bWVudHMpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyICg8Y2xpcFBhdGg+IGVsZW1lbnQpCisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyICg8
ZmlsdGVyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAg
KyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZQorICAgICAgICAgICAgfCAgICAgICAg
ICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50CisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICB8ICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCAoPGxpbmVhckdyYWRpZW50PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAg
ICAgICAgIHwgICAgfCAgICAgICAgfCAgICArIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQgKDxyYWRpYWxHcmFkaWVudD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8
ICAgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIgKDxtYXJrZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlTWFza2VyICg8bWFz
a2VyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gKDxwYXR0ZXJuPiBlbGVtZW50KQorICAgICAgICAgICAg
fCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IK
KyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAg
ICB8ICAgICsgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciAoPGE+IC8gPGc+IC8gPHN3
aXRjaD4gLyA8dXNlPiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAg
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdJbWFnZSAoPGltYWdlPiBlbGVtZW50KQor
ICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHU2hhcGUgKDxyZWN0PiAvIDxjaXJj
bGU+IC8gPHBhdGg+IC4uLiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
KyBSZW5kZXJTVkdFbGxpcHNlCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVy
U1ZHUGF0aAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICArIFJlbmRlclNWR1JlY3QKKyAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICsgUmVuZGVyVGV4dCAoI3RleHQgbm9kZXMgaW4gSFRN
TCkKKyAgICAgICAgICAgICAgICArIFJlbmRlclNWR0lubGluZVRleHQgKCN0ZXh0IG5vZGVzIGlu
IFNWRykKKworICAgICAgICBUaGlzIGlzIHdheSBsZXNzIGNvbmZ1c2luZyB0aGVuIHRoZSBwcmV2
aW91cyB2ZXJzaW9uIG9mIHRoZSBTVkcgcmVuZGVyIHRyZWUuCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250
YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
bWFwTG9jYWxUb0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVj
dDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlwcGVkT3Zl
cmZsb3dSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVSZWN0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6d2lsbEJlRGVzdHJv
eWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZURpZENo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwQWJzb2x1
dGVUb0xvY2FsUG9pbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxP
YmplY3Q6Om9mZnNldEZyb21Db250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzaG91bGRQYWludFNWR1JlbmRlcmVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmludGVyc2VjdHNBbGxvd2luZ0VtcHR5KToKKyAgICAgICAgKFdlYkNv
cmU6OmlzR3JhcGhpY3NFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0OjpjaGVja0ludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6Y2hlY2tFbmNsb3N1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OmNvbXB1dGVDbGlwUGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnBhaW50U1ZHT3V0bGluZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjplbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojpib3JkZXJCb3hSZWN0RXF1aXZhbGVudCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y29udGVudEJveFJl
Y3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpmcmFtZVJlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR01vZGVsT2JqZWN0Ojp2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjphcHBseVRvcExlZnRMb2NhdGlv
bk9mZnNldEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmxheW91dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnNldExheW91dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OnNldExheW91dExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR01vZGVsT2JqZWN0OjpwYWludGluZ0xvY2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRMb2NhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bGF5b3V0TG9jYXRpb25PZmZzZXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93
Q2xpcFJlY3RGb3JDaGlsZExheWVycyk6CisKIDIwMjEtMTItMjEgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHN5bWxpbmtzIGZvciBhbHRlcm5hdGUg
cm9vdCBmcmFtZXdvcmsgbG9jYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDQ5NTMwZjYyNGIwMTBm
NzZhNDgzMjRiZmRkOTljMmQyNjg4YTc3ODMuLmYyY2NkOTZmODA3OWFlZGQ0MDFmYTliYjNkZDEx
ZDVhMGQ1YTY1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNDc4LDYgKzI0NzgsNyBAQCByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAKIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKK3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1JlY3QuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDY0MzU2YWI4MDRmOWViMDY4ZGUzNmY3Yjc4YTY4NjE3NWYzYzVjMGQuLjc2MDRiYTRk
NDU5YmY0ZDJlMDc0OTk4YzdjN2RkY2FkNGUxNzE0ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyNDQsNiArMTI0NCw3IEBA
CiAJCTQzNjcwOEM3MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODg4
MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAqLzsgfTsKIAkJ
NDM2NzA4QzkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4QTEyRDlDQTRBMDAwNDQy
MzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLzsgfTsKIAkJNDM2NzA4Q0IxMkQ5Q0E0QjAwMDQ0MjM0
IC8qIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQgLyogTGVnYWN5
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKKwkJNDM2NzBDOTM0MkQ5QkM0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhGRDEyRDlDQTRBMDAwMzIxMTQgLyogUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaCAqLzsgfTsKIAkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MzY3MDg4RTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCAqLzsgfTsK
IAkJNDM2NzA4Q0YxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OTAx
MkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oICovOyB9OwogCQk0
MzY3MDhEMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODkyMTJE
OUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICovOyB9OwpAQCAt
ODk4MSw2ICs4OTgyLDggQEAKIAkJNDM2NzA4ODgxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJTVkdIaWRkZW5Db250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2
NzA4ODkxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0ltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4OEExMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0lt
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0ltYWdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwODhEMzRFOUNBNEEwMDA0NDIzNCAv
KiBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQzNjcwOEZEMTJEOUNBNEEwMDAzMjExNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9iamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4QjEyRDlDQTRBMDAwNDQyMzQg
LyogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQgLyogTGVnYWN5UmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVn
YWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDM2NzA4OEQxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4OTIzLDYgKzE4OTI2LDggQEAKIAkJCQlDREY3
NDdFODI3MEY2Q0FFMDA4RkVFRUMgLyogUmVuZGVyU1ZHSW5saW5lSW5saW5lcy5oICovLAogCQkJ
CTA4NTRCMDA0MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCAqLywK
IAkJCQkwODU0QjAwNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oICov
LAorCQkJCTQzNjcwODhEMzRFOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAgKi8sCisJCQkJNDM2NzA4RkQxMkQ5Q0E0QTAwMDMyMTE0IC8qIFJlbmRlclNWR01vZGVsT2Jq
ZWN0LmggKi8sCiAJCQkJQURERjFBRDQxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGgu
Y3BwICovLAogCQkJCUFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmgg
Ki8sCiAJCQkJQTEwQkI1ODIxNDg0RTNBNzAwQjJFODdBIC8qIFJlbmRlclNWR1JlY3QuY3BwICov
LApAQCAtMzY3MDgsNiArMzY3MTMsNyBAQAogCQkJCTA4NTRCMDE1MTI1NUU0RTYwMEI5Q0REMCAv
KiBSZW5kZXJTVkdJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjc0N0U5MjcwRjZDQUUw
MDhGRUVFQyAvKiBSZW5kZXJTVkdJbmxpbmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
ODU0QjAxNzEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNDM2NzBDOTM0MkQ5QkM0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERGMUFENzEyNTdDRDlBMDAwM0E3NTkgLyogUmVu
ZGVyU1ZHUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEwQkI1ODUxNDg0RTNBNzAwQjJFODdB
IC8qIFJlbmRlclNWR1JlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOENEMTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXgg
ZjI5NTA0YTJmMzJlODVhZDU4MzI3ZjY2YTM0YjE5MTI4YjZkNjg3OC4uYmIxNTFhMTZkMDc5NWY4
ZjllMzkzZDA1NjRmZGRjZWMzNjQ5OTEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtMjksOSArMjksMTEgQEAKICNp
bmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCIKKyNp
bmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyOSw1ICsyMzEsOTMgQEAgdm9pZCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0OjpzdXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lIHRpbWUp
CiAgICAgbGF5ZXIoKS0+YmFja2luZygpLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1lKTsKIH0KIAor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorc3RkOjpvcHRpb25hbDxMYXlvdXRS
ZWN0PiBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5l
cihjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBj
b250YWluZXIsIFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0
Cit7CisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJTVkdCbG9jayBjaGFuZ2Vz
CisgICAgLy8gaWYgKCFpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4oKnRoaXMpICYmICFpczxSZW5k
ZXJTVkdCbG9jaz4odGhpcykpIHsKKyAgICBpZiAoIWlzPFJlbmRlclNWR01vZGVsT2JqZWN0Pigq
dGhpcykpCisgICAgICAgIHJldHVybiBSZW5kZXJFbGVtZW50Ojpjb21wdXRlVmlzaWJsZVJlY3RJ
bkNvbnRhaW5lcihyZWN0LCBjb250YWluZXIsIGNvbnRleHQpOworCisgICAgQVNTRVJUKCFzdHls
ZSgpLmhhc0luRmxvd1Bvc2l0aW9uKCkpOworICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygp
LmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOworCisgICAgaWYg
KGNvbnRhaW5lciA9PSB0aGlzKQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIGJvb2wgY29u
dGFpbmVySXNTa2lwcGVkOworICAgIGF1dG8qIGxvY2FsQ29udGFpbmVyID0gdGhpcy0+Y29udGFp
bmVyKGNvbnRhaW5lciwgY29udGFpbmVySXNTa2lwcGVkKTsKKyAgICBpZiAoIWxvY2FsQ29udGFp
bmVyKQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIEFTU0VSVF9VTlVTRUQoY29udGFpbmVy
SXNTa2lwcGVkLCAhY29udGFpbmVySXNTa2lwcGVkKTsKKworICAgIExheW91dFJlY3QgYWRqdXN0
ZWRSZWN0ID0gcmVjdDsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdCBjaGFuZ2VzCisgICAgLy8gTW92ZSB0byBvcmlnaW4gb2YgbG9jYWwgY29v
cmRpbmF0ZSBzeXN0ZW0sIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gY29tcHV0ZVZpc2li
bGVSZWN0SW5Db250YWluZXIoKSBvcmlnaW5hdGluZworICAgIC8vIGZyb20gYSBTVkcgcmVuZGVy
ZXIgKFJlbmRlclNWR01vZGVsT2JqZWN0IC8gUmVuZGVyU1ZHQmxvY2spIG9yIGlmIHdlIGNyb3Nz
IHRoZSBib3VuZGFyeSBmcm9tIEhUTUwgLT4gU1ZHIHZpYSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0
LgorICAgIC8vIGJvb2wgbW92ZVRvT3JpZ2luID0gaXM8UmVuZGVyU1ZHRm9yZWlnbk9iamVjdD4o
cmVuZGVyZXIpOworICAgIGJvb2wgbW92ZVRvT3JpZ2luID0gZmFsc2U7CisKKyAgICAvKiBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlck9iamVjdCBjaGFuZ2VzCisgICAgaWYgKGNvbnRleHQu
b3B0aW9ucy5jb250YWlucyhSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6
VHJhbnNsYXRlVG9TVkdSZW5kZXJlck9yaWdpbikpIHsKKyAgICAgICAgY29udGV4dC5vcHRpb25z
LnJlbW92ZShSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6VHJhbnNsYXRl
VG9TVkdSZW5kZXJlck9yaWdpbik7CisgICAgICAgIG1vdmVUb09yaWdpbiA9IHRydWU7CisgICAg
fQorICAgICovCisKKyAgICBpZiAobW92ZVRvT3JpZ2luKQorICAgICAgICBhZGp1c3RlZFJlY3Qu
bW92ZUJ5KGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29y
bmVyKCkpKTsKKworICAgIGlmIChhdXRvKiB0cmFuc2Zvcm0gPSBsYXllcigpLT50cmFuc2Zvcm0o
KSkKKyAgICAgICAgYWRqdXN0ZWRSZWN0ID0gdHJhbnNmb3JtLT5tYXBSZWN0KGFkanVzdGVkUmVj
dCk7CisKKyAgICByZXR1cm4gbG9jYWxDb250YWluZXItPmNvbXB1dGVWaXNpYmxlUmVjdEluQ29u
dGFpbmVyKGFkanVzdGVkUmVjdCwgY29udGFpbmVyLCBjb250ZXh0KTsKK30KKwordm9pZCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3Jt
U3RhdGUsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+IG1vZGUsIGJvb2wqIHdhc0ZpeGVk
KSBjb25zdAoreworICAgIGlmICghaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KCp0aGlzKSkKKyAg
ICAgICAgcmV0dXJuIFJlbmRlckVsZW1lbnQ6Om1hcExvY2FsVG9Db250YWluZXIoYW5jZXN0b3JD
b250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7CisKKyAgICBBU1NFUlQo
c3R5bGUoKS5wb3NpdGlvbigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljKTsKKworICAgIGlmIChh
bmNlc3RvckNvbnRhaW5lciA9PSB0aGlzKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
IXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5h
YmxlZCgpKTsKKworICAgIGJvb2wgYW5jZXN0b3JTa2lwcGVkOworICAgIGF1dG8qIGNvbnRhaW5l
ciA9IHRoaXMtPmNvbnRhaW5lcihhbmNlc3RvckNvbnRhaW5lciwgYW5jZXN0b3JTa2lwcGVkKTsK
KyAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUX1VOVVNF
RChhbmNlc3RvclNraXBwZWQsICFhbmNlc3RvclNraXBwZWQpOworCisgICAgLy8gSWYgdGhpcyBi
b3ggaGFzIGEgdHJhbnNmb3JtLCBpdCBhY3RzIGFzIGEgZml4ZWQgcG9zaXRpb24gY29udGFpbmVy
IGZvciBmaXhlZCBkZXNjZW5kYW50cywKKyAgICAvLyBhbmQgbWF5IGl0c2VsZiBhbHNvIGJlIGZp
eGVkIHBvc2l0aW9uLiBTbyBwcm9wYWdhdGUgJ2ZpeGVkJyB1cCBvbmx5IGlmIHRoaXMgYm94IGlz
IGZpeGVkIHBvc2l0aW9uLgorICAgIGlmIChoYXNUcmFuc2Zvcm0oKSkKKyAgICAgICAgbW9kZS5y
ZW1vdmUoSXNGaXhlZCk7CisKKyAgICBpZiAod2FzRml4ZWQpCisgICAgICAgICp3YXNGaXhlZCA9
IG1vZGUuY29udGFpbnMoSXNGaXhlZCk7CisKKyAgICBhdXRvIGNvbnRhaW5lck9mZnNldCA9IG9m
ZnNldEZyb21Db250YWluZXIoKmNvbnRhaW5lciwgTGF5b3V0UG9pbnQodHJhbnNmb3JtU3RhdGUu
bWFwcGVkUG9pbnQoKSkpOworCisgICAgYm9vbCBwcmVzZXJ2ZTNEID0gbW9kZSAmIFVzZVRyYW5z
Zm9ybXMgJiYgKGNvbnRhaW5lci0+c3R5bGUoKS5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxlKCkucHJl
c2VydmVzM0QoKSk7CisgICAgaWYgKG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIHNob3VsZFVzZVRy
YW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwg
Y29udGFpbmVyT2Zmc2V0LCB0KTsKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zv
cm0odCwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDog
VHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgIH0gZWxzZQorICAgICAgICB0
cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9mZnNldC53aWR0aCgpLCBjb250YWluZXJPZmZz
ZXQuaGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5z
Zm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKworICAgIG1vZGUucmVt
b3ZlKEFwcGx5Q29udGFpbmVyRmxpcCk7CisKKyAgICBjb250YWluZXItPm1hcExvY2FsVG9Db250
YWluZXIoYW5jZXN0b3JDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7
Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCBkMTE4ZGM4MWE2
YTdjNjBiYjQzYjI3MWM3MzViMjFkNjY5OGM4NzFlLi5kZmJlZWEwN2M2MDhiYTkzOWE0MDQ0NWMy
NmZjNGNhMTJlMmUyM2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmgKQEAgLTY3LDYgKzY3LDE2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSA9IE1vbm90b25pY1RpbWUoKSkgb3Zl
cnJpZGU7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAvLyBQcm92
aWRlcyB0aGUgU1ZHIGltcGxlbWVudGF0aW9uIGZvciBjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRh
aW5lcigpLgorICAgIC8vIFRoaXMgbGl2ZXMgaW4gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgd2hp
Y2ggaXMgdGhlIGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgU1ZHIHJlbmRlcmVycy4KKyAgICBz
dGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNv
bnN0IExheW91dFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIs
IFZpc2libGVSZWN0Q29udGV4dCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBQcm92aWRlcyB0
aGUgU1ZHIGltcGxlbWVudGF0aW9uIGZvciBtYXBMb2NhbFRvQ29udGFpbmVyKCkuCisgICAgLy8g
VGhpcyBsaXZlcyBpbiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCB3aGljaCBpcyB0aGUgY29tbW9u
IGJhc2UtY2xhc3MgZm9yIGFsbCBTVkcgcmVuZGVyZXJzLgorICAgIHZvaWQgbWFwTG9jYWxUb0Nv
bnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwg
VHJhbnNmb3JtU3RhdGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2Fz
Rml4ZWQpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBCYXNlVHlwZUZsYWdzKTsK
ICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KERvY3VtZW50JiwgUmVuZGVyU3R5bGUmJiwgQmFz
ZVR5cGVGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxZGI4NGM3NTRlOTgwZmM0NDBiOGE2
MGNjMDM1MGY4NWU0ZTE1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtMCwwICsxLDI5MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEgUy5MLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgorCisjaWYgRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmplY3QuaCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
KyNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMb2NhdGFibGUu
aCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhEYXRhLmgiCisjaW5j
bHVkZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR01vZGVsT2JqZWN0KTsKKwor
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OlJlbmRlclNWR01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmIGVs
ZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCisgICAgOiBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpLCAwKQoreworfQorCit2b2lkIFJlbmRlclNWR01vZGVs
T2JqZWN0Ojp1cGRhdGVGcm9tU3R5bGUoKQoreworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnVwZGF0ZUZyb21TdHlsZSgpOworICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShz
dHlsZSgpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpKTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm07CisgICAgaWYgKFJlbmRlck9iamVjdDo6bm9kZSgpICYmIGlzPFNWR0dy
YXBoaWNzRWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKSkKKyAgICAgICAgdHJhbnNmb3Jt
ID0gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpLmFu
aW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0g
UmVuZGVyT2JqZWN0IGNoYW5nZXMKKyAgICAvLyBpZiAoIXRyYW5zZm9ybS5pc0lkZW50aXR5KCkp
CisgICAgLy8gICAgIHNldEhhc1NWR1RyYW5zZm9ybSgpOworfQorCitGbG9hdFJlY3QgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmJvcmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJG
cmFnbWVudENvbnRhaW5lciosIFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3Mp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGJvcmRlckJveFJlY3RFcXVpdmFsZW50KCk7Cit9CisKK0xh
eW91dFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5
b3V0UG9pbnQmLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciosIE92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5LCBQYWludFBoYXNlKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Cit9CisKK0xheW91dFJlY3QgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0Cit7
CisgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgJiYg
IWVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCisgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KCk7CisKKyAgICBBU1NFUlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250
ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsKKyAgICByZXR1cm4gY29tcHV0ZVJl
Y3QodmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpLCByZXBhaW50Q29udGFpbmVyLCBjb250
ZXh0KTsKK30KKworY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVz
aE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3Rv
clRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0Cit7CisgICAg
QVNTRVJUKGFuY2VzdG9yVG9TdG9wQXQgIT0gdGhpcyk7CisgICAgQVNTRVJUKHN0eWxlKCkucG9z
aXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlN0YXRpYyk7CisKKyAgICBib29sIGFuY2VzdG9yU2tp
cHBlZDsKKyAgICBSZW5kZXJFbGVtZW50KiBjb250YWluZXIgPSB0aGlzLT5jb250YWluZXIoYW5j
ZXN0b3JUb1N0b3BBdCwgYW5jZXN0b3JTa2lwcGVkKTsKKyAgICBpZiAoIWNvbnRhaW5lcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlRfVU5VU0VEKGFuY2VzdG9yU2tpcHBl
ZCwgIWFuY2VzdG9yU2tpcHBlZCk7CisKKyAgICBib29sIG9mZnNldERlcGVuZHNPblBvaW50ID0g
ZmFsc2U7CisgICAgTGF5b3V0U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFp
bmVyKCpjb250YWluZXIsIExheW91dFBvaW50KCksICZvZmZzZXREZXBlbmRzT25Qb2ludCk7CisK
KyAgICBib29sIHByZXNlcnZlM0QgPSBjb250YWluZXItPnN0eWxlKCkucHJlc2VydmVzM0QoKSB8
fCBzdHlsZSgpLnByZXNlcnZlczNEKCk7CisgICAgaWYgKHNob3VsZFVzZVRyYW5zZm9ybUZyb21D
b250YWluZXIoY29udGFpbmVyKSAmJiAoZ2VvbWV0cnlNYXAubWFwQ29vcmRpbmF0ZXNGbGFncygp
ICYgVXNlVHJhbnNmb3JtcykpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAg
ICAgICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lck9mZnNl
dCwgdCk7CisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2godGhpcywgdCwgcHJlc2VydmUzRCwgb2Zm
c2V0RGVwZW5kc09uUG9pbnQsIGZhbHNlIC8qIGlzRml4ZWRQb3MgKi8sIGhhc1RyYW5zZm9ybSgp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlzLCBjb250YWluZXJP
ZmZzZXQsIHByZXNlcnZlM0QsIG9mZnNldERlcGVuZHNPblBvaW50LCBmYWxzZSAvKiBpc0ZpeGVk
UG9zICovLCBoYXNUcmFuc2Zvcm0oKSk7CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCitM
YXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5k
ZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXApIGNvbnN0Cit7CisgICAgQVNTRVJUKCF2aWV3KCku
ZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7
CisKKyAgICBhdXRvIG91dGxpbmVCb3VuZHMgPSB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50
KCk7CisKKyAgICBpZiAocmVwYWludENvbnRhaW5lciAhPSB0aGlzKSB7CisgICAgICAgIEZsb2F0
UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQ7CisgICAgICAgIGlmIChnZW9tZXRyeU1hcCkKKyAg
ICAgICAgICAgIGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IGdlb21ldHJ5TWFwLT5tYXBUb0NvbnRh
aW5lcihvdXRsaW5lQm91bmRzLCByZXBhaW50Q29udGFpbmVyKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxv
YXRSZWN0KG91dGxpbmVCb3VuZHMpLCByZXBhaW50Q29udGFpbmVyKTsKKworICAgICAgICBvdXRs
aW5lQm91bmRzID0gTGF5b3V0UmVjdChjb250YWluZXJSZWxhdGl2ZVF1YWQuYm91bmRpbmdCb3go
KSk7CisgICAgfQorCisgICAgcmV0dXJuIG91dGxpbmVCb3VuZHM7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdAoreworICAgIHJlY3RzLmFw
cGVuZChzbmFwcGVkSW50UmVjdChMYXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgbGF5b3V0
TG9jYXRpb24oKSwgbGF5b3V0U2l6ZSgpKSkpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4
ZWQpIGNvbnN0Cit7CisgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQob2JqZWN0
Qm91bmRpbmdCb3goKSwgVXNlVHJhbnNmb3Jtcywgd2FzRml4ZWQpKTsKK30KKwordm9pZCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKK3sKKyAgICBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50RGVzdHJveWVkKCp0aGlzKTsKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0
Ojp3aWxsQmVEZXN0cm95ZWQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkKK3sKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShkaWZm
LCBvbGRTdHlsZSk7CisKKyAgICAvLyBTVkcgbWFza3MgYXJlIHBhaW50ZWQgaW5kZXBlbmRlbnQg
b2YgdGhlIHRhcmdldCByZW5kZXJlcnMgdmlzaWJpbGl0eS4KKyAgICAvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIFJlbmRlckVsZW1lbnQgY2hhbmdlcworICAgIC8vIGJvb2wgaGFzU1ZHTWFzayA9
IGhhc1NWR01hc2soKTsKKyAgICBib29sIGhhc1NWR01hc2sgPSBmYWxzZTsKKyAgICBpZiAoaGFz
U1ZHTWFzayAmJiBoYXNMYXllcigpICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxp
dHk6OlZpc2libGUpCisgICAgICAgIGxheWVyKCktPnNldEhhc1Zpc2libGVDb250ZW50KCk7CisK
KyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKCp0aGlzLCBkaWZmLCBz
dHlsZSgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwQWJzb2x1dGVUb0xv
Y2FsUG9pbnQoT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4gbW9kZSwgVHJhbnNmb3JtU3Rh
dGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAoreworICAgIEFTU0VSVChzdHlsZSgpLnBvc2l0aW9u
KCkgPT0gUG9zaXRpb25UeXBlOjpTdGF0aWMpOworCisgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQor
ICAgICAgICBtb2RlLnJlbW92ZShJc0ZpeGVkKTsKKworICAgIGF1dG8qIGNvbnRhaW5lciA9IHRo
aXMtPnBhcmVudCgpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb250YWluZXItPm1hcEFic29sdXRlVG9Mb2NhbFBvaW50KG1vZGUsIHRyYW5zZm9ybVN0YXRl
KTsKKworICAgIExheW91dFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5l
cigqY29udGFpbmVyLCBMYXlvdXRQb2ludCgpKTsKKworICAgIGJvb2wgcHJlc2VydmUzRCA9IG1v
ZGUgJiBVc2VUcmFuc2Zvcm1zICYmIChjb250YWluZXItPnN0eWxlKCkucHJlc2VydmVzM0QoKSB8
fCBzdHlsZSgpLnByZXNlcnZlczNEKCkpOworICAgIGlmIChtb2RlICYgVXNlVHJhbnNmb3JtcyAm
JiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lcikpIHsKKyAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5l
cihjb250YWluZXIsIGNvbnRhaW5lck9mZnNldCwgdCk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRl
LmFwcGx5VHJhbnNmb3JtKHQsIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0
ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZShjb250YWluZXJPZmZzZXQud2lkdGgoKSwg
Y29udGFpbmVyT2Zmc2V0LmhlaWdodCgpLCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFj
Y3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7Cit9
CisKK0xheW91dFNpemUgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om9mZnNldEZyb21Db250YWluZXIo
UmVuZGVyRWxlbWVudCYgY29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqKSBjb25z
dAoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGFpbmVyLCAmY29udGFpbmVyID09IHRoaXMtPmNv
bnRhaW5lcigpKTsKKyAgICBBU1NFUlQoIWlzSW5GbG93UG9zaXRpb25lZCgpKTsKKyAgICBBU1NF
UlQoIWlzQWJzb2x1dGVseVBvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKGlzSW5saW5lKCkpOwor
ICAgIHJldHVybiBMYXlvdXRTaXplKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91
dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KikK
K3sKKyAgICBhdXRvIHJlcGFpbnRCb3VuZGluZ0JveCA9IGVuY2xvc2luZ0xheW91dFJlY3QodGhp
cy0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgaWYgKHJlcGFpbnRCb3Vu
ZGluZ0JveC5zaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgcmVjdHMuYXBw
ZW5kKExheW91dFJlY3QoYWRkaXRpb25hbE9mZnNldCwgcmVwYWludEJvdW5kaW5nQm94LnNpemUo
KSkpOworfQorCitib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzaG91bGRQYWludFNWR1JlbmRl
cmVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKSBjb25zdAoreworICAgIEFTU0VSVCghcGFp
bnRJbmZvLmNvbnRleHQoKS5wYWludGluZ0Rpc2FibGVkKCkpOworCisgICAgaWYgKChwYWludElu
Zm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZTo6Q2xpcHBpbmdNYXNrICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
OjpNYXNrICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpPdXRsaW5lICYmIHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSA9
PSBWaXNpYmlsaXR5OjpIaWRkZW4gfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6
Ok5vbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisv
LyBGbG9hdFJlY3Q6OmludGVyc2VjdHMgZG9lcyBub3QgY29uc2lkZXIgaG9yaXpvbnRhbCBvciB2
ZXJ0aWNhbCBsaW5lcyAoYmVjYXVzZSBvZiBpc0VtcHR5KCkpLgorLy8gU28gc3BlY2lhbC1jYXNl
IGhhbmRsaW5nIG9mIHN1Y2ggbGluZXMuCitzdGF0aWMgYm9vbCBpbnRlcnNlY3RzQWxsb3dpbmdF
bXB0eShjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCit7CisgICAg
aWYgKHIuaXNFbXB0eSgpICYmIG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChyLmlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gKG90aGVyLmNvbnRhaW5zKHIueCgpLCByLnkoKSkgJiYgIW90aGVyLmNvbnRhaW5zKHIubWF4
WCgpLCByLm1heFkoKSkpIHx8ICghb3RoZXIuY29udGFpbnMoci54KCksIHIueSgpKSAmJiBvdGhl
ci5jb250YWlucyhyLm1heFgoKSwgci5tYXhZKCkpKTsKKyAgICBpZiAob3RoZXIuaXNFbXB0eSgp
ICYmICFyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5
KG90aGVyLCByKTsKKyAgICByZXR1cm4gci5pbnRlcnNlY3RzKG90aGVyKTsKK30KKworLy8gT25l
IG9mIHRoZSBlbGVtZW50IHR5cGVzIHRoYXQgY2FuIGNhdXNlIGdyYXBoaWNzIHRvIGJlIGRyYXdu
IG9udG8gdGhlIHRhcmdldCBjYW52YXMuIFNwZWNpZmljYWxseTogY2lyY2xlLCBlbGxpcHNlLAor
Ly8gaW1hZ2UsIGxpbmUsIHBhdGgsIHBvbHlnb24sIHBvbHlsaW5lLCByZWN0LCB0ZXh0IGFuZCB1
c2UuCitzdGF0aWMgYm9vbCBpc0dyYXBoaWNzRWxlbWVudChjb25zdCBSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlcikKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNTVkdTaGFwZSgpIHx8IHJlbmRlcmVy
LmlzU1ZHVGV4dCgpIHx8IHJlbmRlcmVyLmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci5lbGVtZW50
KCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZyk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5
bGUoKS5wb2ludGVyRXZlbnRzKCkgPT0gUG9pbnRlckV2ZW50czo6Tm9uZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghaXNHcmFwaGljc0VsZW1lbnQoKnJlbmRlcmVyKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBkb3duY2FzdDxT
VkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKKyAgICBBU1NFUlQoaXM8U1ZHR3JhcGhp
Y3NFbGVtZW50PihzdmdFbGVtZW50KSk7CisgICAgYXV0byBjdG0gPSBkb3duY2FzdDxTVkdHcmFw
aGljc0VsZW1lbnQ+KCpzdmdFbGVtZW50KS5nZXRDVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0
eWxlVXBkYXRlKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkocmVjdCwgY3Rt
Lm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKK30K
KworYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tFbmNsb3N1cmUoUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlbmRlcmVy
IHx8IHJlbmRlcmVyLT5zdHlsZSgpLnBvaW50ZXJFdmVudHMoKSA9PSBQb2ludGVyRXZlbnRzOjpO
b25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0dyYXBoaWNzRWxlbWVudCgq
cmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxl
bWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOworICAgIEFT
U0VSVChpczxTVkdHcmFwaGljc0VsZW1lbnQ+KHN2Z0VsZW1lbnQpKTsKKyAgICBhdXRvIGN0bSA9
IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKnN2Z0VsZW1lbnQpLmdldENUTShTVkdMb2Nh
dGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOworICAgIHJldHVybiByZWN0LmNvbnRhaW5zKGN0
bS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Cit9
CisKK1BhdGggUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbXB1dGVDbGlwUGF0aChBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXIoKS0+aGFzVHJhbnNmb3Jt
KCkpCisgICAgICAgIHRyYW5zZm9ybS5tdWx0aXBseShsYXllcigpLT5jdXJyZW50VHJhbnNmb3Jt
KFJlbmRlclN0eWxlOjppbmRpdmlkdWFsVHJhbnNmb3JtT3BlcmF0aW9ucykudG9BZmZpbmVUcmFu
c2Zvcm0oKSk7CisKKyAgICByZXR1cm4gcGF0aEZyb21HcmFwaGljc0VsZW1lbnQoJmRvd25jYXN0
PFNWR0dyYXBoaWNzRWxlbWVudD4oZWxlbWVudCgpKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFwcGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0s
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwg
T3B0aW9uU2V0PFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+IG9wdGlvbnMp
IGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zZm9ybSk7CisgICAgVU5VU0VEX1BBUkFN
KHN0eWxlKTsKKyAgICBVTlVTRURfUEFSQU0oYm91bmRpbmdCb3gpOworICAgIFVOVVNFRF9QQVJB
TShvcHRpb25zKTsKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBv
cnQgY2hhbmdlcworICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5VHJhbnNmb3JtKCp0aGlz
LCB0cmFuc2Zvcm0sIHN0eWxlLCBib3VuZGluZ0JveCwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxv
cHQsIG9wdGlvbnMpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpwYWludFNWR091
dGxpbmUoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBh
aW50T2Zmc2V0KQoreworICAgIHBhaW50T3V0bGluZShwYWludEluZm8sIExheW91dFJlY3QoYWRq
dXN0ZWRQYWludE9mZnNldCwgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR01vZGVsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYzMWRmNjliOGQ4NWVkMTY5MzBk
MzE3OTY4ZTZmNzQyNTAwMTA0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEgUy5MLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKy8vICNpbmNsdWRlICJTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBNb3N0IHJl
bmRlcmVycyBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlIHdpbGwgaW5oZXJpdCBmcm9tIHRoaXMg
Y2xhc3MKKy8vIGJ1dCBub3QgYWxsLiBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LCBSZW5kZXJTVkdC
bG9jaywgZXRjLiBpbmhlcml0IGZyb20KKy8vIGV4aXN0aW5nIFJlbmRlckJsb2NrIGNsYXNzZXMs
IHRoYXQgYWxsIGluaGVyaXQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2JqZWN0CisvLyBkaXJlY3Rs
eSwgd2l0aG91dCBSZW5kZXJTVkdNb2RlbE9iamVjdCBpbmJldHdlZW4uIFRoZXJlZm9yZSBjb2Rl
IHdoaWNoCisvLyBuZWVkcyB0byBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgU1ZHIHJlbmRlcmVycyBn
b2VzIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QuCitjbGFzcyBTVkdFbGVtZW50OworCitjbGFz
cyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJMYXllck1vZGVsT2JqZWN0IHsK
KyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR01vZGVsT2JqZWN0KTsKK3B1Ymxp
YzoKKyAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKKworICAgIHN0YXRpYyBib29sIGNoZWNrSW50
ZXJzZWN0aW9uKFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBjaGVja0VuY2xvc3VyZShSZW5kZXJFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7CisK
KyAgICBTVkdFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8U1ZHRWxl
bWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQorCisgICAgLy8gRklYTUU6IFtMQlNFXSBN
YXJrIGZpbmFsLCBhZGQgYXBwbHlUcmFuc2Zvcm0gdG8gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdAor
ICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJT
dHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisKKyAgICAvLyBNaW1pYyB0
aGUgUmVuZGVyQm94IGFjY2Vzc29ycyAtIGJ5IHNoYXJpbmcgdGhlIHNhbWUgdGVybWlub2xvZ3kg
dGhlIHBhaW50aW5nIC8gaGl0IHRlc3RpbmcgLyBsYXlvdXQgbG9naWMgaXMKKyAgICAvLyBzaW1p
bGFyIHRvIHJlYWQgY29tcGFyZWQgdG8gbm9uLVNWRyByZW5kZXJlcnMgc3VjaCBhcyBSZW5kZXJC
b3ggJiBmcmllbmRzLgorICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKSBj
b25zdCB7IHJldHVybiB7IExheW91dFBvaW50KCksIG1fbGF5b3V0UmVjdC5zaXplKCkgfTsgfQor
ICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4g
Ym9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsgfQorICAgIExheW91dFJlY3QgZnJhbWVSZWN0RXF1
aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQorCisgICAgTGF5b3V0UmVj
dCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAg
ICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJm
bG93UmVjdCgqdGhpcyk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisgICAgfQorCisg
ICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQoTGF5b3V0UG9pbnQm
IHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlvbigpKTsgfQorCisgICAg
TGF5b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9Cisg
ICAgdm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheW91dFJlY3QpIHsgbV9s
YXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0TGF5b3V0TG9jYXRpb24oY29u
c3QgTGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0UmVjdC5zZXRMb2NhdGlv
bihsYXlvdXRMb2NhdGlvbik7IH0KKworICAgIExheW91dFBvaW50IHBhaW50aW5nTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0aW9uKCkgLSBmbG9vcmVk
TGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7IH0KKyAg
ICBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVj
dC5sb2NhdGlvbigpOyB9CisgICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2NhdGlvbk9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9jYXRpb24oKSk7IH0KKyAg
ICBMYXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Quc2l6
ZSgpOyB9CisKKyAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAgIEZsb2F0UmVjdCBib3Jk
ZXJCb3hSZWN0SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBS
ZW5kZXJCb3g6OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gUmVuZGVyQm94OjpDYWNoZVJl
bmRlckJveEZyYWdtZW50SW5mbykgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJm
bG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZTo6QmxvY2tCYWNr
Z3JvdW5kKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExh
eWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBmcmFnbWVudCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSB7IHJl
dHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsgfQor
CisgICAgdmlydHVhbCBQYXRoIGNvbXB1dGVDbGlwUGF0aChBZmZpbmVUcmFuc2Zvcm0mKSBjb25z
dDsKKworcHJvdGVjdGVkOgorICAgIFJlbmRlclNWR01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmLCBS
ZW5kZXJTdHlsZSYmKTsKKworICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB1cGRhdGVGcm9tU3R5bGUoKSBvdmVycmlkZTsKKyAgICBib29sIHNob3VsZFBhaW50
U1ZHUmVuZGVyZXIoY29uc3QgUGFpbnRJbmZvJikgY29uc3Q7CisKKyAgICBMYXlvdXRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIG1h
cEFic29sdXRlVG9Mb2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBUcmFu
c2Zvcm1TdGF0ZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIExheW91dFJlY3Qgb3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgY29uc3QgUmVuZGVyR2VvbWV0cnlNYXAqKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZW5k
ZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCosIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGF5b3V0U2l6
ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQb2ludCYs
IGJvb2wqIG9mZnNldERlcGVuZHNPblBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0
IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBwYWludENvbnRhaW5lciA9IDApIG92ZXJyaWRlOworICAgIHZvaWQgcGFpbnRTVkdPdXRs
aW5lKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBhaW50T2Zmc2V0KTsK
KworcHJpdmF0ZToKKyAgICBib29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBMYXlvdXRSZWN0IG1fbGF5b3V0UmVjdDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJf
T0JKRUNUKFJlbmRlclNWR01vZGVsT2JqZWN0LCBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkpCisK
KyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447817</attachid>
            <date>2021-12-22 10:34:21 -0800</date>
            <delta_ts>2021-12-22 11:34:05 -0800</delta_ts>
            <desc>Patch, v3</desc>
            <filename>bug-234524-20211222103420.patch</filename>
            <type>text/plain</type>
            <size>39547</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWE2ZDEwNWVjYTNjMjZk
ZmQ3Y2ZjNDA2ZDcwZmJlODMzZjJhMjNkOC4uZjczY2FkOTk3Y2FhY2E1OWM1NGUyYmRkZTcwN2Rj
NTQyNzJmODRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMyBAQAorMjAyMS0xMi0yMiAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGlt
cGxlbWVudGluZyBSZW5kZXJTVkdNb2RlbE9iamVjdCAtIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0
IGdyYXBoaWNzCisgICAgICAgIHByaW1pdGl2ZXMgaW4gU1ZHIChwYXRoIC8gcmVjdCAvIGNpcmNs
ZSAvIGltYWdlIC8gLi4uKSBmb3IgdGhlIExCU0UuCisKKyAgICAgICAgSW4gdGhlIGxlZ2FjeSBl
bmdpbmUsIFJlbmRlclNWR0ltYWdlIC8gUmVuZGVyU1ZHU2hhcGUgLyBSZW5kZXJTVkdDb250YWlu
ZXIgaW5oZXJpdAorICAgICAgICBmcm9tIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LCB3aGlj
aCBpbiB0dXJuIGluaGVyaXRzIGZyb20gUmVuZGVyRWxlbWVudC4gVGhlIFNWRworICAgICAgICA8
dGV4dD4gLyA8Zm9yZWlnbk9iamVjdD4gcmVuZGVyZXJzIGluaGVyaXQgZnJvbSB0aGVpciBleGlz
dGluZyAiSFRNTCBjb3VudGVycGFydHMiCisgICAgICAgIGUuZy4gUmVuZGVyU1ZHQmxvY2sgZnJv
bSBSZW5kZXJCbG9ja0Zsb3csIG9yIFJlbmRlclNWR0lubGluZSBmcm9tIFJlbmRlcklubGluZS4K
KworICAgICAgICBUaGlzIGhhcyBoaXN0b3JpY2FsIHJlYXNvbnM6IFdoZW4gU1ZHIHRleHQgcmVu
ZGVyaW5nIHdhcyBwcm90b3R5cGVkIGluIFdlYkNvcmUsIGEgZ29hbCB3YXMgdG8KKyAgICAgICAg
cmUtdXNlIHRoZSBleGlzdGluZyBIVE1ML0NTUyB0ZXh0IHJlbmRlcmluZyBjb2RlIHdoZW5ldmVy
IHBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIFNWRyB0ZXh0CisgICAgICAgIHJlbmRlcmVycyB3ZXJl
IG1vZGVsbGVkIGluIHRoZSB0ZXJtaW5vbG9neSBvZiBIVE1ML0NTUzogQSBuYXR1cmFsIGNob2lj
ZSBpcyB0byB0cmVhdCBhIFNWRworICAgICAgICA8dGV4dD4gZWxlbWVudCBhcyBhIENTUyAiYmxv
Y2stbGV2ZWwgZWxlbWVudCIgYW5kIDx0c3Bhbj4gLyA8dGV4dFBhdGg+IC8gPHRyZWY+IC8gLi4u
CisgICAgICAgIGVsZW1lbnRzIGFzIENTUyAiaW5saW5lIGVsZW1lbnRzIi4gVGhlc2UgZGVzaWdu
IGNob2ljZXMgZnJvbSBhbG1vc3QgdHdvIGRlY2FkZXMgYWdvLCBhcmUKKyAgICAgICAgdGhlIHJl
YXNvbiBmb3IgdGhlIHVubmVjZXNzYXJ5IGNvbmZ1c2luZyBTVkcgaW5oZXJpdGFuY2Ugc3RydWN0
dXJlLiBGdXJ0aGVybW9yZSB3ZSBleHBsaWNpdGx5CisgICAgICAgIGRpc2FibGUgbGF5ZXIgc3Vw
cG9ydCBpbiBhbGwgU1ZHIGNsYXNzZXMgdGhhdCBpbmRpcmVjdGx5IGluaGVyaXQgZnJvbSBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LgorCisgICAgICAgIEhvd2V2ZXIgZm9yIExCU0Ugd2UgZG8gd2Fu
dCBTVkcgdG8gcGFydGljaXBhdGUgaW4gdGhlIGxheWVyIHRyZWUuCisgICAgICAgIFRoZXJlZm9y
ZSBsZXQgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuIFRoaXMgdHVybnMKKyAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbnRvIHRo
ZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMgaW4gTEJTRS4KKworICAg
ICAgICBUaGUgcHJpY2UgZm9yIHRoZSBsYXllciBzdXBwb3J0IGlzIHRoYXQgYWxsIFNWRyByZW5k
ZXJlcnMgbmVlZCB0byBiZSBhYmxlIHRvIGFuc3dlciBxdWVzdGlvbnMKKyAgICAgICAgaW4gSFRN
TC9DU1MgbGFuZ3VhZ2UgKHdoYXQncyB5b3VyICdib3JkZXIgYm94IHJlY3QnPyBkbyB5b3UgaGF2
ZSB2aXN1YWwgb3ZlcmZsb3c/IGV0Yy4pLgorICAgICAgICBGaW5kaW5nIGNvbnNpc3RlbnQgZGVm
aW5pdGlvbnMvbWFwcGluZ3Mgd2FzIGEgdGVkaW91cyBqb2IsIHRoYXQgaXMgZnVsbHkgc29sdmVk
IGluIExCU0UgYW5kCisgICAgICAgIHdpbGwgYmUgdXBzdHJlYW1lZCBpbiBwaWVjZXMuIFRoaXMg
cGF0Y2ggaXMgb25lIG1haW4gcGllY2Ugb2YgdGhlIHdvcmsuCisKKyAgICAgICAgSWYgd2UgZm9y
Z2V0IGFib3V0IHRoZSBsZWdhY3kgZW5naW5lLCB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlIG5v
dyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgKyBSZW5kZXJPYmplY3QKKyAg
ICAgICAgICAgICsgUmVuZGVyRWxlbWVudAorICAgICAgICAgICAgfCAgICArIFJlbmRlckxheWVy
TW9kZWxPYmplY3QKKyAgICAgICAgICAgIHwgICAgICAgICsgUmVuZGVyQm94TW9kZWxPYmplY3QK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgKyBSZW5kZXJCb3gKKyAgICAgICAgICAgIHwgICAg
ICAgIHwgICAgfCAgICArIFJlbmRlclJlcGxhY2VkIChDU1MgInJlcGxhY2VkIiBlbGVtZW50cykK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUm9vdCAob3V0
ZXJtb3N0IDxzdmc+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgfAor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyQmxvY2sgKENTUyAiYmxvY2st
bGV2ZWwiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICArIFJl
bmRlckJsb2NrRmxvdworICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICAgKyBS
ZW5kZXJTVkdCbG9jayAoSFRNTC9TVkcgZ2x1ZSBjb2RlKQorICAgICAgICAgICAgfCAgICAgICAg
fCAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCAoPGZvcmVpZ25P
YmplY3Q+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgICAg
ICAgKyBSZW5kZXJTVkdUZXh0ICg8dGV4dD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAg
IHwgICAgfAorICAgICAgICAgICAgfCAgICAgICAgfCAgICArIFJlbmRlcklubGluZSAoQ1NTICJp
bmxpbmUiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgKyBSZW5kZXJT
VkdJbmxpbmUgKEhUTUwvU1ZHIGdsdWUgY29kZSkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAg
ICAgICAgICArIFJlbmRlclNWR1RTcGFuICg8dHNwYW4+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdUZXh0UGF0aCAoPHRleHRQYXRoPiBlbGVt
ZW50KQorICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgKyBSZW5k
ZXJTVkdNb2RlbE9iamVjdAorICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHQ29u
dGFpbmVyCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICArIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lciAoPGRlZnM+IC8gPGc+IHdpdGggJ2Rpc3BsYXk6IG5vbmUnIC8gPHN5bWJvbD4gZWxl
bWVudHMpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyICg8Y2xpcFBhdGg+IGVsZW1lbnQpCisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyICg8
ZmlsdGVyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAg
KyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZQorICAgICAgICAgICAgfCAgICAgICAg
ICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50CisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICB8ICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCAoPGxpbmVhckdyYWRpZW50PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAg
ICAgICAgIHwgICAgfCAgICAgICAgfCAgICArIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQgKDxyYWRpYWxHcmFkaWVudD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8
ICAgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIgKDxtYXJrZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlTWFza2VyICg8bWFz
a2VyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gKDxwYXR0ZXJuPiBlbGVtZW50KQorICAgICAgICAgICAg
fCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IK
KyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAg
ICB8ICAgICsgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciAoPGE+IC8gPGc+IC8gPHN3
aXRjaD4gLyA8dXNlPiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAg
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdJbWFnZSAoPGltYWdlPiBlbGVtZW50KQor
ICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHU2hhcGUgKDxyZWN0PiAvIDxjaXJj
bGU+IC8gPHBhdGg+IC4uLiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
KyBSZW5kZXJTVkdFbGxpcHNlCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVy
U1ZHUGF0aAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICArIFJlbmRlclNWR1JlY3QKKyAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICsgUmVuZGVyVGV4dCAoI3RleHQgbm9kZXMgaW4gSFRN
TCkKKyAgICAgICAgICAgICAgICArIFJlbmRlclNWR0lubGluZVRleHQgKCN0ZXh0IG5vZGVzIGlu
IFNWRykKKworICAgICAgICBUaGlzIGlzIHdheSBsZXNzIGNvbmZ1c2luZyB0aGVuIHRoZSBwcmV2
aW91cyB2ZXJzaW9uIG9mIHRoZSBTVkcgcmVuZGVyIHRyZWUuCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdD
b250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6bWFwTG9jYWxUb1NWR0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFic29sdXRlUXVhZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvZmZzZXRGcm9t
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6c2hvdWxkUGFpbnRTVkdSZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpp
bnRlcnNlY3RzQWxsb3dpbmdFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRl
cnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNr
RW5jbG9zdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb21w
dXRlQ2xpcFBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmFwcGx5VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01v
ZGVsT2JqZWN0OjpwYWludFNWR091dGxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6ZWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbnRlbnRCb3hSZWN0RXF1aXZhbGVudCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6ZnJhbWVSZWN0RXF1
aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6
dmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRM
YXlvdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRM
YXlvdXRMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6
cGFpbnRpbmdMb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6bGF5b3V0TG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmxheW91dExvY2F0aW9uT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRTaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRM
YXllcnMpOgorCiAyMDIxLTEyLTIyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBXZWJDb3JlIGluc3RhbGwgaGVhZGVycyB3aXRoIGFsdGVybmF0ZSBi
dWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBiZDVhNzQ3OWNiMzllNDZjYzkxMDQwMGY0ZWUzODQ5MzI0
Yzc1MzFmLi42MWUyYjlkZWM2ZTMyN2ZmYmFiMzgzNmQxMmNiOTQ3MTAyZGU4NjEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dApAQCAtMjQ3Nyw2ICsyNDc3LDcgQEAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRk
ZW5Db250YWluZXIuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwCityZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZWN0LmNw
cAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MjNmZDY3NDM5ODVk
NjMzN2I1Yzk3YjdkNWM5ZjQ3YmFmZmQ2MWYyLi4wMGUyMjRiYTI4YjllZTczYzk4ODdiMGRkN2M1
NmYxNTkyODI3NDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xMjQzLDYgKzEyNDMsNyBAQAogCQk0MzY3MDhDNzEyRDlDQTRC
MDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4ODEyRDlDQTRBMDAwNDQyMzQgLyog
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07CiAJCTQzNjcwOEM5MTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM2NzA4OEExMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdl
LmggKi87IH07CiAJCTQzNjcwOENCMTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdN
b2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDM2NzA4OEMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0
LmggKi87IH07CisJCTQzNjcwQzkzNDJEOUJDNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2
NzA4RkQxMkQ5Q0E0QTAwMDMyMTE0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggKi87IH07CiAJ
CTQzNjcwOENEMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OEUxMkQ5Q0E0QTAw
MDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmggKi87IH07CiAJCTQzNjcwOENGMTJEOUNBNEIw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODkwMTJEOUNBNEEwMDA0NDIzNCAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLzsgfTsKIAkJNDM2NzA4RDExMkQ5Q0E0QjAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg5MjEyRDlDQTRBMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCAqLzsgfTsKQEAgLTg5NzgsNiArODk3OSw4IEBACiAJ
CTQzNjcwODg4MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODg5MTJEOUNBNEEwMDA0NDIz
NCAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJTVkdJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQz
NjcwODhBMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0MzY3MDg4RDM0RTlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDhGRDEyRDlD
QTRBMDAwMzIxMTQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDM2NzA4OEIxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01v
ZGVsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2Fj
eVJlbmRlclNWR01vZGVsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDM2NzA4OEMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVJlbmRlclNWR01vZGVsT2Jq
ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODhEMTJEOUNBNEEwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xODkyMCw2ICsxODkyMyw4IEBACiAJCQkJQ0RGNzQ3RTgyNzBGNkNBRTAwOEZFRUVD
IC8qIFJlbmRlclNWR0lubGluZUlubGluZXMuaCAqLywKIAkJCQkwODU0QjAwNDEyNTVFNEU2MDBC
OUNERDAgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8sCiAJCQkJMDg1NEIwMDUxMjU1RTRF
NjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCAqLywKKwkJCQk0MzY3MDg4RDM0RTlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovLAorCQkJCTQzNjcwOEZE
MTJEOUNBNEEwMDAzMjExNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICovLAogCQkJCUFEREYx
QUQ0MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmNwcCAqLywKIAkJCQlBRERGMUFE
NTEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovLAogCQkJCUExMEJCNTgyMTQ4
NEUzQTcwMEIyRTg3QSAvKiBSZW5kZXJTVkdSZWN0LmNwcCAqLywKQEAgLTM2NzAzLDYgKzM2NzA4
LDcgQEAKIAkJCQkwODU0QjAxNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDREY3NDdFOTI3MEY2Q0FFMDA4RkVFRUMgLyogUmVuZGVyU1ZH
SW5saW5lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMTcxMjU1RTRFNjAwQjlD
REQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzNjcwQzkz
NDJEOUJDNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQURERjFBRDcxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCBpbiBIZWFk
ZXJzICovLAogCQkJCUExMEJCNTg1MTQ4NEUzQTcwMEIyRTg3QSAvKiBSZW5kZXJTVkdSZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDRDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZH
UmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IGYyOTUwNGEyZjMyZTg1YWQ1ODMy
N2Y2NmEzNGIxOTEyOGI2ZDY4NzguLjhkOTkwZjFkNTMxYmU2M2YyYjI1ZDA2MTQ1ZmIxMzFjNDEw
MDcyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5jcHAKQEAgLTI5LDkgKzI5LDExIEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJC
YWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU3Rh
dGUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0yMjksNSArMjMxLDkyIEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
c3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSB0aW1lKQogICAgIGxheWVyKCktPmJhY2tp
bmcoKS0+c3VzcGVuZEFuaW1hdGlvbnModGltZSk7CiB9CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKK3N0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIoY29uc3QgTGF5b3V0UmVj
dCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBSZW5kZXJP
YmplY3Q6OlZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAoreworICAgIC8vIEZJWE1F
OiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZHQmxvY2sgY2hhbmdlcworICAgIC8vIEFTU0VSVChp
czxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykgfHwgaXM8UmVuZGVyU1ZHQmxvY2s+KHRoaXMp
KTsKKyAgICBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHRoaXMpKTsKKworICAgIEFT
U0VSVCghc3R5bGUoKS5oYXNJbkZsb3dQb3NpdGlvbigpKTsKKyAgICBBU1NFUlQoIXZpZXcoKS5m
cmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsK
KworICAgIGlmIChjb250YWluZXIgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisKKyAg
ICBib29sIGNvbnRhaW5lcklzU2tpcHBlZDsKKyAgICBhdXRvKiBsb2NhbENvbnRhaW5lciA9IHRo
aXMtPmNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lcklzU2tpcHBlZCk7CisgICAgaWYgKCFs
b2NhbENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisKKyAgICBBU1NFUlRfVU5VU0VE
KGNvbnRhaW5lcklzU2tpcHBlZCwgIWNvbnRhaW5lcklzU2tpcHBlZCk7CisKKyAgICBMYXlvdXRS
ZWN0IGFkanVzdGVkUmVjdCA9IHJlY3Q7CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFt
IFJlbmRlclNWR0ZvcmVpZ25PYmplY3QgY2hhbmdlcworICAgIC8vIE1vdmUgdG8gb3JpZ2luIG9m
IGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIHRvIGNv
bXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKCkgb3JpZ2luYXRpbmcKKyAgICAvLyBmcm9tIGEg
U1ZHIHJlbmRlcmVyIChSZW5kZXJTVkdNb2RlbE9iamVjdCAvIFJlbmRlclNWR0Jsb2NrKSBvciBp
ZiB3ZSBjcm9zcyB0aGUgYm91bmRhcnkgZnJvbSBIVE1MIC0+IFNWRyB2aWEgUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdC4KKyAgICAvLyBib29sIG1vdmVUb09yaWdpbiA9IGlzPFJlbmRlclNWR0ZvcmVp
Z25PYmplY3Q+KHJlbmRlcmVyKTsKKyAgICBib29sIG1vdmVUb09yaWdpbiA9IGZhbHNlOworCisg
ICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJPYmplY3QgY2hhbmdlcworICAgIGlm
IChjb250ZXh0Lm9wdGlvbnMuY29udGFpbnMoUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENvbnRl
eHRPcHRpb246OlRyYW5zbGF0ZVRvU1ZHUmVuZGVyZXJPcmlnaW4pKSB7CisgICAgICAgIGNvbnRl
eHQub3B0aW9ucy5yZW1vdmUoUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENvbnRleHRPcHRpb246
OlRyYW5zbGF0ZVRvU1ZHUmVuZGVyZXJPcmlnaW4pOworICAgICAgICBtb3ZlVG9PcmlnaW4gPSB0
cnVlOworICAgIH0KKyAgICAqLworCisgICAgaWYgKG1vdmVUb09yaWdpbikKKyAgICAgICAgYWRq
dXN0ZWRSZWN0Lm1vdmVCeShmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5t
aW5YTWluWUNvcm5lcigpKSk7CisKKyAgICBpZiAoYXV0byogdHJhbnNmb3JtID0gbGF5ZXIoKS0+
dHJhbnNmb3JtKCkpCisgICAgICAgIGFkanVzdGVkUmVjdCA9IHRyYW5zZm9ybS0+bWFwUmVjdChh
ZGp1c3RlZFJlY3QpOworCisgICAgcmV0dXJuIGxvY2FsQ29udGFpbmVyLT5jb21wdXRlVmlzaWJs
ZVJlY3RJbkNvbnRhaW5lcihhZGp1c3RlZFJlY3QsIGNvbnRhaW5lciwgY29udGV4dCk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6bWFwTG9jYWxUb1NWR0NvbnRhaW5lcihjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3Rh
dGUmIHRyYW5zZm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBtb2RlLCBi
b29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFJl
bmRlclNWR0Jsb2NrIGNoYW5nZXMKKyAgICAvLyBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q+KHRoaXMpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPih0aGlzKSk7CisgICAgQVNTRVJUKGlzPFJl
bmRlclNWR01vZGVsT2JqZWN0Pih0aGlzKSk7CisgICAgQVNTRVJUKHN0eWxlKCkucG9zaXRpb24o
KSA9PSBQb3NpdGlvblR5cGU6OlN0YXRpYyk7CisKKyAgICBpZiAoYW5jZXN0b3JDb250YWluZXIg
PT0gdGhpcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3
KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CisKKyAgICBi
b29sIGFuY2VzdG9yU2tpcHBlZDsKKyAgICBhdXRvKiBjb250YWluZXIgPSB0aGlzLT5jb250YWlu
ZXIoYW5jZXN0b3JDb250YWluZXIsIGFuY2VzdG9yU2tpcHBlZCk7CisgICAgaWYgKCFjb250YWlu
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9VTlVTRUQoYW5jZXN0b3JTa2lwcGVk
LCAhYW5jZXN0b3JTa2lwcGVkKTsKKworICAgIC8vIElmIHRoaXMgYm94IGhhcyBhIHRyYW5zZm9y
bSwgaXQgYWN0cyBhcyBhIGZpeGVkIHBvc2l0aW9uIGNvbnRhaW5lciBmb3IgZml4ZWQgZGVzY2Vu
ZGFudHMsCisgICAgLy8gYW5kIG1heSBpdHNlbGYgYWxzbyBiZSBmaXhlZCBwb3NpdGlvbi4gU28g
cHJvcGFnYXRlICdmaXhlZCcgdXAgb25seSBpZiB0aGlzIGJveCBpcyBmaXhlZCBwb3NpdGlvbi4K
KyAgICBpZiAoaGFzVHJhbnNmb3JtKCkpCisgICAgICAgIG1vZGUucmVtb3ZlKElzRml4ZWQpOwor
CisgICAgaWYgKHdhc0ZpeGVkKQorICAgICAgICAqd2FzRml4ZWQgPSBtb2RlLmNvbnRhaW5zKElz
Rml4ZWQpOworCisgICAgYXV0byBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVy
KCpjb250YWluZXIsIExheW91dFBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCkpKTsK
KworICAgIGJvb2wgcHJlc2VydmUzRCA9IG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIChjb250YWlu
ZXItPnN0eWxlKCkucHJlc2VydmVzM0QoKSB8fCBzdHlsZSgpLnByZXNlcnZlczNEKCkpOworICAg
IGlmIChtb2RlICYgVXNlVHJhbnNmb3JtcyAmJiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFp
bmVyKGNvbnRhaW5lcikpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAg
ICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lck9mZnNldCwg
dCk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNmb3JtKHQsIHByZXNlcnZlM0Qg
PyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpG
bGF0dGVuVHJhbnNmb3JtKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92
ZShjb250YWluZXJPZmZzZXQud2lkdGgoKSwgY29udGFpbmVyT2Zmc2V0LmhlaWdodCgpLCBwcmVz
ZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1T
dGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisKKyAgICBtb2RlLnJlbW92ZShBcHBseUNvbnRhaW5l
ckZsaXApOworCisgICAgY29udGFpbmVyLT5tYXBMb2NhbFRvQ29udGFpbmVyKGFuY2VzdG9yQ29u
dGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQpOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKaW5kZXggZDExOGRjODFhNmE3YzYwYmI0M2IyNzFjNzM1
YjIxZDY2OThjODcxZS4uOWMzMTRhZmIxMGQ4YzVhNzAyYWZlMjAyNjUzZmRhNzA0YmRmNjhiYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5oCkBAIC02Nyw2ICs2NywxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN1c3BlbmRBbmltYXRp
b25zKE1vbm90b25pY1RpbWUgPSBNb25vdG9uaWNUaW1lKCkpIG92ZXJyaWRlOwogCisjaWYgRU5B
QkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgLy8gUHJvdmlkZXMgdGhlIFNWRyBpbXBs
ZW1lbnRhdGlvbiBmb3IgY29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoKS4KKyAgICAvLyBU
aGlzIGxpdmVzIGluIFJlbmRlckxheWVyTW9kZWxPYmplY3QsIHdoaWNoIGlzIHRoZSBjb21tb24g
YmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMuCisgICAgc3RkOjpvcHRpb25hbDxMYXlv
dXRSZWN0PiBjb21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lcihjb25zdCBMYXlvdXRSZWN0
JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENv
bnRleHQpIGNvbnN0OworCisgICAgLy8gUHJvdmlkZXMgdGhlIFNWRyBpbXBsZW1lbnRhdGlvbiBm
b3IgbWFwTG9jYWxUb0NvbnRhaW5lcigpLgorICAgIC8vIFRoaXMgbGl2ZXMgaW4gUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCwgd2hpY2ggaXMgdGhlIGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgU1ZH
IHJlbmRlcmVycy4KKyAgICB2b2lkIG1hcExvY2FsVG9TVkdDb250YWluZXIoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0
aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdDsKKyNlbmRp
ZgorCiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChFbGVtZW50JiwgUmVu
ZGVyU3R5bGUmJiwgQmFzZVR5cGVGbGFncyk7CiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChE
b2N1bWVudCYsIFJlbmRlclN0eWxlJiYsIEJhc2VUeXBlRmxhZ3MpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yMWZmN2M0YjRhNzI2MTRmYzFlYWNhMzI4NDUzMTZmMzcwNDQ0ODZiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEg
SWdhbGlhIFMuTC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
IAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaCIKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorI2luY2x1ZGUg
IlJlbmRlckdlb21ldHJ5TWFwLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2Uu
aCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNp
bmNsdWRlICJTVkdQYXRoRGF0YS5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCisj
aW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChSZW5kZXJTVkdNb2RlbE9iamVjdCk7CisKK1JlbmRlclNWR01vZGVsT2JqZWN0OjpSZW5kZXJT
VkdNb2RlbE9iamVjdChTVkdFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQor
ICAgIDogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSwgMCkK
K3sKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6dXBkYXRlRnJvbVN0eWxlKCkKK3sK
KyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp1cGRhdGVGcm9tU3R5bGUoKTsKKyAgICBzZXRI
YXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoc3R5bGUoKS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJv
cGVydHkoKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIGlmIChSZW5k
ZXJPYmplY3Q6Om5vZGUoKSAmJiBpczxTVkdHcmFwaGljc0VsZW1lbnQ+KG5vZGVGb3JOb25Bbm9u
eW1vdXMoKSkpCisgICAgICAgIHRyYW5zZm9ybSA9IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVu
dD4obm9kZUZvck5vbkFub255bW91cygpKS5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7CisKKyAg
ICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlck9iamVjdCBjaGFuZ2VzCisgICAgLy8g
aWYgKCF0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQorICAgIC8vICAgICBzZXRIYXNTVkdUcmFuc2Zv
cm0oKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpib3JkZXJCb3hSZWN0
SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBSZW5kZXJCb3g6
OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzKSBjb25zdAoreworICAgIHJldHVybiBib3JkZXJC
b3hSZWN0RXF1aXZhbGVudCgpOworfQorCitMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0
OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyRnJhZ21lbnRDb250
YWluZXIqLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgUGFpbnRQaGFzZSkgY29uc3QK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwor
fQorCitMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVS
ZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAoreworICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHko
KSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlICYmICFlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxl
Q29udGVudCgpKQorICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworCisgICAgQVNTRVJUKCF2
aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJs
ZWQoKSk7CisgICAgcmV0dXJuIGNvbXB1dGVSZWN0KHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxl
bnQoKSwgcmVwYWludENvbnRhaW5lciwgY29udGV4dCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8TGF5
b3V0UmVjdD4gUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFp
bmVyKGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNvbXB1dGVWaXNpYmxlUmVjdEluU1ZHQ29udGFpbmVyKHJlY3QsIGNvbnRhaW5lciwgY29u
dGV4dCk7Cit9CisKK2NvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnB1
c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0
b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25zdAoreworICAg
IEFTU0VSVChhbmNlc3RvclRvU3RvcEF0ICE9IHRoaXMpOworICAgIEFTU0VSVChzdHlsZSgpLnBv
c2l0aW9uKCkgPT0gUG9zaXRpb25UeXBlOjpTdGF0aWMpOworCisgICAgYm9vbCBhbmNlc3RvclNr
aXBwZWQ7CisgICAgUmVuZGVyRWxlbWVudCogY29udGFpbmVyID0gdGhpcy0+Y29udGFpbmVyKGFu
Y2VzdG9yVG9TdG9wQXQsIGFuY2VzdG9yU2tpcHBlZCk7CisgICAgaWYgKCFjb250YWluZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUX1VOVVNFRChhbmNlc3RvclNraXBw
ZWQsICFhbmNlc3RvclNraXBwZWQpOworCisgICAgYm9vbCBvZmZzZXREZXBlbmRzT25Qb2ludCA9
IGZhbHNlOworICAgIExheW91dFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRh
aW5lcigqY29udGFpbmVyLCBMYXlvdXRQb2ludCgpLCAmb2Zmc2V0RGVwZW5kc09uUG9pbnQpOwor
CisgICAgYm9vbCBwcmVzZXJ2ZTNEID0gY29udGFpbmVyLT5zdHlsZSgpLnByZXNlcnZlczNEKCkg
fHwgc3R5bGUoKS5wcmVzZXJ2ZXMzRCgpOworICAgIGlmIChzaG91bGRVc2VUcmFuc2Zvcm1Gcm9t
Q29udGFpbmVyKGNvbnRhaW5lcikgJiYgKGdlb21ldHJ5TWFwLm1hcENvb3JkaW5hdGVzRmxhZ3Mo
KSAmIFVzZVRyYW5zZm9ybXMpKSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7Cisg
ICAgICAgIGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyLCBjb250YWluZXJPZmZz
ZXQsIHQpOworICAgICAgICBnZW9tZXRyeU1hcC5wdXNoKHRoaXMsIHQsIHByZXNlcnZlM0QsIG9m
ZnNldERlcGVuZHNPblBvaW50LCBmYWxzZSAvKiBpc0ZpeGVkUG9zICovLCBoYXNUcmFuc2Zvcm0o
KSk7CisgICAgfSBlbHNlCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2godGhpcywgY29udGFpbmVy
T2Zmc2V0LCBwcmVzZXJ2ZTNELCBvZmZzZXREZXBlbmRzT25Qb2ludCwgZmFsc2UgLyogaXNGaXhl
ZFBvcyAqLywgaGFzVHJhbnNmb3JtKCkpOworCisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKwor
TGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQo
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVu
ZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwKSBjb25zdAoreworICAgIEFTU0VSVCghdmlldygp
LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkp
OworCisgICAgYXV0byBvdXRsaW5lQm91bmRzID0gdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVu
dCgpOworCisgICAgaWYgKHJlcGFpbnRDb250YWluZXIgIT0gdGhpcykgeworICAgICAgICBGbG9h
dFF1YWQgY29udGFpbmVyUmVsYXRpdmVRdWFkOworICAgICAgICBpZiAoZ2VvbWV0cnlNYXApCisg
ICAgICAgICAgICBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBnZW9tZXRyeU1hcC0+bWFwVG9Db250
YWluZXIob3V0bGluZUJvdW5kcywgcmVwYWludENvbnRhaW5lcik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZs
b2F0UmVjdChvdXRsaW5lQm91bmRzKSwgcmVwYWludENvbnRhaW5lcik7CisKKyAgICAgICAgb3V0
bGluZUJvdW5kcyA9IExheW91dFJlY3QoY29udGFpbmVyUmVsYXRpdmVRdWFkLmJvdW5kaW5nQm94
KCkpOworICAgIH0KKworICAgIHJldHVybiBvdXRsaW5lQm91bmRzOworfQorCit2b2lkIFJlbmRl
clNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKK3sKKyAgICByZWN0cy5h
cHBlbmQoc25hcHBlZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIGxheW91
dExvY2F0aW9uKCksIGxheW91dFNpemUoKSkpKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0Zp
eGVkKSBjb25zdAoreworICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKG9iamVj
dEJvdW5kaW5nQm94KCksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNsaWVudERlc3Ryb3llZCgqdGhpcyk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6d2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCit7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoZGlm
Ziwgb2xkU3R5bGUpOworCisgICAgLy8gU1ZHIG1hc2tzIGFyZSBwYWludGVkIGluZGVwZW5kZW50
IG9mIHRoZSB0YXJnZXQgcmVuZGVyZXJzIHZpc2liaWxpdHkuCisgICAgLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBSZW5kZXJFbGVtZW50IGNoYW5nZXMKKyAgICAvLyBib29sIGhhc1NWR01hc2sg
PSBoYXNTVkdNYXNrKCk7CisgICAgYm9vbCBoYXNTVkdNYXNrID0gZmFsc2U7CisgICAgaWYgKGhh
c1NWR01hc2sgJiYgaGFzTGF5ZXIoKSAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmls
aXR5OjpWaXNpYmxlKQorICAgICAgICBsYXllcigpLT5zZXRIYXNWaXNpYmxlQ29udGVudCgpOwor
CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqdGhpcywgZGlmZiwg
c3R5bGUoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcEFic29sdXRlVG9M
b2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+IG1vZGUsIFRyYW5zZm9ybVN0
YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3R5bGUoKS5wb3NpdGlv
bigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljKTsKKworICAgIGlmIChoYXNUcmFuc2Zvcm0oKSkK
KyAgICAgICAgbW9kZS5yZW1vdmUoSXNGaXhlZCk7CisKKyAgICBhdXRvKiBjb250YWluZXIgPSB0
aGlzLT5wYXJlbnQoKTsKKyAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY29udGFpbmVyLT5tYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChtb2RlLCB0cmFuc2Zvcm1TdGF0
ZSk7CisKKyAgICBMYXlvdXRTaXplIGNvbnRhaW5lck9mZnNldCA9IG9mZnNldEZyb21Db250YWlu
ZXIoKmNvbnRhaW5lciwgTGF5b3V0UG9pbnQoKSk7CisKKyAgICBib29sIHByZXNlcnZlM0QgPSBt
b2RlICYgVXNlVHJhbnNmb3JtcyAmJiAoY29udGFpbmVyLT5zdHlsZSgpLnByZXNlcnZlczNEKCkg
fHwgc3R5bGUoKS5wcmVzZXJ2ZXMzRCgpKTsKKyAgICBpZiAobW9kZSAmIFVzZVRyYW5zZm9ybXMg
JiYgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIpKSB7CisgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7CisgICAgICAgIGdldFRyYW5zZm9ybUZyb21Db250YWlu
ZXIoY29udGFpbmVyLCBjb250YWluZXJPZmZzZXQsIHQpOworICAgICAgICB0cmFuc2Zvcm1TdGF0
ZS5hcHBseVRyYW5zZm9ybSh0LCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxh
dGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisgICAgfSBl
bHNlCisgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoY29udGFpbmVyT2Zmc2V0LndpZHRoKCks
IGNvbnRhaW5lck9mZnNldC5oZWlnaHQoKSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpB
Y2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOwor
fQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0
ZSYgdHJhbnNmb3JtU3RhdGUsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+IG1vZGUsIGJv
b2wqIHdhc0ZpeGVkKSBjb25zdAoreworICAgIG1hcExvY2FsVG9TVkdDb250YWluZXIoYW5jZXN0
b3JDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7Cit9CisKK0xheW91
dFNpemUgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyRWxl
bWVudCYgY29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqKSBjb25zdAoreworICAg
IEFTU0VSVF9VTlVTRUQoY29udGFpbmVyLCAmY29udGFpbmVyID09IHRoaXMtPmNvbnRhaW5lcigp
KTsKKyAgICBBU1NFUlQoIWlzSW5GbG93UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQoIWlzQWJz
b2x1dGVseVBvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKGlzSW5saW5lKCkpOworICAgIHJldHVy
biBMYXlvdXRTaXplKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBh
ZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KikKK3sKKyAgICBh
dXRvIHJlcGFpbnRCb3VuZGluZ0JveCA9IGVuY2xvc2luZ0xheW91dFJlY3QodGhpcy0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgaWYgKHJlcGFpbnRCb3VuZGluZ0JveC5z
aXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgcmVjdHMuYXBwZW5kKExheW91
dFJlY3QoYWRkaXRpb25hbE9mZnNldCwgcmVwYWludEJvdW5kaW5nQm94LnNpemUoKSkpOworfQor
Citib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzaG91bGRQYWludFNWR1JlbmRlcmVyKGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvKSBjb25zdAoreworICAgIEFTU0VSVCghcGFpbnRJbmZvLmNv
bnRleHQoKS5wYWludGluZ0Rpc2FibGVkKCkpOworCisgICAgaWYgKChwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZTo6Q2xpcHBpbmdNYXNrICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpNYXNrICYm
IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpPdXRsaW5lICYmIHBhaW50SW5mby5waGFz
ZSAhPSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmls
aXR5OjpIaWRkZW4gfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBGbG9hdFJl
Y3Q6OmludGVyc2VjdHMgZG9lcyBub3QgY29uc2lkZXIgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBs
aW5lcyAoYmVjYXVzZSBvZiBpc0VtcHR5KCkpLgorLy8gU28gc3BlY2lhbC1jYXNlIGhhbmRsaW5n
IG9mIHN1Y2ggbGluZXMuCitzdGF0aWMgYm9vbCBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0eShjb25z
dCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCit7CisgICAgaWYgKHIuaXNF
bXB0eSgpICYmIG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChyLmlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gKG90aGVy
LmNvbnRhaW5zKHIueCgpLCByLnkoKSkgJiYgIW90aGVyLmNvbnRhaW5zKHIubWF4WCgpLCByLm1h
eFkoKSkpIHx8ICghb3RoZXIuY29udGFpbnMoci54KCksIHIueSgpKSAmJiBvdGhlci5jb250YWlu
cyhyLm1heFgoKSwgci5tYXhZKCkpKTsKKyAgICBpZiAob3RoZXIuaXNFbXB0eSgpICYmICFyLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KG90aGVyLCBy
KTsKKyAgICByZXR1cm4gci5pbnRlcnNlY3RzKG90aGVyKTsKK30KKworLy8gT25lIG9mIHRoZSBl
bGVtZW50IHR5cGVzIHRoYXQgY2FuIGNhdXNlIGdyYXBoaWNzIHRvIGJlIGRyYXduIG9udG8gdGhl
IHRhcmdldCBjYW52YXMuIFNwZWNpZmljYWxseTogY2lyY2xlLCBlbGxpcHNlLAorLy8gaW1hZ2Us
IGxpbmUsIHBhdGgsIHBvbHlnb24sIHBvbHlsaW5lLCByZWN0LCB0ZXh0IGFuZCB1c2UuCitzdGF0
aWMgYm9vbCBpc0dyYXBoaWNzRWxlbWVudChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikK
K3sKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNTVkdTaGFwZSgpIHx8IHJlbmRlcmVyLmlzU1ZHVGV4
dCgpIHx8IHJlbmRlcmVyLmlzU1ZHSW1hZ2UoKSB8fCByZW5kZXJlci5lbGVtZW50KCktPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OnVzZVRhZyk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS5wb2lu
dGVyRXZlbnRzKCkgPT0gUG9pbnRlckV2ZW50czo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghaXNHcmFwaGljc0VsZW1lbnQoKnJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBkb3duY2FzdDxTVkdFbGVtZW50
PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKKyAgICBBU1NFUlQoaXM8U1ZHR3JhcGhpY3NFbGVtZW50
PihzdmdFbGVtZW50KSk7CisgICAgYXV0byBjdG0gPSBkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1l
bnQ+KCpzdmdFbGVtZW50KS5nZXRDVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRl
KTsKKyAgICByZXR1cm4gaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkocmVjdCwgY3RtLm1hcFJlY3Qo
cmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKK30KKworYm9vbCBS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tFbmNsb3N1cmUoUmVuZGVyRWxlbWVudCogcmVuZGVy
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRl
cmVyLT5zdHlsZSgpLnBvaW50ZXJFdmVudHMoKSA9PSBQb2ludGVyRXZlbnRzOjpOb25lKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0dyYXBoaWNzRWxlbWVudCgqcmVuZGVyZXIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IGRv
d25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOworICAgIEFTU0VSVChpczxT
VkdHcmFwaGljc0VsZW1lbnQ+KHN2Z0VsZW1lbnQpKTsKKyAgICBhdXRvIGN0bSA9IGRvd25jYXN0
PFNWR0dyYXBoaWNzRWxlbWVudD4oKnN2Z0VsZW1lbnQpLmdldENUTShTVkdMb2NhdGFibGU6OkRp
c2FsbG93U3R5bGVVcGRhdGUpOworICAgIHJldHVybiByZWN0LmNvbnRhaW5zKGN0bS5tYXBSZWN0
KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Cit9CisKK1BhdGgg
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbXB1dGVDbGlwUGF0aChBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXIoKS0+aGFzVHJhbnNmb3JtKCkpCisgICAg
ICAgIHRyYW5zZm9ybS5tdWx0aXBseShsYXllcigpLT5jdXJyZW50VHJhbnNmb3JtKFJlbmRlclN0
eWxlOjppbmRpdmlkdWFsVHJhbnNmb3JtT3BlcmF0aW9ucykudG9BZmZpbmVUcmFuc2Zvcm0oKSk7
CisKKyAgICByZXR1cm4gcGF0aEZyb21HcmFwaGljc0VsZW1lbnQoJmRvd25jYXN0PFNWR0dyYXBo
aWNzRWxlbWVudD4oZWxlbWVudCgpKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmFwcGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgT3B0aW9uU2V0
PFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+IG9wdGlvbnMpIGNvbnN0Cit7
CisgICAgVU5VU0VEX1BBUkFNKHRyYW5zZm9ybSk7CisgICAgVU5VU0VEX1BBUkFNKHN0eWxlKTsK
KyAgICBVTlVTRURfUEFSQU0oYm91bmRpbmdCb3gpOworICAgIFVOVVNFRF9QQVJBTShvcHRpb25z
KTsKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdl
cworICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5VHJhbnNmb3JtKCp0aGlzLCB0cmFuc2Zv
cm0sIHN0eWxlLCBib3VuZGluZ0JveCwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIG9wdGlv
bnMpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpwYWludFNWR091dGxpbmUoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBhaW50T2Zmc2V0
KQoreworICAgIHBhaW50T3V0bGluZShwYWludEluZm8sIExheW91dFJlY3QoYWRqdXN0ZWRQYWlu
dE9mZnNldCwgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKS5zaXplKCkpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2MxODhiM2YwNzAzMDRiODEzYjM0Nzg0YjM3ZDZm
MjhkOTAyZmJmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEgUy5MLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFt
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKy8vICNpbmNsdWRlICJTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1JlbmRl
clN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBNb3N0IHJlbmRlcmVycyBp
biB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlIHdpbGwgaW5oZXJpdCBmcm9tIHRoaXMgY2xhc3MKKy8v
IGJ1dCBub3QgYWxsLiBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LCBSZW5kZXJTVkdCbG9jaywgZXRj
LiBpbmhlcml0IGZyb20KKy8vIGV4aXN0aW5nIFJlbmRlckJsb2NrIGNsYXNzZXMsIHRoYXQgYWxs
IGluaGVyaXQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2JqZWN0CisvLyBkaXJlY3RseSwgd2l0aG91
dCBSZW5kZXJTVkdNb2RlbE9iamVjdCBpbmJldHdlZW4uIFRoZXJlZm9yZSBjb2RlIHdoaWNoCisv
LyBuZWVkcyB0byBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgU1ZHIHJlbmRlcmVycyBnb2VzIHRvIFJl
bmRlckxheWVyTW9kZWxPYmplY3QuCitjbGFzcyBTVkdFbGVtZW50OworCitjbGFzcyBSZW5kZXJT
VkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJMYXllck1vZGVsT2JqZWN0IHsKKyAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR01vZGVsT2JqZWN0KTsKK3B1YmxpYzoKKyAgICBi
b29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKSBvdmVycmlkZTsKKworICAgIHN0YXRpYyBib29sIGNoZWNrSW50ZXJzZWN0aW9u
KFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMgYm9vbCBjaGVj
a0VuY2xvc3VyZShSZW5kZXJFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7CisKKyAgICBTVkdF
bGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9k
ZUZvck5vbkFub255bW91cygpKTsgfQorCisgICAgLy8gRklYTUU6IFtMQlNFXSBNYXJrIGZpbmFs
LCBhZGQgYXBwbHlUcmFuc2Zvcm0gdG8gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdAorICAgIHZvaWQg
YXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJh
bnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisKKyAgICAvLyBNaW1pYyB0aGUgUmVuZGVy
Qm94IGFjY2Vzc29ycyAtIGJ5IHNoYXJpbmcgdGhlIHNhbWUgdGVybWlub2xvZ3kgdGhlIHBhaW50
aW5nIC8gaGl0IHRlc3RpbmcgLyBsYXlvdXQgbG9naWMgaXMKKyAgICAvLyBzaW1pbGFyIHRvIHJl
YWQgY29tcGFyZWQgdG8gbm9uLVNWRyByZW5kZXJlcnMgc3VjaCBhcyBSZW5kZXJCb3ggJiBmcmll
bmRzLgorICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJl
dHVybiB7IExheW91dFBvaW50KCksIG1fbGF5b3V0UmVjdC5zaXplKCkgfTsgfQorICAgIExheW91
dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyQm94
UmVjdEVxdWl2YWxlbnQoKTsgfQorICAgIExheW91dFJlY3QgZnJhbWVSZWN0RXF1aXZhbGVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQorCisgICAgTGF5b3V0UmVjdCB2aXN1YWxP
dmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAgICAvLyByZXR1
cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgq
dGhpcyk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisgICAgfQorCisgICAgdm9pZCBh
cHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQoTGF5b3V0UG9pbnQmIHBvaW50KSBj
b25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlvbigpKTsgfQorCisgICAgTGF5b3V0UmVj
dCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9CisgICAgdm9pZCBz
ZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheW91dFJlY3QpIHsgbV9sYXlvdXRSZWN0
ID0gbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0TGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0
UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0UmVjdC5zZXRMb2NhdGlvbihsYXlvdXRM
b2NhdGlvbik7IH0KKworICAgIExheW91dFBvaW50IHBhaW50aW5nTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0aW9uKCkgLSBmbG9vcmVkTGF5b3V0UG9p
bnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7IH0KKyAgICBMYXlvdXRQ
b2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlv
bigpOyB9CisgICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2NhdGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9jYXRpb24oKSk7IH0KKyAgICBMYXlvdXRT
aXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3Quc2l6ZSgpOyB9CisK
KyAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAgIEZsb2F0UmVjdCBib3JkZXJCb3hSZWN0
SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBSZW5kZXJCb3g6
OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gUmVuZGVyQm94OjpDYWNoZVJlbmRlckJveEZy
YWdtZW50SW5mbykgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJl
Y3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciog
PSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kKSBj
b25zdDsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhjb25z
dCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVu
dCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSB7IHJldHVybiBvdmVy
Zmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsgfQorCisgICAgdmly
dHVhbCBQYXRoIGNvbXB1dGVDbGlwUGF0aChBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsKKworcHJv
dGVjdGVkOgorICAgIFJlbmRlclNWR01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmLCBSZW5kZXJTdHls
ZSYmKTsKKworICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB1
cGRhdGVGcm9tU3R5bGUoKSBvdmVycmlkZTsKKyAgICBib29sIHNob3VsZFBhaW50U1ZHUmVuZGVy
ZXIoY29uc3QgUGFpbnRJbmZvJikgY29uc3Q7CisKKyAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVy
Zmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwg
VmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6Om9wdGlvbmFsPExh
eW91dFJlY3Q+IGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3Qm
LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29u
dGV4dCkgY29uc3Q7CisgICAgdm9pZCBtYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChPcHRpb25TZXQ8
TWFwQ29vcmRpbmF0ZXNNb2RlPiwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
YW5jZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5h
dGVzTW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IG91dGxpbmVC
b3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKikgY29uc3QgZmluYWw7CisgICAgY29uc3Qg
UmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqLCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0IG92ZXJyaWRlOworICAgIExheW91
dFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBib29sKiBvZmZzZXREZXBlbmRzT25Qb2ludCA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBj
b25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCogcGFpbnRDb250YWluZXIgPSAwKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhaW50U1ZH
T3V0bGluZShQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgYWRqdXN0ZWRQYWludE9mZnNl
dCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgTGF5b3V0UmVjdCBtX2xheW91dFJlY3Q7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVO
REVSX09CSkVDVChSZW5kZXJTVkdNb2RlbE9iamVjdCwgaXNSZW5kZXJTVkdNb2RlbE9iamVjdCgp
KQorCisjZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCg==
</data>
<flag name="commit-queue"
          id="473556"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447819</attachid>
            <date>2021-12-22 11:11:15 -0800</date>
            <delta_ts>2021-12-23 02:09:59 -0800</delta_ts>
            <desc>Patch, v4</desc>
            <filename>bug-234524-20211222111114.patch</filename>
            <type>text/plain</type>
            <size>39582</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmZmNDg5OTEyMGI2ODU1
MmZlOTNhYTVmYjIxODBmOTBiMjU4YWZjZS4uMTk1ZmNlMGRiNzVhZWIyYjQ1NzUyOGRiYTJjZDBm
NWYyY2FiZTNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMyBAQAorMjAyMS0xMi0yMiAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGlt
cGxlbWVudGluZyBSZW5kZXJTVkdNb2RlbE9iamVjdCAtIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0
IGdyYXBoaWNzCisgICAgICAgIHByaW1pdGl2ZXMgaW4gU1ZHIChwYXRoIC8gcmVjdCAvIGNpcmNs
ZSAvIGltYWdlIC8gLi4uKSBmb3IgdGhlIExCU0UuCisKKyAgICAgICAgSW4gdGhlIGxlZ2FjeSBl
bmdpbmUsIFJlbmRlclNWR0ltYWdlIC8gUmVuZGVyU1ZHU2hhcGUgLyBSZW5kZXJTVkdDb250YWlu
ZXIgaW5oZXJpdAorICAgICAgICBmcm9tIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LCB3aGlj
aCBpbiB0dXJuIGluaGVyaXRzIGZyb20gUmVuZGVyRWxlbWVudC4gVGhlIFNWRworICAgICAgICA8
dGV4dD4gLyA8Zm9yZWlnbk9iamVjdD4gcmVuZGVyZXJzIGluaGVyaXQgZnJvbSB0aGVpciBleGlz
dGluZyAiSFRNTCBjb3VudGVycGFydHMiCisgICAgICAgIGUuZy4gUmVuZGVyU1ZHQmxvY2sgZnJv
bSBSZW5kZXJCbG9ja0Zsb3csIG9yIFJlbmRlclNWR0lubGluZSBmcm9tIFJlbmRlcklubGluZS4K
KworICAgICAgICBUaGlzIGhhcyBoaXN0b3JpY2FsIHJlYXNvbnM6IFdoZW4gU1ZHIHRleHQgcmVu
ZGVyaW5nIHdhcyBwcm90b3R5cGVkIGluIFdlYkNvcmUsIGEgZ29hbCB3YXMgdG8KKyAgICAgICAg
cmUtdXNlIHRoZSBleGlzdGluZyBIVE1ML0NTUyB0ZXh0IHJlbmRlcmluZyBjb2RlIHdoZW5ldmVy
IHBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIFNWRyB0ZXh0CisgICAgICAgIHJlbmRlcmVycyB3ZXJl
IG1vZGVsbGVkIGluIHRoZSB0ZXJtaW5vbG9neSBvZiBIVE1ML0NTUzogQSBuYXR1cmFsIGNob2lj
ZSBpcyB0byB0cmVhdCBhIFNWRworICAgICAgICA8dGV4dD4gZWxlbWVudCBhcyBhIENTUyAiYmxv
Y2stbGV2ZWwgZWxlbWVudCIgYW5kIDx0c3Bhbj4gLyA8dGV4dFBhdGg+IC8gPHRyZWY+IC8gLi4u
CisgICAgICAgIGVsZW1lbnRzIGFzIENTUyAiaW5saW5lIGVsZW1lbnRzIi4gVGhlc2UgZGVzaWdu
IGNob2ljZXMgZnJvbSBhbG1vc3QgdHdvIGRlY2FkZXMgYWdvLCBhcmUKKyAgICAgICAgdGhlIHJl
YXNvbiBmb3IgdGhlIHVubmVjZXNzYXJ5IGNvbmZ1c2luZyBTVkcgaW5oZXJpdGFuY2Ugc3RydWN0
dXJlLiBGdXJ0aGVybW9yZSB3ZSBleHBsaWNpdGx5CisgICAgICAgIGRpc2FibGUgbGF5ZXIgc3Vw
cG9ydCBpbiBhbGwgU1ZHIGNsYXNzZXMgdGhhdCBpbmRpcmVjdGx5IGluaGVyaXQgZnJvbSBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LgorCisgICAgICAgIEhvd2V2ZXIgZm9yIExCU0Ugd2UgZG8gd2Fu
dCBTVkcgdG8gcGFydGljaXBhdGUgaW4gdGhlIGxheWVyIHRyZWUuCisgICAgICAgIFRoZXJlZm9y
ZSBsZXQgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuIFRoaXMgdHVybnMKKyAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbnRvIHRo
ZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMgaW4gTEJTRS4KKworICAg
ICAgICBUaGUgcHJpY2UgZm9yIHRoZSBsYXllciBzdXBwb3J0IGlzIHRoYXQgYWxsIFNWRyByZW5k
ZXJlcnMgbmVlZCB0byBiZSBhYmxlIHRvIGFuc3dlciBxdWVzdGlvbnMKKyAgICAgICAgaW4gSFRN
TC9DU1MgbGFuZ3VhZ2UgKHdoYXQncyB5b3VyICdib3JkZXIgYm94IHJlY3QnPyBkbyB5b3UgaGF2
ZSB2aXN1YWwgb3ZlcmZsb3c/IGV0Yy4pLgorICAgICAgICBGaW5kaW5nIGNvbnNpc3RlbnQgZGVm
aW5pdGlvbnMvbWFwcGluZ3Mgd2FzIGEgdGVkaW91cyBqb2IsIHRoYXQgaXMgZnVsbHkgc29sdmVk
IGluIExCU0UgYW5kCisgICAgICAgIHdpbGwgYmUgdXBzdHJlYW1lZCBpbiBwaWVjZXMuIFRoaXMg
cGF0Y2ggaXMgb25lIG1haW4gcGllY2Ugb2YgdGhlIHdvcmsuCisKKyAgICAgICAgSWYgd2UgZm9y
Z2V0IGFib3V0IHRoZSBsZWdhY3kgZW5naW5lLCB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlIG5v
dyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgKyBSZW5kZXJPYmplY3QKKyAg
ICAgICAgICAgICsgUmVuZGVyRWxlbWVudAorICAgICAgICAgICAgfCAgICArIFJlbmRlckxheWVy
TW9kZWxPYmplY3QKKyAgICAgICAgICAgIHwgICAgICAgICsgUmVuZGVyQm94TW9kZWxPYmplY3QK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgKyBSZW5kZXJCb3gKKyAgICAgICAgICAgIHwgICAg
ICAgIHwgICAgfCAgICArIFJlbmRlclJlcGxhY2VkIChDU1MgInJlcGxhY2VkIiBlbGVtZW50cykK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUm9vdCAob3V0
ZXJtb3N0IDxzdmc+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgfAor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyQmxvY2sgKENTUyAiYmxvY2st
bGV2ZWwiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICArIFJl
bmRlckJsb2NrRmxvdworICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICAgKyBS
ZW5kZXJTVkdCbG9jayAoSFRNTC9TVkcgZ2x1ZSBjb2RlKQorICAgICAgICAgICAgfCAgICAgICAg
fCAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCAoPGZvcmVpZ25P
YmplY3Q+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgICAg
ICAgKyBSZW5kZXJTVkdUZXh0ICg8dGV4dD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAg
IHwgICAgfAorICAgICAgICAgICAgfCAgICAgICAgfCAgICArIFJlbmRlcklubGluZSAoQ1NTICJp
bmxpbmUiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgKyBSZW5kZXJT
VkdJbmxpbmUgKEhUTUwvU1ZHIGdsdWUgY29kZSkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAg
ICAgICAgICArIFJlbmRlclNWR1RTcGFuICg8dHNwYW4+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdUZXh0UGF0aCAoPHRleHRQYXRoPiBlbGVt
ZW50KQorICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgKyBSZW5k
ZXJTVkdNb2RlbE9iamVjdAorICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHQ29u
dGFpbmVyCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICArIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lciAoPGRlZnM+IC8gPGc+IHdpdGggJ2Rpc3BsYXk6IG5vbmUnIC8gPHN5bWJvbD4gZWxl
bWVudHMpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyICg8Y2xpcFBhdGg+IGVsZW1lbnQpCisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyICg8
ZmlsdGVyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAg
KyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZQorICAgICAgICAgICAgfCAgICAgICAg
ICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50CisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICB8ICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCAoPGxpbmVhckdyYWRpZW50PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAg
ICAgICAgIHwgICAgfCAgICAgICAgfCAgICArIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQgKDxyYWRpYWxHcmFkaWVudD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8
ICAgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIgKDxtYXJrZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlTWFza2VyICg8bWFz
a2VyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gKDxwYXR0ZXJuPiBlbGVtZW50KQorICAgICAgICAgICAg
fCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IK
KyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAg
ICB8ICAgICsgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciAoPGE+IC8gPGc+IC8gPHN3
aXRjaD4gLyA8dXNlPiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAg
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdJbWFnZSAoPGltYWdlPiBlbGVtZW50KQor
ICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHU2hhcGUgKDxyZWN0PiAvIDxjaXJj
bGU+IC8gPHBhdGg+IC4uLiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
KyBSZW5kZXJTVkdFbGxpcHNlCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVy
U1ZHUGF0aAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICArIFJlbmRlclNWR1JlY3QKKyAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICsgUmVuZGVyVGV4dCAoI3RleHQgbm9kZXMgaW4gSFRN
TCkKKyAgICAgICAgICAgICAgICArIFJlbmRlclNWR0lubGluZVRleHQgKCN0ZXh0IG5vZGVzIGlu
IFNWRykKKworICAgICAgICBUaGlzIGlzIHdheSBsZXNzIGNvbmZ1c2luZyB0aGVuIHRoZSBwcmV2
aW91cyB2ZXJzaW9uIG9mIHRoZSBTVkcgcmVuZGVyIHRyZWUuCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdD
b250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6bWFwTG9jYWxUb1NWR0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFic29sdXRlUXVhZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvZmZzZXRGcm9t
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6c2hvdWxkUGFpbnRTVkdSZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpp
bnRlcnNlY3RzQWxsb3dpbmdFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRl
cnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNr
RW5jbG9zdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb21w
dXRlQ2xpcFBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmFwcGx5VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01v
ZGVsT2JqZWN0OjpwYWludFNWR091dGxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6ZWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdN
b2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEVxdWl2YWxlbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbnRlbnRCb3hSZWN0RXF1aXZhbGVudCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6ZnJhbWVSZWN0RXF1
aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6
dmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRM
YXlvdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpzZXRM
YXlvdXRMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6
cGFpbnRpbmdMb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6bGF5b3V0TG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmxheW91dExvY2F0aW9uT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpsYXlvdXRTaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRM
YXllcnMpOgorCiAyMDIxLTEyLTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbOmhhcygpIHBzZXVkby1jbGFzc10gOmhhcygpIHNlbGVjdG9yIGludmFsaWRh
dGlvbiBpc3N1ZSB3aXRoIHRvZ2dsaW5nIDpjaGVja2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGJkNWE3
NDc5Y2IzOWU0NmNjOTEwNDAwZjRlZTM4NDkzMjRjNzUzMWYuLjYxZTJiOWRlYzZlMzI3ZmZiYWIz
ODM2ZDEyY2I5NDcxMDJkZTg2MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNDc3LDYgKzI0NzcsNyBA
QCByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAK
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKK3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1JlY3QuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDgyM2ZkNjc0Mzk4NWQ2MzM3YjVjOTdiN2Q1YzlmNDdiYWZmZDYxZjIu
LjAwZTIyNGJhMjhiOWVlNzNjOTg4N2IwZGQ3YzU2ZjE1OTI4Mjc0MWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyNDMsNiAr
MTI0Myw3IEBACiAJCTQzNjcwOEM3MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQzNjcwODg4MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCAq
LzsgfTsKIAkJNDM2NzA4QzkxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4QTEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLzsgfTsKIAkJNDM2NzA4Q0IxMkQ5Q0E0
QjAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQg
LyogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKKwkJNDM2NzBDOTM0MkQ5QkM0
QjAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhGRDEyRDlDQTRBMDAwMzIxMTQgLyogUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCAqLzsgfTsKIAkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MzY3MDg4RTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2Uu
aCAqLzsgfTsKIAkJNDM2NzA4Q0YxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDM2NzA4OTAxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oICov
OyB9OwogCQk0MzY3MDhEMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQz
NjcwODkyMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oICov
OyB9OwpAQCAtODk3OCw2ICs4OTc5LDggQEAKIAkJNDM2NzA4ODgxMkQ5Q0E0QTAwMDQ0MjM0IC8q
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDM2NzA4ODkxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0ltYWdlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0ltYWdlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4OEExMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJl
bmRlclNWR0ltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNW
R0ltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzNjcwODhEMzRFOUNBNEEw
MDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzNjcwOEZEMTJEOUNBNEEwMDAzMjExNCAvKiBSZW5kZXJTVkdNb2Rl
bE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdNb2Rl
bE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4QjEyRDlDQTRB
MDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4QzEyRDlDQTRBMDAwNDQyMzQgLyog
TGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDM2NzA4OEQxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4OTIwLDYgKzE4OTIzLDggQEAK
IAkJCQlDREY3NDdFODI3MEY2Q0FFMDA4RkVFRUMgLyogUmVuZGVyU1ZHSW5saW5lSW5saW5lcy5o
ICovLAogCQkJCTA4NTRCMDA0MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcCAqLywKIAkJCQkwODU0QjAwNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5l
VGV4dC5oICovLAorCQkJCTQzNjcwODhEMzRFOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAgKi8sCisJCQkJNDM2NzA4RkQxMkQ5Q0E0QTAwMDMyMTE0IC8qIFJlbmRlclNW
R01vZGVsT2JqZWN0LmggKi8sCiAJCQkJQURERjFBRDQxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRl
clNWR1BhdGguY3BwICovLAogCQkJCUFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJT
VkdQYXRoLmggKi8sCiAJCQkJQTEwQkI1ODIxNDg0RTNBNzAwQjJFODdBIC8qIFJlbmRlclNWR1Jl
Y3QuY3BwICovLApAQCAtMzY3MDMsNiArMzY3MDgsNyBAQAogCQkJCTA4NTRCMDE1MTI1NUU0RTYw
MEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjc0N0U5
MjcwRjZDQUUwMDhGRUVFQyAvKiBSZW5kZXJTVkdJbmxpbmVJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwODU0QjAxNzEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNDM2NzBDOTM0MkQ5QkM0QjAwMDQ0MjM0IC8qIFJlbmRlclNW
R01vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERGMUFENzEyNTdDRDlBMDAwM0E3
NTkgLyogUmVuZGVyU1ZHUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEwQkI1ODUxNDg0RTNB
NzAwQjJFODdBIC8qIFJlbmRlclNWR1JlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOENE
MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5j
cHAKaW5kZXggZjI5NTA0YTJmMzJlODVhZDU4MzI3ZjY2YTM0YjE5MTI4YjZkNjg3OC4uOGQ5OTBm
MWQ1MzFiZTYzZjJiMjVkMDYxNDVmYjEzMWM0MTAwNzI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtMjksOSArMjks
MTEgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgi
CisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2lu
dHMuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyOSw1ICsyMzEsOTIgQEAg
dm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNU
aW1lIHRpbWUpCiAgICAgbGF5ZXIoKS0+YmFja2luZygpLT5zdXNwZW5kQW5pbWF0aW9ucyh0aW1l
KTsKIH0KIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorc3RkOjpvcHRpb25h
bDxMYXlvdXRSZWN0PiBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJ
blNWR0NvbnRhaW5lcihjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiBjb250YWluZXIsIFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0IGNv
bnRleHQpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJTVkdC
bG9jayBjaGFuZ2VzCisgICAgLy8gQVNTRVJUKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0Pih0aGlz
KSB8fCBpczxSZW5kZXJTVkdCbG9jaz4odGhpcykpOworICAgIEFTU0VSVChpczxSZW5kZXJTVkdN
b2RlbE9iamVjdD4odGhpcykpOworCisgICAgQVNTRVJUKCFzdHlsZSgpLmhhc0luRmxvd1Bvc2l0
aW9uKCkpOworICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5p
c1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOworCisgICAgaWYgKGNvbnRhaW5lciA9PSB0aGlz
KQorICAgICAgICByZXR1cm4gcmVjdDsKKworICAgIGJvb2wgY29udGFpbmVySXNTa2lwcGVkOwor
ICAgIGF1dG8qIGxvY2FsQ29udGFpbmVyID0gdGhpcy0+Y29udGFpbmVyKGNvbnRhaW5lciwgY29u
dGFpbmVySXNTa2lwcGVkKTsKKyAgICBpZiAoIWxvY2FsQ29udGFpbmVyKQorICAgICAgICByZXR1
cm4gcmVjdDsKKworICAgIEFTU0VSVF9VTlVTRUQoY29udGFpbmVySXNTa2lwcGVkLCAhY29udGFp
bmVySXNTa2lwcGVkKTsKKworICAgIExheW91dFJlY3QgYWRqdXN0ZWRSZWN0ID0gcmVjdDsKKwor
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCBjaGFu
Z2VzCisgICAgLy8gTW92ZSB0byBvcmlnaW4gb2YgbG9jYWwgY29vcmRpbmF0ZSBzeXN0ZW0sIGlm
IHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gY29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIo
KSBvcmlnaW5hdGluZworICAgIC8vIGZyb20gYSBTVkcgcmVuZGVyZXIgKFJlbmRlclNWR01vZGVs
T2JqZWN0IC8gUmVuZGVyU1ZHQmxvY2spIG9yIGlmIHdlIGNyb3NzIHRoZSBib3VuZGFyeSBmcm9t
IEhUTUwgLT4gU1ZHIHZpYSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LgorICAgIC8vIGJvb2wgbW92
ZVRvT3JpZ2luID0gaXM8UmVuZGVyU1ZHRm9yZWlnbk9iamVjdD4ocmVuZGVyZXIpOworICAgIGJv
b2wgbW92ZVRvT3JpZ2luID0gZmFsc2U7CisKKyAgICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFt
IFJlbmRlck9iamVjdCBjaGFuZ2VzCisgICAgaWYgKGNvbnRleHQub3B0aW9ucy5jb250YWlucyhS
ZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6VHJhbnNsYXRlVG9TVkdSZW5k
ZXJlck9yaWdpbikpIHsKKyAgICAgICAgY29udGV4dC5vcHRpb25zLnJlbW92ZShSZW5kZXJPYmpl
Y3Q6OlZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6VHJhbnNsYXRlVG9TVkdSZW5kZXJlck9yaWdp
bik7CisgICAgICAgIG1vdmVUb09yaWdpbiA9IHRydWU7CisgICAgfQorICAgICovCisKKyAgICBp
ZiAobW92ZVRvT3JpZ2luKQorICAgICAgICBhZGp1c3RlZFJlY3QubW92ZUJ5KGZsb29yZWRMYXlv
dXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpKTsKKworICAgIGlm
IChhdXRvKiB0cmFuc2Zvcm0gPSBsYXllcigpLT50cmFuc2Zvcm0oKSkKKyAgICAgICAgYWRqdXN0
ZWRSZWN0ID0gdHJhbnNmb3JtLT5tYXBSZWN0KGFkanVzdGVkUmVjdCk7CisKKyAgICByZXR1cm4g
bG9jYWxDb250YWluZXItPmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGFkanVzdGVkUmVj
dCwgY29udGFpbmVyLCBjb250ZXh0KTsKK30KKwordm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
OjptYXBMb2NhbFRvU1ZHQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFu
Y2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUsIE9wdGlvblNl
dDxNYXBDb29yZGluYXRlc01vZGU+IG1vZGUsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZHQmxvY2sgY2hhbmdlcworICAgIC8v
IEFTU0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykgfHwgaXM8UmVuZGVyU1ZHQmxv
Y2s+KHRoaXMpKTsKKyAgICBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHRoaXMpKTsK
KyAgICBBU1NFUlQoc3R5bGUoKS5wb3NpdGlvbigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljKTsK
KworICAgIGlmIChhbmNlc3RvckNvbnRhaW5lciA9PSB0aGlzKQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9m
ZnNldENhY2hlRW5hYmxlZCgpKTsKKworICAgIGJvb2wgYW5jZXN0b3JTa2lwcGVkOworICAgIGF1
dG8qIGNvbnRhaW5lciA9IHRoaXMtPmNvbnRhaW5lcihhbmNlc3RvckNvbnRhaW5lciwgYW5jZXN0
b3JTa2lwcGVkKTsKKyAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUX1VOVVNFRChhbmNlc3RvclNraXBwZWQsICFhbmNlc3RvclNraXBwZWQpOworCisgICAg
Ly8gSWYgdGhpcyBib3ggaGFzIGEgdHJhbnNmb3JtLCBpdCBhY3RzIGFzIGEgZml4ZWQgcG9zaXRp
b24gY29udGFpbmVyIGZvciBmaXhlZCBkZXNjZW5kYW50cywKKyAgICAvLyBhbmQgbWF5IGl0c2Vs
ZiBhbHNvIGJlIGZpeGVkIHBvc2l0aW9uLiBTbyBwcm9wYWdhdGUgJ2ZpeGVkJyB1cCBvbmx5IGlm
IHRoaXMgYm94IGlzIGZpeGVkIHBvc2l0aW9uLgorICAgIGlmIChoYXNUcmFuc2Zvcm0oKSkKKyAg
ICAgICAgbW9kZS5yZW1vdmUoSXNGaXhlZCk7CisKKyAgICBpZiAod2FzRml4ZWQpCisgICAgICAg
ICp3YXNGaXhlZCA9IG1vZGUuY29udGFpbnMoSXNGaXhlZCk7CisKKyAgICBhdXRvIGNvbnRhaW5l
ck9mZnNldCA9IG9mZnNldEZyb21Db250YWluZXIoKmNvbnRhaW5lciwgTGF5b3V0UG9pbnQodHJh
bnNmb3JtU3RhdGUubWFwcGVkUG9pbnQoKSkpOworCisgICAgYm9vbCBwcmVzZXJ2ZTNEID0gbW9k
ZSAmIFVzZVRyYW5zZm9ybXMgJiYgKGNvbnRhaW5lci0+c3R5bGUoKS5wcmVzZXJ2ZXMzRCgpIHx8
IHN0eWxlKCkucHJlc2VydmVzM0QoKSk7CisgICAgaWYgKG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYm
IHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyKSkgeworICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVy
KGNvbnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0KTsKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUu
YXBwbHlUcmFuc2Zvcm0odCwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRl
VHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgIH0gZWxz
ZQorICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9mZnNldC53aWR0aCgpLCBj
b250YWluZXJPZmZzZXQuaGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNj
dW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKwor
ICAgIG1vZGUucmVtb3ZlKEFwcGx5Q29udGFpbmVyRmxpcCk7CisKKyAgICBjb250YWluZXItPm1h
cExvY2FsVG9Db250YWluZXIoYW5jZXN0b3JDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCBtb2Rl
LCB3YXNGaXhlZCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRl
eCBkMTE4ZGM4MWE2YTdjNjBiYjQzYjI3MWM3MzViMjFkNjY5OGM4NzFlLi45YzMxNGFmYjEwZDhj
NWE3MDJhZmUyMDI2NTNmZGE3MDRiZGY2OGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKQEAgLTY3LDYgKzY3LDE2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSA9IE1vbm90b25p
Y1RpbWUoKSkgb3ZlcnJpZGU7CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
KyAgICAvLyBQcm92aWRlcyB0aGUgU1ZHIGltcGxlbWVudGF0aW9uIGZvciBjb21wdXRlVmlzaWJs
ZVJlY3RJbkNvbnRhaW5lcigpLgorICAgIC8vIFRoaXMgbGl2ZXMgaW4gUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCwgd2hpY2ggaXMgdGhlIGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgU1ZHIHJlbmRl
cmVycy4KKyAgICBzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IGNvbXB1dGVWaXNpYmxlUmVjdElu
U1ZHQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3Q7CisKKyAgICAvLyBQcm92
aWRlcyB0aGUgU1ZHIGltcGxlbWVudGF0aW9uIGZvciBtYXBMb2NhbFRvQ29udGFpbmVyKCkuCisg
ICAgLy8gVGhpcyBsaXZlcyBpbiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCB3aGljaCBpcyB0aGUg
Y29tbW9uIGJhc2UtY2xhc3MgZm9yIGFsbCBTVkcgcmVuZGVyZXJzLgorICAgIHZvaWQgbWFwTG9j
YWxUb1NWR0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNv
bnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwg
Ym9vbCogd2FzRml4ZWQpIGNvbnN0OworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBCYXNlVHlwZUZsYWdzKTsK
ICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KERvY3VtZW50JiwgUmVuZGVyU3R5bGUmJiwgQmFz
ZVR5cGVGbGFncyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYjcyYTJhNjcyNjkyNzM0YjkxMmQ0
N2RkMzU0NjE1YTRkN2I3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcApAQCAtMCwwICsxLDMwMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgorCisjaWYgRU5BQkxFKExBWUVSX0JB
U0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmplY3QuaCIKKyNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdMb2NhdGFibGUuaCIK
KyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhEYXRhLmgiCisjaW5jbHVk
ZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR01vZGVsT2JqZWN0KTsKKworUmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OlJlbmRlclNWR01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmIGVsZW1l
bnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCisgICAgOiBSZW5kZXJMYXllck1vZGVsT2JqZWN0KGVs
ZW1lbnQsIFdURk1vdmUoc3R5bGUpLCAwKQoreworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2Jq
ZWN0Ojp1cGRhdGVGcm9tU3R5bGUoKQoreworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnVw
ZGF0ZUZyb21TdHlsZSgpOworICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShzdHls
ZSgpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpKTsKKworICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm07CisgICAgaWYgKFJlbmRlck9iamVjdDo6bm9kZSgpICYmIGlzPFNWR0dyYXBo
aWNzRWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKSkKKyAgICAgICAgdHJhbnNmb3JtID0g
ZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpLmFuaW1h
dGVkTG9jYWxUcmFuc2Zvcm0oKTsKKworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVu
ZGVyT2JqZWN0IGNoYW5nZXMKKyAgICAvLyBpZiAoIXRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisg
ICAgLy8gICAgIHNldEhhc1NWR1RyYW5zZm9ybSgpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OmJvcmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJGcmFn
bWVudENvbnRhaW5lciosIFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3MpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGJvcmRlckJveFJlY3RFcXVpdmFsZW50KCk7Cit9CisKK0xheW91
dFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0
UG9pbnQmLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciosIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5LCBQYWludFBoYXNlKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Cit9CisKK0xheW91dFJlY3QgUmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUgJiYgIWVu
Y2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCisgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KCk7CisKKyAgICBBU1NFUlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0
KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsKKyAgICByZXR1cm4gY29tcHV0ZVJlY3Qo
dmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpLCByZXBhaW50Q29udGFpbmVyLCBjb250ZXh0
KTsKK30KKworc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCwgY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQg
Y29udGV4dCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250
YWluZXIocmVjdCwgY29udGFpbmVyLCBjb250ZXh0KTsKK30KKworY29uc3QgUmVuZGVyT2JqZWN0
KiBSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYg
Z2VvbWV0cnlNYXApIGNvbnN0Cit7CisgICAgQVNTRVJUKGFuY2VzdG9yVG9TdG9wQXQgIT0gdGhp
cyk7CisgICAgQVNTRVJUKHN0eWxlKCkucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlN0YXRp
Yyk7CisKKyAgICBib29sIGFuY2VzdG9yU2tpcHBlZDsKKyAgICBSZW5kZXJFbGVtZW50KiBjb250
YWluZXIgPSB0aGlzLT5jb250YWluZXIoYW5jZXN0b3JUb1N0b3BBdCwgYW5jZXN0b3JTa2lwcGVk
KTsKKyAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBB
U1NFUlRfVU5VU0VEKGFuY2VzdG9yU2tpcHBlZCwgIWFuY2VzdG9yU2tpcHBlZCk7CisKKyAgICBi
b29sIG9mZnNldERlcGVuZHNPblBvaW50ID0gZmFsc2U7CisgICAgTGF5b3V0U2l6ZSBjb250YWlu
ZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKCpjb250YWluZXIsIExheW91dFBvaW50KCks
ICZvZmZzZXREZXBlbmRzT25Qb2ludCk7CisKKyAgICBib29sIHByZXNlcnZlM0QgPSBjb250YWlu
ZXItPnN0eWxlKCkucHJlc2VydmVzM0QoKSB8fCBzdHlsZSgpLnByZXNlcnZlczNEKCk7CisgICAg
aWYgKHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyKSAmJiAoZ2VvbWV0
cnlNYXAubWFwQ29vcmRpbmF0ZXNGbGFncygpICYgVXNlVHJhbnNmb3JtcykpIHsKKyAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5l
cihjb250YWluZXIsIGNvbnRhaW5lck9mZnNldCwgdCk7CisgICAgICAgIGdlb21ldHJ5TWFwLnB1
c2godGhpcywgdCwgcHJlc2VydmUzRCwgb2Zmc2V0RGVwZW5kc09uUG9pbnQsIGZhbHNlIC8qIGlz
Rml4ZWRQb3MgKi8sIGhhc1RyYW5zZm9ybSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2VvbWV0
cnlNYXAucHVzaCh0aGlzLCBjb250YWluZXJPZmZzZXQsIHByZXNlcnZlM0QsIG9mZnNldERlcGVu
ZHNPblBvaW50LCBmYWxzZSAvKiBpc0ZpeGVkUG9zICovLCBoYXNUcmFuc2Zvcm0oKSk7CisKKyAg
ICByZXR1cm4gY29udGFpbmVyOworfQorCitMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0
OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXApIGNv
bnN0Cit7CisgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlz
UGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CisKKyAgICBhdXRvIG91dGxpbmVCb3VuZHMgPSB2
aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCk7CisKKyAgICBpZiAocmVwYWludENvbnRhaW5l
ciAhPSB0aGlzKSB7CisgICAgICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQ7Cisg
ICAgICAgIGlmIChnZW9tZXRyeU1hcCkKKyAgICAgICAgICAgIGNvbnRhaW5lclJlbGF0aXZlUXVh
ZCA9IGdlb21ldHJ5TWFwLT5tYXBUb0NvbnRhaW5lcihvdXRsaW5lQm91bmRzLCByZXBhaW50Q29u
dGFpbmVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFk
ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KG91dGxpbmVCb3VuZHMpLCByZXBhaW50
Q29udGFpbmVyKTsKKworICAgICAgICBvdXRsaW5lQm91bmRzID0gTGF5b3V0UmVjdChjb250YWlu
ZXJSZWxhdGl2ZVF1YWQuYm91bmRpbmdCb3goKSk7CisgICAgfQorCisgICAgcmV0dXJuIG91dGxp
bmVCb3VuZHM7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KSBjb25zdAoreworICAgIHJlY3RzLmFwcGVuZChzbmFwcGVkSW50UmVjdChMYXlvdXRSZWN0
KGFjY3VtdWxhdGVkT2Zmc2V0ICsgbGF5b3V0TG9jYXRpb24oKSwgbGF5b3V0U2l6ZSgpKSkpOwor
fQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9h
dFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgcXVhZHMuYXBwZW5k
KGxvY2FsVG9BYnNvbHV0ZVF1YWQob2JqZWN0Qm91bmRpbmdCb3goKSwgVXNlVHJhbnNmb3Jtcywg
d2FzRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6d2lsbEJlRGVzdHJv
eWVkKCkKK3sKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50RGVzdHJveWVkKCp0aGlzKTsK
KyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRp
ZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICBSZW5kZXJMYXllck1vZGVs
T2JqZWN0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisKKyAgICAvLyBTVkcgbWFz
a3MgYXJlIHBhaW50ZWQgaW5kZXBlbmRlbnQgb2YgdGhlIHRhcmdldCByZW5kZXJlcnMgdmlzaWJp
bGl0eS4KKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlckVsZW1lbnQgY2hhbmdl
cworICAgIC8vIGJvb2wgaGFzU1ZHTWFzayA9IGhhc1NWR01hc2soKTsKKyAgICBib29sIGhhc1NW
R01hc2sgPSBmYWxzZTsKKyAgICBpZiAoaGFzU1ZHTWFzayAmJiBoYXNMYXllcigpICYmIHN0eWxl
KCkudmlzaWJpbGl0eSgpICE9IFZpc2liaWxpdHk6OlZpc2libGUpCisgICAgICAgIGxheWVyKCkt
PnNldEhhc1Zpc2libGVDb250ZW50KCk7CisKKyAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50
U3R5bGVDaGFuZ2VkKCp0aGlzLCBkaWZmLCBzdHlsZSgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoT3B0aW9uU2V0PE1hcENvb3JkaW5h
dGVzTW9kZT4gbW9kZSwgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAorewor
ICAgIEFTU0VSVChzdHlsZSgpLnBvc2l0aW9uKCkgPT0gUG9zaXRpb25UeXBlOjpTdGF0aWMpOwor
CisgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQorICAgICAgICBtb2RlLnJlbW92ZShJc0ZpeGVkKTsK
KworICAgIGF1dG8qIGNvbnRhaW5lciA9IHRoaXMtPnBhcmVudCgpOworICAgIGlmICghY29udGFp
bmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250YWluZXItPm1hcEFic29sdXRlVG9Mb2Nh
bFBvaW50KG1vZGUsIHRyYW5zZm9ybVN0YXRlKTsKKworICAgIExheW91dFNpemUgY29udGFpbmVy
T2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcigqY29udGFpbmVyLCBMYXlvdXRQb2ludCgpKTsK
KworICAgIGJvb2wgcHJlc2VydmUzRCA9IG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIChjb250YWlu
ZXItPnN0eWxlKCkucHJlc2VydmVzM0QoKSB8fCBzdHlsZSgpLnByZXNlcnZlczNEKCkpOworICAg
IGlmIChtb2RlICYgVXNlVHJhbnNmb3JtcyAmJiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFp
bmVyKGNvbnRhaW5lcikpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAg
ICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lck9mZnNldCwg
dCk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNmb3JtKHQsIHByZXNlcnZlM0Qg
PyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpG
bGF0dGVuVHJhbnNmb3JtKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92
ZShjb250YWluZXJPZmZzZXQud2lkdGgoKSwgY29udGFpbmVyT2Zmc2V0LmhlaWdodCgpLCBwcmVz
ZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1T
dGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
Om1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0
b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSwgT3B0aW9uU2V0PE1h
cENvb3JkaW5hdGVzTW9kZT4gbW9kZSwgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgbWFw
TG9jYWxUb1NWR0NvbnRhaW5lcihhbmNlc3RvckNvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIG1v
ZGUsIHdhc0ZpeGVkKTsKK30KKworTGF5b3V0U2l6ZSBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b2Zm
c2V0RnJvbUNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiBjb250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiwgYm9vbCopIGNvbnN0Cit7CisgICAgQVNTRVJUX1VOVVNFRChjb250YWluZXIsICZjb250
YWluZXIgPT0gdGhpcy0+Y29udGFpbmVyKCkpOworICAgIEFTU0VSVCghaXNJbkZsb3dQb3NpdGlv
bmVkKCkpOworICAgIEFTU0VSVCghaXNBYnNvbHV0ZWx5UG9zaXRpb25lZCgpKTsKKyAgICBBU1NF
UlQoaXNJbmxpbmUoKSk7CisgICAgcmV0dXJuIExheW91dFNpemUoKTsKK30KKwordm9pZCBSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiBy
ZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQsIGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqKQoreworICAgIGF1dG8gcmVwYWludEJvdW5kaW5nQm94ID0gZW5jbG9z
aW5nTGF5b3V0UmVjdCh0aGlzLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAg
ICBpZiAocmVwYWludEJvdW5kaW5nQm94LnNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCByZXBhaW50
Qm91bmRpbmdCb3guc2l6ZSgpKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNo
b3VsZFBhaW50U1ZHUmVuZGVyZXIoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFwYWludEluZm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSk7CisK
KyAgICBpZiAoKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpGb3JlZ3JvdW5kICYmIHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpDbGlwcGluZ01hc2sgJiYgcGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2U6Ok1hc2sgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6
Ok91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGZPdXRsaW5lKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRX
aXRoaW5Sb290KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0eWxl
KCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OkhpZGRlbiB8fCBzdHlsZSgpLmRpc3BsYXko
KSA9PSBEaXNwbGF5VHlwZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKKy8vIEZsb2F0UmVjdDo6aW50ZXJzZWN0cyBkb2VzIG5vdCBjb25zaWRl
ciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGxpbmVzIChiZWNhdXNlIG9mIGlzRW1wdHkoKSkuCisv
LyBTbyBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgb2Ygc3VjaCBsaW5lcy4KK3N0YXRpYyBib29sIGlu
dGVyc2VjdHNBbGxvd2luZ0VtcHR5KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0
JiBvdGhlcikKK3sKKyAgICBpZiAoci5pc0VtcHR5KCkgJiYgb3RoZXIuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHIuaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAob3RoZXIuY29udGFpbnMoci54KCksIHIueSgpKSAmJiAhb3Ro
ZXIuY29udGFpbnMoci5tYXhYKCksIHIubWF4WSgpKSkgfHwgKCFvdGhlci5jb250YWlucyhyLngo
KSwgci55KCkpICYmIG90aGVyLmNvbnRhaW5zKHIubWF4WCgpLCByLm1heFkoKSkpOworICAgIGlm
IChvdGhlci5pc0VtcHR5KCkgJiYgIXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gaW50ZXJz
ZWN0c0FsbG93aW5nRW1wdHkob3RoZXIsIHIpOworICAgIHJldHVybiByLmludGVyc2VjdHMob3Ro
ZXIpOworfQorCisvLyBPbmUgb2YgdGhlIGVsZW1lbnQgdHlwZXMgdGhhdCBjYW4gY2F1c2UgZ3Jh
cGhpY3MgdG8gYmUgZHJhd24gb250byB0aGUgdGFyZ2V0IGNhbnZhcy4gU3BlY2lmaWNhbGx5OiBj
aXJjbGUsIGVsbGlwc2UsCisvLyBpbWFnZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUs
IHJlY3QsIHRleHQgYW5kIHVzZS4KK3N0YXRpYyBib29sIGlzR3JhcGhpY3NFbGVtZW50KGNvbnN0
IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQoreworICAgIHJldHVybiByZW5kZXJlci5pc1NWR1No
YXBlKCkgfHwgcmVuZGVyZXIuaXNTVkdUZXh0KCkgfHwgcmVuZGVyZXIuaXNTVkdJbWFnZSgpIHx8
IHJlbmRlcmVyLmVsZW1lbnQoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dXNlVGFnKTsKK30KKwor
Ym9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNlY3Rpb24oUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlbmRlcmVy
IHx8IHJlbmRlcmVyLT5zdHlsZSgpLnBvaW50ZXJFdmVudHMoKSA9PSBQb2ludGVyRXZlbnRzOjpO
b25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0dyYXBoaWNzRWxlbWVudCgq
cmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxl
bWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOworICAgIEFT
U0VSVChpczxTVkdHcmFwaGljc0VsZW1lbnQ+KHN2Z0VsZW1lbnQpKTsKKyAgICBhdXRvIGN0bSA9
IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKnN2Z0VsZW1lbnQpLmdldENUTShTVkdMb2Nh
dGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOworICAgIHJldHVybiBpbnRlcnNlY3RzQWxsb3dp
bmdFbXB0eShyZWN0LCBjdG0ubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSkpOworfQorCitib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0VuY2xv
c3VyZShSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkucG9pbnRlckV2ZW50cygpID09
IFBvaW50ZXJFdmVudHM6Ok5vbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWlz
R3JhcGhpY3NFbGVtZW50KCpyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBT
VkdFbGVtZW50KiBzdmdFbGVtZW50ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVs
ZW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPFNWR0dyYXBoaWNzRWxlbWVudD4oc3ZnRWxlbWVudCkp
OworICAgIGF1dG8gY3RtID0gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50Pigqc3ZnRWxlbWVu
dCkuZ2V0Q1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgcmV0dXJu
IHJlY3QuY29udGFpbnMoY3RtLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkpKTsKK30KKworUGF0aCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y29tcHV0ZUNs
aXBQYXRoKEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSBjb25zdAoreworICAgIGlmIChsYXll
cigpLT5oYXNUcmFuc2Zvcm0oKSkKKyAgICAgICAgdHJhbnNmb3JtLm11bHRpcGx5KGxheWVyKCkt
PmN1cnJlbnRUcmFuc2Zvcm0oUmVuZGVyU3R5bGU6OmluZGl2aWR1YWxUcmFuc2Zvcm1PcGVyYXRp
b25zKS50b0FmZmluZVRyYW5zZm9ybSgpKTsKKworICAgIHJldHVybiBwYXRoRnJvbUdyYXBoaWNz
RWxlbWVudCgmZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50PihlbGVtZW50KCkpKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlv
bk9wdGlvbj4gb3B0aW9ucykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0odHJhbnNmb3JtKTsK
KyAgICBVTlVTRURfUEFSQU0oc3R5bGUpOworICAgIFVOVVNFRF9QQVJBTShib3VuZGluZ0JveCk7
CisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJl
YW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6YXBw
bHlUcmFuc2Zvcm0oKnRoaXMsIHRyYW5zZm9ybSwgc3R5bGUsIGJvdW5kaW5nQm94LCBzdGQ6Om51
bGxvcHQsIHN0ZDo6bnVsbG9wdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxP
YmplY3Q6OnBhaW50U1ZHT3V0bGluZShQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIGFkanVzdGVkUGFpbnRPZmZzZXQpCit7CisgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5m
bywgTGF5b3V0UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LCByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpLnNpemUoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OThj
Nzg2ZDI4YTZhY2ZjYTlmNjkzOGE1YzAyN2ZkYWE4NGQzYmFmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCkBAIC0w
LDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyTW9kZWxPYmplY3QuaCIKKy8v
IEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorLy8gI2lu
Y2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIE1vc3QgcmVuZGVyZXJzIGluIHRoZSBTVkcgcmVuZGVyaW5nIHRyZWUgd2lsbCBpbmhl
cml0IGZyb20gdGhpcyBjbGFzcworLy8gYnV0IG5vdCBhbGwuIFJlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QsIFJlbmRlclNWR0Jsb2NrLCBldGMuIGluaGVyaXQgZnJvbQorLy8gZXhpc3RpbmcgUmVuZGVy
QmxvY2sgY2xhc3NlcywgdGhhdCBhbGwgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QKKy8vIGRpcmVjdGx5LCB3aXRob3V0IFJlbmRlclNWR01vZGVsT2JqZWN0IGluYmV0d2Vlbi4g
VGhlcmVmb3JlIGNvZGUgd2hpY2gKKy8vIG5lZWRzIHRvIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCBT
VkcgcmVuZGVyZXJzIGdvZXMgdG8gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC4KK2NsYXNzIFNWR0Vs
ZW1lbnQ7CisKK2NsYXNzIFJlbmRlclNWR01vZGVsT2JqZWN0IDogcHVibGljIFJlbmRlckxheWVy
TW9kZWxPYmplY3QgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUmVuZGVyU1ZHTW9kZWxP
YmplY3QpOworcHVibGljOgorICAgIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOworCisgICAgc3RhdGlj
IGJvb2wgY2hlY2tJbnRlcnNlY3Rpb24oUmVuZGVyRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHN0YXRpYyBib29sIGNoZWNrRW5jbG9zdXJlKFJlbmRlckVsZW1lbnQqLCBjb25zdCBG
bG9hdFJlY3QmKTsKKworICAgIFNWR0VsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxTVkdFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CisKKyAgICAvLyBG
SVhNRTogW0xCU0VdIE1hcmsgZmluYWwsIGFkZCBhcHBseVRyYW5zZm9ybSB0byBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0CisgICAgdm9pZCBhcHBseVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgT3B0
aW9uU2V0PFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb24+KSBjb25zdDsKKwor
ICAgIC8vIE1pbWljIHRoZSBSZW5kZXJCb3ggYWNjZXNzb3JzIC0gYnkgc2hhcmluZyB0aGUgc2Ft
ZSB0ZXJtaW5vbG9neSB0aGUgcGFpbnRpbmcgLyBoaXQgdGVzdGluZyAvIGxheW91dCBsb2dpYyBp
cworICAgIC8vIHNpbWlsYXIgdG8gcmVhZCBjb21wYXJlZCB0byBub24tU1ZHIHJlbmRlcmVycyBz
dWNoIGFzIFJlbmRlckJveCAmIGZyaWVuZHMuCisgICAgTGF5b3V0UmVjdCBib3JkZXJCb3hSZWN0
RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIHsgTGF5b3V0UG9pbnQoKSwgbV9sYXlvdXRSZWN0
LnNpemUoKSB9OyB9CisgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdEVxdWl2YWxlbnQoKSBj
b25zdCB7IHJldHVybiBib3JkZXJCb3hSZWN0RXF1aXZhbGVudCgpOyB9CisgICAgTGF5b3V0UmVj
dCBmcmFtZVJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0OyB9CisK
KyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uCisgICAgICAgIC8vIHJldHVybiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uOjpjb21w
dXRlVmlzdWFsT3ZlcmZsb3dSZWN0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3Qo
KTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0RXF1aXZhbGVu
dChMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcG9pbnQubW92ZUJ5KGxheW91dExvY2F0aW9u
KCkpOyB9CisKKyAgICBMYXlvdXRSZWN0IGxheW91dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2xh
eW91dFJlY3Q7IH0KKyAgICB2b2lkIHNldExheW91dFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5
b3V0UmVjdCkgeyBtX2xheW91dFJlY3QgPSBsYXlvdXRSZWN0OyB9CisgICAgdm9pZCBzZXRMYXlv
dXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYgbGF5b3V0TG9jYXRpb24pIHsgbV9sYXlvdXRS
ZWN0LnNldExvY2F0aW9uKGxheW91dExvY2F0aW9uKTsgfQorCisgICAgTGF5b3V0UG9pbnQgcGFp
bnRpbmdMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRvTGF5b3V0UG9pbnQobGF5b3V0TG9jYXRp
b24oKSAtIGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29y
bmVyKCkpKTsgfQorICAgIExheW91dFBvaW50IGxheW91dExvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9sYXlvdXRSZWN0LmxvY2F0aW9uKCk7IH0KKyAgICBMYXlvdXRTaXplIGxheW91dExvY2F0
aW9uT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gdG9MYXlvdXRTaXplKG1fbGF5b3V0UmVjdC5sb2Nh
dGlvbigpKTsgfQorICAgIExheW91dFNpemUgbGF5b3V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5b3V0UmVjdC5zaXplKCk7IH0KKworICAgIC8vIEZvciBSZW5kZXJMYXllciBvbmx5CisgICAg
RmxvYXRSZWN0IGJvcmRlckJveFJlY3RJbkZyYWdtZW50RXF1aXZhbGVudChSZW5kZXJGcmFnbWVu
dENvbnRhaW5lciosIFJlbmRlckJveDo6UmVuZGVyQm94RnJhZ21lbnRJbmZvRmxhZ3MgPSBSZW5k
ZXJCb3g6OkNhY2hlUmVuZGVyQm94RnJhZ21lbnRJbmZvKSBjb25zdDsKKyAgICB2aXJ0dWFsIExh
eW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBo
YXNlOjpCbG9ja0JhY2tncm91bmQpIGNvbnN0OworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlw
UmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJh
Z21lbnRDb250YWluZXIqIGZyYWdtZW50LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBy
ZWxldmFuY3kpIHsgcmV0dXJuIG92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIGZyYWdtZW50LCBy
ZWxldmFuY3kpOyB9CisKKyAgICB2aXJ0dWFsIFBhdGggY29tcHV0ZUNsaXBQYXRoKEFmZmluZVRy
YW5zZm9ybSYpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Qo
U1ZHRWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOworCisgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQo
KSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIG92ZXJyaWRlOworICAgIGJv
b2wgc2hvdWxkUGFpbnRTVkdSZW5kZXJlcihjb25zdCBQYWludEluZm8mKSBjb25zdDsKKworICAg
IExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gY29tcHV0ZVZpc2libGVSZWN0SW5Db250
YWluZXIoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNv
bnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1hcEFi
c29sdXRlVG9Mb2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBUcmFuc2Zv
cm1TdGF0ZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3Jt
U3RhdGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNv
bnN0IGZpbmFsOworICAgIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2Vv
bWV0cnlNYXAqKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHB1c2hNYXBw
aW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCosIFJlbmRlckdlb21l
dHJ5TWFwJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFp
bmVyKFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqIG9mZnNldERlcGVu
ZHNPblBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhZGRp
dGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENvbnRhaW5l
ciA9IDApIG92ZXJyaWRlOworICAgIHZvaWQgcGFpbnRTVkdPdXRsaW5lKFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKworcHJpdmF0ZToKKyAgICBi
b29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICBMYXlvdXRSZWN0IG1fbGF5b3V0UmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlclNWR01v
ZGVsT2JqZWN0LCBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkpCisKKyNlbmRpZiAvLyBFTkFCTEUo
TEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447866</attachid>
            <date>2021-12-23 02:12:18 -0800</date>
            <delta_ts>2021-12-23 11:18:57 -0800</delta_ts>
            <desc>Patch, v5</desc>
            <filename>bug-234524-20211223021216.patch</filename>
            <type>text/plain</type>
            <size>39252</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI1M2U5ZWQ3YTlmOGZj
YzhhZGQyYzY5YzUxMGVmYzk4MzJmM2NiYy4uMDhhNzA3OTVjNTc2OWY2OWI5MDkyMjBiNGE4MzRl
MWU4MmViM2FmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMS0xMi0yMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGlt
cGxlbWVudGluZyBSZW5kZXJTVkdNb2RlbE9iamVjdCAtIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0
IGdyYXBoaWNzCisgICAgICAgIHByaW1pdGl2ZXMgaW4gU1ZHIChwYXRoIC8gcmVjdCAvIGNpcmNs
ZSAvIGltYWdlIC8gLi4uKSBmb3IgdGhlIExCU0UuCisKKyAgICAgICAgSW4gdGhlIGxlZ2FjeSBl
bmdpbmUsIFJlbmRlclNWR0ltYWdlIC8gUmVuZGVyU1ZHU2hhcGUgLyBSZW5kZXJTVkdDb250YWlu
ZXIgaW5oZXJpdAorICAgICAgICBmcm9tIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LCB3aGlj
aCBpbiB0dXJuIGluaGVyaXRzIGZyb20gUmVuZGVyRWxlbWVudC4gVGhlIFNWRworICAgICAgICA8
dGV4dD4gLyA8Zm9yZWlnbk9iamVjdD4gcmVuZGVyZXJzIGluaGVyaXQgZnJvbSB0aGVpciBleGlz
dGluZyAiSFRNTCBjb3VudGVycGFydHMiCisgICAgICAgIGUuZy4gUmVuZGVyU1ZHQmxvY2sgZnJv
bSBSZW5kZXJCbG9ja0Zsb3csIG9yIFJlbmRlclNWR0lubGluZSBmcm9tIFJlbmRlcklubGluZS4K
KworICAgICAgICBUaGlzIGhhcyBoaXN0b3JpY2FsIHJlYXNvbnM6IFdoZW4gU1ZHIHRleHQgcmVu
ZGVyaW5nIHdhcyBwcm90b3R5cGVkIGluIFdlYkNvcmUsIGEgZ29hbCB3YXMgdG8KKyAgICAgICAg
cmUtdXNlIHRoZSBleGlzdGluZyBIVE1ML0NTUyB0ZXh0IHJlbmRlcmluZyBjb2RlIHdoZW5ldmVy
IHBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIFNWRyB0ZXh0CisgICAgICAgIHJlbmRlcmVycyB3ZXJl
IG1vZGVsbGVkIGluIHRoZSB0ZXJtaW5vbG9neSBvZiBIVE1ML0NTUzogQSBuYXR1cmFsIGNob2lj
ZSBpcyB0byB0cmVhdCBhIFNWRworICAgICAgICA8dGV4dD4gZWxlbWVudCBhcyBhIENTUyAiYmxv
Y2stbGV2ZWwgZWxlbWVudCIgYW5kIDx0c3Bhbj4gLyA8dGV4dFBhdGg+IC8gPHRyZWY+IC8gLi4u
CisgICAgICAgIGVsZW1lbnRzIGFzIENTUyAiaW5saW5lIGVsZW1lbnRzIi4gVGhlc2UgZGVzaWdu
IGNob2ljZXMgZnJvbSBhbG1vc3QgdHdvIGRlY2FkZXMgYWdvLCBhcmUKKyAgICAgICAgdGhlIHJl
YXNvbiBmb3IgdGhlIHVubmVjZXNzYXJ5IGNvbmZ1c2luZyBTVkcgaW5oZXJpdGFuY2Ugc3RydWN0
dXJlLiBGdXJ0aGVybW9yZSB3ZSBleHBsaWNpdGx5CisgICAgICAgIGRpc2FibGUgbGF5ZXIgc3Vw
cG9ydCBpbiBhbGwgU1ZHIGNsYXNzZXMgdGhhdCBpbmRpcmVjdGx5IGluaGVyaXQgZnJvbSBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LgorCisgICAgICAgIEhvd2V2ZXIgZm9yIExCU0Ugd2UgZG8gd2Fu
dCBTVkcgdG8gcGFydGljaXBhdGUgaW4gdGhlIGxheWVyIHRyZWUuCisgICAgICAgIFRoZXJlZm9y
ZSBsZXQgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuIFRoaXMgdHVybnMKKyAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbnRvIHRo
ZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMgaW4gTEJTRS4KKworICAg
ICAgICBUaGUgcHJpY2UgZm9yIHRoZSBsYXllciBzdXBwb3J0IGlzIHRoYXQgYWxsIFNWRyByZW5k
ZXJlcnMgbmVlZCB0byBiZSBhYmxlIHRvIGFuc3dlciBxdWVzdGlvbnMKKyAgICAgICAgaW4gSFRN
TC9DU1MgbGFuZ3VhZ2UgKHdoYXQncyB5b3VyICdib3JkZXIgYm94IHJlY3QnPyBkbyB5b3UgaGF2
ZSB2aXN1YWwgb3ZlcmZsb3c/IGV0Yy4pLgorICAgICAgICBGaW5kaW5nIGNvbnNpc3RlbnQgZGVm
aW5pdGlvbnMvbWFwcGluZ3Mgd2FzIGEgdGVkaW91cyBqb2IsIHRoYXQgaXMgZnVsbHkgc29sdmVk
IGluIExCU0UgYW5kCisgICAgICAgIHdpbGwgYmUgdXBzdHJlYW1lZCBpbiBwaWVjZXMuIFRoaXMg
cGF0Y2ggaXMgb25lIG1haW4gcGllY2Ugb2YgdGhlIHdvcmsuCisKKyAgICAgICAgSWYgd2UgZm9y
Z2V0IGFib3V0IHRoZSBsZWdhY3kgZW5naW5lLCB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlIG5v
dyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgKyBSZW5kZXJPYmplY3QKKyAg
ICAgICAgICAgICsgUmVuZGVyRWxlbWVudAorICAgICAgICAgICAgfCAgICArIFJlbmRlckxheWVy
TW9kZWxPYmplY3QKKyAgICAgICAgICAgIHwgICAgICAgICsgUmVuZGVyQm94TW9kZWxPYmplY3QK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgKyBSZW5kZXJCb3gKKyAgICAgICAgICAgIHwgICAg
ICAgIHwgICAgfCAgICArIFJlbmRlclJlcGxhY2VkIChDU1MgInJlcGxhY2VkIiBlbGVtZW50cykK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUm9vdCAob3V0
ZXJtb3N0IDxzdmc+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgfAor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyQmxvY2sgKENTUyAiYmxvY2st
bGV2ZWwiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICArIFJl
bmRlckJsb2NrRmxvdworICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICAgKyBS
ZW5kZXJTVkdCbG9jayAoSFRNTC9TVkcgZ2x1ZSBjb2RlKQorICAgICAgICAgICAgfCAgICAgICAg
fCAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCAoPGZvcmVpZ25P
YmplY3Q+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgICAg
ICAgKyBSZW5kZXJTVkdUZXh0ICg8dGV4dD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAg
IHwgICAgfAorICAgICAgICAgICAgfCAgICAgICAgfCAgICArIFJlbmRlcklubGluZSAoQ1NTICJp
bmxpbmUiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgKyBSZW5kZXJT
VkdJbmxpbmUgKEhUTUwvU1ZHIGdsdWUgY29kZSkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAg
ICAgICAgICArIFJlbmRlclNWR1RTcGFuICg8dHNwYW4+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdUZXh0UGF0aCAoPHRleHRQYXRoPiBlbGVt
ZW50KQorICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgKyBSZW5k
ZXJTVkdNb2RlbE9iamVjdAorICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHQ29u
dGFpbmVyCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICArIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lciAoPGRlZnM+IC8gPGc+IHdpdGggJ2Rpc3BsYXk6IG5vbmUnIC8gPHN5bWJvbD4gZWxl
bWVudHMpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyICg8Y2xpcFBhdGg+IGVsZW1lbnQpCisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyICg8
ZmlsdGVyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAg
KyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZQorICAgICAgICAgICAgfCAgICAgICAg
ICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50CisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICB8ICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCAoPGxpbmVhckdyYWRpZW50PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAg
ICAgICAgIHwgICAgfCAgICAgICAgfCAgICArIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQgKDxyYWRpYWxHcmFkaWVudD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8
ICAgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIgKDxtYXJrZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlTWFza2VyICg8bWFz
a2VyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gKDxwYXR0ZXJuPiBlbGVtZW50KQorICAgICAgICAgICAg
fCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IK
KyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAg
ICB8ICAgICsgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciAoPGE+IC8gPGc+IC8gPHN3
aXRjaD4gLyA8dXNlPiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAg
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdJbWFnZSAoPGltYWdlPiBlbGVtZW50KQor
ICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHU2hhcGUgKDxyZWN0PiAvIDxjaXJj
bGU+IC8gPHBhdGg+IC4uLiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
KyBSZW5kZXJTVkdFbGxpcHNlCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVy
U1ZHUGF0aAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICArIFJlbmRlclNWR1JlY3QKKyAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICsgUmVuZGVyVGV4dCAoI3RleHQgbm9kZXMgaW4gSFRN
TCkKKyAgICAgICAgICAgICAgICArIFJlbmRlclNWR0lubGluZVRleHQgKCN0ZXh0IG5vZGVzIGlu
IFNWRykKKworICAgICAgICBUaGlzIGlzIHdheSBsZXNzIGNvbmZ1c2luZyB0aGVuIHRoZSBwcmV2
aW91cyB2ZXJzaW9uIG9mIHRoZSBTVkcgcmVuZGVyIHRyZWUuCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdD
b250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6bWFwTG9jYWxUb1NWR0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFic29sdXRlUXVhZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvZmZzZXRGcm9t
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6c2hvdWxkUGFpbnRTVkdSZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpp
bnRlcnNlY3RzQWxsb3dpbmdFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRl
cnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNr
RW5jbG9zdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjphcHBs
eVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjplbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
Ojpib3JkZXJCb3hSZWN0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Y29udGVudEJveFJlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpmcmFtZVJlY3RFcXVpdmFsZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojp2aXN1YWxPdmVy
Zmxvd1JlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01v
ZGVsT2JqZWN0OjphcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldExheW91dFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldExheW91dExvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpwYWludGluZ0xv
Y2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojps
YXlvdXRMb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6bGF5b3V0TG9jYXRpb25PZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyk6CisK
IDIwMjEtMTItMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdW2ExMXldIFRlc3QgYWNjZXNzaWJpbGl0eS9zdmctcmVtb3RlLWVsZW1l
bnQuaHRtbCBjcmFzaGVzIHdpdGggQVRTUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYmQ1YTc0NzljYjM5
ZTQ2Y2M5MTA0MDBmNGVlMzg0OTMyNGM3NTMxZi4uNjFlMmI5ZGVjNmUzMjdmZmJhYjM4MzZkMTJj
Yjk0NzEwMmRlODYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTI0NzcsNiArMjQ3Nyw3IEBAIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbWFnZS5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAorcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2Uu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggODIzZmQ2NzQzOTg1ZDYzMzdiNWM5N2I3ZDVjOWY0N2JhZmZkNjFmMi4uMDBlMjI0
YmEyOGI5ZWU3M2M5ODg3YjBkZDdjNTZmMTU5MjgyNzQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI0Myw2ICsxMjQzLDcg
QEAKIAkJNDM2NzA4QzcxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4
ODgxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovOyB9Owog
CQk0MzY3MDhDOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODhBMTJEOUNBNEEwMDA0
NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oICovOyB9OwogCQk0MzY3MDhDQjEyRDlDQTRCMDAwNDQy
MzQgLyogTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODhDMTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdh
Y3lSZW5kZXJTVkdNb2RlbE9iamVjdC5oICovOyB9OworCQk0MzY3MEM5MzQyRDlCQzRCMDAwNDQy
MzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwOEZEMTJEOUNBNEEwMDAzMjExNCAvKiBSZW5kZXJTVkdN
b2RlbE9iamVjdC5oICovOyB9OwogCQk0MzY3MDhDRDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVy
U1ZHUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzNjcwODhFMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oICovOyB9
OwogCQk0MzY3MDhDRjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg5
MDEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggKi87IH07CiAJ
CTQzNjcwOEQxMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OTIx
MkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggKi87IH07CkBA
IC04OTc4LDYgKzg5NzksOCBAQAogCQk0MzY3MDg4ODEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MzY3MDg4OTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHSW1hZ2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4QTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZH
SW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSW1hZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4OEQzNEU5Q0E0QTAwMDQ0MjM0
IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDM2NzA4RkQxMkQ5Q0E0QTAwMDMyMTE0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR01vZGVsT2JqZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODhCMTJEOUNBNEEwMDA0NDIz
NCAvKiBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODhDMTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdhY3lS
ZW5kZXJTVkdNb2RlbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
ZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MzY3MDg4RDEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg5MjAsNiArMTg5MjMsOCBAQAogCQkJCUNE
Rjc0N0U4MjcwRjZDQUUwMDhGRUVFQyAvKiBSZW5kZXJTVkdJbmxpbmVJbmxpbmVzLmggKi8sCiAJ
CQkJMDg1NEIwMDQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICov
LAogCQkJCTA4NTRCMDA1MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0Lmgg
Ki8sCisJCQkJNDM2NzA4OEQzNEU5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0
LmNwcCAqLywKKwkJCQk0MzY3MDhGRDEyRDlDQTRBMDAwMzIxMTQgLyogUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaCAqLywKIAkJCQlBRERGMUFENDEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0
aC5jcHAgKi8sCiAJCQkJQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGgu
aCAqLywKIAkJCQlBMTBCQjU4MjE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVyU1ZHUmVjdC5jcHAg
Ki8sCkBAIC0zNjcwMyw2ICszNjcwOCw3IEBACiAJCQkJMDg1NEIwMTUxMjU1RTRFNjAwQjlDREQw
IC8qIFJlbmRlclNWR0lubGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNzQ3RTkyNzBGNkNB
RTAwOEZFRUVDIC8qIFJlbmRlclNWR0lubGluZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA4NTRCMDE3MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0MzY3MEM5MzQyRDlCQzRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAvKiBS
ZW5kZXJTVkdQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBCQjU4NTE0ODRFM0E3MDBCMkU4
N0EgLyogUmVuZGVyU1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Q0QxMkQ5Q0E0
QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRl
eCBmMjk1MDRhMmYzMmU4NWFkNTgzMjdmNjZhMzRiMTkxMjhiNmQ2ODc4Li44ZDk5MGYxZDUzMWJl
NjNmMmIyNWQwNjE0NWZiMTMxYzQxMDA3MjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC0yOSw5ICsyOSwxMSBAQAog
I2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29t
cG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgor
I2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5LDUgKzIzMSw5MiBAQCB2b2lkIFJl
bmRlckxheWVyTW9kZWxPYmplY3Q6OnN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgdGlt
ZSkKICAgICBsYXllcigpLT5iYWNraW5nKCktPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOwogfQog
CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCitzdGQ6Om9wdGlvbmFsPExheW91
dFJlY3Q+IFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVjdEluU1ZHQ29u
dGFpbmVyKGNvbnN0IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlclNWR0Jsb2NrIGNo
YW5nZXMKKyAgICAvLyBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHRoaXMpIHx8IGlz
PFJlbmRlclNWR0Jsb2NrPih0aGlzKSk7CisgICAgQVNTRVJUKGlzPFJlbmRlclNWR01vZGVsT2Jq
ZWN0Pih0aGlzKSk7CisKKyAgICBBU1NFUlQoIXN0eWxlKCkuaGFzSW5GbG93UG9zaXRpb24oKSk7
CisgICAgQVNTRVJUKCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRP
ZmZzZXRDYWNoZUVuYWJsZWQoKSk7CisKKyAgICBpZiAoY29udGFpbmVyID09IHRoaXMpCisgICAg
ICAgIHJldHVybiByZWN0OworCisgICAgYm9vbCBjb250YWluZXJJc1NraXBwZWQ7CisgICAgYXV0
byogbG9jYWxDb250YWluZXIgPSB0aGlzLT5jb250YWluZXIoY29udGFpbmVyLCBjb250YWluZXJJ
c1NraXBwZWQpOworICAgIGlmICghbG9jYWxDb250YWluZXIpCisgICAgICAgIHJldHVybiByZWN0
OworCisgICAgQVNTRVJUX1VOVVNFRChjb250YWluZXJJc1NraXBwZWQsICFjb250YWluZXJJc1Nr
aXBwZWQpOworCisgICAgTGF5b3V0UmVjdCBhZGp1c3RlZFJlY3QgPSByZWN0OworCisgICAgLy8g
RklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0IGNoYW5nZXMKKyAg
ICAvLyBNb3ZlIHRvIG9yaWdpbiBvZiBsb2NhbCBjb29yZGluYXRlIHN5c3RlbSwgaWYgdGhpcyBp
cyB0aGUgZmlyc3QgY2FsbCB0byBjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcigpIG9yaWdp
bmF0aW5nCisgICAgLy8gZnJvbSBhIFNWRyByZW5kZXJlciAoUmVuZGVyU1ZHTW9kZWxPYmplY3Qg
LyBSZW5kZXJTVkdCbG9jaykgb3IgaWYgd2UgY3Jvc3MgdGhlIGJvdW5kYXJ5IGZyb20gSFRNTCAt
PiBTVkcgdmlhIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuCisgICAgLy8gYm9vbCBtb3ZlVG9Pcmln
aW4gPSBpczxSZW5kZXJTVkdGb3JlaWduT2JqZWN0PihyZW5kZXJlcik7CisgICAgYm9vbCBtb3Zl
VG9PcmlnaW4gPSBmYWxzZTsKKworICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVy
T2JqZWN0IGNoYW5nZXMKKyAgICBpZiAoY29udGV4dC5vcHRpb25zLmNvbnRhaW5zKFJlbmRlck9i
amVjdDo6VmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpUcmFuc2xhdGVUb1NWR1JlbmRlcmVyT3Jp
Z2luKSkgeworICAgICAgICBjb250ZXh0Lm9wdGlvbnMucmVtb3ZlKFJlbmRlck9iamVjdDo6Vmlz
aWJsZVJlY3RDb250ZXh0T3B0aW9uOjpUcmFuc2xhdGVUb1NWR1JlbmRlcmVyT3JpZ2luKTsKKyAg
ICAgICAgbW92ZVRvT3JpZ2luID0gdHJ1ZTsKKyAgICB9CisgICAgKi8KKworICAgIGlmIChtb3Zl
VG9PcmlnaW4pCisgICAgICAgIGFkanVzdGVkUmVjdC5tb3ZlQnkoZmxvb3JlZExheW91dFBvaW50
KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSkpOworCisgICAgaWYgKGF1dG8q
IHRyYW5zZm9ybSA9IGxheWVyKCktPnRyYW5zZm9ybSgpKQorICAgICAgICBhZGp1c3RlZFJlY3Qg
PSB0cmFuc2Zvcm0tPm1hcFJlY3QoYWRqdXN0ZWRSZWN0KTsKKworICAgIHJldHVybiBsb2NhbENv
bnRhaW5lci0+Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoYWRqdXN0ZWRSZWN0LCBjb250
YWluZXIsIGNvbnRleHQpOworfQorCit2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6Om1hcExv
Y2FsVG9TVkdDb250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JD
b250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSwgT3B0aW9uU2V0PE1hcENv
b3JkaW5hdGVzTW9kZT4gbW9kZSwgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJTVkdCbG9jayBjaGFuZ2VzCisgICAgLy8gQVNTRVJU
KGlzPFJlbmRlclNWR01vZGVsT2JqZWN0Pih0aGlzKSB8fCBpczxSZW5kZXJTVkdCbG9jaz4odGhp
cykpOworICAgIEFTU0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykpOworICAgIEFT
U0VSVChzdHlsZSgpLnBvc2l0aW9uKCkgPT0gUG9zaXRpb25UeXBlOjpTdGF0aWMpOworCisgICAg
aWYgKGFuY2VzdG9yQ29udGFpbmVyID09IHRoaXMpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2Fj
aGVFbmFibGVkKCkpOworCisgICAgYm9vbCBhbmNlc3RvclNraXBwZWQ7CisgICAgYXV0byogY29u
dGFpbmVyID0gdGhpcy0+Y29udGFpbmVyKGFuY2VzdG9yQ29udGFpbmVyLCBhbmNlc3RvclNraXBw
ZWQpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRf
VU5VU0VEKGFuY2VzdG9yU2tpcHBlZCwgIWFuY2VzdG9yU2tpcHBlZCk7CisKKyAgICAvLyBJZiB0
aGlzIGJveCBoYXMgYSB0cmFuc2Zvcm0sIGl0IGFjdHMgYXMgYSBmaXhlZCBwb3NpdGlvbiBjb250
YWluZXIgZm9yIGZpeGVkIGRlc2NlbmRhbnRzLAorICAgIC8vIGFuZCBtYXkgaXRzZWxmIGFsc28g
YmUgZml4ZWQgcG9zaXRpb24uIFNvIHByb3BhZ2F0ZSAnZml4ZWQnIHVwIG9ubHkgaWYgdGhpcyBi
b3ggaXMgZml4ZWQgcG9zaXRpb24uCisgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQorICAgICAgICBt
b2RlLnJlbW92ZShJc0ZpeGVkKTsKKworICAgIGlmICh3YXNGaXhlZCkKKyAgICAgICAgKndhc0Zp
eGVkID0gbW9kZS5jb250YWlucyhJc0ZpeGVkKTsKKworICAgIGF1dG8gY29udGFpbmVyT2Zmc2V0
ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcigqY29udGFpbmVyLCBMYXlvdXRQb2ludCh0cmFuc2Zvcm1T
dGF0ZS5tYXBwZWRQb2ludCgpKSk7CisKKyAgICBib29sIHByZXNlcnZlM0QgPSBtb2RlICYgVXNl
VHJhbnNmb3JtcyAmJiAoY29udGFpbmVyLT5zdHlsZSgpLnByZXNlcnZlczNEKCkgfHwgc3R5bGUo
KS5wcmVzZXJ2ZXMzRCgpKTsKKyAgICBpZiAobW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgc2hvdWxk
VXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIpKSB7CisgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHQ7CisgICAgICAgIGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFp
bmVyLCBjb250YWluZXJPZmZzZXQsIHQpOworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRy
YW5zZm9ybSh0LCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zv
cm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisgICAgfSBlbHNlCisgICAg
ICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoY29udGFpbmVyT2Zmc2V0LndpZHRoKCksIGNvbnRhaW5l
ck9mZnNldC5oZWlnaHQoKSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRl
VHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworCisgICAgbW9k
ZS5yZW1vdmUoQXBwbHlDb250YWluZXJGbGlwKTsKKworICAgIGNvbnRhaW5lci0+bWFwTG9jYWxU
b0NvbnRhaW5lcihhbmNlc3RvckNvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0Zp
eGVkKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGQxMThk
YzgxYTZhN2M2MGJiNDNiMjcxYzczNWIyMWQ2Njk4Yzg3MWUuLjljMzE0YWZiMTBkOGM1YTcwMmFm
ZTIwMjY1M2ZkYTcwNGJkZjY4YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtNjcsNiArNjcsMTYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lID0gTW9ub3RvbmljVGltZSgp
KSBvdmVycmlkZTsKIAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIC8v
IFByb3ZpZGVzIHRoZSBTVkcgaW1wbGVtZW50YXRpb24gZm9yIGNvbXB1dGVWaXNpYmxlUmVjdElu
Q29udGFpbmVyKCkuCisgICAgLy8gVGhpcyBsaXZlcyBpbiBSZW5kZXJMYXllck1vZGVsT2JqZWN0
LCB3aGljaCBpcyB0aGUgY29tbW9uIGJhc2UtY2xhc3MgZm9yIGFsbCBTVkcgcmVuZGVyZXJzLgor
ICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gY29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250
YWluZXIoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNv
bnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdDsKKworICAgIC8vIFByb3ZpZGVzIHRo
ZSBTVkcgaW1wbGVtZW50YXRpb24gZm9yIG1hcExvY2FsVG9Db250YWluZXIoKS4KKyAgICAvLyBU
aGlzIGxpdmVzIGluIFJlbmRlckxheWVyTW9kZWxPYmplY3QsIHdoaWNoIGlzIHRoZSBjb21tb24g
YmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMuCisgICAgdm9pZCBtYXBMb2NhbFRvU1ZH
Q29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVy
LCBUcmFuc2Zvcm1TdGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3
YXNGaXhlZCkgY29uc3Q7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFJlbmRlckxheWVyTW9k
ZWxPYmplY3QoRWxlbWVudCYsIFJlbmRlclN0eWxlJiYsIEJhc2VUeXBlRmxhZ3MpOwogICAgIFJl
bmRlckxheWVyTW9kZWxPYmplY3QoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBCYXNlVHlwZUZs
YWdzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWVhNjQ0Y2EzYzgwOTZhNzc0MGRhNWRlMjk4NGQ2
M2VhZDhlYjQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLCAyMDIxIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZH
X0VOR0lORSkKKyNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUg
IlNWR0dyYXBoaWNzRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgorI2luY2x1
ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aERhdGEuaCIKKyNpbmNsdWRlICJTVkdS
ZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoUmVuZGVyU1ZHTW9kZWxPYmplY3QpOworCitSZW5kZXJTVkdN
b2RlbE9iamVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHRWxlbWVudCYgZWxlbWVudCwgUmVu
ZGVyU3R5bGUmJiBzdHlsZSkKKyAgICA6IFJlbmRlckxheWVyTW9kZWxPYmplY3QoZWxlbWVudCwg
V1RGTW92ZShzdHlsZSksIDApCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnVw
ZGF0ZUZyb21TdHlsZSgpCit7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBkYXRlRnJv
bVN0eWxlKCk7CisgICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KHN0eWxlKCkuaGFz
VHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybTsKKyAgICBpZiAoUmVuZGVyT2JqZWN0Ojpub2RlKCkgJiYgaXM8U1ZHR3JhcGhpY3NFbGVt
ZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpKQorICAgICAgICB0cmFuc2Zvcm0gPSBkb3duY2Fz
dDxTVkdHcmFwaGljc0VsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSkuYW5pbWF0ZWRMb2Nh
bFRyYW5zZm9ybSgpOworCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJPYmpl
Y3QgY2hhbmdlcworICAgIC8vIGlmICghdHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAvLyAg
ICAgc2V0SGFzU1ZHVHJhbnNmb3JtKCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50KFJlbmRlckZyYWdtZW50Q29u
dGFpbmVyKiwgUmVuZGVyQm94OjpSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFncykgY29uc3QKK3sK
KyAgICByZXR1cm4gYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsKK30KKworTGF5b3V0UmVjdCBS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYs
IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ks
IFBhaW50UGhhc2UpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
Y2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAo
c3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiAhZW5jbG9zaW5n
TGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3Qo
KTsKKworICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1Bh
aW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOworICAgIHJldHVybiBjb21wdXRlUmVjdCh2aXN1YWxP
dmVyZmxvd1JlY3RFcXVpdmFsZW50KCksIHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOworfQor
CitzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb21wdXRl
VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0
KSBjb25zdAoreworICAgIHJldHVybiBjb21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lcihy
ZWN0LCBjb250YWluZXIsIGNvbnRleHQpOworfQorCitjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRl
clNWR01vZGVsT2JqZWN0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRy
eU1hcCkgY29uc3QKK3sKKyAgICBBU1NFUlQoYW5jZXN0b3JUb1N0b3BBdCAhPSB0aGlzKTsKKyAg
ICBBU1NFUlQoc3R5bGUoKS5wb3NpdGlvbigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljKTsKKwor
ICAgIGJvb2wgYW5jZXN0b3JTa2lwcGVkOworICAgIFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lciA9
IHRoaXMtPmNvbnRhaW5lcihhbmNlc3RvclRvU3RvcEF0LCBhbmNlc3RvclNraXBwZWQpOworICAg
IGlmICghY29udGFpbmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVF9V
TlVTRUQoYW5jZXN0b3JTa2lwcGVkLCAhYW5jZXN0b3JTa2lwcGVkKTsKKworICAgIGJvb2wgb2Zm
c2V0RGVwZW5kc09uUG9pbnQgPSBmYWxzZTsKKyAgICBMYXlvdXRTaXplIGNvbnRhaW5lck9mZnNl
dCA9IG9mZnNldEZyb21Db250YWluZXIoKmNvbnRhaW5lciwgTGF5b3V0UG9pbnQoKSwgJm9mZnNl
dERlcGVuZHNPblBvaW50KTsKKworICAgIGJvb2wgcHJlc2VydmUzRCA9IGNvbnRhaW5lci0+c3R5
bGUoKS5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxlKCkucHJlc2VydmVzM0QoKTsKKyAgICBpZiAoc2hv
dWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIpICYmIChnZW9tZXRyeU1hcC5t
YXBDb29yZGluYXRlc0ZsYWdzKCkgJiBVc2VUcmFuc2Zvcm1zKSkgeworICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRh
aW5lciwgY29udGFpbmVyT2Zmc2V0LCB0KTsKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlz
LCB0LCBwcmVzZXJ2ZTNELCBvZmZzZXREZXBlbmRzT25Qb2ludCwgZmFsc2UgLyogaXNGaXhlZFBv
cyAqLywgaGFzVHJhbnNmb3JtKCkpOworICAgIH0gZWxzZQorICAgICAgICBnZW9tZXRyeU1hcC5w
dXNoKHRoaXMsIGNvbnRhaW5lck9mZnNldCwgcHJlc2VydmUzRCwgb2Zmc2V0RGVwZW5kc09uUG9p
bnQsIGZhbHNlIC8qIGlzRml4ZWRQb3MgKi8sIGhhc1RyYW5zZm9ybSgpKTsKKworICAgIHJldHVy
biBjb250YWluZXI7Cit9CisKK0xheW91dFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om91dGxp
bmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9m
ZnNldENhY2hlRW5hYmxlZCgpKTsKKworICAgIGF1dG8gb3V0bGluZUJvdW5kcyA9IHZpc3VhbE92
ZXJmbG93UmVjdEVxdWl2YWxlbnQoKTsKKworICAgIGlmIChyZXBhaW50Q29udGFpbmVyICE9IHRo
aXMpIHsKKyAgICAgICAgRmxvYXRRdWFkIGNvbnRhaW5lclJlbGF0aXZlUXVhZDsKKyAgICAgICAg
aWYgKGdlb21ldHJ5TWFwKQorICAgICAgICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gZ2Vv
bWV0cnlNYXAtPm1hcFRvQ29udGFpbmVyKG91dGxpbmVCb3VuZHMsIHJlcGFpbnRDb250YWluZXIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2Nh
bFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3Qob3V0bGluZUJvdW5kcyksIHJlcGFpbnRDb250YWlu
ZXIpOworCisgICAgICAgIG91dGxpbmVCb3VuZHMgPSBMYXlvdXRSZWN0KGNvbnRhaW5lclJlbGF0
aXZlUXVhZC5ib3VuZGluZ0JveCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0bGluZUJvdW5k
czsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8
SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNv
bnN0Cit7CisgICAgcmVjdHMuYXBwZW5kKHNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QoYWNjdW11
bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpLCBsYXlvdXRTaXplKCkpKSk7Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
IHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxU
b0Fic29sdXRlUXVhZChvYmplY3RCb3VuZGluZ0JveCgpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhl
ZCkpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKQor
eworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoKnRoaXMpOworICAgIFJl
bmRlckxheWVyTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpOworfQorCit2b2lkIFJlbmRl
clNWR01vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKworICAgIC8vIFNWRyBtYXNrcyBhcmUg
cGFpbnRlZCBpbmRlcGVuZGVudCBvZiB0aGUgdGFyZ2V0IHJlbmRlcmVycyB2aXNpYmlsaXR5Lgor
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyRWxlbWVudCBjaGFuZ2VzCisgICAg
Ly8gYm9vbCBoYXNTVkdNYXNrID0gaGFzU1ZHTWFzaygpOworICAgIGJvb2wgaGFzU1ZHTWFzayA9
IGZhbHNlOworICAgIGlmIChoYXNTVkdNYXNrICYmIGhhc0xheWVyKCkgJiYgc3R5bGUoKS52aXNp
YmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSkKKyAgICAgICAgbGF5ZXIoKS0+c2V0SGFz
VmlzaWJsZUNvbnRlbnQoKTsKKworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNo
YW5nZWQoKnRoaXMsIGRpZmYsIHN0eWxlKCkpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2Rl
PiBtb2RlLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHN0eWxlKCkucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlN0YXRpYyk7CisKKyAgICBp
ZiAoaGFzVHJhbnNmb3JtKCkpCisgICAgICAgIG1vZGUucmVtb3ZlKElzRml4ZWQpOworCisgICAg
YXV0byogY29udGFpbmVyID0gdGhpcy0+cGFyZW50KCk7CisgICAgaWYgKCFjb250YWluZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnRhaW5lci0+bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQo
bW9kZSwgdHJhbnNmb3JtU3RhdGUpOworCisgICAgTGF5b3V0U2l6ZSBjb250YWluZXJPZmZzZXQg
PSBvZmZzZXRGcm9tQ29udGFpbmVyKCpjb250YWluZXIsIExheW91dFBvaW50KCkpOworCisgICAg
Ym9vbCBwcmVzZXJ2ZTNEID0gbW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgKGNvbnRhaW5lci0+c3R5
bGUoKS5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxlKCkucHJlc2VydmVzM0QoKSk7CisgICAgaWYgKG1v
ZGUgJiBVc2VUcmFuc2Zvcm1zICYmIHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29u
dGFpbmVyKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICBnZXRU
cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0KTsKKyAg
ICAgICAgdHJhbnNmb3JtU3RhdGUuYXBwbHlUcmFuc2Zvcm0odCwgcHJlc2VydmUzRCA/IFRyYW5z
Zm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5U
cmFuc2Zvcm0pOworICAgIH0gZWxzZQorICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRh
aW5lck9mZnNldC53aWR0aCgpLCBjb250YWluZXJPZmZzZXQuaGVpZ2h0KCksIHByZXNlcnZlM0Qg
PyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpG
bGF0dGVuVHJhbnNmb3JtKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwTG9j
YWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRh
aW5lciwgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRp
bmF0ZXNNb2RlPiBtb2RlLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBtYXBMb2NhbFRv
U1ZHQ29udGFpbmVyKGFuY2VzdG9yQ29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9kZSwgd2Fz
Rml4ZWQpOworfQorCitMYXlvdXRTaXplIFJlbmRlclNWR01vZGVsT2JqZWN0OjpvZmZzZXRGcm9t
Q29udGFpbmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmLCBi
b29sKikgY29uc3QKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRhaW5lciwgJmNvbnRhaW5lciA9
PSB0aGlzLT5jb250YWluZXIoKSk7CisgICAgQVNTRVJUKCFpc0luRmxvd1Bvc2l0aW9uZWQoKSk7
CisgICAgQVNTRVJUKCFpc0Fic29sdXRlbHlQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVChpc0lu
bGluZSgpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6ZSgpOworfQorCit2b2lkIFJlbmRlclNWR01v
ZGVsT2JqZWN0OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBj
b25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCopCit7CisgICAgYXV0byByZXBhaW50Qm91bmRpbmdCb3ggPSBlbmNsb3NpbmdMYXlv
dXRSZWN0KHRoaXMtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIGlmIChy
ZXBhaW50Qm91bmRpbmdCb3guc2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHJlcGFpbnRCb3VuZGlu
Z0JveC5zaXplKCkpKTsKK30KKworYm9vbCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2hvdWxkUGFp
bnRTVkdSZW5kZXJlcihjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykgY29uc3QKK3sKKyAgICBB
U1NFUlQoIXBhaW50SW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpKTsKKworICAgIGlm
ICgocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkZvcmVncm91bmQgJiYgcGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2U6OkNsaXBwaW5nTWFzayAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZTo6TWFzayAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6T3V0bGlu
ZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJv
b3QoKnRoaXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3R5bGUoKS52aXNp
YmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6SGlkZGVuIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IERp
c3BsYXlUeXBlOjpOb25lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gRmxvYXRSZWN0OjppbnRlcnNlY3RzIGRvZXMgbm90IGNvbnNpZGVyIGhvcml6
b250YWwgb3IgdmVydGljYWwgbGluZXMgKGJlY2F1c2Ugb2YgaXNFbXB0eSgpKS4KKy8vIFNvIHNw
ZWNpYWwtY2FzZSBoYW5kbGluZyBvZiBzdWNoIGxpbmVzLgorc3RhdGljIGJvb2wgaW50ZXJzZWN0
c0FsbG93aW5nRW1wdHkoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBGbG9hdFJlY3QmIG90aGVy
KQoreworICAgIGlmIChyLmlzRW1wdHkoKSAmJiBvdGhlci5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoci5pc0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIChvdGhlci5jb250YWlucyhyLngoKSwgci55KCkpICYmICFvdGhlci5jb250
YWlucyhyLm1heFgoKSwgci5tYXhZKCkpKSB8fCAoIW90aGVyLmNvbnRhaW5zKHIueCgpLCByLnko
KSkgJiYgb3RoZXIuY29udGFpbnMoci5tYXhYKCksIHIubWF4WSgpKSk7CisgICAgaWYgKG90aGVy
LmlzRW1wdHkoKSAmJiAhci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBpbnRlcnNlY3RzQWxs
b3dpbmdFbXB0eShvdGhlciwgcik7CisgICAgcmV0dXJuIHIuaW50ZXJzZWN0cyhvdGhlcik7Cit9
CisKKy8vIE9uZSBvZiB0aGUgZWxlbWVudCB0eXBlcyB0aGF0IGNhbiBjYXVzZSBncmFwaGljcyB0
byBiZSBkcmF3biBvbnRvIHRoZSB0YXJnZXQgY2FudmFzLiBTcGVjaWZpY2FsbHk6IGNpcmNsZSwg
ZWxsaXBzZSwKKy8vIGltYWdlLCBsaW5lLCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZSwgcmVjdCwg
dGV4dCBhbmQgdXNlLgorc3RhdGljIGJvb2wgaXNHcmFwaGljc0VsZW1lbnQoY29uc3QgUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIpCit7CisgICAgcmV0dXJuIHJlbmRlcmVyLmlzU1ZHU2hhcGUoKSB8
fCByZW5kZXJlci5pc1NWR1RleHQoKSB8fCByZW5kZXJlci5pc1NWR0ltYWdlKCkgfHwgcmVuZGVy
ZXIuZWxlbWVudCgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp1c2VUYWcpOworfQorCitib29sIFJl
bmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0ludGVyc2VjdGlvbihSZW5kZXJFbGVtZW50KiByZW5k
ZXJlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVuZGVyZXIgfHwgcmVu
ZGVyZXItPnN0eWxlKCkucG9pbnRlckV2ZW50cygpID09IFBvaW50ZXJFdmVudHM6Ok5vbmUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWlzR3JhcGhpY3NFbGVtZW50KCpyZW5kZXJl
cikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0g
ZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVsZW1lbnQoKSk7CisgICAgQVNTRVJUKGlz
PFNWR0dyYXBoaWNzRWxlbWVudD4oc3ZnRWxlbWVudCkpOworICAgIGF1dG8gY3RtID0gZG93bmNh
c3Q8U1ZHR3JhcGhpY3NFbGVtZW50Pigqc3ZnRWxlbWVudCkuZ2V0Q1RNKFNWR0xvY2F0YWJsZTo6
RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgcmV0dXJuIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5
KHJlY3QsIGN0bS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNrRW5jbG9zdXJlKFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS5wb2ludGVyRXZlbnRzKCkgPT0gUG9pbnRl
ckV2ZW50czo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXNHcmFwaGlj
c0VsZW1lbnQoKnJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFNWR0VsZW1l
bnQqIHN2Z0VsZW1lbnQgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgp
KTsKKyAgICBBU1NFUlQoaXM8U1ZHR3JhcGhpY3NFbGVtZW50PihzdmdFbGVtZW50KSk7CisgICAg
YXV0byBjdG0gPSBkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KCpzdmdFbGVtZW50KS5nZXRD
VE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsKKyAgICByZXR1cm4gcmVjdC5j
b250YWlucyhjdG0ubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSkpOworfQorCitQYXRoIFJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb21wdXRlQ2xpcFBhdGgo
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgaWYgKGxheWVyKCktPmhh
c1RyYW5zZm9ybSgpKQorICAgICAgICB0cmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXIoKS0+Y3VycmVu
dFRyYW5zZm9ybShSZW5kZXJTdHlsZTo6aW5kaXZpZHVhbFRyYW5zZm9ybU9wZXJhdGlvbnMpLnRv
QWZmaW5lVHJhbnNmb3JtKCkpOworCisgICAgcmV0dXJuIHBhdGhGcm9tR3JhcGhpY3NFbGVtZW50
KCZkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KGVsZW1lbnQoKSkpOworfQorCit2b2lkIFJl
bmRlclNWR01vZGVsT2JqZWN0OjphcHBseVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91
bmRpbmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9u
PiBvcHRpb25zKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTSh0cmFuc2Zvcm0pOworICAgIFVO
VVNFRF9QQVJBTShzdHlsZSk7CisgICAgVU5VU0VEX1BBUkFNKGJvdW5kaW5nQm94KTsKKyAgICBV
TlVTRURfUEFSQU0ob3B0aW9ucyk7CisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdS
ZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAvLyBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVRyYW5z
Zm9ybSgqdGhpcywgdHJhbnNmb3JtLCBzdHlsZSwgYm91bmRpbmdCb3gsIHN0ZDo6bnVsbG9wdCwg
c3RkOjpudWxsb3B0LCBvcHRpb25zKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDNkYzIxYWJjODZlMjEzNTY4OTkxZmZlZWU3YjRlNzIyYjg0OGNkNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApA
QCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0Lmgi
CisvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKy8v
ICNpbmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBNb3N0IHJlbmRlcmVycyBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlIHdpbGwg
aW5oZXJpdCBmcm9tIHRoaXMgY2xhc3MKKy8vIGJ1dCBub3QgYWxsLiBSZW5kZXJTVkdGb3JlaWdu
T2JqZWN0LCBSZW5kZXJTVkdCbG9jaywgZXRjLiBpbmhlcml0IGZyb20KKy8vIGV4aXN0aW5nIFJl
bmRlckJsb2NrIGNsYXNzZXMsIHRoYXQgYWxsIGluaGVyaXQgZnJvbSBSZW5kZXJMYXllck1vZGVs
T2JqZWN0CisvLyBkaXJlY3RseSwgd2l0aG91dCBSZW5kZXJTVkdNb2RlbE9iamVjdCBpbmJldHdl
ZW4uIFRoZXJlZm9yZSBjb2RlIHdoaWNoCisvLyBuZWVkcyB0byBiZSBzaGFyZWQgYmV0d2VlbiBh
bGwgU1ZHIHJlbmRlcmVycyBnb2VzIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QuCitjbGFzcyBT
VkdFbGVtZW50OworCitjbGFzcyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJM
YXllck1vZGVsT2JqZWN0IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR01v
ZGVsT2JqZWN0KTsKK3B1YmxpYzoKKyAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKKworICAgIHN0
YXRpYyBib29sIGNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICBzdGF0aWMgYm9vbCBjaGVja0VuY2xvc3VyZShSZW5kZXJFbGVtZW50KiwgY29u
c3QgRmxvYXRSZWN0Jik7CisKKyAgICBTVkdFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQorCisgICAg
Ly8gRklYTUU6IFtMQlNFXSBNYXJrIGZpbmFsLCBhZGQgYXBwbHlUcmFuc2Zvcm0gdG8gUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdAorICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gs
IE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7
CisKKyAgICAvLyBNaW1pYyB0aGUgUmVuZGVyQm94IGFjY2Vzc29ycyAtIGJ5IHNoYXJpbmcgdGhl
IHNhbWUgdGVybWlub2xvZ3kgdGhlIHBhaW50aW5nIC8gaGl0IHRlc3RpbmcgLyBsYXlvdXQgbG9n
aWMgaXMKKyAgICAvLyBzaW1pbGFyIHRvIHJlYWQgY29tcGFyZWQgdG8gbm9uLVNWRyByZW5kZXJl
cnMgc3VjaCBhcyBSZW5kZXJCb3ggJiBmcmllbmRzLgorICAgIExheW91dFJlY3QgYm9yZGVyQm94
UmVjdEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiB7IExheW91dFBvaW50KCksIG1fbGF5b3V0
UmVjdC5zaXplKCkgfTsgfQorICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50
KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsgfQorICAgIExheW91
dFJlY3QgZnJhbWVSZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsg
fQorCisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbgorICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6
Y29tcHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7CisgICAgICAgIHJldHVybiBMYXlvdXRS
ZWN0KCk7CisgICAgfQorCisgICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2
YWxlbnQoTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2Nh
dGlvbigpKTsgfQorCisgICAgTGF5b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9sYXlvdXRSZWN0OyB9CisgICAgdm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3Qm
IGxheW91dFJlY3QpIHsgbV9sYXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0
TGF5b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5
b3V0UmVjdC5zZXRMb2NhdGlvbihsYXlvdXRMb2NhdGlvbik7IH0KKworICAgIExheW91dFBvaW50
IHBhaW50aW5nTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExv
Y2F0aW9uKCkgLSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWlu
WUNvcm5lcigpKSk7IH0KKyAgICBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9CisgICAgTGF5b3V0U2l6ZSBsYXlvdXRM
b2NhdGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3Qu
bG9jYXRpb24oKSk7IH0KKyAgICBMYXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVy
biBtX2xheW91dFJlY3Quc2l6ZSgpOyB9CisKKyAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQor
ICAgIEZsb2F0UmVjdCBib3JkZXJCb3hSZWN0SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJh
Z21lbnRDb250YWluZXIqLCBSZW5kZXJCb3g6OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0g
UmVuZGVyQm94OjpDYWNoZVJlbmRlckJveEZyYWdtZW50SW5mbykgY29uc3Q7CisgICAgdmlydHVh
bCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9u
LCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFp
bnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93
Q2xpcFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3kgcmVsZXZhbmN5KSB7IHJldHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVu
dCwgcmVsZXZhbmN5KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Qo
U1ZHRWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOworCisgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQo
KSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIG92ZXJyaWRlOworICAgIGJv
b2wgc2hvdWxkUGFpbnRTVkdSZW5kZXJlcihjb25zdCBQYWludEluZm8mKSBjb25zdDsKKworICAg
IExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gY29tcHV0ZVZpc2libGVSZWN0SW5Db250
YWluZXIoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNv
bnRhaW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1hcEFi
c29sdXRlVG9Mb2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBUcmFuc2Zv
cm1TdGF0ZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3Jt
U3RhdGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNv
bnN0IGZpbmFsOworICAgIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2Vv
bWV0cnlNYXAqKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHB1c2hNYXBw
aW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCosIFJlbmRlckdlb21l
dHJ5TWFwJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFp
bmVyKFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqIG9mZnNldERlcGVu
ZHNPblBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhZGRp
dGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENvbnRhaW5l
ciA9IDApIG92ZXJyaWRlOworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHIG91dGxp
bmUgcGFpbnRpbmcgZnVuY3Rpb25hbGl0eQorICAgIC8vIHZvaWQgcGFpbnRTVkdPdXRsaW5lKFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKworcHJp
dmF0ZToKKyAgICBib29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICBMYXlvdXRSZWN0IG1fbGF5b3V0UmVjdDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNU
KFJlbmRlclNWR01vZGVsT2JqZWN0LCBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkpCisKKyNlbmRp
ZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447887</attachid>
            <date>2021-12-23 11:19:03 -0800</date>
            <delta_ts>2022-01-03 00:34:46 -0800</delta_ts>
            <desc>Patch, v6</desc>
            <filename>bug-234524-20211223111901.patch</filename>
            <type>text/plain</type>
            <size>38907</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk3YjY5ZmM5MDRiMDM4
YTAyZGY2MzUwM2RhZWI0MmRkNzM5YWVlZi4uYjg5YTU0MWZmNzAyYWE1MWZjNWZkNWIyYzY5ZGQx
Y2NkMzI2YmM0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMS0xMi0yMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGlt
cGxlbWVudGluZyBSZW5kZXJTVkdNb2RlbE9iamVjdCAtIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0
IGdyYXBoaWNzCisgICAgICAgIHByaW1pdGl2ZXMgaW4gU1ZHIChwYXRoIC8gcmVjdCAvIGNpcmNs
ZSAvIGltYWdlIC8gLi4uKSBmb3IgdGhlIExCU0UuCisKKyAgICAgICAgSW4gdGhlIGxlZ2FjeSBl
bmdpbmUsIFJlbmRlclNWR0ltYWdlIC8gUmVuZGVyU1ZHU2hhcGUgLyBSZW5kZXJTVkdDb250YWlu
ZXIgaW5oZXJpdAorICAgICAgICBmcm9tIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LCB3aGlj
aCBpbiB0dXJuIGluaGVyaXRzIGZyb20gUmVuZGVyRWxlbWVudC4gVGhlIFNWRworICAgICAgICA8
dGV4dD4gLyA8Zm9yZWlnbk9iamVjdD4gcmVuZGVyZXJzIGluaGVyaXQgZnJvbSB0aGVpciBleGlz
dGluZyAiSFRNTCBjb3VudGVycGFydHMiCisgICAgICAgIGUuZy4gUmVuZGVyU1ZHQmxvY2sgZnJv
bSBSZW5kZXJCbG9ja0Zsb3csIG9yIFJlbmRlclNWR0lubGluZSBmcm9tIFJlbmRlcklubGluZS4K
KworICAgICAgICBUaGlzIGhhcyBoaXN0b3JpY2FsIHJlYXNvbnM6IFdoZW4gU1ZHIHRleHQgcmVu
ZGVyaW5nIHdhcyBwcm90b3R5cGVkIGluIFdlYkNvcmUsIGEgZ29hbCB3YXMgdG8KKyAgICAgICAg
cmUtdXNlIHRoZSBleGlzdGluZyBIVE1ML0NTUyB0ZXh0IHJlbmRlcmluZyBjb2RlIHdoZW5ldmVy
IHBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIFNWRyB0ZXh0CisgICAgICAgIHJlbmRlcmVycyB3ZXJl
IG1vZGVsbGVkIGluIHRoZSB0ZXJtaW5vbG9neSBvZiBIVE1ML0NTUzogQSBuYXR1cmFsIGNob2lj
ZSBpcyB0byB0cmVhdCBhIFNWRworICAgICAgICA8dGV4dD4gZWxlbWVudCBhcyBhIENTUyAiYmxv
Y2stbGV2ZWwgZWxlbWVudCIgYW5kIDx0c3Bhbj4gLyA8dGV4dFBhdGg+IC8gPHRyZWY+IC8gLi4u
CisgICAgICAgIGVsZW1lbnRzIGFzIENTUyAiaW5saW5lIGVsZW1lbnRzIi4gVGhlc2UgZGVzaWdu
IGNob2ljZXMgZnJvbSBhbG1vc3QgdHdvIGRlY2FkZXMgYWdvLCBhcmUKKyAgICAgICAgdGhlIHJl
YXNvbiBmb3IgdGhlIHVubmVjZXNzYXJ5IGNvbmZ1c2luZyBTVkcgaW5oZXJpdGFuY2Ugc3RydWN0
dXJlLiBGdXJ0aGVybW9yZSB3ZSBleHBsaWNpdGx5CisgICAgICAgIGRpc2FibGUgbGF5ZXIgc3Vw
cG9ydCBpbiBhbGwgU1ZHIGNsYXNzZXMgdGhhdCBpbmRpcmVjdGx5IGluaGVyaXQgZnJvbSBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LgorCisgICAgICAgIEhvd2V2ZXIgZm9yIExCU0Ugd2UgZG8gd2Fu
dCBTVkcgdG8gcGFydGljaXBhdGUgaW4gdGhlIGxheWVyIHRyZWUuCisgICAgICAgIFRoZXJlZm9y
ZSBsZXQgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuIFRoaXMgdHVybnMKKyAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbnRvIHRo
ZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMgaW4gTEJTRS4KKworICAg
ICAgICBUaGUgcHJpY2UgZm9yIHRoZSBsYXllciBzdXBwb3J0IGlzIHRoYXQgYWxsIFNWRyByZW5k
ZXJlcnMgbmVlZCB0byBiZSBhYmxlIHRvIGFuc3dlciBxdWVzdGlvbnMKKyAgICAgICAgaW4gSFRN
TC9DU1MgbGFuZ3VhZ2UgKHdoYXQncyB5b3VyICdib3JkZXIgYm94IHJlY3QnPyBkbyB5b3UgaGF2
ZSB2aXN1YWwgb3ZlcmZsb3c/IGV0Yy4pLgorICAgICAgICBGaW5kaW5nIGNvbnNpc3RlbnQgZGVm
aW5pdGlvbnMvbWFwcGluZ3Mgd2FzIGEgdGVkaW91cyBqb2IsIHRoYXQgaXMgZnVsbHkgc29sdmVk
IGluIExCU0UgYW5kCisgICAgICAgIHdpbGwgYmUgdXBzdHJlYW1lZCBpbiBwaWVjZXMuIFRoaXMg
cGF0Y2ggaXMgb25lIG1haW4gcGllY2Ugb2YgdGhlIHdvcmsuCisKKyAgICAgICAgSWYgd2UgZm9y
Z2V0IGFib3V0IHRoZSBsZWdhY3kgZW5naW5lLCB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlIG5v
dyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgKyBSZW5kZXJPYmplY3QKKyAg
ICAgICAgICAgICsgUmVuZGVyRWxlbWVudAorICAgICAgICAgICAgfCAgICArIFJlbmRlckxheWVy
TW9kZWxPYmplY3QKKyAgICAgICAgICAgIHwgICAgICAgICsgUmVuZGVyQm94TW9kZWxPYmplY3QK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgKyBSZW5kZXJCb3gKKyAgICAgICAgICAgIHwgICAg
ICAgIHwgICAgfCAgICArIFJlbmRlclJlcGxhY2VkIChDU1MgInJlcGxhY2VkIiBlbGVtZW50cykK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUm9vdCAob3V0
ZXJtb3N0IDxzdmc+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgfAor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyQmxvY2sgKENTUyAiYmxvY2st
bGV2ZWwiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICArIFJl
bmRlckJsb2NrRmxvdworICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICAgKyBS
ZW5kZXJTVkdCbG9jayAoSFRNTC9TVkcgZ2x1ZSBjb2RlKQorICAgICAgICAgICAgfCAgICAgICAg
fCAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCAoPGZvcmVpZ25P
YmplY3Q+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgICAg
ICAgKyBSZW5kZXJTVkdUZXh0ICg8dGV4dD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAg
IHwgICAgfAorICAgICAgICAgICAgfCAgICAgICAgfCAgICArIFJlbmRlcklubGluZSAoQ1NTICJp
bmxpbmUiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgKyBSZW5kZXJT
VkdJbmxpbmUgKEhUTUwvU1ZHIGdsdWUgY29kZSkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAg
ICAgICAgICArIFJlbmRlclNWR1RTcGFuICg8dHNwYW4+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdUZXh0UGF0aCAoPHRleHRQYXRoPiBlbGVt
ZW50KQorICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgKyBSZW5k
ZXJTVkdNb2RlbE9iamVjdAorICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHQ29u
dGFpbmVyCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICArIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lciAoPGRlZnM+IC8gPGc+IHdpdGggJ2Rpc3BsYXk6IG5vbmUnIC8gPHN5bWJvbD4gZWxl
bWVudHMpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyICg8Y2xpcFBhdGg+IGVsZW1lbnQpCisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyICg8
ZmlsdGVyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAg
KyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZQorICAgICAgICAgICAgfCAgICAgICAg
ICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50CisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICB8ICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCAoPGxpbmVhckdyYWRpZW50PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAg
ICAgICAgIHwgICAgfCAgICAgICAgfCAgICArIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQgKDxyYWRpYWxHcmFkaWVudD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8
ICAgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIgKDxtYXJrZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlTWFza2VyICg8bWFz
a2VyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gKDxwYXR0ZXJuPiBlbGVtZW50KQorICAgICAgICAgICAg
fCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IK
KyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAg
ICB8ICAgICsgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciAoPGE+IC8gPGc+IC8gPHN3
aXRjaD4gLyA8dXNlPiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAg
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdJbWFnZSAoPGltYWdlPiBlbGVtZW50KQor
ICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHU2hhcGUgKDxyZWN0PiAvIDxjaXJj
bGU+IC8gPHBhdGg+IC4uLiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
KyBSZW5kZXJTVkdFbGxpcHNlCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVy
U1ZHUGF0aAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICArIFJlbmRlclNWR1JlY3QKKyAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICsgUmVuZGVyVGV4dCAoI3RleHQgbm9kZXMgaW4gSFRN
TCkKKyAgICAgICAgICAgICAgICArIFJlbmRlclNWR0lubGluZVRleHQgKCN0ZXh0IG5vZGVzIGlu
IFNWRykKKworICAgICAgICBUaGlzIGlzIHdheSBsZXNzIGNvbmZ1c2luZyB0aGVuIHRoZSBwcmV2
aW91cyB2ZXJzaW9uIG9mIHRoZSBTVkcgcmVuZGVyIHRyZWUuCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdD
b250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6bWFwTG9jYWxUb1NWR0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFic29sdXRlUXVhZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvZmZzZXRGcm9t
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6c2hvdWxkUGFpbnRTVkdSZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpp
bnRlcnNlY3RzQWxsb3dpbmdFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRl
cnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNr
RW5jbG9zdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjphcHBs
eVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjplbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
Ojpib3JkZXJCb3hSZWN0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Y29udGVudEJveFJlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpmcmFtZVJlY3RFcXVpdmFsZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojp2aXN1YWxPdmVy
Zmxvd1JlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01v
ZGVsT2JqZWN0OjphcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldExheW91dFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldExheW91dExvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpwYWludGluZ0xv
Y2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojps
YXlvdXRMb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6bGF5b3V0TG9jYXRpb25PZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyk6CisK
IDIwMjEtMTItMjMgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAg
RW5zdXJlIGZpbGUgaGFuZGxlcyB1c2VkIGluIEZpbGVTeXN0ZW1BY2Nlc3MgQVBJIGFyZSBjbG9z
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggYmQ1YTc0NzljYjM5ZTQ2Y2M5MTA0MDBmNGVlMzg0OTMyNGM3
NTMxZi4uNjFlMmI5ZGVjNmUzMjdmZmJhYjM4MzZkMTJjYjk0NzEwMmRlODYxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTI0NzcsNiArMjQ3Nyw3IEBAIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcAorcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVjdC5jcHAK
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODIzZmQ2NzQzOTg1ZDYz
MzdiNWM5N2I3ZDVjOWY0N2JhZmZkNjFmMi4uMDBlMjI0YmEyOGI5ZWU3M2M5ODg3YjBkZDdjNTZm
MTU5MjgyNzQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTI0Myw2ICsxMjQzLDcgQEAKIAkJNDM2NzA4QzcxMkQ5Q0E0QjAw
MDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4ODgxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovOyB9OwogCQk0MzY3MDhDOTEyRDlDQTRCMDAwNDQy
MzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzNjcwODhBMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5o
ICovOyB9OwogCQk0MzY3MDhDQjEyRDlDQTRCMDAwNDQyMzQgLyogTGVnYWN5UmVuZGVyU1ZHTW9k
ZWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQzNjcwODhDMTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5o
ICovOyB9OworCQk0MzY3MEM5MzQyRDlCQzRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcw
OEZEMTJEOUNBNEEwMDAzMjExNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICovOyB9OwogCQk0
MzY3MDhDRDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODhFMTJEOUNBNEEwMDA0
NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oICovOyB9OwogCQk0MzY3MDhDRjEyRDlDQTRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg5MDEyRDlDQTRBMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggKi87IH07CiAJCTQzNjcwOEQxMTJEOUNBNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OTIxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmggKi87IH07CkBAIC04OTc4LDYgKzg5NzksOCBAQAogCQk0
MzY3MDg4ODEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4OTEyRDlDQTRBMDAwNDQyMzQg
LyogUmVuZGVyU1ZHSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyU1ZHSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3
MDg4QTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDM2NzA4OEQzNEU5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR01vZGVs
T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4RkQxMkQ5Q0E0
QTAwMDMyMTE0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlclNWR01vZGVsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQzNjcwODhCMTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lS
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQz
NjcwODhDMTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVj
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4RDEyRDlDQTRBMDAwNDQy
MzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTg5MjAsNiArMTg5MjMsOCBAQAogCQkJCUNERjc0N0U4MjcwRjZDQUUwMDhGRUVFQyAv
KiBSZW5kZXJTVkdJbmxpbmVJbmxpbmVzLmggKi8sCiAJCQkJMDg1NEIwMDQxMjU1RTRFNjAwQjlD
REQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovLAogCQkJCTA4NTRCMDA1MTI1NUU0RTYw
MEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggKi8sCisJCQkJNDM2NzA4OEQzNEU5Q0E0
QTAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLywKKwkJCQk0MzY3MDhGRDEy
RDlDQTRBMDAwMzIxMTQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLywKIAkJCQlBRERGMUFE
NDEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5jcHAgKi8sCiAJCQkJQURERjFBRDUx
MjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCAqLywKIAkJCQlBMTBCQjU4MjE0ODRF
M0E3MDBCMkU4N0EgLyogUmVuZGVyU1ZHUmVjdC5jcHAgKi8sCkBAIC0zNjcwMyw2ICszNjcwOCw3
IEBACiAJCQkJMDg1NEIwMTUxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0RGNzQ3RTkyNzBGNkNBRTAwOEZFRUVDIC8qIFJlbmRlclNWR0lu
bGluZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDE3MTI1NUU0RTYwMEI5Q0RE
MCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzY3MEM5MzQy
RDlCQzRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMTBCQjU4NTE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVyU1ZHUmVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jl
c291cmNlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCBmMjk1MDRhMmYzMmU4NWFkNTgzMjdm
NjZhMzRiMTkxMjhiNmQ2ODc4Li44ZDk5MGYxZDUzMWJlNjNmMmIyNWQwNjE0NWZiMTMxYzQxMDA3
MjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9k
ZWxPYmplY3QuY3BwCkBAIC0yOSw5ICsyOSwxMSBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFj
a2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRl
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMjI5LDUgKzIzMSw5MiBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN1
c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgdGltZSkKICAgICBsYXllcigpLT5iYWNraW5n
KCktPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOwogfQogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VE
X1NWR19FTkdJTkUpCitzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRlckxheWVyTW9kZWxP
YmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVjdEluU1ZHQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3Qm
IHJlY3QsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgUmVuZGVyT2Jq
ZWN0OjpWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFJlbmRlclNWR0Jsb2NrIGNoYW5nZXMKKyAgICAvLyBBU1NFUlQoaXM8
UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHRoaXMpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPih0aGlzKSk7
CisgICAgQVNTRVJUKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0Pih0aGlzKSk7CisKKyAgICBBU1NF
UlQoIXN0eWxlKCkuaGFzSW5GbG93UG9zaXRpb24oKSk7CisgICAgQVNTRVJUKCF2aWV3KCkuZnJh
bWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7CisK
KyAgICBpZiAoY29udGFpbmVyID09IHRoaXMpCisgICAgICAgIHJldHVybiByZWN0OworCisgICAg
Ym9vbCBjb250YWluZXJJc1NraXBwZWQ7CisgICAgYXV0byogbG9jYWxDb250YWluZXIgPSB0aGlz
LT5jb250YWluZXIoY29udGFpbmVyLCBjb250YWluZXJJc1NraXBwZWQpOworICAgIGlmICghbG9j
YWxDb250YWluZXIpCisgICAgICAgIHJldHVybiByZWN0OworCisgICAgQVNTRVJUX1VOVVNFRChj
b250YWluZXJJc1NraXBwZWQsICFjb250YWluZXJJc1NraXBwZWQpOworCisgICAgTGF5b3V0UmVj
dCBhZGp1c3RlZFJlY3QgPSByZWN0OworCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBS
ZW5kZXJTVkdGb3JlaWduT2JqZWN0IGNoYW5nZXMKKyAgICAvLyBNb3ZlIHRvIG9yaWdpbiBvZiBs
b2NhbCBjb29yZGluYXRlIHN5c3RlbSwgaWYgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byBjb21w
dXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcigpIG9yaWdpbmF0aW5nCisgICAgLy8gZnJvbSBhIFNW
RyByZW5kZXJlciAoUmVuZGVyU1ZHTW9kZWxPYmplY3QgLyBSZW5kZXJTVkdCbG9jaykgb3IgaWYg
d2UgY3Jvc3MgdGhlIGJvdW5kYXJ5IGZyb20gSFRNTCAtPiBTVkcgdmlhIFJlbmRlclNWR0ZvcmVp
Z25PYmplY3QuCisgICAgLy8gYm9vbCBtb3ZlVG9PcmlnaW4gPSBpczxSZW5kZXJTVkdGb3JlaWdu
T2JqZWN0PihyZW5kZXJlcik7CisgICAgYm9vbCBtb3ZlVG9PcmlnaW4gPSBmYWxzZTsKKworICAg
IC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyT2JqZWN0IGNoYW5nZXMKKyAgICBpZiAo
Y29udGV4dC5vcHRpb25zLmNvbnRhaW5zKFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0
T3B0aW9uOjpUcmFuc2xhdGVUb1NWR1JlbmRlcmVyT3JpZ2luKSkgeworICAgICAgICBjb250ZXh0
Lm9wdGlvbnMucmVtb3ZlKFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpU
cmFuc2xhdGVUb1NWR1JlbmRlcmVyT3JpZ2luKTsKKyAgICAgICAgbW92ZVRvT3JpZ2luID0gdHJ1
ZTsKKyAgICB9CisgICAgKi8KKworICAgIGlmIChtb3ZlVG9PcmlnaW4pCisgICAgICAgIGFkanVz
dGVkUmVjdC5tb3ZlQnkoZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWlu
WE1pbllDb3JuZXIoKSkpOworCisgICAgaWYgKGF1dG8qIHRyYW5zZm9ybSA9IGxheWVyKCktPnRy
YW5zZm9ybSgpKQorICAgICAgICBhZGp1c3RlZFJlY3QgPSB0cmFuc2Zvcm0tPm1hcFJlY3QoYWRq
dXN0ZWRSZWN0KTsKKworICAgIHJldHVybiBsb2NhbENvbnRhaW5lci0+Y29tcHV0ZVZpc2libGVS
ZWN0SW5Db250YWluZXIoYWRqdXN0ZWRSZWN0LCBjb250YWluZXIsIGNvbnRleHQpOworfQorCit2
b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6Om1hcExvY2FsVG9TVkdDb250YWluZXIoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRl
JiB0cmFuc2Zvcm1TdGF0ZSwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4gbW9kZSwgYm9v
bCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5k
ZXJTVkdCbG9jayBjaGFuZ2VzCisgICAgLy8gQVNTRVJUKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0
Pih0aGlzKSB8fCBpczxSZW5kZXJTVkdCbG9jaz4odGhpcykpOworICAgIEFTU0VSVChpczxSZW5k
ZXJTVkdNb2RlbE9iamVjdD4odGhpcykpOworICAgIEFTU0VSVChzdHlsZSgpLnBvc2l0aW9uKCkg
PT0gUG9zaXRpb25UeXBlOjpTdGF0aWMpOworCisgICAgaWYgKGFuY2VzdG9yQ29udGFpbmVyID09
IHRoaXMpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmlldygp
LmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOworCisgICAgYm9v
bCBhbmNlc3RvclNraXBwZWQ7CisgICAgYXV0byogY29udGFpbmVyID0gdGhpcy0+Y29udGFpbmVy
KGFuY2VzdG9yQ29udGFpbmVyLCBhbmNlc3RvclNraXBwZWQpOworICAgIGlmICghY29udGFpbmVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfVU5VU0VEKGFuY2VzdG9yU2tpcHBlZCwg
IWFuY2VzdG9yU2tpcHBlZCk7CisKKyAgICAvLyBJZiB0aGlzIGJveCBoYXMgYSB0cmFuc2Zvcm0s
IGl0IGFjdHMgYXMgYSBmaXhlZCBwb3NpdGlvbiBjb250YWluZXIgZm9yIGZpeGVkIGRlc2NlbmRh
bnRzLAorICAgIC8vIGFuZCBtYXkgaXRzZWxmIGFsc28gYmUgZml4ZWQgcG9zaXRpb24uIFNvIHBy
b3BhZ2F0ZSAnZml4ZWQnIHVwIG9ubHkgaWYgdGhpcyBib3ggaXMgZml4ZWQgcG9zaXRpb24uCisg
ICAgaWYgKGhhc1RyYW5zZm9ybSgpKQorICAgICAgICBtb2RlLnJlbW92ZShJc0ZpeGVkKTsKKwor
ICAgIGlmICh3YXNGaXhlZCkKKyAgICAgICAgKndhc0ZpeGVkID0gbW9kZS5jb250YWlucyhJc0Zp
eGVkKTsKKworICAgIGF1dG8gY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcigq
Y29udGFpbmVyLCBMYXlvdXRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKSk7CisK
KyAgICBib29sIHByZXNlcnZlM0QgPSBtb2RlICYgVXNlVHJhbnNmb3JtcyAmJiAoY29udGFpbmVy
LT5zdHlsZSgpLnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS5wcmVzZXJ2ZXMzRCgpKTsKKyAgICBp
ZiAobW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5l
cihjb250YWluZXIpKSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7CisgICAgICAg
IGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyLCBjb250YWluZXJPZmZzZXQsIHQp
OworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybSh0LCBwcmVzZXJ2ZTNEID8g
VHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6Rmxh
dHRlblRyYW5zZm9ybSk7CisgICAgfSBlbHNlCisgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUo
Y29udGFpbmVyT2Zmc2V0LndpZHRoKCksIGNvbnRhaW5lck9mZnNldC5oZWlnaHQoKSwgcHJlc2Vy
dmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3Rh
dGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworCisgICAgbW9kZS5yZW1vdmUoQXBwbHlDb250YWluZXJG
bGlwKTsKKworICAgIGNvbnRhaW5lci0+bWFwTG9jYWxUb0NvbnRhaW5lcihhbmNlc3RvckNvbnRh
aW5lciwgdHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKK30KKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGQxMThkYzgxYTZhN2M2MGJiNDNiMjcxYzczNWIy
MWQ2Njk4Yzg3MWUuLjljMzE0YWZiMTBkOGM1YTcwMmFmZTIwMjY1M2ZkYTcwNGJkZjY4YmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
aApAQCAtNjcsNiArNjcsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9u
cyhNb25vdG9uaWNUaW1lID0gTW9ub3RvbmljVGltZSgpKSBvdmVycmlkZTsKIAorI2lmIEVOQUJM
RShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIC8vIFByb3ZpZGVzIHRoZSBTVkcgaW1wbGVt
ZW50YXRpb24gZm9yIGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKCkuCisgICAgLy8gVGhp
cyBsaXZlcyBpbiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCB3aGljaCBpcyB0aGUgY29tbW9uIGJh
c2UtY2xhc3MgZm9yIGFsbCBTVkcgcmVuZGVyZXJzLgorICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0
UmVjdD4gY29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIoY29uc3QgTGF5b3V0UmVjdCYs
IGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlzaWJsZVJlY3RDb250
ZXh0KSBjb25zdDsKKworICAgIC8vIFByb3ZpZGVzIHRoZSBTVkcgaW1wbGVtZW50YXRpb24gZm9y
IG1hcExvY2FsVG9Db250YWluZXIoKS4KKyAgICAvLyBUaGlzIGxpdmVzIGluIFJlbmRlckxheWVy
TW9kZWxPYmplY3QsIHdoaWNoIGlzIHRoZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyBy
ZW5kZXJlcnMuCisgICAgdm9pZCBtYXBMb2NhbFRvU1ZHQ29udGFpbmVyKGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYsIE9wdGlv
blNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhlZCkgY29uc3Q7CisjZW5kaWYK
KwogcHJvdGVjdGVkOgogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QoRWxlbWVudCYsIFJlbmRl
clN0eWxlJiYsIEJhc2VUeXBlRmxhZ3MpOwogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QoRG9j
dW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBCYXNlVHlwZUZsYWdzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzg2ZjA1YWQwZTZjNzBiZjc4MGNjZjkwMzY3ODcwN2FjYWViMjAxNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0
LmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyNpbmNsdWRlICJSZW5k
ZXJHZW9tZXRyeU1hcC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR0dyYXBoaWNzRWxlbWVudC5oIgor
I2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVk
ZSAiU1ZHUGF0aERhdGEuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNoZS5oIgorI2luY2x1
ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVu
ZGVyU1ZHTW9kZWxPYmplY3QpOworCitSZW5kZXJTVkdNb2RlbE9iamVjdDo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3QoU1ZHRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKKyAgICA6
IFJlbmRlckxheWVyTW9kZWxPYmplY3QoZWxlbWVudCwgV1RGTW92ZShzdHlsZSksIDApCit7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSgpCit7CisgICAg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBkYXRlRnJvbVN0eWxlKCk7CisgICAgc2V0SGFzVHJh
bnNmb3JtUmVsYXRlZFByb3BlcnR5KHN0eWxlKCkuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5
KCkpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICBpZiAoUmVuZGVyT2Jq
ZWN0Ojpub2RlKCkgJiYgaXM8U1ZHR3JhcGhpY3NFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3Vz
KCkpKQorICAgICAgICB0cmFuc2Zvcm0gPSBkb3duY2FzdDxTVkdHcmFwaGljc0VsZW1lbnQ+KG5v
ZGVGb3JOb25Bbm9ueW1vdXMoKSkuYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOworCisgICAgLy8g
RklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJPYmplY3QgY2hhbmdlcworICAgIC8vIGlmICgh
dHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAvLyAgICAgc2V0SGFzU1ZHVHJhbnNmb3JtKCk7
Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJh
Z21lbnRFcXVpdmFsZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiwgUmVuZGVyQm94OjpSZW5k
ZXJCb3hGcmFnbWVudEluZm9GbGFncykgY29uc3QKK3sKKyAgICByZXR1cm4gYm9yZGVyQm94UmVj
dEVxdWl2YWxlbnQoKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3Zl
cmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYsIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIFBhaW50UGhhc2UpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIExheW91dFJlY3QoKTsKK30KKwor
TGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2xpcHBlZE92ZXJmbG93UmVjdChjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENv
bnRleHQgY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0g
VmlzaWJpbGl0eTo6VmlzaWJsZSAmJiAhZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRl
bnQoKSkKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKworICAgIEFTU0VSVCghdmlldygp
LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkp
OworICAgIHJldHVybiBjb21wdXRlUmVjdCh2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCks
IHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOworfQorCitzdGQ6Om9wdGlvbmFsPExheW91dFJl
Y3Q+IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcihj
b25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250
YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAoreworICAgIHJldHVybiBj
b21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lcihyZWN0LCBjb250YWluZXIsIGNvbnRleHQp
OworfQorCitjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlclNWR01vZGVsT2JqZWN0OjpwdXNoTWFw
cGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9T
dG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoYW5jZXN0b3JUb1N0b3BBdCAhPSB0aGlzKTsKKyAgICBBU1NFUlQoc3R5bGUoKS5wb3NpdGlv
bigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljKTsKKworICAgIGJvb2wgYW5jZXN0b3JTa2lwcGVk
OworICAgIFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lciA9IHRoaXMtPmNvbnRhaW5lcihhbmNlc3Rv
clRvU3RvcEF0LCBhbmNlc3RvclNraXBwZWQpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVF9VTlVTRUQoYW5jZXN0b3JTa2lwcGVkLCAh
YW5jZXN0b3JTa2lwcGVkKTsKKworICAgIGJvb2wgb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSBmYWxz
ZTsKKyAgICBMYXlvdXRTaXplIGNvbnRhaW5lck9mZnNldCA9IG9mZnNldEZyb21Db250YWluZXIo
KmNvbnRhaW5lciwgTGF5b3V0UG9pbnQoKSwgJm9mZnNldERlcGVuZHNPblBvaW50KTsKKworICAg
IGJvb2wgcHJlc2VydmUzRCA9IGNvbnRhaW5lci0+c3R5bGUoKS5wcmVzZXJ2ZXMzRCgpIHx8IHN0
eWxlKCkucHJlc2VydmVzM0QoKTsKKyAgICBpZiAoc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRh
aW5lcihjb250YWluZXIpICYmIChnZW9tZXRyeU1hcC5tYXBDb29yZGluYXRlc0ZsYWdzKCkgJiBV
c2VUcmFuc2Zvcm1zKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAg
ICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0
KTsKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlzLCB0LCBwcmVzZXJ2ZTNELCBvZmZzZXRE
ZXBlbmRzT25Qb2ludCwgZmFsc2UgLyogaXNGaXhlZFBvcyAqLywgaGFzVHJhbnNmb3JtKCkpOwor
ICAgIH0gZWxzZQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoKHRoaXMsIGNvbnRhaW5lck9mZnNl
dCwgcHJlc2VydmUzRCwgb2Zmc2V0RGVwZW5kc09uUG9pbnQsIGZhbHNlIC8qIGlzRml4ZWRQb3Mg
Ki8sIGhhc1RyYW5zZm9ybSgpKTsKKworICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK0xheW91
dFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdl
b21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIXZpZXcoKS5mcmFt
ZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5hYmxlZCgpKTsKKwor
ICAgIGF1dG8gb3V0bGluZUJvdW5kcyA9IHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKTsK
KworICAgIGlmIChyZXBhaW50Q29udGFpbmVyICE9IHRoaXMpIHsKKyAgICAgICAgRmxvYXRRdWFk
IGNvbnRhaW5lclJlbGF0aXZlUXVhZDsKKyAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQorICAgICAg
ICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gZ2VvbWV0cnlNYXAtPm1hcFRvQ29udGFpbmVy
KG91dGxpbmVCb3VuZHMsIHJlcGFpbnRDb250YWluZXIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJl
Y3Qob3V0bGluZUJvdW5kcyksIHJlcGFpbnRDb250YWluZXIpOworCisgICAgICAgIG91dGxpbmVC
b3VuZHMgPSBMYXlvdXRSZWN0KGNvbnRhaW5lclJlbGF0aXZlUXVhZC5ib3VuZGluZ0JveCgpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gb3V0bGluZUJvdW5kczsKK30KKwordm9pZCBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0Cit7CisgICAgcmVjdHMuYXBwZW5k
KHNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2Nh
dGlvbigpLCBsYXlvdXRTaXplKCkpKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6
OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkg
Y29uc3QKK3sKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChvYmplY3RCb3Vu
ZGluZ0JveCgpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOworfQorCit2b2lkIFJlbmRlclNW
R01vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKQoreworICAgIFNWR1Jlc291cmNlc0NhY2hl
OjpjbGllbnREZXN0cm95ZWQoKnRoaXMpOworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6Ondp
bGxCZURlc3Ryb3llZCgpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KQoreworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9s
ZFN0eWxlKTsKKworICAgIC8vIFNWRyBtYXNrcyBhcmUgcGFpbnRlZCBpbmRlcGVuZGVudCBvZiB0
aGUgdGFyZ2V0IHJlbmRlcmVycyB2aXNpYmlsaXR5LgorICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBz
dHJlYW0gUmVuZGVyRWxlbWVudCBjaGFuZ2VzCisgICAgLy8gYm9vbCBoYXNTVkdNYXNrID0gaGFz
U1ZHTWFzaygpOworICAgIGJvb2wgaGFzU1ZHTWFzayA9IGZhbHNlOworICAgIGlmIChoYXNTVkdN
YXNrICYmIGhhc0xheWVyKCkgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6
VmlzaWJsZSkKKyAgICAgICAgbGF5ZXIoKS0+c2V0SGFzVmlzaWJsZUNvbnRlbnQoKTsKKworICAg
IFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQoKnRoaXMsIGRpZmYsIHN0eWxl
KCkpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBBYnNvbHV0ZVRvTG9jYWxQ
b2ludChPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBtb2RlLCBUcmFuc2Zvcm1TdGF0ZSYg
dHJhbnNmb3JtU3RhdGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0eWxlKCkucG9zaXRpb24oKSA9
PSBQb3NpdGlvblR5cGU6OlN0YXRpYyk7CisKKyAgICBpZiAoaGFzVHJhbnNmb3JtKCkpCisgICAg
ICAgIG1vZGUucmVtb3ZlKElzRml4ZWQpOworCisgICAgYXV0byogY29udGFpbmVyID0gdGhpcy0+
cGFyZW50KCk7CisgICAgaWYgKCFjb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGNv
bnRhaW5lci0+bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQobW9kZSwgdHJhbnNmb3JtU3RhdGUpOwor
CisgICAgTGF5b3V0U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKCpj
b250YWluZXIsIExheW91dFBvaW50KCkpOworCisgICAgYm9vbCBwcmVzZXJ2ZTNEID0gbW9kZSAm
IFVzZVRyYW5zZm9ybXMgJiYgKGNvbnRhaW5lci0+c3R5bGUoKS5wcmVzZXJ2ZXMzRCgpIHx8IHN0
eWxlKCkucHJlc2VydmVzM0QoKSk7CisgICAgaWYgKG1vZGUgJiBVc2VUcmFuc2Zvcm1zICYmIHNo
b3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyKSkgeworICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNv
bnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0KTsKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUuYXBw
bHlUcmFuc2Zvcm0odCwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJh
bnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgIH0gZWxzZQor
ICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9mZnNldC53aWR0aCgpLCBjb250
YWluZXJPZmZzZXQuaGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11
bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmIHRy
YW5zZm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBtb2RlLCBib29sKiB3
YXNGaXhlZCkgY29uc3QKK3sKKyAgICBtYXBMb2NhbFRvU1ZHQ29udGFpbmVyKGFuY2VzdG9yQ29u
dGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQpOworfQorCitMYXlvdXRTaXpl
IFJlbmRlclNWR01vZGVsT2JqZWN0OjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVsZW1lbnQm
IGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKikgY29uc3QKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKGNvbnRhaW5lciwgJmNvbnRhaW5lciA9PSB0aGlzLT5jb250YWluZXIoKSk7Cisg
ICAgQVNTRVJUKCFpc0luRmxvd1Bvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKCFpc0Fic29sdXRl
bHlQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVChpc0lubGluZSgpKTsKKyAgICByZXR1cm4gTGF5
b3V0U2l6ZSgpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRp
b25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCopCit7CisgICAgYXV0byBy
ZXBhaW50Qm91bmRpbmdCb3ggPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHRoaXMtPnJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIGlmIChyZXBhaW50Qm91bmRpbmdCb3guc2l6ZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0
KGFkZGl0aW9uYWxPZmZzZXQsIHJlcGFpbnRCb3VuZGluZ0JveC5zaXplKCkpKTsKK30KKworYm9v
bCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2hvdWxkUGFpbnRTVkdSZW5kZXJlcihjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbykgY29uc3QKK3sKKyAgICBBU1NFUlQoIXBhaW50SW5mby5jb250ZXh0
KCkucGFpbnRpbmdEaXNhYmxlZCgpKTsKKworICAgIGlmICgocGFpbnRJbmZvLnBoYXNlICE9IFBh
aW50UGhhc2U6OkZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkNs
aXBwaW5nTWFzayAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6TWFzayAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6T3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
SGlkZGVuIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpOb25lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRmxvYXRSZWN0Ojpp
bnRlcnNlY3RzIGRvZXMgbm90IGNvbnNpZGVyIGhvcml6b250YWwgb3IgdmVydGljYWwgbGluZXMg
KGJlY2F1c2Ugb2YgaXNFbXB0eSgpKS4KKy8vIFNvIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBvZiBz
dWNoIGxpbmVzLgorc3RhdGljIGJvb2wgaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkoY29uc3QgRmxv
YXRSZWN0JiByLCBjb25zdCBGbG9hdFJlY3QmIG90aGVyKQoreworICAgIGlmIChyLmlzRW1wdHko
KSAmJiBvdGhlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoci5p
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIChvdGhlci5jb250
YWlucyhyLngoKSwgci55KCkpICYmICFvdGhlci5jb250YWlucyhyLm1heFgoKSwgci5tYXhZKCkp
KSB8fCAoIW90aGVyLmNvbnRhaW5zKHIueCgpLCByLnkoKSkgJiYgb3RoZXIuY29udGFpbnMoci5t
YXhYKCksIHIubWF4WSgpKSk7CisgICAgaWYgKG90aGVyLmlzRW1wdHkoKSAmJiAhci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0eShvdGhlciwgcik7Cisg
ICAgcmV0dXJuIHIuaW50ZXJzZWN0cyhvdGhlcik7Cit9CisKKy8vIE9uZSBvZiB0aGUgZWxlbWVu
dCB0eXBlcyB0aGF0IGNhbiBjYXVzZSBncmFwaGljcyB0byBiZSBkcmF3biBvbnRvIHRoZSB0YXJn
ZXQgY2FudmFzLiBTcGVjaWZpY2FsbHk6IGNpcmNsZSwgZWxsaXBzZSwKKy8vIGltYWdlLCBsaW5l
LCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZSwgcmVjdCwgdGV4dCBhbmQgdXNlLgorc3RhdGljIGJv
b2wgaXNHcmFwaGljc0VsZW1lbnQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyLmlzU1ZHU2hhcGUoKSB8fCByZW5kZXJlci5pc1NWR1RleHQoKSB8
fCByZW5kZXJlci5pc1NWR0ltYWdlKCkgfHwgcmVuZGVyZXIuZWxlbWVudCgpLT5oYXNUYWdOYW1l
KFNWR05hbWVzOjp1c2VUYWcpOworfQorCitib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVj
a0ludGVyc2VjdGlvbihSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkucG9pbnRlckV2
ZW50cygpID09IFBvaW50ZXJFdmVudHM6Ok5vbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWlzR3JhcGhpY3NFbGVtZW50KCpyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVu
ZGVyZXItPmVsZW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPFNWR0dyYXBoaWNzRWxlbWVudD4oc3Zn
RWxlbWVudCkpOworICAgIGF1dG8gY3RtID0gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50Pigq
c3ZnRWxlbWVudCkuZ2V0Q1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7Cisg
ICAgcmV0dXJuIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KHJlY3QsIGN0bS5tYXBSZWN0KHJlbmRl
cmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Cit9CisKK2Jvb2wgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmNoZWNrRW5jbG9zdXJlKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+
c3R5bGUoKS5wb2ludGVyRXZlbnRzKCkgPT0gUG9pbnRlckV2ZW50czo6Tm9uZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghaXNHcmFwaGljc0VsZW1lbnQoKnJlbmRlcmVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBkb3duY2Fz
dDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKKyAgICBBU1NFUlQoaXM8U1ZHR3Jh
cGhpY3NFbGVtZW50PihzdmdFbGVtZW50KSk7CisgICAgYXV0byBjdG0gPSBkb3duY2FzdDxTVkdH
cmFwaGljc0VsZW1lbnQ+KCpzdmdFbGVtZW50KS5nZXRDVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxv
d1N0eWxlVXBkYXRlKTsKKyAgICByZXR1cm4gcmVjdC5jb250YWlucyhjdG0ubWFwUmVjdChyZW5k
ZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworfQorCit2b2lkIFJlbmRl
clNWR01vZGVsT2JqZWN0OjphcHBseVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRp
bmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPiBv
cHRpb25zKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTSh0cmFuc2Zvcm0pOworICAgIFVOVVNF
RF9QQVJBTShzdHlsZSk7CisgICAgVU5VU0VEX1BBUkFNKGJvdW5kaW5nQm94KTsKKyAgICBVTlVT
RURfUEFSQU0ob3B0aW9ucyk7CisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5k
ZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAvLyBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVRyYW5zZm9y
bSgqdGhpcywgdHJhbnNmb3JtLCBzdHlsZSwgYm91bmRpbmdCb3gsIHN0ZDo6bnVsbG9wdCwgc3Rk
OjpudWxsb3B0LCBvcHRpb25zKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDNk
YzIxYWJjODZlMjEzNTY4OTkxZmZlZWU3YjRlNzIyYjg0OGNkNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAt
MCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisv
LyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKy8vICNp
bmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBNb3N0IHJlbmRlcmVycyBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlIHdpbGwgaW5o
ZXJpdCBmcm9tIHRoaXMgY2xhc3MKKy8vIGJ1dCBub3QgYWxsLiBSZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0LCBSZW5kZXJTVkdCbG9jaywgZXRjLiBpbmhlcml0IGZyb20KKy8vIGV4aXN0aW5nIFJlbmRl
ckJsb2NrIGNsYXNzZXMsIHRoYXQgYWxsIGluaGVyaXQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0CisvLyBkaXJlY3RseSwgd2l0aG91dCBSZW5kZXJTVkdNb2RlbE9iamVjdCBpbmJldHdlZW4u
IFRoZXJlZm9yZSBjb2RlIHdoaWNoCisvLyBuZWVkcyB0byBiZSBzaGFyZWQgYmV0d2VlbiBhbGwg
U1ZHIHJlbmRlcmVycyBnb2VzIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QuCitjbGFzcyBTVkdF
bGVtZW50OworCitjbGFzcyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR01vZGVs
T2JqZWN0KTsKK3B1YmxpYzoKKyAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKKworICAgIHN0YXRp
YyBib29sIGNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICBzdGF0aWMgYm9vbCBjaGVja0VuY2xvc3VyZShSZW5kZXJFbGVtZW50KiwgY29uc3Qg
RmxvYXRSZWN0Jik7CisKKyAgICBTVkdFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
ZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQorCisgICAgLy8g
RklYTUU6IFtMQlNFXSBNYXJrIGZpbmFsLCBhZGQgYXBwbHlUcmFuc2Zvcm0gdG8gUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdAorICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9w
dGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisK
KyAgICAvLyBNaW1pYyB0aGUgUmVuZGVyQm94IGFjY2Vzc29ycyAtIGJ5IHNoYXJpbmcgdGhlIHNh
bWUgdGVybWlub2xvZ3kgdGhlIHBhaW50aW5nIC8gaGl0IHRlc3RpbmcgLyBsYXlvdXQgbG9naWMg
aXMKKyAgICAvLyBzaW1pbGFyIHRvIHJlYWQgY29tcGFyZWQgdG8gbm9uLVNWRyByZW5kZXJlcnMg
c3VjaCBhcyBSZW5kZXJCb3ggJiBmcmllbmRzLgorICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVj
dEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiB7IExheW91dFBvaW50KCksIG1fbGF5b3V0UmVj
dC5zaXplKCkgfTsgfQorICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50KCkg
Y29uc3QgeyByZXR1cm4gYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsgfQorICAgIExheW91dFJl
Y3QgZnJhbWVSZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQor
CisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbgorICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29t
cHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CisgICAgfQorCisgICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxl
bnQoTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlv
bigpKTsgfQorCisgICAgTGF5b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9s
YXlvdXRSZWN0OyB9CisgICAgdm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxh
eW91dFJlY3QpIHsgbV9sYXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0TGF5
b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0
UmVjdC5zZXRMb2NhdGlvbihsYXlvdXRMb2NhdGlvbik7IH0KKworICAgIExheW91dFBvaW50IHBh
aW50aW5nTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0
aW9uKCkgLSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNv
cm5lcigpKSk7IH0KKyAgICBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9CisgICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2Nh
dGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9j
YXRpb24oKSk7IH0KKyAgICBMYXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBt
X2xheW91dFJlY3Quc2l6ZSgpOyB9CisKKyAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAg
IEZsb2F0UmVjdCBib3JkZXJCb3hSZWN0SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqLCBSZW5kZXJCb3g6OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gUmVu
ZGVyQm94OjpDYWNoZVJlbmRlckJveEZyYWdtZW50SW5mbykgY29uc3Q7CisgICAgdmlydHVhbCBM
YXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQ
aGFzZTo6QmxvY2tCYWNrZ3JvdW5kKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xp
cFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
cmVsZXZhbmN5KSB7IHJldHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwg
cmVsZXZhbmN5KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZH
RWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOworCisgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIG92ZXJyaWRlOworICAgIGJvb2wg
c2hvdWxkUGFpbnRTVkdSZW5kZXJlcihjb25zdCBQYWludEluZm8mKSBjb25zdDsKKworICAgIExh
eW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gY29tcHV0ZVZpc2libGVSZWN0SW5Db250YWlu
ZXIoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRh
aW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1hcEFic29s
dXRlVG9Mb2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBUcmFuc2Zvcm1T
dGF0ZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3Rh
dGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0
IGZpbmFsOworICAgIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2VvbWV0
cnlNYXAqKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHB1c2hNYXBwaW5n
VG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCosIFJlbmRlckdlb21ldHJ5
TWFwJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVy
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqIG9mZnNldERlcGVuZHNP
blBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlv
bmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENvbnRhaW5lciA9
IDApIG92ZXJyaWRlOworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHIG91dGxpbmUg
cGFpbnRpbmcgZnVuY3Rpb25hbGl0eQorICAgIC8vIHZvaWQgcGFpbnRTVkdPdXRsaW5lKFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKworcHJpdmF0
ZToKKyAgICBib29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICBMYXlvdXRSZWN0IG1fbGF5b3V0UmVjdDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJl
bmRlclNWR01vZGVsT2JqZWN0LCBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkpCisKKyNlbmRpZiAv
LyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448214</attachid>
            <date>2022-01-03 00:34:53 -0800</date>
            <delta_ts>2022-01-03 03:34:48 -0800</delta_ts>
            <desc>Patch, v7</desc>
            <filename>bug-234524-20220103003451.patch</filename>
            <type>text/plain</type>
            <size>38907</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2U1YTM3MTQ4YWI0MmYz
NTg4NGQxYzU0MmVlOTE1ODg0ODdkNTM3ZS4uOTJjN2EyNGUyMTcxODllNWY5YTQwOWQ4N2Q4ZDgw
NzkxZmJhZmZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMi0wMS0wMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGlt
cGxlbWVudGluZyBSZW5kZXJTVkdNb2RlbE9iamVjdCAtIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0
IGdyYXBoaWNzCisgICAgICAgIHByaW1pdGl2ZXMgaW4gU1ZHIChwYXRoIC8gcmVjdCAvIGNpcmNs
ZSAvIGltYWdlIC8gLi4uKSBmb3IgdGhlIExCU0UuCisKKyAgICAgICAgSW4gdGhlIGxlZ2FjeSBl
bmdpbmUsIFJlbmRlclNWR0ltYWdlIC8gUmVuZGVyU1ZHU2hhcGUgLyBSZW5kZXJTVkdDb250YWlu
ZXIgaW5oZXJpdAorICAgICAgICBmcm9tIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LCB3aGlj
aCBpbiB0dXJuIGluaGVyaXRzIGZyb20gUmVuZGVyRWxlbWVudC4gVGhlIFNWRworICAgICAgICA8
dGV4dD4gLyA8Zm9yZWlnbk9iamVjdD4gcmVuZGVyZXJzIGluaGVyaXQgZnJvbSB0aGVpciBleGlz
dGluZyAiSFRNTCBjb3VudGVycGFydHMiCisgICAgICAgIGUuZy4gUmVuZGVyU1ZHQmxvY2sgZnJv
bSBSZW5kZXJCbG9ja0Zsb3csIG9yIFJlbmRlclNWR0lubGluZSBmcm9tIFJlbmRlcklubGluZS4K
KworICAgICAgICBUaGlzIGhhcyBoaXN0b3JpY2FsIHJlYXNvbnM6IFdoZW4gU1ZHIHRleHQgcmVu
ZGVyaW5nIHdhcyBwcm90b3R5cGVkIGluIFdlYkNvcmUsIGEgZ29hbCB3YXMgdG8KKyAgICAgICAg
cmUtdXNlIHRoZSBleGlzdGluZyBIVE1ML0NTUyB0ZXh0IHJlbmRlcmluZyBjb2RlIHdoZW5ldmVy
IHBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIFNWRyB0ZXh0CisgICAgICAgIHJlbmRlcmVycyB3ZXJl
IG1vZGVsbGVkIGluIHRoZSB0ZXJtaW5vbG9neSBvZiBIVE1ML0NTUzogQSBuYXR1cmFsIGNob2lj
ZSBpcyB0byB0cmVhdCBhIFNWRworICAgICAgICA8dGV4dD4gZWxlbWVudCBhcyBhIENTUyAiYmxv
Y2stbGV2ZWwgZWxlbWVudCIgYW5kIDx0c3Bhbj4gLyA8dGV4dFBhdGg+IC8gPHRyZWY+IC8gLi4u
CisgICAgICAgIGVsZW1lbnRzIGFzIENTUyAiaW5saW5lIGVsZW1lbnRzIi4gVGhlc2UgZGVzaWdu
IGNob2ljZXMgZnJvbSBhbG1vc3QgdHdvIGRlY2FkZXMgYWdvLCBhcmUKKyAgICAgICAgdGhlIHJl
YXNvbiBmb3IgdGhlIHVubmVjZXNzYXJ5IGNvbmZ1c2luZyBTVkcgaW5oZXJpdGFuY2Ugc3RydWN0
dXJlLiBGdXJ0aGVybW9yZSB3ZSBleHBsaWNpdGx5CisgICAgICAgIGRpc2FibGUgbGF5ZXIgc3Vw
cG9ydCBpbiBhbGwgU1ZHIGNsYXNzZXMgdGhhdCBpbmRpcmVjdGx5IGluaGVyaXQgZnJvbSBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LgorCisgICAgICAgIEhvd2V2ZXIgZm9yIExCU0Ugd2UgZG8gd2Fu
dCBTVkcgdG8gcGFydGljaXBhdGUgaW4gdGhlIGxheWVyIHRyZWUuCisgICAgICAgIFRoZXJlZm9y
ZSBsZXQgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuIFRoaXMgdHVybnMKKyAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbnRvIHRo
ZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMgaW4gTEJTRS4KKworICAg
ICAgICBUaGUgcHJpY2UgZm9yIHRoZSBsYXllciBzdXBwb3J0IGlzIHRoYXQgYWxsIFNWRyByZW5k
ZXJlcnMgbmVlZCB0byBiZSBhYmxlIHRvIGFuc3dlciBxdWVzdGlvbnMKKyAgICAgICAgaW4gSFRN
TC9DU1MgbGFuZ3VhZ2UgKHdoYXQncyB5b3VyICdib3JkZXIgYm94IHJlY3QnPyBkbyB5b3UgaGF2
ZSB2aXN1YWwgb3ZlcmZsb3c/IGV0Yy4pLgorICAgICAgICBGaW5kaW5nIGNvbnNpc3RlbnQgZGVm
aW5pdGlvbnMvbWFwcGluZ3Mgd2FzIGEgdGVkaW91cyBqb2IsIHRoYXQgaXMgZnVsbHkgc29sdmVk
IGluIExCU0UgYW5kCisgICAgICAgIHdpbGwgYmUgdXBzdHJlYW1lZCBpbiBwaWVjZXMuIFRoaXMg
cGF0Y2ggaXMgb25lIG1haW4gcGllY2Ugb2YgdGhlIHdvcmsuCisKKyAgICAgICAgSWYgd2UgZm9y
Z2V0IGFib3V0IHRoZSBsZWdhY3kgZW5naW5lLCB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlIG5v
dyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgKyBSZW5kZXJPYmplY3QKKyAg
ICAgICAgICAgICsgUmVuZGVyRWxlbWVudAorICAgICAgICAgICAgfCAgICArIFJlbmRlckxheWVy
TW9kZWxPYmplY3QKKyAgICAgICAgICAgIHwgICAgICAgICsgUmVuZGVyQm94TW9kZWxPYmplY3QK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgKyBSZW5kZXJCb3gKKyAgICAgICAgICAgIHwgICAg
ICAgIHwgICAgfCAgICArIFJlbmRlclJlcGxhY2VkIChDU1MgInJlcGxhY2VkIiBlbGVtZW50cykK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUm9vdCAob3V0
ZXJtb3N0IDxzdmc+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgfAor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyQmxvY2sgKENTUyAiYmxvY2st
bGV2ZWwiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICArIFJl
bmRlckJsb2NrRmxvdworICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICAgKyBS
ZW5kZXJTVkdCbG9jayAoSFRNTC9TVkcgZ2x1ZSBjb2RlKQorICAgICAgICAgICAgfCAgICAgICAg
fCAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCAoPGZvcmVpZ25P
YmplY3Q+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgICAg
ICAgKyBSZW5kZXJTVkdUZXh0ICg8dGV4dD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAg
IHwgICAgfAorICAgICAgICAgICAgfCAgICAgICAgfCAgICArIFJlbmRlcklubGluZSAoQ1NTICJp
bmxpbmUiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgKyBSZW5kZXJT
VkdJbmxpbmUgKEhUTUwvU1ZHIGdsdWUgY29kZSkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAg
ICAgICAgICArIFJlbmRlclNWR1RTcGFuICg8dHNwYW4+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdUZXh0UGF0aCAoPHRleHRQYXRoPiBlbGVt
ZW50KQorICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgKyBSZW5k
ZXJTVkdNb2RlbE9iamVjdAorICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHQ29u
dGFpbmVyCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICArIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lciAoPGRlZnM+IC8gPGc+IHdpdGggJ2Rpc3BsYXk6IG5vbmUnIC8gPHN5bWJvbD4gZWxl
bWVudHMpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyICg8Y2xpcFBhdGg+IGVsZW1lbnQpCisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyICg8
ZmlsdGVyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAg
KyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZQorICAgICAgICAgICAgfCAgICAgICAg
ICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50CisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICB8ICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCAoPGxpbmVhckdyYWRpZW50PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAg
ICAgICAgIHwgICAgfCAgICAgICAgfCAgICArIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQgKDxyYWRpYWxHcmFkaWVudD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8
ICAgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIgKDxtYXJrZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlTWFza2VyICg8bWFz
a2VyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gKDxwYXR0ZXJuPiBlbGVtZW50KQorICAgICAgICAgICAg
fCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IK
KyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAg
ICB8ICAgICsgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciAoPGE+IC8gPGc+IC8gPHN3
aXRjaD4gLyA8dXNlPiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAg
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdJbWFnZSAoPGltYWdlPiBlbGVtZW50KQor
ICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHU2hhcGUgKDxyZWN0PiAvIDxjaXJj
bGU+IC8gPHBhdGg+IC4uLiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
KyBSZW5kZXJTVkdFbGxpcHNlCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVy
U1ZHUGF0aAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICArIFJlbmRlclNWR1JlY3QKKyAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICsgUmVuZGVyVGV4dCAoI3RleHQgbm9kZXMgaW4gSFRN
TCkKKyAgICAgICAgICAgICAgICArIFJlbmRlclNWR0lubGluZVRleHQgKCN0ZXh0IG5vZGVzIGlu
IFNWRykKKworICAgICAgICBUaGlzIGlzIHdheSBsZXNzIGNvbmZ1c2luZyB0aGVuIHRoZSBwcmV2
aW91cyB2ZXJzaW9uIG9mIHRoZSBTVkcgcmVuZGVyIHRyZWUuCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdD
b250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6bWFwTG9jYWxUb1NWR0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFic29sdXRlUXVhZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvZmZzZXRGcm9t
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6c2hvdWxkUGFpbnRTVkdSZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpp
bnRlcnNlY3RzQWxsb3dpbmdFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRl
cnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNr
RW5jbG9zdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjphcHBs
eVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjplbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
Ojpib3JkZXJCb3hSZWN0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Y29udGVudEJveFJlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpmcmFtZVJlY3RFcXVpdmFsZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojp2aXN1YWxPdmVy
Zmxvd1JlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01v
ZGVsT2JqZWN0OjphcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldExheW91dFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldExheW91dExvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpwYWludGluZ0xv
Y2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojps
YXlvdXRMb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6bGF5b3V0TG9jYXRpb25PZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyk6CisK
IDIwMjItMDEtMDMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAg
IEZldGNoUmVxdWVzdC5jbG9uZSBkb2VzIG5vdCBuZWVkIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBj
dXJyZW50IGNvbnRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYmQ1YTc0NzljYjM5ZTQ2Y2M5MTA0MDBm
NGVlMzg0OTMyNGM3NTMxZi4uNjFlMmI5ZGVjNmUzMjdmZmJhYjM4MzZkMTJjYjk0NzEwMmRlODYx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTI0NzcsNiArMjQ3Nyw3IEBAIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5j
cHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcAorcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVjdC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2M5
ZWMyNWMwYTkyNDYwNmFlMmViMzI3NjRhMTc4ZGRjYzk0NDNmOC4uN2YyZGYwNDUxMTc0ODlhOGUw
ZGYzMjJkMzhhNzE0NzcxYmE5MTdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI0Myw2ICsxMjQzLDcgQEAKIAkJNDM2NzA4
QzcxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4ODgxMkQ5Q0E0QTAw
MDQ0MjM0IC8qIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oICovOyB9OwogCQk0MzY3MDhDOTEy
RDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODhBMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdJbWFnZS5oICovOyB9OwogCQk0MzY3MDhDQjEyRDlDQTRCMDAwNDQyMzQgLyogTGVnYWN5
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzNjcwODhDMTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdN
b2RlbE9iamVjdC5oICovOyB9OworCQk0MzY3MEM5MzQyRDlCQzRCMDAwNDQyMzQgLyogUmVuZGVy
U1ZHTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQzNjcwOEZEMTJEOUNBNEEwMDAzMjExNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5o
ICovOyB9OwogCQk0MzY3MDhDRDEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODhF
MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oICovOyB9OwogCQk0MzY3MDhD
RjEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg5MDEyRDlDQTRBMDAw
NDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggKi87IH07CiAJCTQzNjcwOEQxMTJE
OUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OTIxMkQ5Q0E0QTAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggKi87IH07CkBAIC04OTgwLDYgKzg5
ODEsOCBAQAogCQk0MzY3MDg4ODEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0hpZGRl
bkNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4OTEyRDlD
QTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0MzY3MDg4QTEyRDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHSW1hZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSW1hZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2NzA4OEQzNEU5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNW
R01vZGVsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlclNWR01vZGVsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM2
NzA4RkQxMkQ5Q0E0QTAwMDMyMTE0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR01vZGVsT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODhCMTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdhY3lS
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMZWdhY3lSZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQzNjcwODhDMTJEOUNBNEEwMDA0NDIzNCAvKiBMZWdhY3lSZW5kZXJTVkdNb2Rl
bE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lSZW5kZXJT
VkdNb2RlbE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDg4RDEy
RDlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTg5MjQsNiArMTg5MjcsOCBAQAogCQkJCUNERjc0N0U4MjcwRjZD
QUUwMDhGRUVFQyAvKiBSZW5kZXJTVkdJbmxpbmVJbmxpbmVzLmggKi8sCiAJCQkJMDg1NEIwMDQx
MjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuY3BwICovLAogCQkJCTA4NTRC
MDA1MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggKi8sCisJCQkJNDM2
NzA4OEQzNEU5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLywKKwkJ
CQk0MzY3MDhGRDEyRDlDQTRBMDAwMzIxMTQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLywK
IAkJCQlBRERGMUFENDEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5jcHAgKi8sCiAJ
CQkJQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguaCAqLywKIAkJCQlB
MTBCQjU4MjE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVyU1ZHUmVjdC5jcHAgKi8sCkBAIC0zNjcx
MSw2ICszNjcxNiw3IEBACiAJCQkJMDg1NEIwMTUxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNW
R0lubGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNzQ3RTkyNzBGNkNBRTAwOEZFRUVDIC8q
IFJlbmRlclNWR0lubGluZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDE3MTI1
NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdJbmxpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0MzY3MEM5MzQyRDlCQzRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEREYxQUQ3MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRo
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBCQjU4NTE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVy
U1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCBmMjk1MDRhMmYz
MmU4NWFkNTgzMjdmNjZhMzRiMTkxMjhiNmQ2ODc4Li44ZDk5MGYxZDUzMWJlNjNmMmIyNWQwNjE0
NWZiMTMxYzQxMDA3MjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC0yOSw5ICsyOSwxMSBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJSZW5kZXJT
VkdNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybVN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5LDUgKzIzMSw5MiBAQCB2b2lkIFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q6OnN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgdGltZSkKICAgICBsYXll
cigpLT5iYWNraW5nKCktPnN1c3BlbmRBbmltYXRpb25zKHRpbWUpOwogfQogCisjaWYgRU5BQkxF
KExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCitzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRl
ckxheWVyTW9kZWxPYmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVjdEluU1ZHQ29udGFpbmVyKGNvbnN0
IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5l
ciwgUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlclNWR0Jsb2NrIGNoYW5nZXMKKyAgICAv
LyBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHRoaXMpIHx8IGlzPFJlbmRlclNWR0Js
b2NrPih0aGlzKSk7CisgICAgQVNTRVJUKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0Pih0aGlzKSk7
CisKKyAgICBBU1NFUlQoIXN0eWxlKCkuaGFzSW5GbG93UG9zaXRpb24oKSk7CisgICAgQVNTRVJU
KCF2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVu
YWJsZWQoKSk7CisKKyAgICBpZiAoY29udGFpbmVyID09IHRoaXMpCisgICAgICAgIHJldHVybiBy
ZWN0OworCisgICAgYm9vbCBjb250YWluZXJJc1NraXBwZWQ7CisgICAgYXV0byogbG9jYWxDb250
YWluZXIgPSB0aGlzLT5jb250YWluZXIoY29udGFpbmVyLCBjb250YWluZXJJc1NraXBwZWQpOwor
ICAgIGlmICghbG9jYWxDb250YWluZXIpCisgICAgICAgIHJldHVybiByZWN0OworCisgICAgQVNT
RVJUX1VOVVNFRChjb250YWluZXJJc1NraXBwZWQsICFjb250YWluZXJJc1NraXBwZWQpOworCisg
ICAgTGF5b3V0UmVjdCBhZGp1c3RlZFJlY3QgPSByZWN0OworCisgICAgLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0IGNoYW5nZXMKKyAgICAvLyBNb3ZlIHRv
IG9yaWdpbiBvZiBsb2NhbCBjb29yZGluYXRlIHN5c3RlbSwgaWYgdGhpcyBpcyB0aGUgZmlyc3Qg
Y2FsbCB0byBjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcigpIG9yaWdpbmF0aW5nCisgICAg
Ly8gZnJvbSBhIFNWRyByZW5kZXJlciAoUmVuZGVyU1ZHTW9kZWxPYmplY3QgLyBSZW5kZXJTVkdC
bG9jaykgb3IgaWYgd2UgY3Jvc3MgdGhlIGJvdW5kYXJ5IGZyb20gSFRNTCAtPiBTVkcgdmlhIFJl
bmRlclNWR0ZvcmVpZ25PYmplY3QuCisgICAgLy8gYm9vbCBtb3ZlVG9PcmlnaW4gPSBpczxSZW5k
ZXJTVkdGb3JlaWduT2JqZWN0PihyZW5kZXJlcik7CisgICAgYm9vbCBtb3ZlVG9PcmlnaW4gPSBm
YWxzZTsKKworICAgIC8qIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyT2JqZWN0IGNoYW5n
ZXMKKyAgICBpZiAoY29udGV4dC5vcHRpb25zLmNvbnRhaW5zKFJlbmRlck9iamVjdDo6VmlzaWJs
ZVJlY3RDb250ZXh0T3B0aW9uOjpUcmFuc2xhdGVUb1NWR1JlbmRlcmVyT3JpZ2luKSkgeworICAg
ICAgICBjb250ZXh0Lm9wdGlvbnMucmVtb3ZlKFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250
ZXh0T3B0aW9uOjpUcmFuc2xhdGVUb1NWR1JlbmRlcmVyT3JpZ2luKTsKKyAgICAgICAgbW92ZVRv
T3JpZ2luID0gdHJ1ZTsKKyAgICB9CisgICAgKi8KKworICAgIGlmIChtb3ZlVG9PcmlnaW4pCisg
ICAgICAgIGFkanVzdGVkUmVjdC5tb3ZlQnkoZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5k
aW5nQm94KCkubWluWE1pbllDb3JuZXIoKSkpOworCisgICAgaWYgKGF1dG8qIHRyYW5zZm9ybSA9
IGxheWVyKCktPnRyYW5zZm9ybSgpKQorICAgICAgICBhZGp1c3RlZFJlY3QgPSB0cmFuc2Zvcm0t
Pm1hcFJlY3QoYWRqdXN0ZWRSZWN0KTsKKworICAgIHJldHVybiBsb2NhbENvbnRhaW5lci0+Y29t
cHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoYWRqdXN0ZWRSZWN0LCBjb250YWluZXIsIGNvbnRl
eHQpOworfQorCit2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6Om1hcExvY2FsVG9TVkdDb250
YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDb250YWluZXIsIFRy
YW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9k
ZT4gbW9kZSwgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFtMQlNFXSBV
cHN0cmVhbSBSZW5kZXJTVkdCbG9jayBjaGFuZ2VzCisgICAgLy8gQVNTRVJUKGlzPFJlbmRlclNW
R01vZGVsT2JqZWN0Pih0aGlzKSB8fCBpczxSZW5kZXJTVkdCbG9jaz4odGhpcykpOworICAgIEFT
U0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykpOworICAgIEFTU0VSVChzdHlsZSgp
LnBvc2l0aW9uKCkgPT0gUG9zaXRpb25UeXBlOjpTdGF0aWMpOworCisgICAgaWYgKGFuY2VzdG9y
Q29udGFpbmVyID09IHRoaXMpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghdmlldygp
LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkp
OworCisgICAgYm9vbCBhbmNlc3RvclNraXBwZWQ7CisgICAgYXV0byogY29udGFpbmVyID0gdGhp
cy0+Y29udGFpbmVyKGFuY2VzdG9yQ29udGFpbmVyLCBhbmNlc3RvclNraXBwZWQpOworICAgIGlm
ICghY29udGFpbmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfVU5VU0VEKGFuY2Vz
dG9yU2tpcHBlZCwgIWFuY2VzdG9yU2tpcHBlZCk7CisKKyAgICAvLyBJZiB0aGlzIGJveCBoYXMg
YSB0cmFuc2Zvcm0sIGl0IGFjdHMgYXMgYSBmaXhlZCBwb3NpdGlvbiBjb250YWluZXIgZm9yIGZp
eGVkIGRlc2NlbmRhbnRzLAorICAgIC8vIGFuZCBtYXkgaXRzZWxmIGFsc28gYmUgZml4ZWQgcG9z
aXRpb24uIFNvIHByb3BhZ2F0ZSAnZml4ZWQnIHVwIG9ubHkgaWYgdGhpcyBib3ggaXMgZml4ZWQg
cG9zaXRpb24uCisgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQorICAgICAgICBtb2RlLnJlbW92ZShJ
c0ZpeGVkKTsKKworICAgIGlmICh3YXNGaXhlZCkKKyAgICAgICAgKndhc0ZpeGVkID0gbW9kZS5j
b250YWlucyhJc0ZpeGVkKTsKKworICAgIGF1dG8gY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJv
bUNvbnRhaW5lcigqY29udGFpbmVyLCBMYXlvdXRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQ
b2ludCgpKSk7CisKKyAgICBib29sIHByZXNlcnZlM0QgPSBtb2RlICYgVXNlVHJhbnNmb3JtcyAm
JiAoY29udGFpbmVyLT5zdHlsZSgpLnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS5wcmVzZXJ2ZXMz
RCgpKTsKKyAgICBpZiAobW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgc2hvdWxkVXNlVHJhbnNmb3Jt
RnJvbUNvbnRhaW5lcihjb250YWluZXIpKSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHQ7CisgICAgICAgIGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyLCBjb250YWlu
ZXJPZmZzZXQsIHQpOworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybSh0LCBw
cmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zv
cm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisgICAgfSBlbHNlCisgICAgICAgIHRyYW5zZm9y
bVN0YXRlLm1vdmUoY29udGFpbmVyT2Zmc2V0LndpZHRoKCksIGNvbnRhaW5lck9mZnNldC5oZWln
aHQoKSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDog
VHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworCisgICAgbW9kZS5yZW1vdmUoQXBw
bHlDb250YWluZXJGbGlwKTsKKworICAgIGNvbnRhaW5lci0+bWFwTG9jYWxUb0NvbnRhaW5lcihh
bmNlc3RvckNvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIG1vZGUsIHdhc0ZpeGVkKTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGQxMThkYzgxYTZhN2M2MGJi
NDNiMjcxYzczNWIyMWQ2Njk4Yzg3MWUuLjljMzE0YWZiMTBkOGM1YTcwMmFmZTIwMjY1M2ZkYTcw
NGJkZjY4YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuaApAQCAtNjcsNiArNjcsMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdXNw
ZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lID0gTW9ub3RvbmljVGltZSgpKSBvdmVycmlkZTsK
IAorI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIC8vIFByb3ZpZGVzIHRo
ZSBTVkcgaW1wbGVtZW50YXRpb24gZm9yIGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKCku
CisgICAgLy8gVGhpcyBsaXZlcyBpbiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCB3aGljaCBpcyB0
aGUgY29tbW9uIGJhc2UtY2xhc3MgZm9yIGFsbCBTVkcgcmVuZGVyZXJzLgorICAgIHN0ZDo6b3B0
aW9uYWw8TGF5b3V0UmVjdD4gY29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIoY29uc3Qg
TGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lciwgVmlz
aWJsZVJlY3RDb250ZXh0KSBjb25zdDsKKworICAgIC8vIFByb3ZpZGVzIHRoZSBTVkcgaW1wbGVt
ZW50YXRpb24gZm9yIG1hcExvY2FsVG9Db250YWluZXIoKS4KKyAgICAvLyBUaGlzIGxpdmVzIGlu
IFJlbmRlckxheWVyTW9kZWxPYmplY3QsIHdoaWNoIGlzIHRoZSBjb21tb24gYmFzZS1jbGFzcyBm
b3IgYWxsIFNWRyByZW5kZXJlcnMuCisgICAgdm9pZCBtYXBMb2NhbFRvU1ZHQ29udGFpbmVyKGNv
bnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1T
dGF0ZSYsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBib29sKiB3YXNGaXhlZCkgY29u
c3Q7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QoRWxl
bWVudCYsIFJlbmRlclN0eWxlJiYsIEJhc2VUeXBlRmxhZ3MpOwogICAgIFJlbmRlckxheWVyTW9k
ZWxPYmplY3QoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmLCBCYXNlVHlwZUZsYWdzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWU0NWVjNzllZWIwNGY0NjBkNjE3NjYxYWQ4M2VkZmYzMjFkMDdmZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwLCAyMDIxIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R01vZGVsT2JqZWN0LmgiCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyNp
bmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNWR0dyYXBoaWNz
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgorI2luY2x1ZGUgIlNWR05hbWVz
LmgiCisjaW5jbHVkZSAiU1ZHUGF0aERhdGEuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZXNDYWNo
ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoUmVuZGVyU1ZHTW9kZWxPYmplY3QpOworCitSZW5kZXJTVkdNb2RlbE9iamVjdDo6
UmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZHRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBz
dHlsZSkKKyAgICA6IFJlbmRlckxheWVyTW9kZWxPYmplY3QoZWxlbWVudCwgV1RGTW92ZShzdHls
ZSksIDApCit7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHls
ZSgpCit7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dXBkYXRlRnJvbVN0eWxlKCk7Cisg
ICAgc2V0SGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KHN0eWxlKCkuaGFzVHJhbnNmb3JtUmVs
YXRlZFByb3BlcnR5KCkpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICBp
ZiAoUmVuZGVyT2JqZWN0Ojpub2RlKCkgJiYgaXM8U1ZHR3JhcGhpY3NFbGVtZW50Pihub2RlRm9y
Tm9uQW5vbnltb3VzKCkpKQorICAgICAgICB0cmFuc2Zvcm0gPSBkb3duY2FzdDxTVkdHcmFwaGlj
c0VsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSkuYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgp
OworCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJPYmplY3QgY2hhbmdlcwor
ICAgIC8vIGlmICghdHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKKyAgICAvLyAgICAgc2V0SGFzU1ZH
VHJhbnNmb3JtKCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVy
Qm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiwgUmVu
ZGVyQm94OjpSZW5kZXJCb3hGcmFnbWVudEluZm9GbGFncykgY29uc3QKK3sKKyAgICByZXR1cm4g
Ym9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYsIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIFBhaW50UGhhc2Up
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2xpcHBlZE92ZXJm
bG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBW
aXNpYmxlUmVjdENvbnRleHQgY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoc3R5bGUoKS52aXNp
YmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiAhZW5jbG9zaW5nTGF5ZXIoKS0+aGFz
VmlzaWJsZUNvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKworICAgIEFT
U0VSVCghdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2Fj
aGVFbmFibGVkKCkpOworICAgIHJldHVybiBjb21wdXRlUmVjdCh2aXN1YWxPdmVyZmxvd1JlY3RF
cXVpdmFsZW50KCksIHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOworfQorCitzdGQ6Om9wdGlv
bmFsPExheW91dFJlY3Q+IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJ
bkNvbnRhaW5lcihjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAorewor
ICAgIHJldHVybiBjb21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lcihyZWN0LCBjb250YWlu
ZXIsIGNvbnRleHQpOworfQorCitjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoYW5jZXN0b3JUb1N0b3BBdCAhPSB0aGlzKTsKKyAgICBBU1NFUlQoc3R5
bGUoKS5wb3NpdGlvbigpID09IFBvc2l0aW9uVHlwZTo6U3RhdGljKTsKKworICAgIGJvb2wgYW5j
ZXN0b3JTa2lwcGVkOworICAgIFJlbmRlckVsZW1lbnQqIGNvbnRhaW5lciA9IHRoaXMtPmNvbnRh
aW5lcihhbmNlc3RvclRvU3RvcEF0LCBhbmNlc3RvclNraXBwZWQpOworICAgIGlmICghY29udGFp
bmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVF9VTlVTRUQoYW5jZXN0
b3JTa2lwcGVkLCAhYW5jZXN0b3JTa2lwcGVkKTsKKworICAgIGJvb2wgb2Zmc2V0RGVwZW5kc09u
UG9pbnQgPSBmYWxzZTsKKyAgICBMYXlvdXRTaXplIGNvbnRhaW5lck9mZnNldCA9IG9mZnNldEZy
b21Db250YWluZXIoKmNvbnRhaW5lciwgTGF5b3V0UG9pbnQoKSwgJm9mZnNldERlcGVuZHNPblBv
aW50KTsKKworICAgIGJvb2wgcHJlc2VydmUzRCA9IGNvbnRhaW5lci0+c3R5bGUoKS5wcmVzZXJ2
ZXMzRCgpIHx8IHN0eWxlKCkucHJlc2VydmVzM0QoKTsKKyAgICBpZiAoc2hvdWxkVXNlVHJhbnNm
b3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIpICYmIChnZW9tZXRyeU1hcC5tYXBDb29yZGluYXRl
c0ZsYWdzKCkgJiBVc2VUcmFuc2Zvcm1zKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGFp
bmVyT2Zmc2V0LCB0KTsKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlzLCB0LCBwcmVzZXJ2
ZTNELCBvZmZzZXREZXBlbmRzT25Qb2ludCwgZmFsc2UgLyogaXNGaXhlZFBvcyAqLywgaGFzVHJh
bnNmb3JtKCkpOworICAgIH0gZWxzZQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoKHRoaXMsIGNv
bnRhaW5lck9mZnNldCwgcHJlc2VydmUzRCwgb2Zmc2V0RGVwZW5kc09uUG9pbnQsIGZhbHNlIC8q
IGlzRml4ZWRQb3MgKi8sIGhhc1RyYW5zZm9ybSgpKTsKKworICAgIHJldHVybiBjb250YWluZXI7
Cit9CisKK0xheW91dFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om91dGxpbmVCb3VuZHNGb3JS
ZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNv
bnN0IFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
IXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hlRW5h
YmxlZCgpKTsKKworICAgIGF1dG8gb3V0bGluZUJvdW5kcyA9IHZpc3VhbE92ZXJmbG93UmVjdEVx
dWl2YWxlbnQoKTsKKworICAgIGlmIChyZXBhaW50Q29udGFpbmVyICE9IHRoaXMpIHsKKyAgICAg
ICAgRmxvYXRRdWFkIGNvbnRhaW5lclJlbGF0aXZlUXVhZDsKKyAgICAgICAgaWYgKGdlb21ldHJ5
TWFwKQorICAgICAgICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gZ2VvbWV0cnlNYXAtPm1h
cFRvQ29udGFpbmVyKG91dGxpbmVCb3VuZHMsIHJlcGFpbnRDb250YWluZXIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVy
UXVhZChGbG9hdFJlY3Qob3V0bGluZUJvdW5kcyksIHJlcGFpbnRDb250YWluZXIpOworCisgICAg
ICAgIG91dGxpbmVCb3VuZHMgPSBMYXlvdXRSZWN0KGNvbnRhaW5lclJlbGF0aXZlUXVhZC5ib3Vu
ZGluZ0JveCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0bGluZUJvdW5kczsKK30KKwordm9p
ZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0Cit7CisgICAg
cmVjdHMuYXBwZW5kKHNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQg
KyBsYXlvdXRMb2NhdGlvbigpLCBsYXlvdXRTaXplKCkpKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29s
KiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVh
ZChvYmplY3RCb3VuZGluZ0JveCgpLCBVc2VUcmFuc2Zvcm1zLCB3YXNGaXhlZCkpOworfQorCit2
b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKQoreworICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQoKnRoaXMpOworICAgIFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQoreworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hh
bmdlKGRpZmYsIG9sZFN0eWxlKTsKKworICAgIC8vIFNWRyBtYXNrcyBhcmUgcGFpbnRlZCBpbmRl
cGVuZGVudCBvZiB0aGUgdGFyZ2V0IHJlbmRlcmVycyB2aXNpYmlsaXR5LgorICAgIC8vIEZJWE1F
OiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyRWxlbWVudCBjaGFuZ2VzCisgICAgLy8gYm9vbCBoYXNT
VkdNYXNrID0gaGFzU1ZHTWFzaygpOworICAgIGJvb2wgaGFzU1ZHTWFzayA9IGZhbHNlOworICAg
IGlmIChoYXNTVkdNYXNrICYmIGhhc0xheWVyKCkgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0g
VmlzaWJpbGl0eTo6VmlzaWJsZSkKKyAgICAgICAgbGF5ZXIoKS0+c2V0SGFzVmlzaWJsZUNvbnRl
bnQoKTsKKworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQoKnRoaXMs
IGRpZmYsIHN0eWxlKCkpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBBYnNv
bHV0ZVRvTG9jYWxQb2ludChPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBtb2RlLCBUcmFu
c2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0eWxlKCku
cG9zaXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlN0YXRpYyk7CisKKyAgICBpZiAoaGFzVHJhbnNm
b3JtKCkpCisgICAgICAgIG1vZGUucmVtb3ZlKElzRml4ZWQpOworCisgICAgYXV0byogY29udGFp
bmVyID0gcGFyZW50KCk7CisgICAgaWYgKCFjb250YWluZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbnRhaW5lci0+bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQobW9kZSwgdHJhbnNmb3JtU3Rh
dGUpOworCisgICAgTGF5b3V0U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFp
bmVyKCpjb250YWluZXIsIExheW91dFBvaW50KCkpOworCisgICAgYm9vbCBwcmVzZXJ2ZTNEID0g
bW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgKGNvbnRhaW5lci0+c3R5bGUoKS5wcmVzZXJ2ZXMzRCgp
IHx8IHN0eWxlKCkucHJlc2VydmVzM0QoKSk7CisgICAgaWYgKG1vZGUgJiBVc2VUcmFuc2Zvcm1z
ICYmIHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyKSkgeworICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFp
bmVyKGNvbnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0KTsKKyAgICAgICAgdHJhbnNmb3JtU3Rh
dGUuYXBwbHlUcmFuc2Zvcm0odCwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVs
YXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworICAgIH0g
ZWxzZQorICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGNvbnRhaW5lck9mZnNldC53aWR0aCgp
LCBjb250YWluZXJPZmZzZXQuaGVpZ2h0KCksIHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6
QWNjdW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsK
K30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3Rh
dGUmIHRyYW5zZm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiBtb2RlLCBi
b29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBtYXBMb2NhbFRvU1ZHQ29udGFpbmVyKGFuY2Vz
dG9yQ29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQpOworfQorCitMYXlv
dXRTaXplIFJlbmRlclNWR01vZGVsT2JqZWN0OjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlckVs
ZW1lbnQmIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKikgY29uc3QKK3sKKyAg
ICBBU1NFUlRfVU5VU0VEKGNvbnRhaW5lciwgJmNvbnRhaW5lciA9PSB0aGlzLT5jb250YWluZXIo
KSk7CisgICAgQVNTRVJUKCFpc0luRmxvd1Bvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKCFpc0Fi
c29sdXRlbHlQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVChpc0lubGluZSgpKTsKKyAgICByZXR1
cm4gTGF5b3V0U2l6ZSgpOworfQorCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYg
YWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCopCit7CisgICAg
YXV0byByZXBhaW50Qm91bmRpbmdCb3ggPSBlbmNsb3NpbmdMYXlvdXRSZWN0KHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIGlmIChyZXBhaW50Qm91bmRpbmdCb3guc2l6ZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0
KGFkZGl0aW9uYWxPZmZzZXQsIHJlcGFpbnRCb3VuZGluZ0JveC5zaXplKCkpKTsKK30KKworYm9v
bCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c2hvdWxkUGFpbnRTVkdSZW5kZXJlcihjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbykgY29uc3QKK3sKKyAgICBBU1NFUlQoIXBhaW50SW5mby5jb250ZXh0
KCkucGFpbnRpbmdEaXNhYmxlZCgpKTsKKworICAgIGlmICgocGFpbnRJbmZvLnBoYXNlICE9IFBh
aW50UGhhc2U6OkZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OkNs
aXBwaW5nTWFzayAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6TWFzayAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6T3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
SGlkZGVuIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpOb25lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRmxvYXRSZWN0Ojpp
bnRlcnNlY3RzIGRvZXMgbm90IGNvbnNpZGVyIGhvcml6b250YWwgb3IgdmVydGljYWwgbGluZXMg
KGJlY2F1c2Ugb2YgaXNFbXB0eSgpKS4KKy8vIFNvIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBvZiBz
dWNoIGxpbmVzLgorc3RhdGljIGJvb2wgaW50ZXJzZWN0c0FsbG93aW5nRW1wdHkoY29uc3QgRmxv
YXRSZWN0JiByLCBjb25zdCBGbG9hdFJlY3QmIG90aGVyKQoreworICAgIGlmIChyLmlzRW1wdHko
KSAmJiBvdGhlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoci5p
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIChvdGhlci5jb250
YWlucyhyLngoKSwgci55KCkpICYmICFvdGhlci5jb250YWlucyhyLm1heFgoKSwgci5tYXhZKCkp
KSB8fCAoIW90aGVyLmNvbnRhaW5zKHIueCgpLCByLnkoKSkgJiYgb3RoZXIuY29udGFpbnMoci5t
YXhYKCksIHIubWF4WSgpKSk7CisgICAgaWYgKG90aGVyLmlzRW1wdHkoKSAmJiAhci5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0eShvdGhlciwgcik7Cisg
ICAgcmV0dXJuIHIuaW50ZXJzZWN0cyhvdGhlcik7Cit9CisKKy8vIE9uZSBvZiB0aGUgZWxlbWVu
dCB0eXBlcyB0aGF0IGNhbiBjYXVzZSBncmFwaGljcyB0byBiZSBkcmF3biBvbnRvIHRoZSB0YXJn
ZXQgY2FudmFzLiBTcGVjaWZpY2FsbHk6IGNpcmNsZSwgZWxsaXBzZSwKKy8vIGltYWdlLCBsaW5l
LCBwYXRoLCBwb2x5Z29uLCBwb2x5bGluZSwgcmVjdCwgdGV4dCBhbmQgdXNlLgorc3RhdGljIGJv
b2wgaXNHcmFwaGljc0VsZW1lbnQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyLmlzU1ZHU2hhcGUoKSB8fCByZW5kZXJlci5pc1NWR1RleHQoKSB8
fCByZW5kZXJlci5pc1NWR0ltYWdlKCkgfHwgcmVuZGVyZXIuZWxlbWVudCgpLT5oYXNUYWdOYW1l
KFNWR05hbWVzOjp1c2VUYWcpOworfQorCitib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVj
a0ludGVyc2VjdGlvbihSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkucG9pbnRlckV2
ZW50cygpID09IFBvaW50ZXJFdmVudHM6Ok5vbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWlzR3JhcGhpY3NFbGVtZW50KCpyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVu
ZGVyZXItPmVsZW1lbnQoKSk7CisgICAgQVNTRVJUKGlzPFNWR0dyYXBoaWNzRWxlbWVudD4oc3Zn
RWxlbWVudCkpOworICAgIGF1dG8gY3RtID0gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50Pigq
c3ZnRWxlbWVudCkuZ2V0Q1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7Cisg
ICAgcmV0dXJuIGludGVyc2VjdHNBbGxvd2luZ0VtcHR5KHJlY3QsIGN0bS5tYXBSZWN0KHJlbmRl
cmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7Cit9CisKK2Jvb2wgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OmNoZWNrRW5jbG9zdXJlKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+
c3R5bGUoKS5wb2ludGVyRXZlbnRzKCkgPT0gUG9pbnRlckV2ZW50czo6Tm9uZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghaXNHcmFwaGljc0VsZW1lbnQoKnJlbmRlcmVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBkb3duY2Fz
dDxTVkdFbGVtZW50PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKKyAgICBBU1NFUlQoaXM8U1ZHR3Jh
cGhpY3NFbGVtZW50PihzdmdFbGVtZW50KSk7CisgICAgYXV0byBjdG0gPSBkb3duY2FzdDxTVkdH
cmFwaGljc0VsZW1lbnQ+KCpzdmdFbGVtZW50KS5nZXRDVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxv
d1N0eWxlVXBkYXRlKTsKKyAgICByZXR1cm4gcmVjdC5jb250YWlucyhjdG0ubWFwUmVjdChyZW5k
ZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOworfQorCit2b2lkIFJlbmRl
clNWR01vZGVsT2JqZWN0OjphcHBseVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRp
bmdCb3gsIE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPiBv
cHRpb25zKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTSh0cmFuc2Zvcm0pOworICAgIFVOVVNF
RF9QQVJBTShzdHlsZSk7CisgICAgVU5VU0VEX1BBUkFNKGJvdW5kaW5nQm94KTsKKyAgICBVTlVT
RURfUEFSQU0ob3B0aW9ucyk7CisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5k
ZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAvLyBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVRyYW5zZm9y
bSgqdGhpcywgdHJhbnNmb3JtLCBzdHlsZSwgYm91bmRpbmdCb3gsIHN0ZDo6bnVsbG9wdCwgc3Rk
OjpudWxsb3B0LCBvcHRpb25zKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDNk
YzIxYWJjODZlMjEzNTY4OTkxZmZlZWU3YjRlNzIyYjg0OGNkNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAt
MCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisv
LyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKy8vICNp
bmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBNb3N0IHJlbmRlcmVycyBpbiB0aGUgU1ZHIHJlbmRlcmluZyB0cmVlIHdpbGwgaW5o
ZXJpdCBmcm9tIHRoaXMgY2xhc3MKKy8vIGJ1dCBub3QgYWxsLiBSZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0LCBSZW5kZXJTVkdCbG9jaywgZXRjLiBpbmhlcml0IGZyb20KKy8vIGV4aXN0aW5nIFJlbmRl
ckJsb2NrIGNsYXNzZXMsIHRoYXQgYWxsIGluaGVyaXQgZnJvbSBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0CisvLyBkaXJlY3RseSwgd2l0aG91dCBSZW5kZXJTVkdNb2RlbE9iamVjdCBpbmJldHdlZW4u
IFRoZXJlZm9yZSBjb2RlIHdoaWNoCisvLyBuZWVkcyB0byBiZSBzaGFyZWQgYmV0d2VlbiBhbGwg
U1ZHIHJlbmRlcmVycyBnb2VzIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QuCitjbGFzcyBTVkdF
bGVtZW50OworCitjbGFzcyBSZW5kZXJTVkdNb2RlbE9iamVjdCA6IHB1YmxpYyBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR01vZGVs
T2JqZWN0KTsKK3B1YmxpYzoKKyAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKKworICAgIHN0YXRp
YyBib29sIGNoZWNrSW50ZXJzZWN0aW9uKFJlbmRlckVsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICBzdGF0aWMgYm9vbCBjaGVja0VuY2xvc3VyZShSZW5kZXJFbGVtZW50KiwgY29uc3Qg
RmxvYXRSZWN0Jik7CisKKyAgICBTVkdFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
ZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsgfQorCisgICAgLy8g
RklYTUU6IFtMQlNFXSBNYXJrIGZpbmFsLCBhZGQgYXBwbHlUcmFuc2Zvcm0gdG8gUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdAorICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIE9w
dGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uPikgY29uc3Q7CisK
KyAgICAvLyBNaW1pYyB0aGUgUmVuZGVyQm94IGFjY2Vzc29ycyAtIGJ5IHNoYXJpbmcgdGhlIHNh
bWUgdGVybWlub2xvZ3kgdGhlIHBhaW50aW5nIC8gaGl0IHRlc3RpbmcgLyBsYXlvdXQgbG9naWMg
aXMKKyAgICAvLyBzaW1pbGFyIHRvIHJlYWQgY29tcGFyZWQgdG8gbm9uLVNWRyByZW5kZXJlcnMg
c3VjaCBhcyBSZW5kZXJCb3ggJiBmcmllbmRzLgorICAgIExheW91dFJlY3QgYm9yZGVyQm94UmVj
dEVxdWl2YWxlbnQoKSBjb25zdCB7IHJldHVybiB7IExheW91dFBvaW50KCksIG1fbGF5b3V0UmVj
dC5zaXplKCkgfTsgfQorICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3RFcXVpdmFsZW50KCkg
Y29uc3QgeyByZXR1cm4gYm9yZGVyQm94UmVjdEVxdWl2YWxlbnQoKTsgfQorICAgIExheW91dFJl
Y3QgZnJhbWVSZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQor
CisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbgorICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29t
cHV0ZVZpc3VhbE92ZXJmbG93UmVjdCgqdGhpcyk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CisgICAgfQorCisgICAgdm9pZCBhcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxl
bnQoTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdCB7IHBvaW50Lm1vdmVCeShsYXlvdXRMb2NhdGlv
bigpKTsgfQorCisgICAgTGF5b3V0UmVjdCBsYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9s
YXlvdXRSZWN0OyB9CisgICAgdm9pZCBzZXRMYXlvdXRSZWN0KGNvbnN0IExheW91dFJlY3QmIGxh
eW91dFJlY3QpIHsgbV9sYXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0TGF5
b3V0TG9jYXRpb24oY29uc3QgTGF5b3V0UG9pbnQmIGxheW91dExvY2F0aW9uKSB7IG1fbGF5b3V0
UmVjdC5zZXRMb2NhdGlvbihsYXlvdXRMb2NhdGlvbik7IH0KKworICAgIExheW91dFBvaW50IHBh
aW50aW5nTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiB0b0xheW91dFBvaW50KGxheW91dExvY2F0
aW9uKCkgLSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNv
cm5lcigpKSk7IH0KKyAgICBMYXlvdXRQb2ludCBsYXlvdXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5b3V0UmVjdC5sb2NhdGlvbigpOyB9CisgICAgTGF5b3V0U2l6ZSBsYXlvdXRMb2Nh
dGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHRvTGF5b3V0U2l6ZShtX2xheW91dFJlY3QubG9j
YXRpb24oKSk7IH0KKyAgICBMYXlvdXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBt
X2xheW91dFJlY3Quc2l6ZSgpOyB9CisKKyAgICAvLyBGb3IgUmVuZGVyTGF5ZXIgb25seQorICAg
IEZsb2F0UmVjdCBib3JkZXJCb3hSZWN0SW5GcmFnbWVudEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21l
bnRDb250YWluZXIqLCBSZW5kZXJCb3g6OlJlbmRlckJveEZyYWdtZW50SW5mb0ZsYWdzID0gUmVu
ZGVyQm94OjpDYWNoZVJlbmRlckJveEZyYWdtZW50SW5mbykgY29uc3Q7CisgICAgdmlydHVhbCBM
YXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogPSBudWxscHRyLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQ
aGFzZTo6QmxvY2tCYWNrZ3JvdW5kKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93Q2xp
cFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
cmVsZXZhbmN5KSB7IHJldHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwg
cmVsZXZhbmN5KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyU1ZHTW9kZWxPYmplY3QoU1ZH
RWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOworCisgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIG92ZXJyaWRlOworICAgIGJvb2wg
c2hvdWxkUGFpbnRTVkdSZW5kZXJlcihjb25zdCBQYWludEluZm8mKSBjb25zdDsKKworICAgIExh
eW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBWaXNpYmxlUmVjdENvbnRleHQpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gY29tcHV0ZVZpc2libGVSZWN0SW5Db250YWlu
ZXIoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRh
aW5lciwgVmlzaWJsZVJlY3RDb250ZXh0KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIG1hcEFic29s
dXRlVG9Mb2NhbFBvaW50KE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+LCBUcmFuc2Zvcm1T
dGF0ZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwgVHJhbnNmb3JtU3Rh
dGUmLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNNb2RlPiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0
IGZpbmFsOworICAgIExheW91dFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2VvbWV0
cnlNYXAqKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHB1c2hNYXBwaW5n
VG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCosIFJlbmRlckdlb21ldHJ5
TWFwJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVy
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqIG9mZnNldERlcGVuZHNP
blBvaW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlv
bmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENvbnRhaW5lciA9
IDApIG92ZXJyaWRlOworICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHIG91dGxpbmUg
cGFpbnRpbmcgZnVuY3Rpb25hbGl0eQorICAgIC8vIHZvaWQgcGFpbnRTVkdPdXRsaW5lKFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKworcHJpdmF0
ZToKKyAgICBib29sIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICBMYXlvdXRSZWN0IG1fbGF5b3V0UmVjdDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJl
bmRlclNWR01vZGVsT2JqZWN0LCBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkpCisKKyNlbmRpZiAv
LyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448222</attachid>
            <date>2022-01-03 03:34:55 -0800</date>
            <delta_ts>2022-01-03 03:37:19 -0800</delta_ts>
            <desc>Patch, v8</desc>
            <filename>bug-234524-20220103033452.patch</filename>
            <type>text/plain</type>
            <size>38881</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjAzN2RjMDk0ZGEyNGQ2
NDdlZWFjNzkxMjFjYjE4NDFhZTkzMDU1Ny4uMjVlNDNiN2MzYjIzYTdiYzU1ZTBjNDQ3NGU1ZDE0
MjgzMjRlYmJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAyMi0wMS0wMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGlt
cGxlbWVudGluZyBSZW5kZXJTVkdNb2RlbE9iamVjdCAtIHRoZSBiYXNlIGNsYXNzIGZvciBtb3N0
IGdyYXBoaWNzCisgICAgICAgIHByaW1pdGl2ZXMgaW4gU1ZHIChwYXRoIC8gcmVjdCAvIGNpcmNs
ZSAvIGltYWdlIC8gLi4uKSBmb3IgdGhlIExCU0UuCisKKyAgICAgICAgSW4gdGhlIGxlZ2FjeSBl
bmdpbmUsIFJlbmRlclNWR0ltYWdlIC8gUmVuZGVyU1ZHU2hhcGUgLyBSZW5kZXJTVkdDb250YWlu
ZXIgaW5oZXJpdAorICAgICAgICBmcm9tIExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LCB3aGlj
aCBpbiB0dXJuIGluaGVyaXRzIGZyb20gUmVuZGVyRWxlbWVudC4gVGhlIFNWRworICAgICAgICA8
dGV4dD4gLyA8Zm9yZWlnbk9iamVjdD4gcmVuZGVyZXJzIGluaGVyaXQgZnJvbSB0aGVpciBleGlz
dGluZyAiSFRNTCBjb3VudGVycGFydHMiCisgICAgICAgIGUuZy4gUmVuZGVyU1ZHQmxvY2sgZnJv
bSBSZW5kZXJCbG9ja0Zsb3csIG9yIFJlbmRlclNWR0lubGluZSBmcm9tIFJlbmRlcklubGluZS4K
KworICAgICAgICBUaGlzIGhhcyBoaXN0b3JpY2FsIHJlYXNvbnM6IFdoZW4gU1ZHIHRleHQgcmVu
ZGVyaW5nIHdhcyBwcm90b3R5cGVkIGluIFdlYkNvcmUsIGEgZ29hbCB3YXMgdG8KKyAgICAgICAg
cmUtdXNlIHRoZSBleGlzdGluZyBIVE1ML0NTUyB0ZXh0IHJlbmRlcmluZyBjb2RlIHdoZW5ldmVy
IHBvc3NpYmxlLiBUaGVyZWZvcmUgdGhlIFNWRyB0ZXh0CisgICAgICAgIHJlbmRlcmVycyB3ZXJl
IG1vZGVsbGVkIGluIHRoZSB0ZXJtaW5vbG9neSBvZiBIVE1ML0NTUzogQSBuYXR1cmFsIGNob2lj
ZSBpcyB0byB0cmVhdCBhIFNWRworICAgICAgICA8dGV4dD4gZWxlbWVudCBhcyBhIENTUyAiYmxv
Y2stbGV2ZWwgZWxlbWVudCIgYW5kIDx0c3Bhbj4gLyA8dGV4dFBhdGg+IC8gPHRyZWY+IC8gLi4u
CisgICAgICAgIGVsZW1lbnRzIGFzIENTUyAiaW5saW5lIGVsZW1lbnRzIi4gVGhlc2UgZGVzaWdu
IGNob2ljZXMgZnJvbSBhbG1vc3QgdHdvIGRlY2FkZXMgYWdvLCBhcmUKKyAgICAgICAgdGhlIHJl
YXNvbiBmb3IgdGhlIHVubmVjZXNzYXJ5IGNvbmZ1c2luZyBTVkcgaW5oZXJpdGFuY2Ugc3RydWN0
dXJlLiBGdXJ0aGVybW9yZSB3ZSBleHBsaWNpdGx5CisgICAgICAgIGRpc2FibGUgbGF5ZXIgc3Vw
cG9ydCBpbiBhbGwgU1ZHIGNsYXNzZXMgdGhhdCBpbmRpcmVjdGx5IGluaGVyaXQgZnJvbSBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LgorCisgICAgICAgIEhvd2V2ZXIgZm9yIExCU0Ugd2UgZG8gd2Fu
dCBTVkcgdG8gcGFydGljaXBhdGUgaW4gdGhlIGxheWVyIHRyZWUuCisgICAgICAgIFRoZXJlZm9y
ZSBsZXQgUmVuZGVyU1ZHTW9kZWxPYmplY3QgaW5oZXJpdCBmcm9tIFJlbmRlckxheWVyTW9kZWxP
YmplY3QuIFRoaXMgdHVybnMKKyAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbnRvIHRo
ZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMgaW4gTEJTRS4KKworICAg
ICAgICBUaGUgcHJpY2UgZm9yIHRoZSBsYXllciBzdXBwb3J0IGlzIHRoYXQgYWxsIFNWRyByZW5k
ZXJlcnMgbmVlZCB0byBiZSBhYmxlIHRvIGFuc3dlciBxdWVzdGlvbnMKKyAgICAgICAgaW4gSFRN
TC9DU1MgbGFuZ3VhZ2UgKHdoYXQncyB5b3VyICdib3JkZXIgYm94IHJlY3QnPyBkbyB5b3UgaGF2
ZSB2aXN1YWwgb3ZlcmZsb3c/IGV0Yy4pLgorICAgICAgICBGaW5kaW5nIGNvbnNpc3RlbnQgZGVm
aW5pdGlvbnMvbWFwcGluZ3Mgd2FzIGEgdGVkaW91cyBqb2IsIHRoYXQgaXMgZnVsbHkgc29sdmVk
IGluIExCU0UgYW5kCisgICAgICAgIHdpbGwgYmUgdXBzdHJlYW1lZCBpbiBwaWVjZXMuIFRoaXMg
cGF0Y2ggaXMgb25lIG1haW4gcGllY2Ugb2YgdGhlIHdvcmsuCisKKyAgICAgICAgSWYgd2UgZm9y
Z2V0IGFib3V0IHRoZSBsZWdhY3kgZW5naW5lLCB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlIG5v
dyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgKyBSZW5kZXJPYmplY3QKKyAg
ICAgICAgICAgICsgUmVuZGVyRWxlbWVudAorICAgICAgICAgICAgfCAgICArIFJlbmRlckxheWVy
TW9kZWxPYmplY3QKKyAgICAgICAgICAgIHwgICAgICAgICsgUmVuZGVyQm94TW9kZWxPYmplY3QK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgKyBSZW5kZXJCb3gKKyAgICAgICAgICAgIHwgICAg
ICAgIHwgICAgfCAgICArIFJlbmRlclJlcGxhY2VkIChDU1MgInJlcGxhY2VkIiBlbGVtZW50cykK
KyAgICAgICAgICAgIHwgICAgICAgIHwgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUm9vdCAob3V0
ZXJtb3N0IDxzdmc+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgfAor
ICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyQmxvY2sgKENTUyAiYmxvY2st
bGV2ZWwiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICArIFJl
bmRlckJsb2NrRmxvdworICAgICAgICAgICAgfCAgICAgICAgfCAgICB8ICAgICAgICAgICAgKyBS
ZW5kZXJTVkdCbG9jayAoSFRNTC9TVkcgZ2x1ZSBjb2RlKQorICAgICAgICAgICAgfCAgICAgICAg
fCAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCAoPGZvcmVpZ25P
YmplY3Q+IGVsZW1lbnQpCisgICAgICAgICAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgICAg
ICAgKyBSZW5kZXJTVkdUZXh0ICg8dGV4dD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAg
IHwgICAgfAorICAgICAgICAgICAgfCAgICAgICAgfCAgICArIFJlbmRlcklubGluZSAoQ1NTICJp
bmxpbmUiIGVsZW1lbnRzKQorICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgKyBSZW5kZXJT
VkdJbmxpbmUgKEhUTUwvU1ZHIGdsdWUgY29kZSkKKyAgICAgICAgICAgIHwgICAgICAgIHwgICAg
ICAgICAgICArIFJlbmRlclNWR1RTcGFuICg8dHNwYW4+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdUZXh0UGF0aCAoPHRleHRQYXRoPiBlbGVt
ZW50KQorICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgfCAgICAgICAgKyBSZW5k
ZXJTVkdNb2RlbE9iamVjdAorICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHQ29u
dGFpbmVyCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICArIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lciAoPGRlZnM+IC8gPGc+IHdpdGggJ2Rpc3BsYXk6IG5vbmUnIC8gPHN5bWJvbD4gZWxl
bWVudHMpCisgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgICsgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyICg8Y2xpcFBhdGg+IGVsZW1lbnQpCisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyICg8
ZmlsdGVyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAg
KyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZQorICAgICAgICAgICAgfCAgICAgICAg
ICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50CisgICAgICAgICAg
ICB8ICAgICAgICAgICAgfCAgICB8ICAgICAgICB8ICAgICsgUmVuZGVyU1ZHUmVzb3VyY2VMaW5l
YXJHcmFkaWVudCAoPGxpbmVhckdyYWRpZW50PiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAg
ICAgICAgIHwgICAgfCAgICAgICAgfCAgICArIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGll
bnQgKDxyYWRpYWxHcmFkaWVudD4gZWxlbWVudCkKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8
ICAgIHwgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICAgICAgICsg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIgKDxtYXJrZXI+IGVsZW1lbnQpCisgICAgICAgICAgICB8
ICAgICAgICAgICAgfCAgICB8ICAgICAgICArIFJlbmRlclNWR1Jlc291cmNlTWFza2VyICg8bWFz
a2VyPiBlbGVtZW50KQorICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4gKDxwYXR0ZXJuPiBlbGVtZW50KQorICAgICAgICAgICAg
fCAgICAgICAgICAgIHwgICAgfCAgICAgICAgKyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IK
KyAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAg
ICB8ICAgICsgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciAoPGE+IC8gPGc+IC8gPHN3
aXRjaD4gLyA8dXNlPiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICAg
ICAgICAgICB8ICAgICAgICAgICAgKyBSZW5kZXJTVkdJbWFnZSAoPGltYWdlPiBlbGVtZW50KQor
ICAgICAgICAgICAgfCAgICAgICAgICAgICsgUmVuZGVyU1ZHU2hhcGUgKDxyZWN0PiAvIDxjaXJj
bGU+IC8gPHBhdGg+IC4uLiBlbGVtZW50cykKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
KyBSZW5kZXJTVkdFbGxpcHNlCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICsgUmVuZGVy
U1ZHUGF0aAorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICArIFJlbmRlclNWR1JlY3QKKyAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICsgUmVuZGVyVGV4dCAoI3RleHQgbm9kZXMgaW4gSFRN
TCkKKyAgICAgICAgICAgICAgICArIFJlbmRlclNWR0lubGluZVRleHQgKCN0ZXh0IG5vZGVzIGlu
IFNWRykKKworICAgICAgICBUaGlzIGlzIHdheSBsZXNzIGNvbmZ1c2luZyB0aGVuIHRoZSBwcmV2
aW91cyB2ZXJzaW9uIG9mIHRoZSBTVkcgcmVuZGVyIHRyZWUuCisgICAgICAgIENvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdD
b250YWluZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6bWFwTG9jYWxUb1NWR0NvbnRhaW5lciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6UmVuZGVyU1ZHTW9kZWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnVwZGF0ZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Ym9yZGVyQm94UmVjdEluRnJhZ21lbnRFcXVpdmFsZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxvd0NsaXBS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVs
T2JqZWN0Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmpl
Y3Q6OmFic29sdXRlUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OmFic29sdXRlUXVhZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpvZmZzZXRGcm9t
Q29udGFpbmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6c2hvdWxkUGFpbnRTVkdSZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpp
bnRlcnNlY3RzQWxsb3dpbmdFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjppc0dyYXBoaWNzRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRl
cnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNoZWNr
RW5jbG9zdXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjphcHBs
eVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
OjplbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0
Ojpib3JkZXJCb3hSZWN0RXF1aXZhbGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6Y29udGVudEJveFJlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpmcmFtZVJlY3RFcXVpdmFsZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojp2aXN1YWxPdmVy
Zmxvd1JlY3RFcXVpdmFsZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01v
ZGVsT2JqZWN0OjphcHBseVRvcExlZnRMb2NhdGlvbk9mZnNldEVxdWl2YWxlbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldExheW91dFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnNldExheW91dExvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0OjpwYWludGluZ0xv
Y2F0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2JqZWN0Ojps
YXlvdXRMb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9i
amVjdDo6bGF5b3V0TG9jYXRpb25PZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q6OmxheW91dFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyk6CisK
IDIwMjItMDEtMDIgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgImFuaW1hdGlvbiIgc2hvcnRoYW5kIHNob3VsZCBsaXN0IGFsbCBsb25naGFuZCB2YWx1ZXMg
d2hlbiBzZXJpYWxpemluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBiZDVhNzQ3OWNiMzllNDZjYzkxMDQw
MGY0ZWUzODQ5MzI0Yzc1MzFmLi42MWUyYjlkZWM2ZTMyN2ZmYmFiMzgzNmQxMmNiOTQ3MTAyZGU4
NjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjQ3Nyw2ICsyNDc3LDcgQEAgcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdl
LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCityZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0
LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZWN0LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAz
YzllYzI1YzBhOTI0NjA2YWUyZWIzMjc2NGExNzhkZGNjOTQ0M2Y4Li43ZjJkZjA0NTExNzQ4OWE4
ZTBkZjMyMmQzOGE3MTQ3NzFiYTkxN2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjQzLDYgKzEyNDMsNyBAQAogCQk0MzY3
MDhDNzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg4ODEyRDlDQTRB
MDAwNDQyMzQgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07CiAJCTQzNjcwOEM5
MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4OEExMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJl
bmRlclNWR0ltYWdlLmggKi87IH07CiAJCTQzNjcwOENCMTJEOUNBNEIwMDA0NDIzNCAvKiBMZWdh
Y3lSZW5kZXJTVkdNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM2NzA4OEMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNW
R01vZGVsT2JqZWN0LmggKi87IH07CisJCTQzNjcwQzkzNDJEOUJDNEIwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM2NzA4RkQxMkQ5Q0E0QTAwMDMyMTE0IC8qIFJlbmRlclNWR01vZGVsT2JqZWN0
LmggKi87IH07CiAJCTQzNjcwOENEMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM2NzA4
OEUxMkQ5Q0E0QTAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlLmggKi87IH07CiAJCTQzNjcw
OENGMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzNjcwODkwMTJEOUNBNEEw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLzsgfTsKIAkJNDM2NzA4RDEx
MkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDg5MjEyRDlDQTRBMDAw
NDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCAqLzsgfTsKQEAgLTg5ODAsNiAr
ODk4MSw4IEBACiAJCTQzNjcwODg4MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODg5MTJE
OUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQzNjcwODhBMTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdJbWFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MzY3MDg4RDM0RTlDQTRBMDAwNDQyMzQgLyogUmVuZGVy
U1ZHTW9kZWxPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MzY3MDhGRDEyRDlDQTRBMDAwMzIxMTQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM2NzA4OEIxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2Fj
eVJlbmRlclNWR01vZGVsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDM2NzA4OEMxMkQ5Q0E0QTAwMDQ0MjM0IC8qIExlZ2FjeVJlbmRlclNWR01v
ZGVsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVJlbmRl
clNWR01vZGVsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzNjcwODhE
MTJEOUNBNEEwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODkyNCw2ICsxODkyNyw4IEBACiAJCQkJQ0RGNzQ3RTgyNzBG
NkNBRTAwOEZFRUVDIC8qIFJlbmRlclNWR0lubGluZUlubGluZXMuaCAqLywKIAkJCQkwODU0QjAw
NDEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgKi8sCiAJCQkJMDg1
NEIwMDUxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCAqLywKKwkJCQk0
MzY3MDg4RDM0RTlDQTRBMDAwNDQyMzQgLyogUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwICovLAor
CQkJCTQzNjcwOEZEMTJEOUNBNEEwMDAzMjExNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oICov
LAogCQkJCUFEREYxQUQ0MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmNwcCAqLywK
IAkJCQlBRERGMUFENTEyNTdDRDlBMDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oICovLAogCQkJ
CUExMEJCNTgyMTQ4NEUzQTcwMEIyRTg3QSAvKiBSZW5kZXJTVkdSZWN0LmNwcCAqLywKQEAgLTM2
NzExLDYgKzM2NzE2LDcgQEAKIAkJCQkwODU0QjAxNTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVy
U1ZHSW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY3NDdFOTI3MEY2Q0FFMDA4RkVFRUMg
LyogUmVuZGVyU1ZHSW5saW5lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMTcx
MjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR0lubGluZVRleHQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQzNjcwQzkzNDJEOUJDNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdNb2RlbE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQURERjFBRDcxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1Bh
dGguaCBpbiBIZWFkZXJzICovLAogCQkJCUExMEJCNTg1MTQ4NEUzQTcwMEIyRTg3QSAvKiBSZW5k
ZXJTVkdSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDRDEyRDlDQTRCMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IGYyOTUwNGEy
ZjMyZTg1YWQ1ODMyN2Y2NmEzNGIxOTEyOGI2ZDY4NzguLjhkOTkwZjFkNTMxYmU2M2YyYjI1ZDA2
MTQ1ZmIxMzFjNDEwMDcyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTI5LDkgKzI5LDExIEBACiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlJlbmRl
clNWR01vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmgiCisjaW5jbHVkZSAi
VHJhbnNmb3JtU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjksNSArMjMxLDkyIEBAIHZvaWQgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6c3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSB0aW1lKQogICAgIGxh
eWVyKCktPmJhY2tpbmcoKS0+c3VzcGVuZEFuaW1hdGlvbnModGltZSk7CiB9CiAKKyNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKK3N0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0ZVZpc2libGVSZWN0SW5TVkdDb250YWluZXIoY29u
c3QgTGF5b3V0UmVjdCYgcmVjdCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFp
bmVyLCBSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dCBjb250ZXh0KSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyU1ZHQmxvY2sgY2hhbmdlcworICAg
IC8vIEFTU0VSVChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4odGhpcykgfHwgaXM8UmVuZGVyU1ZH
QmxvY2s+KHRoaXMpKTsKKyAgICBBU1NFUlQoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHRoaXMp
KTsKKworICAgIEFTU0VSVCghc3R5bGUoKS5oYXNJbkZsb3dQb3NpdGlvbigpKTsKKyAgICBBU1NF
UlQoIXZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNQYWludE9mZnNldENhY2hl
RW5hYmxlZCgpKTsKKworICAgIGlmIChjb250YWluZXIgPT0gdGhpcykKKyAgICAgICAgcmV0dXJu
IHJlY3Q7CisKKyAgICBib29sIGNvbnRhaW5lcklzU2tpcHBlZDsKKyAgICBhdXRvKiBsb2NhbENv
bnRhaW5lciA9IHRoaXMtPmNvbnRhaW5lcihjb250YWluZXIsIGNvbnRhaW5lcklzU2tpcHBlZCk7
CisgICAgaWYgKCFsb2NhbENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisKKyAgICBB
U1NFUlRfVU5VU0VEKGNvbnRhaW5lcklzU2tpcHBlZCwgIWNvbnRhaW5lcklzU2tpcHBlZCk7CisK
KyAgICBMYXlvdXRSZWN0IGFkanVzdGVkUmVjdCA9IHJlY3Q7CisKKyAgICAvLyBGSVhNRTogW0xC
U0VdIFVwc3RyZWFtIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QgY2hhbmdlcworICAgIC8vIE1vdmUg
dG8gb3JpZ2luIG9mIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtLCBpZiB0aGlzIGlzIHRoZSBmaXJz
dCBjYWxsIHRvIGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKCkgb3JpZ2luYXRpbmcKKyAg
ICAvLyBmcm9tIGEgU1ZHIHJlbmRlcmVyIChSZW5kZXJTVkdNb2RlbE9iamVjdCAvIFJlbmRlclNW
R0Jsb2NrKSBvciBpZiB3ZSBjcm9zcyB0aGUgYm91bmRhcnkgZnJvbSBIVE1MIC0+IFNWRyB2aWEg
UmVuZGVyU1ZHRm9yZWlnbk9iamVjdC4KKyAgICAvLyBib29sIG1vdmVUb09yaWdpbiA9IGlzPFJl
bmRlclNWR0ZvcmVpZ25PYmplY3Q+KHJlbmRlcmVyKTsKKyAgICBib29sIG1vdmVUb09yaWdpbiA9
IGZhbHNlOworCisgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJPYmplY3QgY2hh
bmdlcworICAgIGlmIChjb250ZXh0Lm9wdGlvbnMuY29udGFpbnMoUmVuZGVyT2JqZWN0OjpWaXNp
YmxlUmVjdENvbnRleHRPcHRpb246OlRyYW5zbGF0ZVRvU1ZHUmVuZGVyZXJPcmlnaW4pKSB7Cisg
ICAgICAgIGNvbnRleHQub3B0aW9ucy5yZW1vdmUoUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENv
bnRleHRPcHRpb246OlRyYW5zbGF0ZVRvU1ZHUmVuZGVyZXJPcmlnaW4pOworICAgICAgICBtb3Zl
VG9PcmlnaW4gPSB0cnVlOworICAgIH0KKyAgICAqLworCisgICAgaWYgKG1vdmVUb09yaWdpbikK
KyAgICAgICAgYWRqdXN0ZWRSZWN0Lm1vdmVCeShmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91
bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKSk7CisKKyAgICBpZiAoYXV0byogdHJhbnNmb3Jt
ID0gbGF5ZXIoKS0+dHJhbnNmb3JtKCkpCisgICAgICAgIGFkanVzdGVkUmVjdCA9IHRyYW5zZm9y
bS0+bWFwUmVjdChhZGp1c3RlZFJlY3QpOworCisgICAgcmV0dXJuIGxvY2FsQ29udGFpbmVyLT5j
b21wdXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lcihhZGp1c3RlZFJlY3QsIGNvbnRhaW5lciwgY29u
dGV4dCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6bWFwTG9jYWxUb1NWR0Nv
bnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBhbmNlc3RvckNvbnRhaW5lciwg
VHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlLCBPcHRpb25TZXQ8TWFwQ29vcmRpbmF0ZXNN
b2RlPiBtb2RlLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIFJlbmRlclNWR0Jsb2NrIGNoYW5nZXMKKyAgICAvLyBBU1NFUlQoaXM8UmVuZGVy
U1ZHTW9kZWxPYmplY3Q+KHRoaXMpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPih0aGlzKSk7CisgICAg
QVNTRVJUKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0Pih0aGlzKSk7CisgICAgQVNTRVJUKHN0eWxl
KCkucG9zaXRpb24oKSA9PSBQb3NpdGlvblR5cGU6OlN0YXRpYyk7CisKKyAgICBpZiAoYW5jZXN0
b3JDb250YWluZXIgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCF2aWV3
KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQo
KSk7CisKKyAgICBib29sIGFuY2VzdG9yU2tpcHBlZDsKKyAgICBhdXRvKiBjb250YWluZXIgPSB0
aGlzLT5jb250YWluZXIoYW5jZXN0b3JDb250YWluZXIsIGFuY2VzdG9yU2tpcHBlZCk7CisgICAg
aWYgKCFjb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVF9VTlVTRUQoYW5j
ZXN0b3JTa2lwcGVkLCAhYW5jZXN0b3JTa2lwcGVkKTsKKworICAgIC8vIElmIHRoaXMgYm94IGhh
cyBhIHRyYW5zZm9ybSwgaXQgYWN0cyBhcyBhIGZpeGVkIHBvc2l0aW9uIGNvbnRhaW5lciBmb3Ig
Zml4ZWQgZGVzY2VuZGFudHMsCisgICAgLy8gYW5kIG1heSBpdHNlbGYgYWxzbyBiZSBmaXhlZCBw
b3NpdGlvbi4gU28gcHJvcGFnYXRlICdmaXhlZCcgdXAgb25seSBpZiB0aGlzIGJveCBpcyBmaXhl
ZCBwb3NpdGlvbi4KKyAgICBpZiAoaGFzVHJhbnNmb3JtKCkpCisgICAgICAgIG1vZGUucmVtb3Zl
KElzRml4ZWQpOworCisgICAgaWYgKHdhc0ZpeGVkKQorICAgICAgICAqd2FzRml4ZWQgPSBtb2Rl
LmNvbnRhaW5zKElzRml4ZWQpOworCisgICAgYXV0byBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRG
cm9tQ29udGFpbmVyKCpjb250YWluZXIsIExheW91dFBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBl
ZFBvaW50KCkpKTsKKworICAgIGJvb2wgcHJlc2VydmUzRCA9IG1vZGUgJiBVc2VUcmFuc2Zvcm1z
ICYmIChjb250YWluZXItPnN0eWxlKCkucHJlc2VydmVzM0QoKSB8fCBzdHlsZSgpLnByZXNlcnZl
czNEKCkpOworICAgIGlmIChtb2RlICYgVXNlVHJhbnNmb3JtcyAmJiBzaG91bGRVc2VUcmFuc2Zv
cm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lcikpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNvbnRh
aW5lck9mZnNldCwgdCk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNmb3JtKHQs
IHByZXNlcnZlM0QgPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9ybSA6IFRyYW5z
Zm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdHJhbnNm
b3JtU3RhdGUubW92ZShjb250YWluZXJPZmZzZXQud2lkdGgoKSwgY29udGFpbmVyT2Zmc2V0Lmhl
aWdodCgpLCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0g
OiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisKKyAgICBtb2RlLnJlbW92ZShB
cHBseUNvbnRhaW5lckZsaXApOworCisgICAgY29udGFpbmVyLT5tYXBMb2NhbFRvQ29udGFpbmVy
KGFuY2VzdG9yQ29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgbW9kZSwgd2FzRml4ZWQpOworfQor
I2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKaW5kZXggZDExOGRjODFhNmE3YzYw
YmI0M2IyNzFjNzM1YjIxZDY2OThjODcxZS4uOWMzMTRhZmIxMGQ4YzVhNzAyYWZlMjAyNjUzZmRh
NzA0YmRmNjhiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5oCkBAIC02Nyw2ICs2NywxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN1
c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgPSBNb25vdG9uaWNUaW1lKCkpIG92ZXJyaWRl
OwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgLy8gUHJvdmlkZXMg
dGhlIFNWRyBpbXBsZW1lbnRhdGlvbiBmb3IgY29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIo
KS4KKyAgICAvLyBUaGlzIGxpdmVzIGluIFJlbmRlckxheWVyTW9kZWxPYmplY3QsIHdoaWNoIGlz
IHRoZSBjb21tb24gYmFzZS1jbGFzcyBmb3IgYWxsIFNWRyByZW5kZXJlcnMuCisgICAgc3RkOjpv
cHRpb25hbDxMYXlvdXRSZWN0PiBjb21wdXRlVmlzaWJsZVJlY3RJblNWR0NvbnRhaW5lcihjb25z
dCBMYXlvdXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyLCBW
aXNpYmxlUmVjdENvbnRleHQpIGNvbnN0OworCisgICAgLy8gUHJvdmlkZXMgdGhlIFNWRyBpbXBs
ZW1lbnRhdGlvbiBmb3IgbWFwTG9jYWxUb0NvbnRhaW5lcigpLgorICAgIC8vIFRoaXMgbGl2ZXMg
aW4gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgd2hpY2ggaXMgdGhlIGNvbW1vbiBiYXNlLWNsYXNz
IGZvciBhbGwgU1ZHIHJlbmRlcmVycy4KKyAgICB2b2lkIG1hcExvY2FsVG9TVkdDb250YWluZXIo
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JDb250YWluZXIsIFRyYW5zZm9y
bVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5hdGVzTW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBj
b25zdDsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChF
bGVtZW50JiwgUmVuZGVyU3R5bGUmJiwgQmFzZVR5cGVGbGFncyk7CiAgICAgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdChEb2N1bWVudCYsIFJlbmRlclN0eWxlJiYsIEJhc2VUeXBlRmxhZ3MpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mNWY4YThhNjU2MmU3OWE3ZTM2NTFhMDkzNjBhZDlmYTgyODMxNjE0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5jcHAKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAsIDIwMjEsIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5H
SU5FKQorI2luY2x1ZGUgIlJlbmRlckdlb21ldHJ5TWFwLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU1ZH
R3JhcGhpY3NFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCisjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdQYXRoRGF0YS5oIgorI2luY2x1ZGUgIlNWR1Jlc291
cmNlc0NhY2hlLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChSZW5kZXJTVkdNb2RlbE9iamVjdCk7CisKK1JlbmRlclNWR01vZGVs
T2JqZWN0OjpSZW5kZXJTVkdNb2RlbE9iamVjdChTVkdFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJT
dHlsZSYmIHN0eWxlKQorICAgIDogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChlbGVtZW50LCBXVEZN
b3ZlKHN0eWxlKSwgMCkKK3sKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6dXBkYXRl
RnJvbVN0eWxlKCkKK3sKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp1cGRhdGVGcm9tU3R5
bGUoKTsKKyAgICBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoc3R5bGUoKS5oYXNUcmFu
c2Zvcm1SZWxhdGVkUHJvcGVydHkoKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
OworICAgIGlmIChpczxTVkdHcmFwaGljc0VsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSkp
CisgICAgICAgIHRyYW5zZm9ybSA9IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4obm9kZUZv
ck5vbkFub255bW91cygpKS5hbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7CisKKyAgICAvLyBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlck9iamVjdCBjaGFuZ2VzCisgICAgLy8gaWYgKCF0cmFu
c2Zvcm0uaXNJZGVudGl0eSgpKQorICAgIC8vICAgICBzZXRIYXNTVkdUcmFuc2Zvcm0oKTsKK30K
KworRmxvYXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpib3JkZXJCb3hSZWN0SW5GcmFnbWVu
dEVxdWl2YWxlbnQoUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBSZW5kZXJCb3g6OlJlbmRlckJv
eEZyYWdtZW50SW5mb0ZsYWdzKSBjb25zdAoreworICAgIHJldHVybiBib3JkZXJCb3hSZWN0RXF1
aXZhbGVudCgpOworfQorCitMYXlvdXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpvdmVyZmxv
d0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqLCBP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgUGFpbnRQaGFzZSkgY29uc3QKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworfQorCitMYXlv
dXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4
dCBjb250ZXh0KSBjb25zdAoreworICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNp
YmlsaXR5OjpWaXNpYmxlICYmICFlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgp
KQorICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworCisgICAgQVNTRVJUKCF2aWV3KCkuZnJh
bWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzUGFpbnRPZmZzZXRDYWNoZUVuYWJsZWQoKSk7Cisg
ICAgcmV0dXJuIGNvbXB1dGVSZWN0KHZpc3VhbE92ZXJmbG93UmVjdEVxdWl2YWxlbnQoKSwgcmVw
YWludENvbnRhaW5lciwgY29udGV4dCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4g
UmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0
IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRhaW5l
ciwgVmlzaWJsZVJlY3RDb250ZXh0IGNvbnRleHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXB1
dGVWaXNpYmxlUmVjdEluU1ZHQ29udGFpbmVyKHJlY3QsIGNvbnRhaW5lciwgY29udGV4dCk7Cit9
CisKK2NvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnB1c2hNYXBwaW5n
VG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BB
dCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25zdAoreworICAgIEFTU0VSVChh
bmNlc3RvclRvU3RvcEF0ICE9IHRoaXMpOworICAgIEFTU0VSVChzdHlsZSgpLnBvc2l0aW9uKCkg
PT0gUG9zaXRpb25UeXBlOjpTdGF0aWMpOworCisgICAgYm9vbCBhbmNlc3RvclNraXBwZWQ7Cisg
ICAgUmVuZGVyRWxlbWVudCogY29udGFpbmVyID0gdGhpcy0+Y29udGFpbmVyKGFuY2VzdG9yVG9T
dG9wQXQsIGFuY2VzdG9yU2tpcHBlZCk7CisgICAgaWYgKCFjb250YWluZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgQVNTRVJUX1VOVVNFRChhbmNlc3RvclNraXBwZWQsICFhbmNl
c3RvclNraXBwZWQpOworCisgICAgYm9vbCBvZmZzZXREZXBlbmRzT25Qb2ludCA9IGZhbHNlOwor
ICAgIExheW91dFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcigqY29u
dGFpbmVyLCBMYXlvdXRQb2ludCgpLCAmb2Zmc2V0RGVwZW5kc09uUG9pbnQpOworCisgICAgYm9v
bCBwcmVzZXJ2ZTNEID0gY29udGFpbmVyLT5zdHlsZSgpLnByZXNlcnZlczNEKCkgfHwgc3R5bGUo
KS5wcmVzZXJ2ZXMzRCgpOworICAgIGlmIChzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVy
KGNvbnRhaW5lcikgJiYgKGdlb21ldHJ5TWFwLm1hcENvb3JkaW5hdGVzRmxhZ3MoKSAmIFVzZVRy
YW5zZm9ybXMpKSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHQ7CisgICAgICAgIGdl
dFRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyLCBjb250YWluZXJPZmZzZXQsIHQpOwor
ICAgICAgICBnZW9tZXRyeU1hcC5wdXNoKHRoaXMsIHQsIHByZXNlcnZlM0QsIG9mZnNldERlcGVu
ZHNPblBvaW50LCBmYWxzZSAvKiBpc0ZpeGVkUG9zICovLCBoYXNUcmFuc2Zvcm0oKSk7CisgICAg
fSBlbHNlCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2godGhpcywgY29udGFpbmVyT2Zmc2V0LCBw
cmVzZXJ2ZTNELCBvZmZzZXREZXBlbmRzT25Qb2ludCwgZmFsc2UgLyogaXNGaXhlZFBvcyAqLywg
aGFzVHJhbnNmb3JtKCkpOworCisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKworTGF5b3V0UmVj
dCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoY29uc3QgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3QgUmVuZGVyR2VvbWV0
cnlNYXAqIGdlb21ldHJ5TWFwKSBjb25zdAoreworICAgIEFTU0VSVCghdmlldygpLmZyYW1lVmll
dygpLmxheW91dENvbnRleHQoKS5pc1BhaW50T2Zmc2V0Q2FjaGVFbmFibGVkKCkpOworCisgICAg
YXV0byBvdXRsaW5lQm91bmRzID0gdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpOworCisg
ICAgaWYgKHJlcGFpbnRDb250YWluZXIgIT0gdGhpcykgeworICAgICAgICBGbG9hdFF1YWQgY29u
dGFpbmVyUmVsYXRpdmVRdWFkOworICAgICAgICBpZiAoZ2VvbWV0cnlNYXApCisgICAgICAgICAg
ICBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBnZW9tZXRyeU1hcC0+bWFwVG9Db250YWluZXIob3V0
bGluZUJvdW5kcywgcmVwYWludENvbnRhaW5lcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChv
dXRsaW5lQm91bmRzKSwgcmVwYWludENvbnRhaW5lcik7CisKKyAgICAgICAgb3V0bGluZUJvdW5k
cyA9IExheW91dFJlY3QoY29udGFpbmVyUmVsYXRpdmVRdWFkLmJvdW5kaW5nQm94KCkpOworICAg
IH0KKworICAgIHJldHVybiBvdXRsaW5lQm91bmRzOworfQorCit2b2lkIFJlbmRlclNWR01vZGVs
T2JqZWN0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3QKK3sKKyAgICByZWN0cy5hcHBlbmQoc25h
cHBlZEludFJlY3QoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIGxheW91dExvY2F0aW9u
KCksIGxheW91dFNpemUoKSkpKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25z
dAoreworICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKG9iamVjdEJvdW5kaW5n
Qm94KCksIFVzZVRyYW5zZm9ybXMsIHdhc0ZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9k
ZWxPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNs
aWVudERlc3Ryb3llZCgqdGhpcyk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6d2lsbEJl
RGVzdHJveWVkKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7
CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5
bGUpOworCisgICAgLy8gU1ZHIG1hc2tzIGFyZSBwYWludGVkIGluZGVwZW5kZW50IG9mIHRoZSB0
YXJnZXQgcmVuZGVyZXJzIHZpc2liaWxpdHkuCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVh
bSBSZW5kZXJFbGVtZW50IGNoYW5nZXMKKyAgICAvLyBib29sIGhhc1NWR01hc2sgPSBoYXNTVkdN
YXNrKCk7CisgICAgYm9vbCBoYXNTVkdNYXNrID0gZmFsc2U7CisgICAgaWYgKGhhc1NWR01hc2sg
JiYgaGFzTGF5ZXIoKSAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNp
YmxlKQorICAgICAgICBsYXllcigpLT5zZXRIYXNWaXNpYmxlQ29udGVudCgpOworCisgICAgU1ZH
UmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqdGhpcywgZGlmZiwgc3R5bGUoKSk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50
KE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+IG1vZGUsIFRyYW5zZm9ybVN0YXRlJiB0cmFu
c2Zvcm1TdGF0ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3R5bGUoKS5wb3NpdGlvbigpID09IFBv
c2l0aW9uVHlwZTo6U3RhdGljKTsKKworICAgIGlmIChoYXNUcmFuc2Zvcm0oKSkKKyAgICAgICAg
bW9kZS5yZW1vdmUoSXNGaXhlZCk7CisKKyAgICBhdXRvKiBjb250YWluZXIgPSBwYXJlbnQoKTsK
KyAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGFpbmVyLT5t
YXBBYnNvbHV0ZVRvTG9jYWxQb2ludChtb2RlLCB0cmFuc2Zvcm1TdGF0ZSk7CisKKyAgICBMYXlv
dXRTaXplIGNvbnRhaW5lck9mZnNldCA9IG9mZnNldEZyb21Db250YWluZXIoKmNvbnRhaW5lciwg
TGF5b3V0UG9pbnQoKSk7CisKKyAgICBib29sIHByZXNlcnZlM0QgPSBtb2RlICYgVXNlVHJhbnNm
b3JtcyAmJiAoY29udGFpbmVyLT5zdHlsZSgpLnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS5wcmVz
ZXJ2ZXMzRCgpKTsKKyAgICBpZiAobW9kZSAmIFVzZVRyYW5zZm9ybXMgJiYgc2hvdWxkVXNlVHJh
bnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIpKSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHQ7CisgICAgICAgIGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVyLCBj
b250YWluZXJPZmZzZXQsIHQpOworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9y
bSh0LCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0gOiBU
cmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CisgICAgfSBlbHNlCisgICAgICAgIHRy
YW5zZm9ybVN0YXRlLm1vdmUoY29udGFpbmVyT2Zmc2V0LndpZHRoKCksIGNvbnRhaW5lck9mZnNl
dC5oZWlnaHQoKSwgcHJlc2VydmUzRCA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNm
b3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm0pOworfQorCit2b2lkIFJlbmRl
clNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIGFuY2VzdG9yQ29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3Rh
dGUsIE9wdGlvblNldDxNYXBDb29yZGluYXRlc01vZGU+IG1vZGUsIGJvb2wqIHdhc0ZpeGVkKSBj
b25zdAoreworICAgIG1hcExvY2FsVG9TVkdDb250YWluZXIoYW5jZXN0b3JDb250YWluZXIsIHRy
YW5zZm9ybVN0YXRlLCBtb2RlLCB3YXNGaXhlZCk7Cit9CisKK0xheW91dFNpemUgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyRWxlbWVudCYgY29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wqKSBjb25zdAoreworICAgIEFTU0VSVF9VTlVTRUQo
Y29udGFpbmVyLCAmY29udGFpbmVyID09IHRoaXMtPmNvbnRhaW5lcigpKTsKKyAgICBBU1NFUlQo
IWlzSW5GbG93UG9zaXRpb25lZCgpKTsKKyAgICBBU1NFUlQoIWlzQWJzb2x1dGVseVBvc2l0aW9u
ZWQoKSk7CisgICAgQVNTRVJUKGlzSW5saW5lKCkpOworICAgIHJldHVybiBMYXlvdXRTaXplKCk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0
LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KikKK3sKKyAgICBhdXRvIHJlcGFpbnRCb3Vu
ZGluZ0JveCA9IGVuY2xvc2luZ0xheW91dFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7CisgICAgaWYgKHJlcGFpbnRCb3VuZGluZ0JveC5zaXplKCkuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisgICAgcmVjdHMuYXBwZW5kKExheW91dFJlY3QoYWRkaXRpb25hbE9mZnNl
dCwgcmVwYWludEJvdW5kaW5nQm94LnNpemUoKSkpOworfQorCitib29sIFJlbmRlclNWR01vZGVs
T2JqZWN0OjpzaG91bGRQYWludFNWR1JlbmRlcmVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
KSBjb25zdAoreworICAgIEFTU0VSVCghcGFpbnRJbmZvLmNvbnRleHQoKS5wYWludGluZ0Rpc2Fi
bGVkKCkpOworCisgICAgaWYgKChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Rm9yZWdy
b3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6Q2xpcHBpbmdNYXNrICYmIHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpNYXNrICYmIHBhaW50SW5mby5waGFzZSAhPSBQ
YWludFBoYXNlOjpPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxm
T3V0bGluZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFpbnRJbmZvLnNo
b3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpIaWRkZW4gfHwgc3R5bGUo
KS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCisvLyBGbG9hdFJlY3Q6OmludGVyc2VjdHMgZG9lcyBu
b3QgY29uc2lkZXIgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBsaW5lcyAoYmVjYXVzZSBvZiBpc0Vt
cHR5KCkpLgorLy8gU28gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHN1Y2ggbGluZXMuCitzdGF0
aWMgYm9vbCBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0eShjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0
IEZsb2F0UmVjdCYgb3RoZXIpCit7CisgICAgaWYgKHIuaXNFbXB0eSgpICYmIG90aGVyLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChyLmlzRW1wdHkoKSAmJiAhb3Ro
ZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gKG90aGVyLmNvbnRhaW5zKHIueCgpLCByLnko
KSkgJiYgIW90aGVyLmNvbnRhaW5zKHIubWF4WCgpLCByLm1heFkoKSkpIHx8ICghb3RoZXIuY29u
dGFpbnMoci54KCksIHIueSgpKSAmJiBvdGhlci5jb250YWlucyhyLm1heFgoKSwgci5tYXhZKCkp
KTsKKyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gaW50ZXJzZWN0c0Fs
bG93aW5nRW1wdHkob3RoZXIsIHIpOworICAgIHJldHVybiByLmludGVyc2VjdHMob3RoZXIpOwor
fQorCisvLyBPbmUgb2YgdGhlIGVsZW1lbnQgdHlwZXMgdGhhdCBjYW4gY2F1c2UgZ3JhcGhpY3Mg
dG8gYmUgZHJhd24gb250byB0aGUgdGFyZ2V0IGNhbnZhcy4gU3BlY2lmaWNhbGx5OiBjaXJjbGUs
IGVsbGlwc2UsCisvLyBpbWFnZSwgbGluZSwgcGF0aCwgcG9seWdvbiwgcG9seWxpbmUsIHJlY3Qs
IHRleHQgYW5kIHVzZS4KK3N0YXRpYyBib29sIGlzR3JhcGhpY3NFbGVtZW50KGNvbnN0IFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyKQoreworICAgIHJldHVybiByZW5kZXJlci5pc1NWR1NoYXBlKCkg
fHwgcmVuZGVyZXIuaXNTVkdUZXh0KCkgfHwgcmVuZGVyZXIuaXNTVkdJbWFnZSgpIHx8IHJlbmRl
cmVyLmVsZW1lbnQoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dXNlVGFnKTsKK30KKworYm9vbCBS
ZW5kZXJTVkdNb2RlbE9iamVjdDo6Y2hlY2tJbnRlcnNlY3Rpb24oUmVuZGVyRWxlbWVudCogcmVu
ZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlbmRlcmVyIHx8IHJl
bmRlcmVyLT5zdHlsZSgpLnBvaW50ZXJFdmVudHMoKSA9PSBQb2ludGVyRXZlbnRzOjpOb25lKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0dyYXBoaWNzRWxlbWVudCgqcmVuZGVy
ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9
IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOworICAgIEFTU0VSVChp
czxTVkdHcmFwaGljc0VsZW1lbnQ+KHN2Z0VsZW1lbnQpKTsKKyAgICBhdXRvIGN0bSA9IGRvd25j
YXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oKnN2Z0VsZW1lbnQpLmdldENUTShTVkdMb2NhdGFibGU6
OkRpc2FsbG93U3R5bGVVcGRhdGUpOworICAgIHJldHVybiBpbnRlcnNlY3RzQWxsb3dpbmdFbXB0
eShyZWN0LCBjdG0ubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSkpOworfQorCitib29sIFJlbmRlclNWR01vZGVsT2JqZWN0OjpjaGVja0VuY2xvc3VyZShS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlm
ICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCkucG9pbnRlckV2ZW50cygpID09IFBvaW50
ZXJFdmVudHM6Ok5vbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWlzR3JhcGhp
Y3NFbGVtZW50KCpyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTVkdFbGVt
ZW50KiBzdmdFbGVtZW50ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXItPmVsZW1lbnQo
KSk7CisgICAgQVNTRVJUKGlzPFNWR0dyYXBoaWNzRWxlbWVudD4oc3ZnRWxlbWVudCkpOworICAg
IGF1dG8gY3RtID0gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50Pigqc3ZnRWxlbWVudCkuZ2V0
Q1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CisgICAgcmV0dXJuIHJlY3Qu
Y29udGFpbnMoY3RtLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpKTsKK30KKwordm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YXBwbHlUcmFuc2Zvcm0o
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRy
YW5zZm9ybU9wZXJhdGlvbk9wdGlvbj4gb3B0aW9ucykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFS
QU0odHJhbnNmb3JtKTsKKyAgICBVTlVTRURfUEFSQU0oc3R5bGUpOworICAgIFVOVVNFRF9QQVJB
TShib3VuZGluZ0JveCk7CisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOworICAgIC8vIEZJWE1F
OiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgLy8gU1ZHUmVu
ZGVyU3VwcG9ydDo6YXBwbHlUcmFuc2Zvcm0oKnRoaXMsIHRyYW5zZm9ybSwgc3R5bGUsIGJvdW5k
aW5nQm94LCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgb3B0aW9ucyk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5H
SU5FKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiZGJlMjFjZTU2ZjJmMzAyYWVjN2M1OThhNTlmNDQ1MWYz
NjhjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0LmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAsIDIwMjEsIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShM
QVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIgorLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBT
VkdCb3VuZGluZ0JveENvbXB1dGF0aW9uCisvLyAjaW5jbHVkZSAiU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJT
dXBwb3J0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTW9zdCByZW5kZXJlcnMgaW4g
dGhlIFNWRyByZW5kZXJpbmcgdHJlZSB3aWxsIGluaGVyaXQgZnJvbSB0aGlzIGNsYXNzCisvLyBi
dXQgbm90IGFsbC4gUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCwgUmVuZGVyU1ZHQmxvY2ssIGV0Yy4g
aW5oZXJpdCBmcm9tCisvLyBleGlzdGluZyBSZW5kZXJCbG9jayBjbGFzc2VzLCB0aGF0IGFsbCBp
bmhlcml0IGZyb20gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdAorLy8gZGlyZWN0bHksIHdpdGhvdXQg
UmVuZGVyU1ZHTW9kZWxPYmplY3QgaW5iZXR3ZWVuLiBUaGVyZWZvcmUgY29kZSB3aGljaAorLy8g
bmVlZHMgdG8gYmUgc2hhcmVkIGJldHdlZW4gYWxsIFNWRyByZW5kZXJlcnMgZ29lcyB0byBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LgorY2xhc3MgU1ZHRWxlbWVudDsKKworY2xhc3MgUmVuZGVyU1ZH
TW9kZWxPYmplY3QgOiBwdWJsaWMgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCB7CisgICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChSZW5kZXJTVkdNb2RlbE9iamVjdCk7CitwdWJsaWM6CisgICAgYm9v
bCByZXF1aXJlc0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkgb3ZlcnJpZGU7CisKKyAgICBzdGF0aWMgYm9vbCBjaGVja0ludGVyc2VjdGlvbihS
ZW5kZXJFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgc3RhdGljIGJvb2wgY2hlY2tF
bmNsb3N1cmUoUmVuZGVyRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYpOworCisgICAgU1ZHRWxl
bWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFNWR0VsZW1lbnQ+KG5vZGVG
b3JOb25Bbm9ueW1vdXMoKSk7IH0KKworICAgIC8vIEZJWE1FOiBbTEJTRV0gTWFyayBmaW5hbCwg
YWRkIGFwcGx5VHJhbnNmb3JtIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QKKyAgICB2b2lkIGFw
cGx5VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBPcHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRyYW5z
Zm9ybU9wZXJhdGlvbk9wdGlvbj4pIGNvbnN0OworCisgICAgLy8gTWltaWMgdGhlIFJlbmRlckJv
eCBhY2Nlc3NvcnMgLSBieSBzaGFyaW5nIHRoZSBzYW1lIHRlcm1pbm9sb2d5IHRoZSBwYWludGlu
ZyAvIGhpdCB0ZXN0aW5nIC8gbGF5b3V0IGxvZ2ljIGlzCisgICAgLy8gc2ltaWxhciB0byByZWFk
IGNvbXBhcmVkIHRvIG5vbi1TVkcgcmVuZGVyZXJzIHN1Y2ggYXMgUmVuZGVyQm94ICYgZnJpZW5k
cy4KKyAgICBMYXlvdXRSZWN0IGJvcmRlckJveFJlY3RFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1
cm4geyBMYXlvdXRQb2ludCgpLCBtX2xheW91dFJlY3Quc2l6ZSgpIH07IH0KKyAgICBMYXlvdXRS
ZWN0IGNvbnRlbnRCb3hSZWN0RXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckJveFJl
Y3RFcXVpdmFsZW50KCk7IH0KKyAgICBMYXlvdXRSZWN0IGZyYW1lUmVjdEVxdWl2YWxlbnQoKSBj
b25zdCB7IHJldHVybiBtX2xheW91dFJlY3Q7IH0KKworICAgIExheW91dFJlY3QgdmlzdWFsT3Zl
cmZsb3dSZWN0RXF1aXZhbGVudCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBGSVhNRTogW0xC
U0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKyAgICAgICAgLy8gcmV0dXJu
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVWaXN1YWxPdmVyZmxvd1JlY3QoKnRo
aXMpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgIH0KKworICAgIHZvaWQgYXBw
bHlUb3BMZWZ0TG9jYXRpb25PZmZzZXRFcXVpdmFsZW50KExheW91dFBvaW50JiBwb2ludCkgY29u
c3QgeyBwb2ludC5tb3ZlQnkobGF5b3V0TG9jYXRpb24oKSk7IH0KKworICAgIExheW91dFJlY3Qg
bGF5b3V0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UmVjdDsgfQorICAgIHZvaWQgc2V0
TGF5b3V0UmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXlvdXRSZWN0KSB7IG1fbGF5b3V0UmVjdCA9
IGxheW91dFJlY3Q7IH0KKyAgICB2b2lkIHNldExheW91dExvY2F0aW9uKGNvbnN0IExheW91dFBv
aW50JiBsYXlvdXRMb2NhdGlvbikgeyBtX2xheW91dFJlY3Quc2V0TG9jYXRpb24obGF5b3V0TG9j
YXRpb24pOyB9CisKKyAgICBMYXlvdXRQb2ludCBwYWludGluZ0xvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gdG9MYXlvdXRQb2ludChsYXlvdXRMb2NhdGlvbigpIC0gZmxvb3JlZExheW91dFBvaW50
KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSkpOyB9CisgICAgTGF5b3V0UG9p
bnQgbGF5b3V0TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xheW91dFJlY3QubG9jYXRpb24o
KTsgfQorICAgIExheW91dFNpemUgbGF5b3V0TG9jYXRpb25PZmZzZXQoKSBjb25zdCB7IHJldHVy
biB0b0xheW91dFNpemUobV9sYXlvdXRSZWN0LmxvY2F0aW9uKCkpOyB9CisgICAgTGF5b3V0U2l6
ZSBsYXlvdXRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRSZWN0LnNpemUoKTsgfQorCisg
ICAgLy8gRm9yIFJlbmRlckxheWVyIG9ubHkKKyAgICBGbG9hdFJlY3QgYm9yZGVyQm94UmVjdElu
RnJhZ21lbnRFcXVpdmFsZW50KFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiwgUmVuZGVyQm94OjpS
ZW5kZXJCb3hGcmFnbWVudEluZm9GbGFncyA9IFJlbmRlckJveDo6Q2FjaGVSZW5kZXJCb3hGcmFn
bWVudEluZm8pIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0
KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqID0g
bnVsbHB0ciwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSwgUGFpbnRQaGFzZSA9IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCkgY29u
c3Q7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMoY29uc3Qg
TGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQs
IE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgeyByZXR1cm4gb3ZlcmZs
b3dDbGlwUmVjdChsb2NhdGlvbiwgZnJhZ21lbnQsIHJlbGV2YW5jeSk7IH0KKworcHJvdGVjdGVk
OgorICAgIFJlbmRlclNWR01vZGVsT2JqZWN0KFNWR0VsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsK
KworICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVG
cm9tU3R5bGUoKSBvdmVycmlkZTsKKyAgICBib29sIHNob3VsZFBhaW50U1ZHUmVuZGVyZXIoY29u
c3QgUGFpbnRJbmZvJikgY29uc3Q7CisKKyAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1Jl
Y3QoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVmlzaWJs
ZVJlY3RDb250ZXh0KSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6Om9wdGlvbmFsPExheW91dFJl
Y3Q+IGNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IExheW91dFJlY3QmLCBjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBtYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChPcHRpb25TZXQ8
TWFwQ29vcmRpbmF0ZXNNb2RlPiwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
YW5jZXN0b3JDb250YWluZXIsIFRyYW5zZm9ybVN0YXRlJiwgT3B0aW9uU2V0PE1hcENvb3JkaW5h
dGVzTW9kZT4sIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBmaW5hbDsKKyAgICBMYXlvdXRSZWN0IG91
dGxpbmVCb3VuZHNGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwKikgY29uc3QgZmluYWw7CisgICAg
Y29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqLCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IExheW91dFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBib29sKiBvZmZzZXREZXBlbmRzT25Qb2ludCA9IG51bGxwdHIpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVj
dD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcGFpbnRDb250YWluZXIgPSAwKSBvdmVycmlkZTsKKyAgICAvLyBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIFNWRyBvdXRsaW5lIHBhaW50aW5nIGZ1bmN0aW9uYWxpdHkKKyAg
ICAvLyB2b2lkIHBhaW50U1ZHT3V0bGluZShQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYg
YWRqdXN0ZWRQYWludE9mZnNldCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1JlbmRlclNWR01v
ZGVsT2JqZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgTGF5b3V0UmVj
dCBtX2xheW91dFJlY3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJTVkdNb2RlbE9iamVjdCwgaXNSZW5k
ZXJTVkdNb2RlbE9iamVjdCgpKQorCisjZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCg==
</data>
<flag name="review"
          id="474053"
          type_id="1"
          status="+"
          setter="rbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>