<?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>234954</bug_id>
          
          <creation_ts>2022-01-07 04:56:56 -0800</creation_ts>
          <short_desc>[LBSE] Begin layer-aware RenderSVGShape implementation</short_desc>
          <delta_ts>2022-01-10 01:48:21 -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>234877</dependson>
          <blocked>90738</blocked>
    
    <blocked>234632</blocked>
    
    <blocked>234992</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1828870</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 04:56:56 -0800</bug_when>
    <thetext>Now that RenderSVGShape was renamed to LegacyRenderSVGShape, we can re-introduce RenderSVGShape for LBSE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828875</commentid>
    <comment_count>1</comment_count>
      <attachid>448582</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 05:07:01 -0800</bug_when>
    <thetext>Created attachment 448582
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828884</commentid>
    <comment_count>2</comment_count>
      <attachid>448584</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 06:31:35 -0800</bug_when>
    <thetext>Created attachment 448584
Patch, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828885</commentid>
    <comment_count>3</comment_count>
      <attachid>448582</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-07 06:40:22 -0800</bug_when>
    <thetext>Comment on attachment 448582
Patch, v1

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        layout / paint / hit-testing looks quite, much more similar to RenderBox &amp; co

quite what? :)

&gt; Source/WebCore/rendering/svg/RenderSVGResource.cpp:251
&gt; +        return;

Maybe instead there could be an ASSERT that this does not happen? AFAICS only filter provide nullptr for both but that seems a different code path.

&gt; Source/WebCore/rendering/svg/RenderSVGResource.cpp:254
&gt; +        ASSERT(shape-&gt;isSVGShapeOrLegacySVGShape());

How about ASSERT(!shape || shape-&gt;isSVGShapeOrLegacySVGShape()); ?

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:32
&gt; +#include &quot;LegacyRenderSVGShape.h&quot;

Is this needed?

&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:28
&gt; +#include &quot;RenderElement.h&quot;

Ditto?

&gt; Source/WebCore/svg/SVGLineElement.cpp:25
&gt; +#include &quot;LegacyRenderSVGShape.h&quot;

Ditto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829034</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 12:38:49 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #3)
Thanks for the first review.

&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        layout / paint / hit-testing looks quite, much more similar to RenderBox &amp; co
&gt; 
&gt; quite what? :)
different :-)
 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResource.cpp:251
&gt; &gt; +        return;
&gt; 
&gt; Maybe instead there could be an ASSERT that this does not happen? AFAICS
&gt; only filter provide nullptr for both but that seems a different code path.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResource.cpp:254
&gt; &gt; +        ASSERT(shape-&gt;isSVGShapeOrLegacySVGShape());
&gt; 
&gt; How about ASSERT(!shape || shape-&gt;isSVGShapeOrLegacySVGShape()); ?
Having two statements in an assertion doesn&apos;t tell you precisely what failed, which is annoying :-)

However we could turn both the if (!shape &amp;&amp; !path) return and the if(shape) ASSERT... into:

    if (shape)
        ASSERT(shape-&gt;isSVGShapeOrLegacySVGShape());
    else
        ASSERT(path);

This is even more ugly, IMHO. So I went for:

void RenderSVGResource::fillAndStrokePathOrShape(..) {
{
    if (shape) {
        ASSERT(shape-&gt;isSVGShapeOrLegacySVGShape());

        if (resourceMode.contains(RenderSVGResourceMode::ApplyToFill)) {
            if (is&lt;LegacyRenderSVGShape&gt;(shape))
                downcast&lt;LegacyRenderSVGShape&gt;(shape)-&gt;fillShape(context);
...
        }

        if (resourceMode.contains(RenderSVGResourceMode::ApplyToStroke)) {
            if (is&lt;LegacyRenderSVGShape&gt;(shape))
                downcast&lt;LegacyRenderSVGShape&gt;(shape)-&gt;strokeShape(context);
...
        }

        return;
    }

    if (path) {
        if (resourceMode.contains(RenderSVGResourceMode::ApplyToFill))
            context.fillPath(*path);
        if (resourceMode.contains(RenderSVGResourceMode::ApplyToStroke))
            context.strokePath(*path);

        return;
    }

    ASSERT_NOT_REACHED();
}

That is more pleasant to my eyes :-) Fine with you?

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:32
&gt; &gt; +#include &quot;LegacyRenderSVGShape.h&quot;
&gt; 
&gt; Is this needed?
Leftover, probably not.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:28
&gt; &gt; +#include &quot;RenderElement.h&quot;
&gt; 
&gt; Ditto?
Nope on purpose, I removed a RenderElement.h include in an unrelated place, and this is fixing the wrong places, that forgot the include before.
 
&gt; &gt; Source/WebCore/svg/SVGLineElement.cpp:25
&gt; &gt; +#include &quot;LegacyRenderSVGShape.h&quot;
&gt; 
&gt; Ditto?
Nope, (caught by WinCairo EWS).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829040</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 12:57:54 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:32
&gt; &gt; &gt; +#include &quot;LegacyRenderSVGShape.h&quot;
&gt; &gt; 
&gt; &gt; Is this needed?
&gt; Leftover, probably not.

./rendering/svg/SVGRenderSupport.cpp:161:16: error: unknown type name &apos;LegacyRenderSVGShape&apos;; did you mean &apos;LegacyRenderSVGRoot&apos;?
        if (is&lt;LegacyRenderSVGShape&gt;(current) &amp;&amp; downcast&lt;LegacyRenderSVGShape&gt;(current).isRenderingDisabled())
               ^~~~~~~~~~~~~~~~~~~~
               LegacyRenderSVGRoot

The new include is needed, as I&apos;ve removed the LegacyRenderSVGShape.h include from RenderSVGResource.h, which is no longer needed there, since postApplyResource() is now taking a RenderElement (common-base class for LegacyRenderSVGShape/RenderSVGShape) instead of a LegacyRenderSVGShape.


I&apos;ve also double-checked that all places that handle LegacyRenderSVGShape, also handle RenderSVGShape now. Previously I missed SVGGeometryElement (getTotalLength() / etc.).

I will include all fixes in a new patch, that also hopefully satisfies win/wincairo builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829060</commentid>
    <comment_count>6</comment_count>
      <attachid>448628</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 13:59:39 -0800</bug_when>
    <thetext>Created attachment 448628
Patch, v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829105</commentid>
    <comment_count>7</comment_count>
      <attachid>448637</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-07 15:13:01 -0800</bug_when>
    <thetext>Created attachment 448637
Patch, v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829206</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-08 02:08:10 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #3)&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResource.cpp:251
&gt; &gt; +        return;
&gt; 
&gt; Maybe instead there could be an ASSERT that this does not happen? AFAICS
&gt; only filter provide nullptr for both but that seems a different code path.

EWS lectured me: shape=path=nullptr is possible.

void SVGInlineTextBox::restoreGraphicsContextAfterTextPainting(GraphicsContext*&amp; context)
{
    releasePaintingResource(context, /* path */nullptr);

-&gt;

void SVGInlineTextBox::releasePaintingResource(GraphicsContext*&amp; context, const Path* path)
{
    ASSERT(m_paintingResource);

    m_paintingResource-&gt;postApplyResource(parent()-&gt;renderer(), context, paintingResourceMode(), path, /*LegacyRenderSVGShape*/ nullptr);


-&gt; both shape and path are nullptr.

The ASSERT_NOT_REACHED() has to go, or we fix the call sites. However, due to the scope of this patch, it&apos;s better to remove the ASSERT_NOT_REACHED.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829207</commentid>
    <comment_count>9</comment_count>
      <attachid>448666</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-08 02:10:24 -0800</bug_when>
    <thetext>Created attachment 448666
Patch, v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829387</commentid>
    <comment_count>10</comment_count>
      <attachid>448666</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-10 00:33:40 -0800</bug_when>
    <thetext>Comment on attachment 448666
Patch, v5

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

&gt; Source/WebCore/rendering/svg/RenderSVGResource.cpp:280
&gt; +        return;

Not needed.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.h:23
&gt; +#include &quot;FloatRect.h&quot;

Is this needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829389</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-10 01:29:22 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #10)
&gt; Comment on attachment 448666 [details]
&gt; Patch, v5
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=448666&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResource.cpp:280
&gt; &gt; +        return;
&gt; 
&gt; Not needed.
True. But then I could also make it if (!path) return early return..

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.h:23
&gt; &gt; +#include &quot;FloatRect.h&quot;
&gt; 
&gt; Is this needed?

It is, we use FloatRect() in resourceBoundingBox(), and no other class now provides this include.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829390</commentid>
    <comment_count>12</comment_count>
      <attachid>448666</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-10 01:31:32 -0800</bug_when>
    <thetext>Comment on attachment 448666
Patch, v5

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

&gt;&gt;&gt; Source/WebCore/rendering/svg/RenderSVGResource.cpp:280
&gt;&gt;&gt; +        return;
&gt;&gt; 
&gt;&gt; Not needed.
&gt; 
&gt; True. But then I could also make it if (!path) return early return..

Actually, that is probably preferred, it was also remove indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829392</commentid>
    <comment_count>13</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-10 01:47:46 -0800</bug_when>
    <thetext>Committed r287832 (245884@trunk): &lt;https://commits.webkit.org/245884@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829393</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-10 01:48:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/87330324&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448582</attachid>
            <date>2022-01-07 05:07:01 -0800</date>
            <delta_ts>2022-01-07 12:39:06 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-234954-20220107050659.patch</filename>
            <type>text/plain</type>
            <size>55335</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdmMGNhN2MxNTI3YmQz
MDcyNTljMmJkNzQwMDFlMmI2YzMwZTFmYS4uNmE4NjJkYmIyZGY3OWRlZTkzMjg0MDk4OWRhN2E1
ZTg2OTMyNTAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIyLTAxLTA3ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBCZWdpbiBsYXllci1hd2FyZSBSZW5kZXJTVkdTaGFwZSBpbXBsZW1lbnRhdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTU0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmVnaW4gaW1wbGVtZW50
aW5nIFJlbmRlclNWR1NoYXBlLCBiYXNlZCBvbiB0aGUgZG93bnN0cmVhbSB2ZXJzaW9uIGluIHRo
ZQorICAgICAgICBMQlNFIGJyYW5jaC4gTWFueSBwYXJ0cyBhcmUgMToxIGNvcGllcyBmcm9tIExl
Z2FjeVJlbmRlclNWR1NoYXBlLCBhbHRob3VnaAorICAgICAgICBsYXlvdXQgLyBwYWludCAvIGhp
dC10ZXN0aW5nIGxvb2tzIHF1aXRlLCBtdWNoIG1vcmUgc2ltaWxhciB0byBSZW5kZXJCb3ggJiBj
bworICAgICAgICB0aGFuIHRoZSBsZWdhY3kgTGVnYWN5UmVuZGVyU1ZHKiByZW5kZXJlcnMuCisK
KyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgbm8gY2hhbmdlIGluIGJlaGF2aW91
ci4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpmaWxsQW5kU3Ry
b2tlUGF0aE9yU2hhcGUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpwb3N0QXBw
bHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9z
dEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6
cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVw
ZGF0ZVNoYXBlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxT
aGFwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hh
cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5k
ZW50U3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNo
YXBlRGVwZW5kZW50RmlsbENvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpmaWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjps
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vblNjYWxpbmdTdHJv
a2VQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXR1cE5v
blNjYWxpbmdTdHJva2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
Ojpub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6ZmlsbFN0cm9rZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc1Bv
aW50SW5GaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc1BvaW50SW5T
dHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmdldFRvdGFsTGVuZ3Ro
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpnZXRQb2ludEF0TGVu
Z3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpub2RlQXRQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJGb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpjb21wdXRlTWFya2VyQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVTdHJva2VC
b3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ry
b2tlV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Omhhc1Nt
b290aFN0cm9rZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZHJh
d01hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVBhdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnByb2Nlc3NNYXJrZXJQ
b3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0eWxlV2lsbENo
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpjbGVhclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6Omhhc05vblNjYWxpbmdTdHJva2UgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OmdyYXBoaWNzRWxlbWVudCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAqIHN2Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisKIDIw
MjItMDEtMDYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0xCU0VdIFJlbmFtZSBSZW5kZXJTVkdSZWN0IC0+IExlZ2FjeVJlbmRlclNWR1Jl
Y3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggMjgwNzY5ZTI0OWNkZDFjOGZmY2U0NzQwMmZkNGZjNjRhMzY4
MWNjZS4uNThmNDcwOTBkNmY2Y2NkNjJhNjRiMzUxMzU0NzM3NDhkMjU5NWZkNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTI0OTQsNiArMjQ5NCw3IEBAIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCityZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1No
YXBlLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUU3Bhbi5jcHAKIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMGI4Y2Y0ZmI2MjU0ZWRhODEyNjI2MjI2OGE4ZWZmMDIxZTkzZTI1OC4uYzM1YjRjNDJjNDA3
YTcyZGNiNDJiNWZkZDMwNmQ0NTkyZWY3ZjBlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzI3Miw2ICszMjcyLDcgQEAKIAkJ
QTEwNEYyNDQxNEM3MUY3QTAwOUUyQzIzIC8qIENhY2hlZFNWR0RvY3VtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTA0RjI0MjE0QzcxRjdBMDA5
RTJDMjMgLyogQ2FjaGVkU1ZHRG9jdW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTBCQjU4NTE0ODRFM0E3MDBCMkU4N0EgLyogTGVnYWN5
UmVuZGVyU1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTEwQkI1ODMxNDg0RTNBNzAwQjJFODdBIC8qIExlZ2FjeVJlbmRlclNWR1JlY3QuaCAq
LzsgfTsKIAkJQTEwQkI1OEIxNDg0RTNCMzAwQjJFODdBIC8qIExlZ2FjeVJlbmRlclNWR1NoYXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBCQjU4
OTE0ODRFM0IzMDBCMkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCAqLzsgfTsKKwkJQTEw
QkI1OEIxNDg0RTNCMzAwQzNGNzdCIC8qIFJlbmRlclNWR1NoYXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBCQjU4OTE0ODRFM0IzMDBDM0Y3N0Ig
LyogUmVuZGVyU1ZHU2hhcGUuaCAqLzsgfTsKIAkJQTEwREJGNDcxOEY5MjMxNzAwMEQ3MEM2IC8q
IExlZ2FjeVByZXZpZXdMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEExMERCRjQ2MThGOTIzMTcwMDBENzBDNiAvKiBMZWdhY3lQcmV2
aWV3TG9hZGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTEwREM3NkIxNDc0N0JBQjAwNUUyNDcxIC8qIFN0eWxlR3JpZERhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMERDNzY5MTQ3
NDdCQUIwMDVFMjQ3MSAvKiBTdHlsZUdyaWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTEwRjdDNzMyNzMxMDBEMDAwOEZBOUFGIC8qIE1v
ZGFsQ29udGFpbmVyT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEExMEY3QzcwMjczMTAwNzMwMDhGQTlBRiAvKiBNb2RhbENvbnRhaW5lck9i
c2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTQ2MzEsNiArNDYzMiw3IEBACiAJCUNERjc0N0YzMjcwRjc2Q0YwMDhGRUVFQyAvKiBSZW5k
ZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNzQ3RjIyNzBGNzZDRjAwOEZFRUVDIC8qIFJl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnRJbmxpbmVzLmggKi87IH07CiAJCUNERjc0N0Y1
MjcwRjgzQjEwMDhGRUVFQyAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3BJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGNDI3MEY4M0Ix
MDA4RkVFRUMgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wSW5saW5lcy5oICovOyB9OwogCQlDREY3
NDdGNzI3MEY4NkE0MDA4RkVFRUMgLyogTGVnYWN5UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGNjI3MEY4
NkE0MDA4RkVFRUMgLyogTGVnYWN5UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggKi87IH07CisJCUNE
Rjc0N0Y3MjcwRjgzQjQxMDdERUVFQyAvKiBSZW5kZXJTVkdTaGFwZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0N0Y2MjcwRjgzQjQx
MDdERUVFQyAvKiBSZW5kZXJTVkdTaGFwZUlubGluZXMuaCAqLzsgfTsKIAkJQ0RGNzQ3RjkyNzBG
ODdDQjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGODI3
MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGluZXMu
aCAqLzsgfTsKIAkJQ0RGNzQ3RkIyNzBGODkxQTAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNl
TWFza2VySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RGNzQ3RkEyNzBGODkxQTAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2Vy
SW5saW5lcy5oICovOyB9OwogCQlDREY3NDgzRjE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0
aW9uc1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREY3NDgzRDE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzMzc3
LDcgKzEzMzc5LDkgQEAKIAkJQTEwQkI1ODIxNDg0RTNBNzAwQjJFODdBIC8qIExlZ2FjeVJlbmRl
clNWR1JlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5
UmVuZGVyU1ZHUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMEJCNTgz
MTQ4NEUzQTcwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdSZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVJlbmRlclNWR1JlY3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTEwQkI1ODgxNDg0RTNCMzAwQjJFODdBIC8qIExlZ2FjeVJlbmRlclNW
R1NoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeVJl
bmRlclNWR1NoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEwQ0M1ODgx
NDczRTNCMzAwQjJBOEJGIC8qIFJlbmRlclNWR1NoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1NoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTEwQkI1ODkxNDg0RTNCMzAwQjJFODdBIC8qIExlZ2FjeVJlbmRlclNWR1No
YXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVJlbmRlclNWR1No
YXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExMEJCNTg5MTQ4NEUzQjMwMEMz
Rjc3QiAvKiBSZW5kZXJTVkdTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTVkdTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTBENkU5
NDIxNDRDOTk4MDBGREQxNEQgLyogSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNQYXltZW50UmVzcG9uc2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMTBEQkY0NjE4RjkyMzE3MDAwRDcwQzYgLyogTGVnYWN5UHJldmlld0xv
YWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lQcmV2
aWV3TG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMERDNzY4
MTQ3NDdCQUIwMDVFMjQ3MSAvKiBTdHlsZUdyaWREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlR3JpZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTYyNzgsNiArMTYyODIsNyBAQAogCQlDREY3NDdGMjI3MEY3NkNGMDA4RkVF
RUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudElubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RGNzQ3RjQyNzBGODNCMTAwOEZFRUVDIC8qIFJlbmRlclNW
R0dyYWRpZW50U3RvcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHR3JhZGllbnRT
dG9wSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREY3NDdGNjI3MEY4
NkE0MDA4RkVFRUMgLyogTGVnYWN5UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExlZ2FjeVJlbmRlclNWR1NoYXBlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDREY3NDdGNjI3MEY4M0I0MTA3REVFRUMgLyogUmVuZGVyU1ZHU2hhcGVJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1NoYXBlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREY3NDdGODI3MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVz
b3VyY2VSYWRpYWxHcmFkaWVudElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVz
b3VyY2VSYWRpYWxHcmFkaWVudElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0RGNzQ3RkEyNzBGODkxQTAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlTWFza2VySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcklubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RGNzQ4M0MxOEZFQkNFQzAwMDZFQ0MwIC8q
IEdyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTg5NzAsNiArMTg5NzUsOSBAQAogCQkJCTQzNjcwOEE0MTJEOUNBNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCAqLywKIAkJCQk0MzY3MDhBNTEyRDlD
QTVDMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5jcHAgKi8sCiAJCQkJNDM2NzA4QTYxMkQ5REI0
QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCAqLywKKwkJCQlBMTBDQzU4ODE0NzNFM0IzMDBC
MkE4QkYgLyogUmVuZGVyU1ZHU2hhcGUuY3BwICovLAorCQkJCUExMEJCNTg5MTQ4NEUzQjMwMEMz
Rjc3QiAvKiBSZW5kZXJTVkdTaGFwZS5oICovLAorCQkJCUNERjc0N0Y2MjcwRjgzQjQxMDdERUVF
QyAvKiBSZW5kZXJTVkdTaGFwZUlubGluZXMuaCAqLywKIAkJCQkwODU0QjAwNjEyNTVFNEU2MDBC
OUNERDAgLyogUmVuZGVyU1ZHVGV4dC5jcHAgKi8sCiAJCQkJMDg1NEIwMDcxMjU1RTRFNjAwQjlD
REQwIC8qIFJlbmRlclNWR1RleHQuaCAqLywKIAkJCQkwODU0QjAwODEyNTVFNEU2MDBCOUNERDAg
LyogUmVuZGVyU1ZHVGV4dFBhdGguY3BwICovLApAQCAtMzY3NDYsNiArMzY3NTQsOCBAQAogCQkJ
CUNERjc0N0Y5MjcwRjg3Q0IwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4RTMxMkQ5Q0E0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2
NzA4RTUxMkQ5REI0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jvb3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCUExMEJCNThCMTQ4NEUzQjMwMEMzRjc3QiAvKiBSZW5kZXJTVkdTaGFwZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQ0RGNzQ3RjcyNzBGODNCNDEwN0RFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMTkxMjU1RTRFNjAwQjlDREQwIC8qIFJl
bmRlclNWR1RleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDFCMTI1NUU0RTYwMEI5Q0RE
MCAvKiBSZW5kZXJTVkdUZXh0UGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4RTkxMkQ5
Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlLmNwcAppbmRleCBmZmU4NWEwMTg5ZDNlNGI4MjFlZTI3OTc0MTI5MWU3OGQyMjEzZWMx
Li4zZDRlNmRlNTc5NmQ0ZDk4Nzk1ODg4YThlNjBjNDY5NzI5NjQwYjJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcApAQCAtMjYs
MTEgKzI2LDEzIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVy
U1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlTWFza2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlRWxlbWVudENsaWVu
dC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgpAQCAtMjQzLDQgKzI0NSwzNSBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlk
YXRpb24oUmVuZGVyT2JqZWN0JgogICAgIH0KIH0KIAordm9pZCBSZW5kZXJTVkdSZXNvdXJjZTo6
ZmlsbEFuZFN0cm9rZVBhdGhPclNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgT3B0aW9u
U2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRo
LCBjb25zdCBSZW5kZXJFbGVtZW50KiBzaGFwZSkgY29uc3QKK3sKKyAgICBpZiAoIXBhdGggJiYg
IXNoYXBlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2hhcGUpCisgICAgICAgIEFTU0VS
VChzaGFwZS0+aXNTVkdTaGFwZU9yTGVnYWN5U1ZHU2hhcGUoKSk7CisKKyAgICBpZiAocmVzb3Vy
Y2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKSB7Cisg
ICAgICAgIGlmIChwYXRoKQorICAgICAgICAgICAgY29udGV4dC5maWxsUGF0aCgqcGF0aCk7Cisg
ICAgICAgIGVsc2UgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1NoYXBlPihzaGFwZSkpCisgICAgICAg
ICAgICBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4oc2hhcGUpLT5maWxsU2hhcGUoY29u
dGV4dCk7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIGVsc2Ug
aWYgKGlzPFJlbmRlclNWR1NoYXBlPihzaGFwZSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJTVkdTaGFwZT4oc2hhcGUpLT5maWxsU2hhcGUoY29udGV4dCk7CisjZW5kaWYKKyAgICB9CisK
KyAgICBpZiAocmVzb3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBw
bHlUb1N0cm9rZSkpIHsKKyAgICAgICAgaWYgKHBhdGgpCisgICAgICAgICAgICBjb250ZXh0LnN0
cm9rZVBhdGgoKnBhdGgpOworICAgICAgICBlbHNlIGlmIChpczxMZWdhY3lSZW5kZXJTVkdTaGFw
ZT4oc2hhcGUpKQorICAgICAgICAgICAgZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHNo
YXBlKS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihzaGFwZSkpCisgICAg
ICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oc2hhcGUpLT5zdHJva2VTaGFwZShjb250
ZXh0KTsKKyNlbmRpZgorICAgIH0KK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGQyMmE4NGIyNzJkNDY4ZjlkMDEzNjFh
YTVhMGIyMWM0ZWFjNDdkMTUuLjliYTI3Mjk4Zjg2MzI0M2Q3NWZhYzQ4ODUzODQwM2U0N2UxZjhj
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlLmgKQEAgLTE5LDcgKzE5LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJMZWdh
Y3lSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAj
aW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogCkBAIC00Nyw5ICs0Niw4IEBAIGNsYXNzIENvbG9y
OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGF0aDsK
LWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yOworY2xhc3MgUmVuZGVyU3R5bGU7CiAKIGNsYXNzIFJlbmRlclNW
R1Jlc291cmNlIHsKIHB1YmxpYzoKQEAgLTYwLDcgKzU4LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYsIGJvb2wgbWFya0Zv
ckludmFsaWRhdGlvbiA9IHRydWUpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291
cmNlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dCom
LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9w
dGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgTGVnYWN5
UmVuZGVyU1ZHU2hhcGUqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVz
b3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlckVsZW1lbnQqIC8qIHNoYXBlICov
KSB7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJl
bmRlck9iamVjdCYpID0gMDsKIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJl
c291cmNlVHlwZSgpIGNvbnN0ID0gMDsKQEAgLTcxLDYgKzY5LDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIHNoYXJlZFNvbGlkUGFpbnRpbmdSZXNv
dXJjZSgpOwogCiAgICAgc3RhdGljIHZvaWQgbWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNl
SW52YWxpZGF0aW9uKFJlbmRlck9iamVjdCYsIGJvb2wgbmVlZHNMYXlvdXQgPSB0cnVlKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGhPclNoYXBlKEdyYXBoaWNzQ29u
dGV4dCYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29u
c3QgUmVuZGVyRWxlbWVudCogc2hhcGUpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCBhNDYyYmJkZTgzYTY5Y2FjODAxNzdmNTk3ZjlkNzA2
MzNiNjgwZTczLi44NzRiNmMxNWEyMjIyYWZhZmFiYzEwNzQ2MWJlZTQ4MDRlMTA1ZWZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBv
c3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUs
IGNvbnN0IFBhdGgqLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSopCit2b2lkIFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNl
TW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyRWxlbWVudCopCiB7
CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAh
cmVzb3VyY2VNb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCBlYTJjYzMxNTUwMzRlNGI2NzEwM2I0N2Uw
OTJkYWY0OWQ2MzFkOGQ2Li5hMTExZTllYzAyZWFmNDcxNGM4ODg0YTk2OTgyOWJiMjU3NDgyNWJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92
ZUNsaWVudEZyb21DYWNoZShSZW5kZXJFbGVtZW50JiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9u
ID0gdHJ1ZSkgb3ZlcnJpZGU7CiAKICAgICBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5k
ZXJTVkdSZXNvdXJjZU1vZGU+KSBvdmVycmlkZTsKLSAgICB2b2lkIHBvc3RBcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jl
c291cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSopIG92
ZXJyaWRlOworICAgIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBo
aWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0
aCosIGNvbnN0IFJlbmRlckVsZW1lbnQqKSBvdmVycmlkZTsKIAogICAgIEZsb2F0UmVjdCByZXNv
dXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50LmNwcAppbmRleCAwZDRiMDIwNTVjMjc5NTI5YzkxMmI5ZjY1YTk3Yjc3MjdiZDc2Zjlj
Li5kMTU5MjUzZjFmYjhiYjA4NWY0ZTM3ZGMwMzgxOGEwOTY5NWVlZTA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAKQEAgLTE3OSw3ICsxNzksNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbgogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RB
cHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljc0NvbnRleHQqJiBj
b250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgqIHBhdGgsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlKiBzaGFwZSkKK3ZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJT
VkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVu
ZGVyRWxlbWVudCogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVCgh
cmVzb3VyY2VNb2RlLmlzRW1wdHkoKSk7CkBAIC0yMDcsMjAgKzIwNyw4IEBAIHZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIEdyYXBoCiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIpOwogI2Vu
ZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJlc291cmNlTW9kZS5jb250YWlucyhSZW5k
ZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxsKSkgewotICAgICAgICAgICAgaWYgKHBhdGgp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoc2hhcGUpCi0gICAgICAgICAgICAgICAgc2hhcGUtPmZpbGxTaGFwZSgqY29udGV4
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJT
VkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJva2UpKSB7Ci0gICAgICAgICAgICBpZiAocGF0aCkK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKHNoYXBlKQotICAgICAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFwZSgqY29u
dGV4dCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxBbmRTdHJv
a2VQYXRoT3JTaGFwZSgqY29udGV4dCwgcmVzb3VyY2VNb2RlLCBwYXRoLCBzaGFwZSk7CiAKICAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCmluZGV4IGVlNmJkY2ZhZDY4
ZjhlZTMwZmUzYjhmYTNlN2ZjZTkwNjIyODZhYzkuLjFjZDI3Zjc0MjhmZTE0MThlZDI4MDRkNThk
YzU4YmRmOTAyNWMwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJFbGVtZW50JiwgYm9vbCBt
YXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgZmluYWw7CiAKICAgICBib29sIGFwcGx5UmVzb3Vy
Y2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250ZXh0KiYs
IE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+KSBmaW5hbDsKLSAgICB2b2lkIHBvc3RB
cHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0
PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBMZWdhY3lSZW5kZXJT
VkdTaGFwZSopIGZpbmFsOworICAgIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVu
dCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwg
Y29uc3QgUGF0aCosIGNvbnN0IFJlbmRlckVsZW1lbnQqKSBmaW5hbDsKICAgICBGbG9hdFJlY3Qg
cmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBmaW5hbCB7IHJldHVybiBG
bG9hdFJlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKaW5kZXggMmQ2Zjg5
MGZjNDRiY2VhYWFkYjkyYWM2M2I4NTQ3ZjE3ZjFlODRhNS4uYjU2MmJlZWU0Y2I5ODllMjExZjQy
NzNhYWQ2NjhhMmVlMzZiYTkxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtMjAxLDI0ICsyMDEs
MTEgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3Vy
Y2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IExlZ2FjeVJlbmRl
clNWR1NoYXBlKiBzaGFwZSkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0
aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBw
YXRoLCBjb25zdCBSZW5kZXJFbGVtZW50KiBzaGFwZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7
CiAgICAgQVNTRVJUKCFyZXNvdXJjZU1vZGUuaXNFbXB0eSgpKTsKLQotICAgIGlmIChyZXNvdXJj
ZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvRmlsbCkpIHsKLSAg
ICAgICAgaWYgKHBhdGgpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7Ci0g
ICAgICAgIGVsc2UgaWYgKHNoYXBlKQotICAgICAgICAgICAgc2hhcGUtPmZpbGxTaGFwZSgqY29u
dGV4dCk7Ci0gICAgfQotICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZHUmVz
b3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkgewotICAgICAgICBpZiAocGF0aCkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChzaGFwZSkK
LSAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFwZSgqY29udGV4dCk7Ci0gICAgfQotCisgICAg
ZmlsbEFuZFN0cm9rZVBhdGhPclNoYXBlKCpjb250ZXh0LCByZXNvdXJjZU1vZGUsIHBhdGgsIHNo
YXBlKTsKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCmluZGV4IDk1
OTZmMmFmZDIyYWU5MDFlN2RhZTk1YTAyNTI1YTdkZGQxN2VlODYuLjcxMTdmMTI3ZDBkZGQ3M2Jh
NWViYzU1OTkwMTBjMjRiYjYyZjA4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaApAQCAtNDgsNyArNDgsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYs
IGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBh
cHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNz
Q29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0
KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3Qg
TGVnYWN5UmVuZGVyU1ZHU2hhcGUqKSBvdmVycmlkZTsKKyAgICB2b2lkIHBvc3RBcHBseVJlc291
cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNW
R1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJFbGVtZW50Kikgb3ZlcnJp
ZGU7CiAgICAgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0
Jikgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIFJlbmRlclNWR1Jlc291
cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQYXR0ZXJuUmVz
b3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKaW5kZXggMTA5NWJiNTE2YzA2YTE2
NTQxMmFmZmU3MmViODE3OTRkYmFhYmEzYS4uY2ZlNTIyY2NmMDQ5NjBlYjEwMTExODk0YTVkNzk1
ZjZlM2IyNDI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcApAQCAtNjcsMjMgKzY3LDExIEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50
JiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNl
TW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBMZWdhY3lSZW5kZXJT
VkdTaGFwZSogc2hhcGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9w
dGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCog
cGF0aCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVCghcmVzb3VyY2VNb2RlLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAocmVzb3Vy
Y2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKSB7Ci0g
ICAgICAgIGlmIChwYXRoKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwot
ICAgICAgICBlbHNlIGlmIChzaGFwZSkKLSAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoKmNv
bnRleHQpOwotICAgIH0KLSAgICBpZiAocmVzb3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jl
c291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkpIHsKLSAgICAgICAgaWYgKHBhdGgpCi0gICAgICAg
ICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAoc2hhcGUp
Ci0gICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoKmNvbnRleHQpOwotICAgIH0KKyAgICBm
aWxsQW5kU3Ryb2tlUGF0aE9yU2hhcGUoKmNvbnRleHQsIHJlc291cmNlTW9kZSwgcGF0aCwgc2hh
cGUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAppbmRleCA3ZjFiNzQ2ODJlMmQzYmQzZTM5
NGQ2OTNjMDc5YjUyYTlhODU5NDUwLi43Y2E3OWU1NWFmY2RhMDEzZTc3OWVmYjdjNDg5MjI0NzNh
YzJiNzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmLCBib29sID0gdHJ1
ZSkgb3ZlcnJpZGUgeyB9CiAKICAgICBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYs
IGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJT
VkdSZXNvdXJjZU1vZGU+KSBvdmVycmlkZTsKLSAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJl
bmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291
cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSopIG92ZXJy
aWRlOworICAgIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNz
Q29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCos
IGNvbnN0IFJlbmRlckVsZW1lbnQqKSBvdmVycmlkZTsKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VC
b3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJl
Y3QoKTsgfQogCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIFNvbGlkQ29sb3JSZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5
NWZhMjU0OGQwZjQ3NDE0OTYyNDI4ZTM4YzE0NTg1MTBhNzc2MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0wLDAg
KzEsNTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNj
aGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0
YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVy
c2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAy
MSwgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVy
U1ZHU2hhcGUuaCIKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkhp
dFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJQ
b2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgorI2luY2x1ZGUg
IlJlbmRlclNWR1NoYXBlSW5saW5lcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhEYXRhLmgiCisjaW5j
bHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgor
I2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvU3Rh
Y2tTdGF0cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChSZW5kZXJTVkdTaGFwZSk7CisKK1JlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFw
ZShTVkdHcmFwaGljc0VsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCisgICAg
OiBSZW5kZXJTVkdNb2RlbE9iamVjdChlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKK3sKK30KKwor
UmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFwZSgpID0gZGVmYXVsdDsKKwordm9pZCBSZW5k
ZXJTVkdTaGFwZTo6dXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpCit7CisgICAgbV9wYXRoID0gY3Jl
YXRlUGF0aCgpOworICAgIHByb2Nlc3NNYXJrZXJQb3NpdGlvbnMoKTsKKworICAgIG1fZmlsbEJv
dW5kaW5nQm94ID0gY2FsY3VsYXRlT2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBtX3N0cm9rZUJv
dW5kaW5nQm94ID0gY2FsY3VsYXRlU3Ryb2tlQm91bmRpbmdCb3goKTsKK30KKworYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91
bGQgbmV2ZXIgYmUgY2FsbGVkIGJlZm9yZSBhc3NpZ25pbmcgYSBuZXcgUGF0aCB0byBtX3BhdGgu
CisgICAgLy8gQnV0IHRoaXMgYnVnIGNhbiBoYXBwZW4gaWYgdGhpcyByZW5kZXJlciB3YXMgY3Jl
YXRlZCBhbmQgaXRzIGxheW91dCB3YXMgbm90CisgICAgLy8gZG9uZSBiZWZvcmUgcGFpbnRpbmcu
IEFzc2VydCB0aGlzIGRpZCBub3QgaGFwcGVuIGJ1dCBkbyBub3QgY3Jhc2guCisgICAgQVNTRVJU
KGhhc1BhdGgoKSk7CisgICAgcmV0dXJuICFoYXNQYXRoKCkgfHwgcGF0aCgpLmlzRW1wdHkoKTsK
K30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgoKSk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9wYXRoKTsKKyAgICBQYXRoKiB1c2VQYXRoID0gbV9wYXRoLmdl
dCgpOworCisgICAgaWYgKGhhc05vblNjYWxpbmdTdHJva2UoKSkKKyAgICAgICAgdXNlUGF0aCA9
IG5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBhdGgsIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0o
KSk7CisKKyAgICBjb250ZXh0LnN0cm9rZVBhdGgoKnVzZVBhdGgpOworfQorCitib29sIFJlbmRl
clNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBQb2ludENvb3JkaW5hdGVTcGFjZSBwb2ludENvb3JkaW5hdGVTcGFjZSkKK3sKKyAg
ICBBU1NFUlQobV9wYXRoKTsKKworICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkgJiYgcG9p
bnRDb29yZGluYXRlU3BhY2UgIT0gTG9jYWxDb29yZGluYXRlU3BhY2UpIHsKKyAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNm
b3JtKCk7CisgICAgICAgIFBhdGgqIHVzZVBhdGggPSBub25TY2FsaW5nU3Ryb2tlUGF0aChtX3Bh
dGguZ2V0KCksIG5vblNjYWxpbmdUcmFuc2Zvcm0pOworICAgICAgICByZXR1cm4gdXNlUGF0aC0+
c3Ryb2tlQ29udGFpbnMobm9uU2NhbGluZ1RyYW5zZm9ybS5tYXBQb2ludChwb2ludCksIFt0aGlz
XSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBTVkdSZW5kZXJTdXBw
b3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsK
KyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMo
cG9pbnQsIFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgIFNWR1Jl
bmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwg
KnRoaXMpOworICAgIH0pOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVu
dEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUgZmls
bFJ1bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhdGgoKS5jb250YWlucyhwb2ludCwgZmlsbFJ1
bGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxsLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSkK
K3sKKyAgICBpZiAobV9maWxsQm91bmRpbmdCb3guaXNFbXB0eSgpIHx8ICFtX2ZpbGxCb3VuZGlu
Z0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9y
IGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3Vy
Y2U6OmZpbGxQYWludGluZ1Jlc291cmNlKCp0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50RmlsbENv
bnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQor
eworICAgIGlmIChzdHJva2VCb3VuZGluZ0JveCgpLmlzRW1wdHkoKSB8fCAhc3Ryb2tlQm91bmRp
bmdCb3goKS5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENv
bG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdS
ZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSgqdGhpcywgc3R5bGUoKSwgZmFsbGJhY2tD
b2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzaGFwZURlcGVuZGVu
dFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6bGF5b3V0
KCkKK3sKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7
CisKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnRE
dXJpbmdMYXlvdXQoKSk7CisgICAgaWYgKG1fbmVlZHNTaGFwZVVwZGF0ZSkgeworICAgICAgICAv
LyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0xlbmd0aENvbnRleHQgY2hhbmdlcworICAgICAg
ICAvLyBncmFwaGljc0VsZW1lbnQoKS51cGRhdGVMZW5ndGhDb250ZXh0KCk7CisgICAgICAgIHVw
ZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKTsKKworICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBm
YWxzZTsKKyAgICAgICAgc2V0TGF5b3V0UmVjdChlbmNsb3NpbmdMYXlvdXRSZWN0KG1fZmlsbEJv
dW5kaW5nQm94KSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdM
YXllclRyYW5zZm9ybVVwZGF0ZXIKKyAgICAvLyBTVkdSZW5kZXJTdXBwb3J0Ojp1cGRhdGVMYXll
clRyYW5zZm9ybSgqdGhpcyk7CisKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2Yg
dGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFuZ2VkLgorICAgIGlmIChldmVySGFkTGF5b3V0
KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpCisgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGll
bnRMYXlvdXRDaGFuZ2VkKCp0aGlzKTsKKworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlv
dXQoKTsKKyAgICBjbGVhck5lZWRzTGF5b3V0KCk7Cit9CisKK1BhdGgqIFJlbmRlclNWR1NoYXBl
Ojpub25TY2FsaW5nU3Ryb2tlUGF0aChjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHN0cm9rZVRyYW5zZm9ybSkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UGF0aD4gdGVtcFBhdGg7CisKKyAgICB0ZW1wUGF0aC5nZXQoKSA9ICpwYXRoOworICAgIHRl
bXBQYXRoLmdldCgpLnRyYW5zZm9ybShzdHJva2VUcmFuc2Zvcm0pOworCisgICAgcmV0dXJuICZ0
ZW1wUGF0aC5nZXQoKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5n
U3Ryb2tlQ29udGV4dChBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZVRyYW5zZm9ybSwgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEFmZmlu
ZVRyYW5zZm9ybT4gaW52ZXJzZSA9IHN0cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgaWYg
KCFpbnZlcnNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZVNhdmVyLnNhdmUo
KTsKKyAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+Y29uY2F0Q1RNKGludmVyc2UudmFsdWUoKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdTaGFwZTo6
bm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdyYXBoaWNz
RWxlbWVudCgpLmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUp
OworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9u
cygpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSgpLnN2Z1N0eWxlKCkuaGFzTWFya2VycygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWdyYXBoaWNzRWxlbWVudCgpLnN1cHBv
cnRzTWFya2VycygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvKiByZXNvdXJj
ZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyZXIoKnRoaXMp
OworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpIHx8IHJlc291cmNlcy0+bWFya2VyTWlkKCkgfHwg
cmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNo
YXBlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0JiBvcmlnaW5hbENv
bnRleHQpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gJm9yaWdpbmFsQ29udGV4
dDsKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSog
ZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVz
b3VyY2UoKnRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoZmlsbFBh
aW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UoKnRoaXMsIHN0eWxlLCBjb250ZXh0LCBSZW5k
ZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxsKSkKKyAgICAgICAgICAgIGZpbGxQYWludGlu
Z1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSgqdGhpcywgY29udGV4dCwgUmVuZGVyU1ZHUmVz
b3VyY2VNb2RlOjpBcHBseVRvRmlsbCwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIGVsc2UgaWYg
KGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVk
U29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5z
ZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNl
LT5hcHBseVJlc291cmNlKCp0aGlzLCBzdHlsZSwgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VN
b2RlOjpBcHBseVRvRmlsbCkpCisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9z
dEFwcGx5UmVzb3VyY2UoKnRoaXMsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBw
bHlUb0ZpbGwsIG51bGxwdHIsIHRoaXMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJl
bmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdyYXBo
aWNzQ29udGV4dCYgb3JpZ2luYWxDb250ZXh0KQoreworICAgIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCA9ICZvcmlnaW5hbENvbnRleHQ7CisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBp
ZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdS
ZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSgqdGhpcywgc3R5bGUsIGZhbGxiYWNrQ29s
b3IpKSB7CisgICAgICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNl
KCp0aGlzLCBzdHlsZSwgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ry
b2tlKSkKKyAgICAgICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291
cmNlKCp0aGlzLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJva2Us
IG51bGxwdHIsIHRoaXMpOworICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQo
KSkgeworICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jl
c291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgp
OworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7
CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSgqdGhpcywg
c3R5bGUsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkpCisg
ICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UoKnRoaXMs
IGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSwgbnVsbHB0ciwg
dGhpcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9r
ZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIXN0eWxlKCkuaGFz
VmlzaWJsZVN0cm9rZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZmFsc2UpOworICAgIGlmIChoYXNOb25TY2Fs
aW5nU3Ryb2tlKCkpIHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zv
cm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCk7CisgICAgICAgIGlmICghc2V0dXBOb25T
Y2FsaW5nU3Ryb2tlQ29udGV4dChub25TY2FsaW5nVHJhbnNmb3JtLCBzdGF0ZVNhdmVyKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3Ryb2tlU2hhcGUoc3R5bGUoKSwgY29udGV4
dCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTdHJva2VNYXJrZXJzKFBhaW50SW5m
byYgY2hpbGRQYWludEluZm8pCit7CisgICAgYXV0byBwYWludE9yZGVyID0gUmVuZGVyU3R5bGU6
OnBhaW50VHlwZXNGb3JQYWludE9yZGVyKHN0eWxlKCkucGFpbnRPcmRlcigpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFpbnRPcmRlci5zaXplKCk7ICsraSkgeworICAgICAgICBz
d2l0Y2ggKHBhaW50T3JkZXIuYXQoaSkpIHsKKyAgICAgICAgY2FzZSBQYWludFR5cGU6OkZpbGw6
CisgICAgICAgICAgICBmaWxsU2hhcGUoc3R5bGUoKSwgY2hpbGRQYWludEluZm8uY29udGV4dCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhaW50VHlwZTo6U3Ryb2tlOgor
ICAgICAgICAgICAgc3Ryb2tlU2hhcGUoY2hpbGRQYWludEluZm8uY29udGV4dCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhaW50VHlwZTo6TWFya2VyczoKKyAgICAgICAg
ICAgIGlmICghbV9tYXJrZXJQb3NpdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGRy
YXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQoreworICAgIGlmIChwYWludElu
Zm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAv
LyBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnNob3VsZFBhaW50SGlkZGVuUmVuZGVyZXIoKnRoaXMp
KQorICAgIC8vICAgIHJldHVybjsKKworICAgIGlmICghc2hvdWxkUGFpbnRTVkdSZW5kZXJlcihw
YWludEluZm8pIHx8IGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpDbGlwcGluZ01hc2spIHsKKyAgICAgICAgLy8gRklY
TUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAgLy8g
U1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRTVkdDbGlwcGluZ01hc2soKnRoaXMsIHBhaW50SW5mbyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQg
PSBwYWludE9mZnNldCArIGxheW91dExvY2F0aW9uKCk7CisgICAgaWYgKHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlOjpNYXNrKSB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJl
YW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisgICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6
OnBhaW50U1ZHTWFzaygqdGhpcywgcGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gdmlz
dWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpOworICAgIHZpc3VhbE92ZXJmbG93UmVjdC5tb3Zl
QnkoYWRqdXN0ZWRQYWludE9mZnNldCk7CisgICAgaWYgKCF2aXN1YWxPdmVyZmxvd1JlY3QuaW50
ZXJzZWN0cyhwYWludEluZm8ucmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6T3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0
cmVhbSBvdXRsaW5lIHBhaW50aW5nCisgICAgICAgIC8vIHBhaW50U1ZHT3V0bGluZShwYWludElu
Zm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0KCkp
OworCisgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24gPSBhZGp1c3Rl
ZFBhaW50T2Zmc2V0IC0gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubG9j
YXRpb24oKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQoKS50cmFuc2xhdGUoY29vcmRpbmF0ZVN5
c3RlbU9yaWdpblRyYW5zbGF0aW9uLndpZHRoKCksIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFu
c2xhdGlvbi5oZWlnaHQoKSk7CisKKyAgICBpZiAoc3R5bGUoKS5zdmdTdHlsZSgpLnNoYXBlUmVu
ZGVyaW5nKCkgPT0gU2hhcGVSZW5kZXJpbmc6OkNyaXNwRWRnZXMpCisgICAgICAgIHBhaW50SW5m
by5jb250ZXh0KCkuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKKworICAgIGZpbGxTdHJva2VN
YXJrZXJzKHBhaW50SW5mbyk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmlzUG9pbnRJbkZp
bGwoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50
RmlsbENvbnRhaW5zKHBvaW50LCBzdHlsZSgpLnN2Z1N0eWxlKCkuZmlsbFJ1bGUoKSk7Cit9CisK
K2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmlzUG9pbnRJblN0cm9rZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKK3sKKyAgICBpZiAoIXN0eWxlKCkuc3ZnU3R5bGUoKS5oYXNTdHJva2UoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFp
bnMocG9pbnQsIExvY2FsQ29vcmRpbmF0ZVNwYWNlKTsKK30KKworZmxvYXQgUmVuZGVyU1ZHU2hh
cGU6OmdldFRvdGFsTGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUGF0aCgpID8gcGF0
aCgpLmxlbmd0aCgpIDogY3JlYXRlUGF0aCgpLT5sZW5ndGgoKTsKK30KKworRmxvYXRQb2ludCBS
ZW5kZXJTVkdTaGFwZTo6Z2V0UG9pbnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSkgY29uc3QKK3sK
KyAgICByZXR1cm4gaGFzUGF0aCgpID8gcGF0aCgpLnBvaW50QXRMZW5ndGgoZGlzdGFuY2UpIDog
Y3JlYXRlUGF0aCgpLT5wb2ludEF0TGVuZ3RoKGRpc3RhbmNlKTsKK30KKworYm9vbCBSZW5kZXJT
VkdTaGFwZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKK3sKKyAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdy
b3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9u
ID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRMb2NhdGlvbigpOworCisgICAgYXV0byBsb2Nh
bFBvaW50ID0gbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpOworICAgIGF1dG8gYm91bmRpbmdC
b3hUb3BMZWZ0Q29ybmVyID0gZmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCku
bWluWE1pbllDb3JuZXIoKSk7CisgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNs
YXRpb24gPSBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgLSBhZGp1c3RlZExvY2F0aW9uOworICAg
IGxvY2FsUG9pbnQubW92ZShjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24pOworCisg
ICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2Nh
bFBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU1ZHSGl0VGVzdEN5Y2xlRGV0
ZWN0aW9uU2NvcGUgaGl0VGVzdFNjb3BlKCp0aGlzKTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRS
dWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcs
IHJlcXVlc3QsIHN0eWxlKCkucG9pbnRlckV2ZW50cygpKTsKKyAgICBib29sIGlzVmlzaWJsZSA9
IChzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKTsKKyAgICBpZiAo
aXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CisgICAgICAgIFdp
bmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUuZmlsbFJ1bGUoKTsKKyAgICAgICAgaWYgKHJlcXVl
c3Quc3ZnQ2xpcENvbnRlbnQoKSkKKyAgICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUuY2xp
cFJ1bGUoKTsKKworICAgICAgICBpZiAoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdTdHls
ZS5oYXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFp
bnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpIHsKKyAgICAgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0
b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5h
ZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxv
Y2F0aW9uSW5Db250YWluZXIsIG1fc3Ryb2tlQm91bmRpbmdCb3gpID09IEhpdFRlc3RQcm9ncmVz
czo6U3RvcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0RmlsbCAm
JiAoc3ZnU3R5bGUuaGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENv
bnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpCisgICAg
ICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0Qm91bmRpbmdCb3ggJiYgbV9maWxsQm91bmRpbmdC
b3guY29udGFpbnMobG9jYWxQb2ludCkpKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFk
anVzdGVkTG9jYXRpb24pKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJh
c2VkVGVzdFJlc3VsdChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFp
bmVyLCBtX2ZpbGxCb3VuZGluZ0JveCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJGb3JUeXBlKFNWR01hcmtlclR5cGUgdHlwZSwgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0LCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ciogbWFya2VyTWlkLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kKQoreworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgU3RhcnRNYXJrZXI6CisgICAgICAgIHJldHVybiBt
YXJrZXJTdGFydDsKKyAgICBjYXNlIE1pZE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIG1hcmtlck1p
ZDsKKyAgICBjYXNlIEVuZE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIG1hcmtlckVuZDsKKyAgICB9
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworRmxvYXRS
ZWN0IFJlbmRlclNWR1NoYXBlOjpjb21wdXRlTWFya2VyQm91bmRpbmdCb3goKSBjb25zdAorewor
ICAgIGlmIChtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKKworICAgIGF1dG8qIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNo
ZWRSZXNvdXJjZXNGb3JSZW5kZXJlcigqdGhpcyk7CisgICAgQVNTRVJUKHJlc291cmNlcyk7CisK
KyAgICBhdXRvKiBtYXJrZXJTdGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKKyAgICBh
dXRvKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOworICAgIGF1dG8qIG1hcmtl
ckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7CisgICAgaWYgKCFtYXJrZXJTdGFydCAmJiAh
bWFya2VyTWlkICYmICFtYXJrZXJFbmQpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKwor
ICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOworICAgIHVuc2lnbmVkIHNpemUgPSBtX21hcmtlclBv
c2l0aW9ucy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlciA9IG1hcmtlckZv
clR5cGUobV9tYXJrZXJQb3NpdGlvbnNbaV0udHlwZSwgbWFya2VyU3RhcnQsIG1hcmtlck1pZCwg
bWFya2VyRW5kKSkKKyAgICAgICAgICAgIGJvdW5kYXJpZXMudW5pdGUobWFya2VyLT5tYXJrZXJC
b3VuZGFyaWVzKG1hcmtlci0+bWFya2VyVHJhbnNmb3JtYXRpb24obV9tYXJrZXJQb3NpdGlvbnNb
aV0ub3JpZ2luLCBtX21hcmtlclBvc2l0aW9uc1tpXS5hbmdsZSwgc3Ryb2tlV2lkdGgoKSkpKTsK
KyAgICB9CisgICAgcmV0dXJuIGJvdW5kYXJpZXM7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdT
aGFwZTo6Y2FsY3VsYXRlT2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIHJldHVybiBw
YXRoKCkuYm91bmRpbmdSZWN0KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y2Fs
Y3VsYXRlU3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIEFTU0VSVChtX3BhdGgpOwor
ICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5nQm94OworCisg
ICAgaWYgKHN0eWxlKCkuc3ZnU3R5bGUoKS5oYXNTdHJva2UoKSkgeworICAgICAgICBpZiAoaGFz
Tm9uU2NhbGluZ1N0cm9rZSgpKSB7CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2Nh
bGluZ1RyYW5zZm9ybSA9IG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAg
IGlmIChzdGQ6Om9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSA9IG5vblNjYWxpbmdU
cmFuc2Zvcm0uaW52ZXJzZSgpKSB7CisgICAgICAgICAgICAgICAgUGF0aCogdXNlUGF0aCA9IG5v
blNjYWxpbmdTdHJva2VQYXRoKG1fcGF0aC5nZXQoKSwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7Cisg
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nUmVjdCA9IHVzZVBhdGgtPnN0
cm9rZUJvdW5kaW5nUmVjdChGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiB7IFt0aGlz
XSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIFNWR1Jl
bmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwg
KnRoaXMpOworICAgICAgICAgICAgICAgIH0gfSk7CisgICAgICAgICAgICAgICAgc3Ryb2tlQm91
bmRpbmdSZWN0ID0gaW52ZXJzZS52YWx1ZSgpLm1hcFJlY3Qoc3Ryb2tlQm91bmRpbmdSZWN0KTsK
KyAgICAgICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3VuZGluZ1Jl
Y3QpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3Ryb2tl
Qm91bmRpbmdCb3gudW5pdGUocGF0aCgpLnN0cm9rZUJvdW5kaW5nUmVjdChGdW5jdGlvbjx2b2lk
KEdyYXBoaWNzQ29udGV4dCYpPiB7IFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7
CisgICAgICAgICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29u
dGV4dChjb250ZXh0LCBzdHlsZSgpLCAqdGhpcyk7CisgICAgICAgICAgICB9IH0pKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBzdHJva2VCb3VuZGluZ0JveDsKK30KKworZmxvYXQg
UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVdpZHRoKCkgY29uc3QKK3sKKyAgICBTVkdMZW5ndGhDb250
ZXh0IGxlbmd0aENvbnRleHQoJmdyYXBoaWNzRWxlbWVudCgpKTsKKyAgICByZXR1cm4gbGVuZ3Ro
Q29udGV4dC52YWx1ZUZvckxlbmd0aChzdHlsZSgpLnN0cm9rZVdpZHRoKCkpOworfQorCitib29s
IFJlbmRlclNWR1NoYXBlOjpoYXNTbW9vdGhTdHJva2UoKSBjb25zdAoreworICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKKyAgICByZXR1cm4g
c3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5KCkuaXNFbXB0eSgpCisgICAgICAgICYmIHN0eWxlKCku
c3Ryb2tlTWl0ZXJMaW1pdCgpID09IHN0eWxlKCkuaW5pdGlhbFN0cm9rZU1pdGVyTGltaXQoKQor
ICAgICAgICAmJiBzdHlsZSgpLmpvaW5TdHlsZSgpID09IHN0eWxlKCkuaW5pdGlhbEpvaW5TdHls
ZSgpCisgICAgICAgICYmIHN0eWxlKCkuY2FwU3R5bGUoKSA9PSBzdHlsZSgpLmluaXRpYWxDYXBT
dHlsZSgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpkcmF3TWFya2VycyhQYWludEluZm8m
KQoreworICAgIEFTU0VSVCghbV9tYXJrZXJQb3NpdGlvbnMuaXNFbXB0eSgpKTsKKworICAgIGF1
dG8qIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5k
ZXJlcigqdGhpcyk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8qIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOworICAgIGF1dG8q
IG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7CisgICAgYXV0byogbWFya2VyRW5k
ID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJr
ZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgc3Ryb2tl
V2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAgIHVuc2lnbmVkIHNpemUgPSBtX21hcmtl
clBvc2l0aW9ucy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICBpZiAoYXV0byogbWFya2VyID0gbWFya2VyRm9yVHlwZShtX21hcmtlclBv
c2l0aW9uc1tpXS50eXBlLCBtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQpKSB7Cisg
ICAgICAgICAgICBVTlVTRURfUEFSQU0obWFya2VyKTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJB
TShzdHJva2VXaWR0aCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0g
UmVuZGVyTGF5ZXIgY2hhbmdlcworICAgICAgICAgICAgLy8gQVNTRVJUKG1hcmtlci0+aGFzTGF5
ZXIoKSk7CisgICAgICAgICAgICAvLyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIocGFpbnRJbmZvLmNvbnRleHQoKSk7CisgICAgICAgICAgICAvLyBhdXRvIGNvbnRlbnRUcmFu
c2Zvcm0gPSBtYXJrZXItPm1hcmtlclRyYW5zZm9ybWF0aW9uKG1fbWFya2VyUG9zaXRpb25zW2ld
Lm9yaWdpbiwgbV9tYXJrZXJQb3NpdGlvbnNbaV0uYW5nbGUsIHN0cm9rZVdpZHRoKTsKKyAgICAg
ICAgICAgIC8vIG1hcmtlci0+bGF5ZXIoKS0+cGFpbnRTVkdSZXNvdXJjZUxheWVyKHBhaW50SW5m
by5jb250ZXh0KCksIExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpLCBjb250ZW50VHJhbnNmb3Jt
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRyPFBhdGg+IFJlbmRlclNW
R1NoYXBlOjpjcmVhdGVQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxQYXRo
PihwYXRoRnJvbUdyYXBoaWNzRWxlbWVudCgmZ3JhcGhpY3NFbGVtZW50KCkpKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdTaGFwZTo6cHJvY2Vzc01hcmtlclBvc2l0aW9ucygpCit7CisgICAgbV9tYXJr
ZXJQb3NpdGlvbnMuY2xlYXIoKTsKKworICAgIGlmICghc2hvdWxkR2VuZXJhdGVNYXJrZXJQb3Np
dGlvbnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fcGF0aCk7CisKKyAgICBT
VkdNYXJrZXJEYXRhIG1hcmtlckRhdGEobV9tYXJrZXJQb3NpdGlvbnMsIFNWR1Jlc291cmNlc0Nh
Y2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJlcigqdGhpcyktPm1hcmtlclJldmVyc2VTdGFy
dCgpKTsKKyAgICBtX3BhdGgtPmFwcGx5KFsmbWFya2VyRGF0YV0oY29uc3QgUGF0aEVsZW1lbnQm
IHBhdGhFbGVtZW50KSB7CisgICAgICAgIFNWR01hcmtlckRhdGE6OnVwZGF0ZUZyb21QYXRoRWxl
bWVudChtYXJrZXJEYXRhLCBwYXRoRWxlbWVudCk7CisgICAgfSk7CisgICAgbWFya2VyRGF0YS5w
YXRoSXNEb25lKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0eWxlV2lsbENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQoreworICAg
IGF1dG8qIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxs
cHRyOworICAgIGlmIChvbGRTdHlsZSkgeworICAgICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZl
cmVuY2U6OkxheW91dCkKKyAgICAgICAgICAgIHNldE5lZWRzU2hhcGVVcGRhdGUoKTsKKyAgICB9
CisKKyAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0
eWxlKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWZhNGQ4YzM2MjU3NWMwNjlmYThiMjkwZjdhZWE3ZjZlODMzMDQ3MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApA
QCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAy
MSwgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlFUl9CQVNF
RF9TVkdfRU5HSU5FKQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKy8vICNpbmNsdWRlICJT
VkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHTWFya2VyRGF0YS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQ
b2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdD
b250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRoOworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2U7
CitjbGFzcyBTVkdHcmFwaGljc0VsZW1lbnQ7CisKK2NsYXNzIFJlbmRlclNWR1NoYXBlIDogcHVi
bGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJl
bmRlclNWR1NoYXBlKTsKK3B1YmxpYzoKKyAgICBlbnVtIFBvaW50Q29vcmRpbmF0ZVNwYWNlIHsK
KyAgICAgICAgR2xvYmFsQ29vcmRpbmF0ZVNwYWNlLAorICAgICAgICBMb2NhbENvb3JkaW5hdGVT
cGFjZQorICAgIH07CisgICAgUmVuZGVyU1ZHU2hhcGUoU1ZHR3JhcGhpY3NFbGVtZW50JiwgUmVu
ZGVyU3R5bGUmJik7CisgICAgdmlydHVhbCB+UmVuZGVyU1ZHU2hhcGUoKTsKKworICAgIGlubGlu
ZSBTVkdHcmFwaGljc0VsZW1lbnQmIGdyYXBoaWNzRWxlbWVudCgpIGNvbnN0OworCisgICAgdm9p
ZCBzZXROZWVkc1NoYXBlVXBkYXRlKCkgeyBtX25lZWRzU2hhcGVVcGRhdGUgPSB0cnVlOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJpbmdEaXNhYmxlZCgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wg
aXNQb2ludEluRmlsbChjb25zdCBGbG9hdFBvaW50Jik7CisgICAgYm9vbCBpc1BvaW50SW5TdHJv
a2UoY29uc3QgRmxvYXRQb2ludCYpOworCisgICAgZmxvYXQgZ2V0VG90YWxMZW5ndGgoKSBjb25z
dDsKKyAgICBGbG9hdFBvaW50IGdldFBvaW50QXRMZW5ndGgoZmxvYXQgZGlzdGFuY2UpIGNvbnN0
OworCisgICAgYm9vbCBoYXNQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9Cisg
ICAgUGF0aCYgcGF0aCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9wYXRoKTsKKyAg
ICAgICAgcmV0dXJuICptX3BhdGg7CisgICAgfQorICAgIHZvaWQgY2xlYXJQYXRoKCkgeyBtX3Bh
dGggPSBudWxscHRyOyB9CisKKyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7
IH0KKworICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0
IGZpbmFsCisgICAgeworICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5k
aW5nQm94Q29tcHV0YXRpb24KKyAgICAgICAgLy8gcmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0
YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdCb3goKnRoaXMpOyB9CisgICAgICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgY29tcHV0ZU1hcmtlckJvdW5k
aW5nQm94KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9
IGRlbGV0ZTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7Cisg
ICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVE
ZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgUG9pbnRDb29yZGluYXRl
U3BhY2UgPSBHbG9iYWxDb29yZGluYXRlU3BhY2UpOworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURl
cGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1bGUpIGNv
bnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CisgICAgYm9vbCBoYXNTbW9vdGhT
dHJva2UoKSBjb25zdDsKKworICAgIGJvb2wgaGFzTm9uU2NhbGluZ1N0cm9rZSgpIGNvbnN0IHsg
cmV0dXJuIHN0eWxlKCkuc3ZnU3R5bGUoKS52ZWN0b3JFZmZlY3QoKSA9PSBWZWN0b3JFZmZlY3Q6
Ok5vblNjYWxpbmdTdHJva2U7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9r
ZVRyYW5zZm9ybSgpIGNvbnN0OworICAgIFBhdGgqIG5vblNjYWxpbmdTdHJva2VQYXRoKGNvbnN0
IFBhdGgqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBt
X2ZpbGxCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKKwor
cHJpdmF0ZToKKyAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGFyYXRlZCBmb3IgdGhlIGZpbGwgYW5k
IHRoZSBzdHJva2UKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9v
bCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSA9IFdpbmRSdWxl
OjpOb25aZXJvKTsKKyAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBi
b29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSk7CisKKyAgICBib29sIGlzU1ZHU2hhcGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyU1ZHU2hhcGUiOyB9CisKKyAgICB2b2lkIGxh
eW91dCgpIGZpbmFsOworICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmKSBmaW5hbDsKKworICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24p
IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3Q7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7
CisKKyAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0cm9rZUNvbnRleHQoQWZmaW5lVHJhbnNmb3Jt
JiwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYpOworCisgICAgYm9vbCBzaG91bGRHZW5lcmF0
ZU1hcmtlclBvc2l0aW9ucygpIGNvbnN0OworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxQYXRo
PiBjcmVhdGVQYXRoKCkgY29uc3Q7CisgICAgdm9pZCBwcm9jZXNzTWFya2VyUG9zaXRpb25zKCk7
CisKKyAgICB2b2lkIGZpbGxTaGFwZShjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4
dCYpOworICAgIHZvaWQgc3Ryb2tlU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0Nv
bnRleHQmKTsKKyAgICB2b2lkIHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZv
aWQgZmlsbFN0cm9rZU1hcmtlcnMoUGFpbnRJbmZvJik7CisgICAgdm9pZCBkcmF3TWFya2VycyhQ
YWludEluZm8mKTsKKworICAgIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwg
Y29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBi
b29sIG1fbmVlZHNTaGFwZVVwZGF0ZSB7IHRydWUgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
YXRoPiBtX3BhdGg7CisgICAgVmVjdG9yPE1hcmtlclBvc2l0aW9uPiBtX21hcmtlclBvc2l0aW9u
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19SRU5ERVJfT0JKRUNUKFJlbmRlclNWR1NoYXBlLCBpc1NWR1NoYXBlKCkpCisKKyNlbmRpZiAv
LyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlSW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4YjMy
MDU5M2RhNzI1MzAyMzEyMjVjNmNjN2Q5MjhhZGIwYjlhNWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlSW5saW5lcy5oCkBAIC0w
LDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRl
clNWR1NoYXBlLmgiCisjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworaW5saW5lIFNWR0dyYXBoaWNzRWxlbWVudCYgUmVuZGVyU1ZHU2hhcGU6
OmdyYXBoaWNzRWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvd25jYXN0PFNWR0dyYXBo
aWNzRWxlbWVudD4oUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmVsZW1lbnQoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IDc0Y2VjYzQxZjg1OTM2YTBhM2EzNzhkMTNhM2RkMDRh
ODM2ZDFlN2QuLjEwNDIwYzAzMWJmYTliODQ4MTZkZDViOWNlNTAzMjA3ZWRiNTkzMGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApA
QCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVy
U1ZHU2hhcGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKaW5kZXggZjUyOTk5NjY2
YTgxYmZkNTQwYWRmZTNjNDdmMDk5ZThiM2RmYTljMS4uZjk1MjcyYTRkNWQ4YTg5YjU2MGM2ZGVh
ODBmNjg5YzAxZjFhNjY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUGF0aFRyYXZl
cnNhbFN0YXRlLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5j
bHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGluZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cAppbmRleCAxMmVmZjQzZDVmNWIyZTI4NTMzMGYwZTBmOWQwYzA4OTJmZjI3MDFjLi5lZmI5Yjhi
Y2ZkOWNjOTVlYWE0OTNiZmUxYWFkOTE5Y2E3OWNiM2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdM
aW5lRWxlbWVudC5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTVkdMaW5lRWxlbWVudC5oIgogCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHU2hh
cGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR0xlbmd0
aFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4K
</data>
<flag name="commit-queue"
          id="474496"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448584</attachid>
            <date>2022-01-07 06:31:35 -0800</date>
            <delta_ts>2022-01-07 13:59:34 -0800</delta_ts>
            <desc>Patch, v2</desc>
            <filename>bug-234954-20220107063133.patch</filename>
            <type>text/plain</type>
            <size>72452</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdmMGNhN2MxNTI3YmQz
MDcyNTljMmJkNzQwMDFlMmI2YzMwZTFmYS4uZDgzZDcwMDBjOTQ1OGEzZGJjNTUxNzJlNTgzNjE3
YTFlZTQyN2Q2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDIyLTAxLTA3ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBCZWdpbiBsYXllci1hd2FyZSBSZW5kZXJTVkdTaGFwZSBpbXBsZW1lbnRhdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0OTU0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmVnaW4gaW1wbGVtZW50
aW5nIFJlbmRlclNWR1NoYXBlLCBiYXNlZCBvbiB0aGUgZG93bnN0cmVhbSB2ZXJzaW9uIGluIHRo
ZQorICAgICAgICBMQlNFIGJyYW5jaC4gTWFueSBwYXJ0cyBhcmUgMToxIGNvcGllcyBmcm9tIExl
Z2FjeVJlbmRlclNWR1NoYXBlLCBhbHRob3VnaAorICAgICAgICBsYXlvdXQgLyBwYWludCAvIGhp
dC10ZXN0aW5nIGxvb2tzIHF1aXRlLCBtdWNoIG1vcmUgc2ltaWxhciB0byBSZW5kZXJCb3ggJiBj
bworICAgICAgICB0aGFuIHRoZSBsZWdhY3kgTGVnYWN5UmVuZGVyU1ZHKiByZW5kZXJlcnMuCisK
KyAgICAgICAgSG9vay1pbiBSZW5kZXJTVkdTaGFwZSBpbiBhbGwgcGxhY2VzIHRoYXQgdXNlZCB0
byBoYW5kbGUgTGVnYWN5UmVuZGVyU1ZHU2hhcGUsCisgICAgICAgIGUuZy4gaW4gQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBu
byBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdXBwb3J0c1BhdGggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudFBhdGggY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpmaWxsQW5kU3Ryb2tlUGF0
aE9yU2hhcGUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpwb3N0QXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9z
dEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1NoYXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6UmVu
ZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZVNo
YXBlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmlzRW1w
dHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ry
b2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVw
ZW5kZW50RmlsbENvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpmaWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpsYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vblNjYWxpbmdTdHJva2VQYXRo
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNjYWxp
bmdTdHJva2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpub25T
Y2FsaW5nU3Ryb2tlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6ZmlsbFN0cm9rZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc1BvaW50SW5G
aWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc1BvaW50SW5TdHJva2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmdldFRvdGFsTGVuZ3RoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpnZXRQb2ludEF0TGVuZ3RoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpub2RlQXRQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjptYXJrZXJGb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpjb21wdXRlTWFya2VyQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVTdHJva2VCb3VuZGlu
Z0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lk
dGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Omhhc1Ntb290aFN0
cm9rZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZHJhd01hcmtl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVBhdGggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnByb2Nlc3NNYXJrZXJQb3NpdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0eWxlV2lsbENoYW5nZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1NoYXBlOjpjbGVhclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6Omhhc05vblNjYWxpbmdTdHJva2UgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OmdyYXBoaWNzRWxlbWVudCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdQYWludGluZ1Jlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHRmlsbFBhaW50aW5nUmVzb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdHcmFw
aGljc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwOgorICAgICAg
ICAqIHN2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHA6CisgICAgICAgICogc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcDoKKwogMjAyMi0wMS0wNiAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1l
cm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbTEJTRV0gUmVuYW1lIFJlbmRlclNWR1JlY3Qg
LT4gTGVnYWN5UmVuZGVyU1ZHUmVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAyODA3NjllMjQ5Y2RkMWM4
ZmZjZTQ3NDAyZmQ0ZmM2NGEzNjgxY2NlLi41OGY0NzA5MGQ2ZjZjY2Q2MmE2NGIzNTEzNTQ3Mzc0
OGQyNTk1ZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjQ5NCw2ICsyNDk0LDcgQEAgcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKK3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFu
LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0UGF0aC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAwYjhjZjRmYjYyNTRlZGE4MTI2MjYyMjY4YThlZmYwMjFl
OTNlMjU4Li5jMzViNGM0MmM0MDdhNzJkY2I0MmI1ZmRkMzA2ZDQ1OTJlZjdmMGVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0z
MjcyLDYgKzMyNzIsNyBAQAogCQlBMTA0RjI0NDE0QzcxRjdBMDA5RTJDMjMgLyogQ2FjaGVkU1ZH
RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExMDRGMjQyMTRDNzFGN0EwMDlFMkMyMyAvKiBDYWNoZWRTVkdEb2N1bWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExMEJCNTg1MTQ4NEUz
QTcwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBCQjU4MzE0ODRFM0E3MDBCMkU4N0EgLyogTGVn
YWN5UmVuZGVyU1ZHUmVjdC5oICovOyB9OwogCQlBMTBCQjU4QjE0ODRFM0IzMDBCMkU4N0EgLyog
TGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEExMEJCNTg5MTQ4NEUzQjMwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdT
aGFwZS5oICovOyB9OworCQlBMTBCQjU4QjE0ODRFM0IzMDBDM0Y3N0IgLyogUmVuZGVyU1ZHU2hh
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEJC
NTg5MTQ4NEUzQjMwMEMzRjc3QiAvKiBSZW5kZXJTVkdTaGFwZS5oICovOyB9OwogCQlBMTBEQkY0
NzE4RjkyMzE3MDAwRDcwQzYgLyogTGVnYWN5UHJldmlld0xvYWRlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwREJGNDYxOEY5MjMxNzAw
MEQ3MEM2IC8qIExlZ2FjeVByZXZpZXdMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTBEQzc2QjE0NzQ3QkFCMDA1RTI0NzEg
LyogU3R5bGVHcmlkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTEwREM3NjkxNDc0N0JBQjAwNUUyNDcxIC8qIFN0eWxlR3JpZERhdGEuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTBGN0M3MzI3
MzEwMEQwMDA4RkE5QUYgLyogTW9kYWxDb250YWluZXJPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwRjdDNzAyNzMxMDA3MzAwOEZBOUFG
IC8qIE1vZGFsQ29udGFpbmVyT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDYzMSw2ICs0NjMyLDcgQEAKIAkJQ0RGNzQ3RjMyNzBG
NzZDRjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnRJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGMjI3
MEY3NkNGMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudElubGluZXMu
aCAqLzsgfTsKIAkJQ0RGNzQ3RjUyNzBGODNCMTAwOEZFRUVDIC8qIFJlbmRlclNWR0dyYWRpZW50
U3RvcElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENERjc0N0Y0MjcwRjgzQjEwMDhGRUVFQyAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3BJbmxp
bmVzLmggKi87IH07CiAJCUNERjc0N0Y3MjcwRjg2QTQwMDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJT
VkdTaGFwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENERjc0N0Y2MjcwRjg2QTQwMDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZUlu
bGluZXMuaCAqLzsgfTsKKwkJQ0RGNzQ3RjcyNzBGODNCNDEwN0RFRUVDIC8qIFJlbmRlclNWR1No
YXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RGNzQ3RjYyNzBGODNCNDEwN0RFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5lcy5oICov
OyB9OwogCQlDREY3NDdGOTI3MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRp
YWxHcmFkaWVudElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENERjc0N0Y4MjcwRjg3Q0IwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZVJh
ZGlhbEdyYWRpZW50SW5saW5lcy5oICovOyB9OwogCQlDREY3NDdGQjI3MEY4OTFBMDA4RkVFRUMg
LyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGQTI3MEY4OTFBMDA4RkVFRUMgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXJJbmxpbmVzLmggKi87IH07CiAJCUNERjc0ODNGMThGRUJDRUMw
MDA2RUNDMCAvKiBHcmlkUG9zaXRpb25zUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0ODNEMThGRUJDRUMwMDA2RUNDMCAvKiBHcmlk
UG9zaXRpb25zUmVzb2x2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTMzNzcsNyArMTMzNzksOSBAQAogCQlBMTBCQjU4MjE0ODRFM0E3MDBC
MkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZHUmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTEwQkI1ODMxNDg0RTNBNzAwQjJFODdBIC8qIExlZ2FjeVJlbmRlclNWR1Jl
Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHUmVj
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTBCQjU4ODE0ODRFM0IzMDBCMkU4
N0EgLyogTGVnYWN5UmVuZGVyU1ZHU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBMTBDQzU4ODE0NzNFM0IzMDBCMkE4QkYgLyogUmVuZGVyU1ZHU2hhcGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHU2hhcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTBCQjU4OTE0ODRFM0IzMDBCMkU4N0Eg
LyogTGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGVnYWN5UmVuZGVyU1ZHU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTEwQkI1ODkxNDg0RTNCMzAwQzNGNzdCIC8qIFJlbmRlclNWR1NoYXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1NoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUExMEQ2RTk0MjE0NEM5OTgwMEZERDE0RCAvKiBKU1BheW1lbnRSZXNwb25z
ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1BheW1lbnRSZXNwb25zZUN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMERCRjQ2MThGOTIzMTcwMDBENzBD
NiAvKiBMZWdhY3lQcmV2aWV3TG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExlZ2FjeVByZXZpZXdMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTEwREM3NjgxNDc0N0JBQjAwNUUyNDcxIC8qIFN0eWxlR3JpZERhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVHcmlkRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjI3OCw2ICsxNjI4Miw3IEBACiAJCUNE
Rjc0N0YyMjcwRjc2Q0YwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREY3NDdGNDI3MEY4M0Ix
MDA4RkVFRUMgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wSW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTVkdHcmFkaWVudFN0b3BJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNERjc0N0Y2MjcwRjg2QTQwMDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjc0N0Y2MjcwRjgzQjQxMDdERUVFQyAvKiBS
ZW5kZXJTVkdTaGFwZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHU2hhcGVJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjc0N0Y4MjcwRjg3Q0IwMDhG
RUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50SW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50SW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREY3NDdGQTI3MEY4OTFBMDA4RkVFRUMgLyogUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291
cmNlTWFza2VySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREY3NDgz
QzE4RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODk3MCw2ICsxODk3NSw5IEBACiAJCQkJNDM2
NzA4QTQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oICov
LAogCQkJCTQzNjcwOEE1MTJEOUNBNUMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmNwcCAqLywK
IAkJCQk0MzY3MDhBNjEyRDlEQjRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oICovLAorCQkJ
CUExMENDNTg4MTQ3M0UzQjMwMEIyQThCRiAvKiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8sCisJCQkJ
QTEwQkI1ODkxNDg0RTNCMzAwQzNGNzdCIC8qIFJlbmRlclNWR1NoYXBlLmggKi8sCisJCQkJQ0RG
NzQ3RjYyNzBGODNCNDEwN0RFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5lcy5oICovLAogCQkJ
CTA4NTRCMDA2MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0LmNwcCAqLywKIAkJCQkw
ODU0QjAwNzEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dC5oICovLAogCQkJCTA4NTRC
MDA4MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0UGF0aC5jcHAgKi8sCkBAIC0zNjc0
Niw2ICszNjc1NCw4IEBACiAJCQkJQ0RGNzQ3RjkyNzBGODdDQjAwOEZFRUVDIC8qIFJlbmRlclNW
R1Jlc291cmNlUmFkaWFsR3JhZGllbnRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3
MDhFMzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MzY3MDhFNTEyRDlEQjRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9v
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQkI1OEIxNDg0RTNCMzAwQzNGNzdCIC8qIFJlbmRl
clNWR1NoYXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREY3NDdGNzI3MEY4M0I0MTA3REVFRUMg
LyogUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxOTEy
NTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1
NEIwMUIxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzY3MDhFOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA1NGQ3
MjVjODU5MmJhYzMzMzNkYjQ0ZGQ0ZTVlZDI5ZWZiZmI0N2E3Li4wMDNlMjQ0NDFhOTllODI3YjVh
OGIyM2E0YTU4ZThjMDBlMjMwZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTk2LDYgKzk2
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlck1l
bnVMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCkBAIC05MTAsNyArOTExLDcg
QEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjplbGVtZW50UmVjdCgpIGNv
bnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3VwcG9ydHNQYXRoKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIoKSkgfHwgaXM8TGVnYWN5
UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKCkpOworICAgIHJldHVybiBpczxSZW5kZXJUZXh0Pihy
ZW5kZXJlcigpKSB8fCAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1NWR1NoYXBlT3JMZWdh
Y3lTVkdTaGFwZSgpKTsKIH0KIAogUGF0aCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjplbGVt
ZW50UGF0aCgpIGNvbnN0CkBAIC05NjAsMTUgKzk2MSwyNCBAQCBQYXRoIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmVsZW1lbnRQYXRoKCkgY29uc3QKICAgICAgICAgaWYgKGF1dG8gc3ZnUm9v
dCA9IGFuY2VzdG9yc09mVHlwZTxMZWdhY3lSZW5kZXJTVkdSb290PigqbV9yZW5kZXJlcikuZmly
c3QoKSkgewogICAgICAgICAgICAgTGF5b3V0UG9pbnQgcGFyZW50T2Zmc2V0ID0gYXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZSgmKnN2Z1Jvb3QpLT5lbGVtZW50UmVjdCgpLmxvY2F0aW9uKCk7
CiAgICAgICAgICAgICBwYXRoLnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUo
cGFyZW50T2Zmc2V0LngoKSwgcGFyZW50T2Zmc2V0LnkoKSkpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHBhdGg7CisgICAgfQorCiAjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJ
TkUpCi0gICAgICAgIH0gZWxzZSBpZiAoYXV0byBzdmdSb290ID0gYW5jZXN0b3JzT2ZUeXBlPFJl
bmRlclNWR1Jvb3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7CisgICAgaWYgKGlzPFJlbmRlclNW
R1NoYXBlPihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oKm1fcmVuZGVy
ZXIpLmhhc1BhdGgoKSkgeworICAgICAgICBQYXRoIHBhdGggPSBkb3duY2FzdDxSZW5kZXJTVkdT
aGFwZT4oKm1fcmVuZGVyZXIpLnBhdGgoKTsKKworICAgICAgICAvLyBUaGUgU1ZHIHBhdGggaXMg
aW4gdGVybXMgb2YgdGhlIHBhcmVudCdzIGJvdW5kaW5nIGJveC4gVGhlIHBhdGggbmVlZHMgdG8g
YmUgb2Zmc2V0IHRvIGZyYW1lIGNvb3JkaW5hdGVzLgorICAgICAgICBpZiAoYXV0byBzdmdSb290
ID0gYW5jZXN0b3JzT2ZUeXBlPFJlbmRlclNWR1Jvb3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7
CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBwYXJlbnRPZmZzZXQgPSBheE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKCYqc3ZnUm9vdCktPmVsZW1lbnRSZWN0KCkubG9jYXRpb24oKTsKICAgICAg
ICAgICAgIHBhdGgudHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRP
ZmZzZXQueCgpLCBwYXJlbnRPZmZzZXQueSgpKSk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybiBwYXRoOwogICAgIH0KKyNlbmRpZgogCiAgICAgcmV0dXJuIFBhdGgoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA4
MTVhMzMwNDQ4ODVjZjQyNzRlNzc3YTIxYzQ3MzlhOTgxMjE4MGM3Li42OTI3YzNiYTc2YjUwMmUw
MTEzMTAwYzYzOGUwN2E5NTJlNGFmM2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSW5saW5l
SXRlcmF0b3JUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdT
aGFwZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcmludENvbnRleHQuaCIK
ICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCkBAIC02NCw2ICs2NSw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTU1OCw2ICs1NjAsMTIgQEAgdm9pZCB3cml0
ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBPcHRpb25TZXQ8UmVuZGVy
QXNUZXh0RmxhZz4gYmUKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICB9OwogCisjaWYgRU5BQkxF
KExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihvKSkg
eworICAgICAgICB3cml0ZSh0cywgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KG8pLCBiZWhhdmlv
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICBpZiAoaXM8TGVnYWN5UmVu
ZGVyU1ZHU2hhcGU+KG8pKSB7CiAgICAgICAgIHdyaXRlKHRzLCBkb3duY2FzdDxMZWdhY3lSZW5k
ZXJTVkdTaGFwZT4obyksIGJlaGF2aW9yKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAppbmRleCBmZmU4
NWEwMTg5ZDNlNGI4MjFlZTI3OTc0MTI5MWU3OGQyMjEzZWMxLi4zZDRlNmRlNTc5NmQ0ZDk4Nzk1
ODg4YThlNjBjNDY5NzI5NjQwYjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcApAQCAtMjYsMTEgKzI2LDEzIEBACiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJMZWdhY3lSZW5k
ZXJTVkdSb290LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9v
dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlNWR1Jlc291cmNlRWxlbWVudENsaWVudC5oIgogI2luY2x1ZGUgIlNWR1Jl
c291cmNlcy5oIgpAQCAtMjQzLDQgKzI0NSwzNSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlOjpt
YXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oUmVuZGVyT2JqZWN0Jgog
ICAgIH0KIH0KIAordm9pZCBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbEFuZFN0cm9rZVBhdGhPclNo
YXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNl
TW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJFbGVtZW50
KiBzaGFwZSkgY29uc3QKK3sKKyAgICBpZiAoIXBhdGggJiYgIXNoYXBlKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoc2hhcGUpCisgICAgICAgIEFTU0VSVChzaGFwZS0+aXNTVkdTaGFwZU9y
TGVnYWN5U1ZHU2hhcGUoKSk7CisKKyAgICBpZiAocmVzb3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRl
clNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKSB7CisgICAgICAgIGlmIChwYXRoKQorICAg
ICAgICAgICAgY29udGV4dC5maWxsUGF0aCgqcGF0aCk7CisgICAgICAgIGVsc2UgaWYgKGlzPExl
Z2FjeVJlbmRlclNWR1NoYXBlPihzaGFwZSkpCisgICAgICAgICAgICBkb3duY2FzdDxMZWdhY3lS
ZW5kZXJTVkdTaGFwZT4oc2hhcGUpLT5maWxsU2hhcGUoY29udGV4dCk7CisjaWYgRU5BQkxFKExB
WUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclNWR1NoYXBl
PihzaGFwZSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oc2hhcGUpLT5m
aWxsU2hhcGUoY29udGV4dCk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VNb2Rl
LmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkpIHsKKyAgICAg
ICAgaWYgKHBhdGgpCisgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgoKnBhdGgpOworICAg
ICAgICBlbHNlIGlmIChpczxMZWdhY3lSZW5kZXJTVkdTaGFwZT4oc2hhcGUpKQorICAgICAgICAg
ICAgZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHNoYXBlKS0+c3Ryb2tlU2hhcGUoY29u
dGV4dCk7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgIGVsc2Ug
aWYgKGlzPFJlbmRlclNWR1NoYXBlPihzaGFwZSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJTVkdTaGFwZT4oc2hhcGUpLT5zdHJva2VTaGFwZShjb250ZXh0KTsKKyNlbmRpZgorICAgIH0K
K30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZS5oCmluZGV4IGQyMmE4NGIyNzJkNDY4ZjlkMDEzNjFhYTVhMGIyMWM0ZWFjNDdkMTUuLjYz
NTlkYjJhOGU2ZGM4MTM5YzIwMGRhMTQ1ODNmMzQwMThjZTFmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgKQEAgLTE5LDcgKzE5LDYg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFwZS5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0
cy5oPgogCkBAIC00Nyw5ICs0Niw5IEBAIGNsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0Owog
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGF0aDsKLWNsYXNzIFJlbmRlck9iamVjdDsK
LWNsYXNzIFJlbmRlclN0eWxlOworY2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvcjsKK2NsYXNzIFJlbmRlclN0eWxlOwogCiBjbGFzcyBSZW5kZXJT
VkdSZXNvdXJjZSB7CiBwdWJsaWM6CkBAIC02MCw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmLCBib29sIG1hcmtG
b3JJbnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNv
dXJjZShSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQq
JiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBP
cHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IExlZ2Fj
eVJlbmRlclNWR1NoYXBlKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jl
c291cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJFbGVtZW50KiAvKiBzaGFwZSAq
LykgeyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBS
ZW5kZXJPYmplY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSBy
ZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CkBAIC03MSw2ICs3MCw5IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBzaGFyZWRTb2xpZFBhaW50aW5nUmVz
b3VyY2UoKTsKIAogICAgIHN0YXRpYyB2b2lkIG1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJj
ZUludmFsaWRhdGlvbihSZW5kZXJPYmplY3QmLCBib29sIG5lZWRzTGF5b3V0ID0gdHJ1ZSk7CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoT3JTaGFwZShHcmFwaGljc0Nv
bnRleHQmLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNv
bnN0IFJlbmRlckVsZW1lbnQqIHNoYXBlKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggYTQ2MmJiZGU4M2E2OWNhYzgwMTc3ZjU5N2Y5ZDcw
NjMzYjY4MGU3My4uODc0YjZjMTVhMjIyMmFmYWZhYmMxMDc0NjFiZWU0ODA0ZTEwNWVmYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
b3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2Rl
LCBjb25zdCBQYXRoKiwgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUqKQordm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJj
ZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlckVsZW1lbnQqKQog
ewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlTW9kZSwg
IXJlc291cmNlTW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKaW5kZXggZWEyY2MzMTU1MDM0ZTRiNjcxMDNiNDdl
MDkyZGFmNDlkNjMxZDhkNi4uYTExMWU5ZWMwMmVhZjQ3MTRjODg4NGE5Njk4MjliYjI1NzQ4MjVi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYsIGJvb2wgbWFya0ZvckludmFsaWRhdGlv
biA9IHRydWUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVu
ZGVyU1ZHUmVzb3VyY2VNb2RlPikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdS
ZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUqKSBv
dmVycmlkZTsKKyAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFw
aGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBh
dGgqLCBjb25zdCBSZW5kZXJFbGVtZW50Kikgb3ZlcnJpZGU7CiAKICAgICBGbG9hdFJlY3QgcmVz
b3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAKaW5kZXggMGQ0YjAyMDU1YzI3OTUyOWM5MTJiOWY2NWE5N2I3NzI3YmQ3NmY5
Yy4uZDE1OTI1M2YxZmI4YmIwODVmNGUzN2RjMDM4MThhMDk2OTVlZWUwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50OjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW4KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0KiYg
Y29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBj
b25zdCBQYXRoKiBwYXRoLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSogc2hhcGUpCit2b2lk
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVy
U1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IFJl
bmRlckVsZW1lbnQqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQo
IXJlc291cmNlTW9kZS5pc0VtcHR5KCkpOwpAQCAtMjA3LDIwICsyMDcsOCBAQCB2b2lkIFJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBHcmFwaAogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVyKTsKICNl
bmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVu
ZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvRmlsbCkpIHsKLSAgICAgICAgICAgIGlmIChwYXRo
KQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKHNoYXBlKQotICAgICAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoKmNvbnRl
eHQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVy
U1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkgewotICAgICAgICAgICAgaWYgKHBhdGgp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChzaGFwZSkKLSAgICAgICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoKmNv
bnRleHQpOwotICAgICAgICB9Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICBmaWxsQW5kU3Ry
b2tlUGF0aE9yU2hhcGUoKmNvbnRleHQsIHJlc291cmNlTW9kZSwgcGF0aCwgc2hhcGUpOwogCiAg
ICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAppbmRleCBlZTZiZGNmYWQ2
OGY4ZWUzMGZlM2I4ZmEzZTdmY2U5MDYyMjg2YWM5Li4xY2QyN2Y3NDI4ZmUxNDE4ZWQyODA0ZDU4
ZGM1OGJkZjkwMjVjMDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYsIGJvb2wg
bWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpIGZpbmFsOwogCiAgICAgYm9vbCBhcHBseVJlc291
cmNlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dCom
LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPikgZmluYWw7Ci0gICAgdm9pZCBwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNl
dDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgTGVnYWN5UmVuZGVy
U1ZHU2hhcGUqKSBmaW5hbDsKKyAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4s
IGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJFbGVtZW50KikgZmluYWw7CiAgICAgRmxvYXRSZWN0
IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JikgZmluYWwgeyByZXR1cm4g
RmxvYXRSZWN0KCk7IH0KIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4IDJkNmY4
OTBmYzQ0YmNlYWFhZGI5MmFjNjNiODU0N2YxN2YxZTg0YTUuLmI1NjJiZWVlNGNiOTg5ZTIxMWY0
MjczYWFkNjY4YTJlZTM2YmE5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTIwMSwyNCArMjAx
LDExIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVt
ZW50JiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291
cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBMZWdhY3lSZW5k
ZXJTVkdTaGFwZSogc2hhcGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9w
dGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCog
cGF0aCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVCghcmVzb3VyY2VNb2RlLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAocmVzb3Vy
Y2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKSB7Ci0g
ICAgICAgIGlmIChwYXRoKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwot
ICAgICAgICBlbHNlIGlmIChzaGFwZSkKLSAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoKmNv
bnRleHQpOwotICAgIH0KLSAgICBpZiAocmVzb3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jl
c291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkpIHsKLSAgICAgICAgaWYgKHBhdGgpCi0gICAgICAg
ICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAoc2hhcGUp
Ci0gICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoKmNvbnRleHQpOwotICAgIH0KLQorICAg
IGZpbGxBbmRTdHJva2VQYXRoT3JTaGFwZSgqY29udGV4dCwgcmVzb3VyY2VNb2RlLCBwYXRoLCBz
aGFwZSk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAppbmRleCA5
NTk2ZjJhZmQyMmFlOTAxZTdkYWU5NWEwMjUyNWE3ZGRkMTdlZTg2Li43MTE3ZjEyN2QwZGRkNzNi
YTVlYmM1NTk5MDEwYzI0YmI2MmYwOGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKQEAgLTQ4LDcgKzQ4LDcg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQm
LCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSBvdmVycmlkZTsKIAogICAgIGJvb2wg
YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGlj
c0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4pIG92ZXJyaWRlOwot
ICAgIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4
dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0
IExlZ2FjeVJlbmRlclNWR1NoYXBlKikgb3ZlcnJpZGU7CisgICAgdm9pZCBwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJT
VkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyRWxlbWVudCopIG92ZXJy
aWRlOwogICAgIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVj
dCYpIG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKICAgICBSZW5kZXJTVkdSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGF0dGVyblJl
c291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCmluZGV4IDEwOTViYjUxNmMwNmEx
NjU0MTJhZmZlNzJlYjgxNzk0ZGJhYWJhM2EuLmRkN2U1ZjcxOWMwMWMyMGViYzU4MDk2YzI4ZTNm
YTcwZDA2YjQwNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKQEAgLTIzLDggKzIzLDEwIEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU1ZHUmVu
ZGVyU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY3LDIzICs2OSwxMSBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgY29uc3QgUgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVu
dCYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJj
ZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgTGVnYWN5UmVuZGVy
U1ZHU2hhcGUqIHNoYXBlKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RB
cHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBP
cHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgq
IHBhdGgsIGNvbnN0IFJlbmRlckVsZW1lbnQqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0
KTsKICAgICBBU1NFUlQoIXJlc291cmNlTW9kZS5pc0VtcHR5KCkpOwotCi0gICAgaWYgKHJlc291
cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxsKSkgewot
ICAgICAgICBpZiAocGF0aCkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsK
LSAgICAgICAgZWxzZSBpZiAoc2hhcGUpCi0gICAgICAgICAgICBzaGFwZS0+ZmlsbFNoYXBlKCpj
b250ZXh0KTsKLSAgICB9Ci0gICAgaWYgKHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdS
ZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJva2UpKSB7Ci0gICAgICAgIGlmIChwYXRoKQotICAgICAg
ICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHNoYXBl
KQotICAgICAgICAgICAgc2hhcGUtPnN0cm9rZVNoYXBlKCpjb250ZXh0KTsKLSAgICB9CisgICAg
ZmlsbEFuZFN0cm9rZVBhdGhPclNoYXBlKCpjb250ZXh0LCByZXNvdXJjZU1vZGUsIHBhdGgsIHNo
YXBlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKaW5kZXggN2YxYjc0NjgyZTJkM2JkM2Uz
OTRkNjkzYzA3OWI1MmE5YTg1OTQ1MC4uMGVlYjBjYmRiOWNlMDc0YzZiMGNlN2MzYzU0YjA2NDUz
NmQwY2U4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCkBAIC0yNCw2ICsyNCw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyT2JqZWN0OworCiBjbGFzcyBSZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IgZmluYWwgOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3VyY2UgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMzQsNyArMzYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYsIGJvb2wg
PSB0cnVlKSBvdmVycmlkZSB7IH0KIAogICAgIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJFbGVt
ZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJl
bmRlclNWR1Jlc291cmNlTW9kZT4pIG92ZXJyaWRlOwotICAgIHZvaWQgcG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlKikg
b3ZlcnJpZGU7CisgICAgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3Jh
cGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQ
YXRoKiwgY29uc3QgUmVuZGVyRWxlbWVudCopIG92ZXJyaWRlOwogICAgIEZsb2F0UmVjdCByZXNv
dXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYpIG92ZXJyaWRlIHsgcmV0dXJuIEZs
b2F0UmVjdCgpOyB9CiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU29saWRDb2xvclJlc291cmNlVHlwZTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45YTk1ZmEyNTQ4ZDBmNDc0MTQ5NjI0MjhlMzhjMTQ1ODUxMGE3NzYzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKQEAg
LTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpl
ZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
UmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDE4IEFkb2JlIFN5c3RlbXMg
SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LCAyMDIxLCAyMDIyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdTaGFwZS5oIgorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgorI2luY2x1
ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
TWFya2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aERhdGEuaCIK
KyNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2Vz
LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9TdGFja1N0YXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKFJlbmRlclNWR1NoYXBlKTsKKworUmVuZGVyU1ZHU2hhcGU6OlJlbmRlclNW
R1NoYXBlKFNWR0dyYXBoaWNzRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkK
KyAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQorewor
fQorCitSZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKCkgPSBkZWZhdWx0OworCit2b2lk
IFJlbmRlclNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCkKK3sKKyAgICBtX3BhdGgg
PSBjcmVhdGVQYXRoKCk7CisgICAgcHJvY2Vzc01hcmtlclBvc2l0aW9ucygpOworCisgICAgbV9m
aWxsQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0JveCgpOworICAgIG1fc3Ry
b2tlQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCgpOworfQorCitib29s
IFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgYmVmb3JlIGFzc2lnbmluZyBhIG5ldyBQYXRoIHRvIG1f
cGF0aC4KKyAgICAvLyBCdXQgdGhpcyBidWcgY2FuIGhhcHBlbiBpZiB0aGlzIHJlbmRlcmVyIHdh
cyBjcmVhdGVkIGFuZCBpdHMgbGF5b3V0IHdhcyBub3QKKyAgICAvLyBkb25lIGJlZm9yZSBwYWlu
dGluZy4gQXNzZXJ0IHRoaXMgZGlkIG5vdCBoYXBwZW4gYnV0IGRvIG5vdCBjcmFzaC4KKyAgICBB
U1NFUlQoaGFzUGF0aCgpKTsKKyAgICByZXR1cm4gIWhhc1BhdGgoKSB8fCBwYXRoKCkuaXNFbXB0
eSgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCgpKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAoreworICAgIEFTU0VSVChtX3BhdGgpOworICAgIFBhdGgqIHVzZVBhdGggPSBtX3Bh
dGguZ2V0KCk7CisKKyAgICBpZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgpKQorICAgICAgICB1c2VQ
YXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgbm9uU2NhbGluZ1N0cm9rZVRyYW5z
Zm9ybSgpKTsKKworICAgIGNvbnRleHQuc3Ryb2tlUGF0aCgqdXNlUGF0aCk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIFBvaW50Q29vcmRpbmF0ZVNwYWNlIHBvaW50Q29vcmRpbmF0ZVNwYWNlKQor
eworICAgIEFTU0VSVChtX3BhdGgpOworCisgICAgaWYgKGhhc05vblNjYWxpbmdTdHJva2UoKSAm
JiBwb2ludENvb3JkaW5hdGVTcGFjZSAhPSBMb2NhbENvb3JkaW5hdGVTcGFjZSkgeworICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxpbmdTdHJva2VU
cmFuc2Zvcm0oKTsKKyAgICAgICAgUGF0aCogdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQYXRo
KG1fcGF0aC5nZXQoKSwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7CisgICAgICAgIHJldHVybiB1c2VQ
YXRoLT5zdHJva2VDb250YWlucyhub25TY2FsaW5nVHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KSwg
W3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIFNWR1JlbmRl
clN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwgKnRo
aXMpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9wYXRoLT5zdHJva2VDb250
YWlucyhwb2ludCwgW3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHls
ZSgpLCAqdGhpcyk7CisgICAgfSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVw
ZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVs
ZSBmaWxsUnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gcGF0aCgpLmNvbnRhaW5zKHBvaW50LCBm
aWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIGNvbnN0IFdpbmRSdWxlIGZpbGxS
dWxlKQoreworICAgIGlmIChtX2ZpbGxCb3VuZGluZ0JveC5pc0VtcHR5KCkgfHwgIW1fZmlsbEJv
dW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Q29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAocmVxdWlyZXNGaWxsICYmICFSZW5kZXJTVkdS
ZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoKnRoaXMsIHN0eWxlKCksIGZhbGxiYWNrQ29s
b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRG
aWxsQ29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJv
a2UpCit7CisgICAgaWYgKHN0cm9rZUJvdW5kaW5nQm94KCkuaXNFbXB0eSgpIHx8ICFzdHJva2VC
b3VuZGluZ0JveCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAocmVxdWlyZXNTdHJva2UgJiYgIVJlbmRl
clNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKCp0aGlzLCBzdHlsZSgpLCBmYWxs
YmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNoYXBlRGVw
ZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjps
YXlvdXQoKQoreworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQ
b2ludDsKKworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpKTsKKyAgICBpZiAobV9uZWVkc1NoYXBlVXBkYXRlKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHTGVuZ3RoQ29udGV4dCBjaGFuZ2VzCisg
ICAgICAgIC8vIGdyYXBoaWNzRWxlbWVudCgpLnVwZGF0ZUxlbmd0aENvbnRleHQoKTsKKyAgICAg
ICAgdXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpOworCisgICAgICAgIG1fbmVlZHNTaGFwZVVwZGF0
ZSA9IGZhbHNlOworICAgICAgICBzZXRMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91dFJlY3QobV9m
aWxsQm91bmRpbmdCb3gpKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFt
IFNWR0xheWVyVHJhbnNmb3JtVXBkYXRlcgorICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnVwZGF0
ZUxheWVyVHJhbnNmb3JtKCp0aGlzKTsKKworICAgIC8vIEludmFsaWRhdGUgYWxsIHJlc291cmNl
cyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYgKGV2ZXJIYWRM
YXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNsaWVudExheW91dENoYW5nZWQoKnRoaXMpOworCisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRl
ckxheW91dCgpOworICAgIGNsZWFyTmVlZHNMYXlvdXQoKTsKK30KKworUGF0aCogUmVuZGVyU1ZH
U2hhcGU6Om5vblNjYWxpbmdTdHJva2VQYXRoKGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgc3Ryb2tlVHJhbnNmb3JtKSBjb25zdAoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxQYXRoPiB0ZW1wUGF0aDsKKworICAgIHRlbXBQYXRoLmdldCgpID0gKnBhdGg7Cisg
ICAgdGVtcFBhdGguZ2V0KCkudHJhbnNmb3JtKHN0cm9rZVRyYW5zZm9ybSk7CisKKyAgICByZXR1
cm4gJnRlbXBQYXRoLmdldCgpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzZXR1cE5vblNj
YWxpbmdTdHJva2VDb250ZXh0KEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlVHJhbnNmb3JtLCBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8
QWZmaW5lVHJhbnNmb3JtPiBpbnZlcnNlID0gc3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKTsKKyAg
ICBpZiAoIWludmVyc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRlU2F2ZXIu
c2F2ZSgpOworICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRDVE0oaW52ZXJzZS52YWx1
ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1No
YXBlOjpub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ3Jh
cGhpY3NFbGVtZW50KCkuZ2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVw
ZGF0ZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNob3VsZEdlbmVyYXRlTWFya2VyUG9z
aXRpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKCkuc3ZnU3R5bGUoKS5oYXNNYXJrZXJz
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZ3JhcGhpY3NFbGVtZW50KCku
c3VwcG9ydHNNYXJrZXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8qIHJl
c291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJlcigq
dGhpcyk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCkgfHwgcmVzb3VyY2VzLT5tYXJrZXJNaWQo
KSB8fCByZXNvdXJjZXMtPm1hcmtlckVuZCgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpm
aWxsU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHcmFwaGljc0NvbnRleHQmIG9yaWdp
bmFsQ29udGV4dCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSAmb3JpZ2luYWxD
b250ZXh0OworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKFJlbmRlclNWR1Jlc291
cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRp
bmdSZXNvdXJjZSgqdGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChm
aWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSgqdGhpcywgc3R5bGUsIGNvbnRleHQs
IFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKQorICAgICAgICAgICAgZmlsbFBh
aW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKCp0aGlzLCBjb250ZXh0LCBSZW5kZXJT
VkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxsLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgZWxz
ZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpz
aGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAgICAgICAgICAgIGZhbGxiYWNrUmVzb3Vy
Y2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVz
b3VyY2UtPmFwcGx5UmVzb3VyY2UoKnRoaXMsIHN0eWxlLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNv
dXJjZU1vZGU6OkFwcGx5VG9GaWxsKSkKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNl
LT5wb3N0QXBwbHlSZXNvdXJjZSgqdGhpcywgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2Rl
OjpBcHBseVRvRmlsbCwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
R3JhcGhpY3NDb250ZXh0JiBvcmlnaW5hbENvbnRleHQpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0ID0gJm9yaWdpbmFsQ29udGV4dDsKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOwor
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRl
clNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKCp0aGlzLCBzdHlsZSwgZmFsbGJh
Y2tDb2xvcikpIHsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVz
b3VyY2UoKnRoaXMsIHN0eWxlLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5
VG9TdHJva2UpKQorICAgICAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5
UmVzb3VyY2UoKnRoaXMsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0
cm9rZSwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNW
YWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxi
YWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291
cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0Nv
bG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKCp0
aGlzLCBzdHlsZSwgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tl
KSkKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSgq
dGhpcywgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlLCBudWxs
cHRyLCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6
c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmICghc3R5bGUo
KS5oYXNWaXNpYmxlU3Ryb2tlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBmYWxzZSk7CisgICAgaWYgKGhhc05v
blNjYWxpbmdTdHJva2UoKSkgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1Ry
YW5zZm9ybSA9IG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgaWYgKCFzZXR1
cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KG5vblNjYWxpbmdUcmFuc2Zvcm0sIHN0YXRlU2F2ZXIp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdHJva2VTaGFwZShzdHlsZSgpLCBj
b250ZXh0KTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFN0cm9rZU1hcmtlcnMoUGFp
bnRJbmZvJiBjaGlsZFBhaW50SW5mbykKK3sKKyAgICBhdXRvIHBhaW50T3JkZXIgPSBSZW5kZXJT
dHlsZTo6cGFpbnRUeXBlc0ZvclBhaW50T3JkZXIoc3R5bGUoKS5wYWludE9yZGVyKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYWludE9yZGVyLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIHN3aXRjaCAocGFpbnRPcmRlci5hdChpKSkgeworICAgICAgICBjYXNlIFBhaW50VHlwZTo6
RmlsbDoKKyAgICAgICAgICAgIGZpbGxTaGFwZShzdHlsZSgpLCBjaGlsZFBhaW50SW5mby5jb250
ZXh0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGFpbnRUeXBlOjpTdHJv
a2U6CisgICAgICAgICAgICBzdHJva2VTaGFwZShjaGlsZFBhaW50SW5mby5jb250ZXh0KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGFpbnRUeXBlOjpNYXJrZXJzOgorICAg
ICAgICAgICAgaWYgKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7CisgICAgaWYgKHBh
aW50SW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcwor
ICAgIC8vIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6c2hvdWxkUGFpbnRIaWRkZW5SZW5kZXJlcigq
dGhpcykpCisgICAgLy8gICAgcmV0dXJuOworCisgICAgaWYgKCFzaG91bGRQYWludFNWR1JlbmRl
cmVyKHBhaW50SW5mbykgfHwgaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNsaXBwaW5nTWFzaykgeworICAgICAgICAv
LyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdlcworICAgICAg
ICAvLyBTVkdSZW5kZXJTdXBwb3J0OjpwYWludFNWR0NsaXBwaW5nTWFzaygqdGhpcywgcGFpbnRJ
bmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gYWRqdXN0ZWRQYWludE9m
ZnNldCA9IHBhaW50T2Zmc2V0ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2U6Ok1hc2spIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBV
cHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAgLy8gU1ZHUmVuZGVyU3Vw
cG9ydDo6cGFpbnRTVkdNYXNrKCp0aGlzLCBwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byB2aXN1YWxPdmVyZmxvd1JlY3Qg
PSB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCk7CisgICAgdmlzdWFsT3ZlcmZsb3dSZWN0
Lm1vdmVCeShhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICBpZiAoIXZpc3VhbE92ZXJmbG93UmVj
dC5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpPdXRsaW5lIHx8IHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkgeworICAgICAgICAvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIG91dGxpbmUgcGFpbnRpbmcKKyAgICAgICAgLy8gcGFpbnRTVkdPdXRsaW5lKHBh
aW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRJbmZvLmNvbnRl
eHQoKSk7CisKKyAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGFk
anVzdGVkUGFpbnRPZmZzZXQgLSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdCb3go
KS5sb2NhdGlvbigpKTsKKyAgICBwYWludEluZm8uY29udGV4dCgpLnRyYW5zbGF0ZShjb29yZGlu
YXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24ud2lkdGgoKSwgY29vcmRpbmF0ZVN5c3RlbU9yaWdp
blRyYW5zbGF0aW9uLmhlaWdodCgpKTsKKworICAgIGlmIChzdHlsZSgpLnN2Z1N0eWxlKCkuc2hh
cGVSZW5kZXJpbmcoKSA9PSBTaGFwZVJlbmRlcmluZzo6Q3Jpc3BFZGdlcykKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQoKS5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworCisgICAgZmlsbFN0
cm9rZU1hcmtlcnMocGFpbnRJbmZvKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6aXNQb2lu
dEluRmlsbChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gc2hhcGVEZXBl
bmRlbnRGaWxsQ29udGFpbnMocG9pbnQsIHN0eWxlKCkuc3ZnU3R5bGUoKS5maWxsUnVsZSgpKTsK
K30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6aXNQb2ludEluU3Ryb2tlKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQoreworICAgIGlmICghc3R5bGUoKS5zdmdTdHlsZSgpLmhhc1N0cm9rZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRTdHJva2VD
b250YWlucyhwb2ludCwgTG9jYWxDb29yZGluYXRlU3BhY2UpOworfQorCitmbG9hdCBSZW5kZXJT
VkdTaGFwZTo6Z2V0VG90YWxMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBoYXNQYXRoKCkg
PyBwYXRoKCkubGVuZ3RoKCkgOiBjcmVhdGVQYXRoKCktPmxlbmd0aCgpOworfQorCitGbG9hdFBv
aW50IFJlbmRlclNWR1NoYXBlOjpnZXRQb2ludEF0TGVuZ3RoKGZsb2F0IGRpc3RhbmNlKSBjb25z
dAoreworICAgIHJldHVybiBoYXNQYXRoKCkgPyBwYXRoKCkucG9pbnRBdExlbmd0aChkaXN0YW5j
ZSkgOiBjcmVhdGVQYXRoKCktPnBvaW50QXRMZW5ndGgoZGlzdGFuY2UpOworfQorCitib29sIFJl
bmRlclNWR1NoYXBlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RG
b3JlZ3JvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGFkanVzdGVkTG9j
YXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxheW91dExvY2F0aW9uKCk7CisKKyAgICBhdXRv
IGxvY2FsUG9pbnQgPSBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCk7CisgICAgYXV0byBib3Vu
ZGluZ0JveFRvcExlZnRDb3JuZXIgPSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91bmRpbmdC
b3goKS5taW5YTWluWUNvcm5lcigpKTsKKyAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5U
cmFuc2xhdGlvbiA9IGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciAtIGFkanVzdGVkTG9jYXRpb247
CisgICAgbG9jYWxQb2ludC5tb3ZlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbik7
CisKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoKnRoaXMs
IGxvY2FsUG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTVkdIaXRUZXN0Q3lj
bGVEZXRlY3Rpb25TY29wZSBoaXRUZXN0U2NvcGUoKnRoaXMpOworCisgICAgUG9pbnRlckV2ZW50
c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BBVEhfSElUVEVT
VElORywgcmVxdWVzdCwgc3R5bGUoKS5wb2ludGVyRXZlbnRzKCkpOworICAgIGJvb2wgaXNWaXNp
YmxlID0gKHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUpOworICAg
IGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CisgICAgICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKKyAgICAg
ICAgV2luZFJ1bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS5maWxsUnVsZSgpOworICAgICAgICBpZiAo
cmVxdWVzdC5zdmdDbGlwQ29udGVudCgpKQorICAgICAgICAgICAgZmlsbFJ1bGUgPSBzdmdTdHls
ZS5jbGlwUnVsZSgpOworCisgICAgICAgIGlmIChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN2
Z1N0eWxlLmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSAmJiBzdHJva2VD
b250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkgeworICAgICAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQo
KSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7CisgICAgICAgICAgICBpZiAocmVz
dWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQobm9kZUZvckhpdFRlc3QoKSwgcmVxdWVz
dCwgbG9jYXRpb25JbkNvbnRhaW5lciwgbV9zdHJva2VCb3VuZGluZ0JveCkgPT0gSGl0VGVzdFBy
b2dyZXNzOjpTdG9wKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRG
aWxsICYmIChzdmdTdHlsZS5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSAmJiBm
aWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZpbGwsIGZpbGxSdWxlKSkK
KyAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRCb3VuZGluZ0JveCAmJiBtX2ZpbGxCb3Vu
ZGluZ0JveC5jb250YWlucyhsb2NhbFBvaW50KSkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNp
emUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9M
aXN0QmFzZWRUZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5D
b250YWluZXIsIG1fZmlsbEJvdW5kaW5nQm94KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUg
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckZvclR5cGUoU1ZHTWFya2VyVHlwZSB0eXBl
LCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQsIFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKiBtYXJrZXJNaWQsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTdGFydE1hcmtlcjoKKyAgICAgICAgcmV0
dXJuIG1hcmtlclN0YXJ0OworICAgIGNhc2UgTWlkTWFya2VyOgorICAgICAgICByZXR1cm4gbWFy
a2VyTWlkOworICAgIGNhc2UgRW5kTWFya2VyOgorICAgICAgICByZXR1cm4gbWFya2VyRW5kOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitG
bG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNvbXB1dGVNYXJrZXJCb3VuZGluZ0JveCgpIGNvbnN0
Cit7CisgICAgaWYgKG1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworCisgICAgYXV0byogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKCp0aGlzKTsKKyAgICBBU1NFUlQocmVzb3VyY2Vz
KTsKKworICAgIGF1dG8qIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOwor
ICAgIGF1dG8qIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7CisgICAgYXV0byog
bWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0
ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OworCisgICAgRmxvYXRSZWN0IGJvdW5kYXJpZXM7CisgICAgdW5zaWduZWQgc2l6ZSA9IG1fbWFy
a2VyUG9zaXRpb25zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyID0gbWFy
a2VyRm9yVHlwZShtX21hcmtlclBvc2l0aW9uc1tpXS50eXBlLCBtYXJrZXJTdGFydCwgbWFya2Vy
TWlkLCBtYXJrZXJFbmQpKQorICAgICAgICAgICAgYm91bmRhcmllcy51bml0ZShtYXJrZXItPm1h
cmtlckJvdW5kYXJpZXMobWFya2VyLT5tYXJrZXJUcmFuc2Zvcm1hdGlvbihtX21hcmtlclBvc2l0
aW9uc1tpXS5vcmlnaW4sIG1fbWFya2VyUG9zaXRpb25zW2ldLmFuZ2xlLCBzdHJva2VXaWR0aCgp
KSkpOworICAgIH0KKyAgICByZXR1cm4gYm91bmRhcmllczsKK30KKworRmxvYXRSZWN0IFJlbmRl
clNWR1NoYXBlOjpjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHBhdGgoKS5ib3VuZGluZ1JlY3QoKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBl
OjpjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGF0
aCk7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94ID0gbV9maWxsQm91bmRpbmdCb3g7
CisKKyAgICBpZiAoc3R5bGUoKS5zdmdTdHlsZSgpLmhhc1N0cm9rZSgpKSB7CisgICAgICAgIGlm
IChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsKKyAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBu
b25TY2FsaW5nVHJhbnNmb3JtID0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpOworICAgICAg
ICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBpbnZlcnNlID0gbm9uU2Nh
bGluZ1RyYW5zZm9ybS5pbnZlcnNlKCkpIHsKKyAgICAgICAgICAgICAgICBQYXRoKiB1c2VQYXRo
ID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgobV9wYXRoLmdldCgpLCBub25TY2FsaW5nVHJhbnNmb3Jt
KTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdSZWN0ID0gdXNlUGF0
aC0+c3Ryb2tlQm91bmRpbmdSZWN0KEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+IHsg
W3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHls
ZSgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgfSB9KTsKKyAgICAgICAgICAgICAgICBzdHJv
a2VCb3VuZGluZ1JlY3QgPSBpbnZlcnNlLnZhbHVlKCkubWFwUmVjdChzdHJva2VCb3VuZGluZ1Jl
Y3QpOworICAgICAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKHN0cm9rZUJvdW5k
aW5nUmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
dHJva2VCb3VuZGluZ0JveC51bml0ZShwYXRoKCkuc3Ryb2tlQm91bmRpbmdSZWN0KEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+IHsgW3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIHsKKyAgICAgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxl
VG9Db250ZXh0KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsKKyAgICAgICAgICAgIH0gfSkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94OworfQorCitm
bG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAoreworICAgIFNWR0xlbmd0
aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmZ3JhcGhpY3NFbGVtZW50KCkpOworICAgIHJldHVybiBs
ZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkuc3Ryb2tlV2lkdGgoKSk7Cit9CisK
K2Jvb2wgUmVuZGVyU1ZHU2hhcGU6Omhhc1Ntb290aFN0cm9rZSgpIGNvbnN0Cit7CisgICAgY29u
c3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOworICAgIHJl
dHVybiBzdmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKS5pc0VtcHR5KCkKKyAgICAgICAgJiYgc3R5
bGUoKS5zdHJva2VNaXRlckxpbWl0KCkgPT0gc3R5bGUoKS5pbml0aWFsU3Ryb2tlTWl0ZXJMaW1p
dCgpCisgICAgICAgICYmIHN0eWxlKCkuam9pblN0eWxlKCkgPT0gc3R5bGUoKS5pbml0aWFsSm9p
blN0eWxlKCkKKyAgICAgICAgJiYgc3R5bGUoKS5jYXBTdHlsZSgpID09IHN0eWxlKCkuaW5pdGlh
bENhcFN0eWxlKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmRyYXdNYXJrZXJzKFBhaW50
SW5mbyYpCit7CisgICAgQVNTRVJUKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpOworCisg
ICAgYXV0byogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0Zv
clJlbmRlcmVyKCp0aGlzKTsKKyAgICBpZiAoIXJlc291cmNlcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byogbWFya2VyU3RhcnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7CisgICAg
YXV0byogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsKKyAgICBhdXRvKiBtYXJr
ZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOworICAgIGlmICghbWFya2VyU3RhcnQgJiYg
IW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBz
dHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgdW5zaWduZWQgc2l6ZSA9IG1f
bWFya2VyUG9zaXRpb25zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgIGlmIChhdXRvKiBtYXJrZXIgPSBtYXJrZXJGb3JUeXBlKG1fbWFy
a2VyUG9zaXRpb25zW2ldLnR5cGUsIG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1hcmtlckVuZCkp
IHsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShtYXJrZXIpOworICAgICAgICAgICAgVU5VU0VE
X1BBUkFNKHN0cm9rZVdpZHRoKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0
cmVhbSBSZW5kZXJMYXllciBjaGFuZ2VzCisgICAgICAgICAgICAvLyBBU1NFUlQobWFya2VyLT5o
YXNMYXllcigpKTsKKyAgICAgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihwYWludEluZm8uY29udGV4dCgpKTsKKyAgICAgICAgICAgIC8vIGF1dG8gY29udGVu
dFRyYW5zZm9ybSA9IG1hcmtlci0+bWFya2VyVHJhbnNmb3JtYXRpb24obV9tYXJrZXJQb3NpdGlv
bnNbaV0ub3JpZ2luLCBtX21hcmtlclBvc2l0aW9uc1tpXS5hbmdsZSwgc3Ryb2tlV2lkdGgpOwor
ICAgICAgICAgICAgLy8gbWFya2VyLT5sYXllcigpLT5wYWludFNWR1Jlc291cmNlTGF5ZXIocGFp
bnRJbmZvLmNvbnRleHQoKSwgTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCksIGNvbnRlbnRUcmFu
c2Zvcm0pOworICAgICAgICB9CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGF0aD4gUmVu
ZGVyU1ZHU2hhcGU6OmNyZWF0ZVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlVW5pcXVl
PFBhdGg+KHBhdGhGcm9tR3JhcGhpY3NFbGVtZW50KCZncmFwaGljc0VsZW1lbnQoKSkpOworfQor
Cit2b2lkIFJlbmRlclNWR1NoYXBlOjpwcm9jZXNzTWFya2VyUG9zaXRpb25zKCkKK3sKKyAgICBt
X21hcmtlclBvc2l0aW9ucy5jbGVhcigpOworCisgICAgaWYgKCFzaG91bGRHZW5lcmF0ZU1hcmtl
clBvc2l0aW9ucygpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9wYXRoKTsKKwor
ICAgIFNWR01hcmtlckRhdGEgbWFya2VyRGF0YShtX21hcmtlclBvc2l0aW9ucywgU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKCp0aGlzKS0+bWFya2VyUmV2ZXJz
ZVN0YXJ0KCkpOworICAgIG1fcGF0aC0+YXBwbHkoWyZtYXJrZXJEYXRhXShjb25zdCBQYXRoRWxl
bWVudCYgcGF0aEVsZW1lbnQpIHsKKyAgICAgICAgU1ZHTWFya2VyRGF0YTo6dXBkYXRlRnJvbVBh
dGhFbGVtZW50KG1hcmtlckRhdGEsIHBhdGhFbGVtZW50KTsKKyAgICB9KTsKKyAgICBtYXJrZXJE
YXRhLnBhdGhJc0RvbmUoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c3R5bGVXaWxsQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCit7
CisgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmc3R5bGUoKSA6
IG51bGxwdHI7CisgICAgaWYgKG9sZFN0eWxlKSB7CisgICAgICAgIGlmIChkaWZmID09IFN0eWxl
RGlmZmVyZW5jZTo6TGF5b3V0KQorICAgICAgICAgICAgc2V0TmVlZHNTaGFwZVVwZGF0ZSgpOwor
ICAgIH0KKworICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoZGlmZiwg
bmV3U3R5bGUpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VO
R0lORSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xZmE0ZDhjMzYyNTc1YzA2OWZhOGIyOTBmN2FlYTdmNmU4MzMwNDcwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZS5oCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDIw
LCAyMDIxLCAyMDIyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKKy8vIEZJ
WE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorLy8gI2luY2x1
ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCIKKyNpbmNsdWRlICJTVkdHcmFwaGljc0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJEYXRhLmgiCisjaW5jbHVkZSA8bWVtb3J5Pgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
bG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKK2NsYXNzIFJlbmRl
clNWR0NvbnRhaW5lcjsKK2NsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5kZXJTVkdSZXNv
dXJjZTsKK2NsYXNzIFNWR0dyYXBoaWNzRWxlbWVudDsKKworY2xhc3MgUmVuZGVyU1ZHU2hhcGUg
OiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoUmVuZGVyU1ZHU2hhcGUpOworcHVibGljOgorICAgIGVudW0gUG9pbnRDb29yZGluYXRlU3Bh
Y2UgeworICAgICAgICBHbG9iYWxDb29yZGluYXRlU3BhY2UsCisgICAgICAgIExvY2FsQ29vcmRp
bmF0ZVNwYWNlCisgICAgfTsKKyAgICBSZW5kZXJTVkdTaGFwZShTVkdHcmFwaGljc0VsZW1lbnQm
LCBSZW5kZXJTdHlsZSYmKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdTaGFwZSgpOworCisgICAg
aW5saW5lIFNWR0dyYXBoaWNzRWxlbWVudCYgZ3JhcGhpY3NFbGVtZW50KCkgY29uc3Q7CisKKyAg
ICB2b2lkIHNldE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0ZSA9IHRydWU7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmluZ0Rpc2FibGVkKCkgY29uc3QgPSAwOworCisgICAg
Ym9vbCBpc1BvaW50SW5GaWxsKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBib29sIGlzUG9pbnRJ
blN0cm9rZShjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICBmbG9hdCBnZXRUb3RhbExlbmd0aCgp
IGNvbnN0OworICAgIEZsb2F0UG9pbnQgZ2V0UG9pbnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSkg
Y29uc3Q7CisKKyAgICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7
IH0KKyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3BhdGgp
OworICAgICAgICByZXR1cm4gKm1fcGF0aDsKKyAgICB9CisgICAgdm9pZCBjbGVhclBhdGgoKSB7
IG1fcGF0aCA9IG51bGxwdHI7IH0KKworICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94OyB9CisgICAgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJva2VCb3VuZGlu
Z0JveDsgfQorCisgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZH
Qm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAgICAvLyByZXR1cm4gU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7IH0KKyAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworICAgIH0KKworICAgIEZsb2F0UmVjdCBjb21wdXRlTWFya2Vy
Qm91bmRpbmdCb3goKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZWxlbWVudCgpIGNv
bnN0ID0gZGVsZXRlOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBz
aGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBQb2ludENvb3Jk
aW5hdGVTcGFjZSA9IEdsb2JhbENvb3JkaW5hdGVTcGFjZSk7CisgICAgdmlydHVhbCBib29sIHNo
YXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBXaW5kUnVs
ZSkgY29uc3Q7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGgoKSBjb25zdDsKKyAgICBib29sIGhhc1Nt
b290aFN0cm9rZSgpIGNvbnN0OworCisgICAgYm9vbCBoYXNOb25TY2FsaW5nU3Ryb2tlKCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS5zdmdTdHlsZSgpLnZlY3RvckVmZmVjdCgpID09IFZlY3RvckVm
ZmVjdDo6Tm9uU2NhbGluZ1N0cm9rZTsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5n
U3Ryb2tlVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgUGF0aCogbm9uU2NhbGluZ1N0cm9rZVBhdGgo
Y29uc3QgUGF0aCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OworCisgICAgRmxvYXRS
ZWN0IG1fZmlsbEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94
OworCitwcml2YXRlOgorICAgIC8vIEhpdC1kZXRlY3Rpb24gc2VwYXJhdGVkIGZvciB0aGUgZmls
bCBhbmQgdGhlIHN0cm9rZQorICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
LCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUsIGNvbnN0IFdpbmRSdWxlIGZpbGxSdWxlID0gV2lu
ZFJ1bGU6Ok5vblplcm8pOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKTsKKworICAgIGJvb2wgaXNTVkdTaGFwZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGNhbkhhdmVDaGlsZHJlbigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJTVkdTaGFwZSI7IH0KKworICAgIHZv
aWQgbGF5b3V0KCkgZmluYWw7CisgICAgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpIGZpbmFsOworCisgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbikgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlT2JqZWN0Qm91bmRpbmdC
b3goKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlU3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdDsKKworICAgIGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlQ29udGV4dChBZmZpbmVUcmFu
c2Zvcm0mLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7CisKKyAgICBib29sIHNob3VsZEdl
bmVyYXRlTWFya2VyUG9zaXRpb25zKCkgY29uc3Q7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRy
PFBhdGg+IGNyZWF0ZVBhdGgoKSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NNYXJrZXJQb3NpdGlv
bnMoKTsKKworICAgIHZvaWQgZmlsbFNoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3ND
b250ZXh0Jik7CisgICAgdm9pZCBzdHJva2VTaGFwZShjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBo
aWNzQ29udGV4dCYpOworICAgIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0Jik7Cisg
ICAgdm9pZCBmaWxsU3Ryb2tlTWFya2VycyhQYWludEluZm8mKTsKKyAgICB2b2lkIGRyYXdNYXJr
ZXJzKFBhaW50SW5mbyYpOworCisgICAgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpIG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIGJvb2wgbV9uZWVkc1NoYXBlVXBkYXRlIHsgdHJ1ZSB9OworCisgICAgc3RkOjp1bmlxdWVf
cHRyPFBhdGg+IG1fcGF0aDsKKyAgICBWZWN0b3I8TWFya2VyUG9zaXRpb24+IG1fbWFya2VyUG9z
aXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyU1ZHU2hhcGUsIGlzU1ZHU2hhcGUoKSkKKworI2Vu
ZGlmIC8vIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZUlubGluZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTQ1MDlmNGY0ZWE4NWFjNzU1NDMyOTkzYmI4ODhmMWJjMGQzYzViMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmgK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKKyNp
bmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitp
bmxpbmUgU1ZHR3JhcGhpY3NFbGVtZW50JiBSZW5kZXJTVkdTaGFwZTo6Z3JhcGhpY3NFbGVtZW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVtZW50PihSZW5k
ZXJTVkdNb2RlbE9iamVjdDo6ZWxlbWVudCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gTEFZRVJfQkFTRURfU1ZHX0VOR0lORQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggNzRjZWNjNDFmODU5
MzZhMGEzYTM3OGQxM2EzZGQwNGE4MzZkMWU3ZC4uMTA0MjBjMDMxYmZhOWI4NDgxNmRkNWI5Y2U1
MDMyMDdlZGI1OTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJFbGVtZW50
QW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIKKyNp
bmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJF
bGVtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcAppbmRleCBjOTk1YWUzMWJjNmYxMzQ1YTRiMWM0ZDA5NGI3MTc4ODIx
YzI3MjBjLi5kNWUzYzA5M2ZkOTAyMmU5NTdjMjkxNzM2MDAwZmNjOTE3NGFkNzc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZUlu
bGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xl
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgpAQCAtMTUxLDI1
ICsxNTIsNzEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFNWR1NwcmVhZE1ldGhvZFR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1z
dGF0aWMgdm9pZCB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMsIFJlbmRl
clNWR1Jlc291cmNlKiByZXNvdXJjZSkKK3N0YXRpYyB2b2lkIHdyaXRlU1ZHUGFpbnRpbmdSZXNv
dXJjZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2UmIHJlc291cmNlKQog
ewotICAgIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gU29saWRDb2xvclJlc291cmNl
VHlwZSkgewotICAgICAgICB0cyA8PCAiW3R5cGU9U09MSURdIFtjb2xvcj0iIDw8IHN0YXRpY19j
YXN0PFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcio+KHJlc291cmNlKS0+Y29sb3IoKSA8PCAi
XSI7CisgICAgYXV0byByZXNvdXJjZVR5cGUgPSByZXNvdXJjZS5yZXNvdXJjZVR5cGUoKTsKKyAg
ICBpZiAocmVzb3VyY2VUeXBlID09IFNvbGlkQ29sb3JSZXNvdXJjZVR5cGUpIHsKKyAgICAgICAg
dHMgPDwgIlt0eXBlPVNPTElEXSBbY29sb3I9IiA8PCBkb3duY2FzdDxSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3I+KHJlc291cmNlKS5jb2xvcigpIDw8ICJdIjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIEFsbCBvdGhlciByZXNvdXJjZXMgZGVyaXZlIGZyb20gUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogY29udGFp
bmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPihyZXNvdXJjZSk7
Ci0gICAgU1ZHRWxlbWVudCYgZWxlbWVudCA9IGNvbnRhaW5lci0+ZWxlbWVudCgpOwotCi0gICAg
aWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBQYXR0ZXJuUmVzb3VyY2VUeXBlKQorICAg
IGlmIChyZXNvdXJjZVR5cGUgPT0gUGF0dGVyblJlc291cmNlVHlwZSkKICAgICAgICAgdHMgPDwg
Ilt0eXBlPVBBVFRFUk5dIjsKLSAgICBlbHNlIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkg
PT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUpCisgICAgZWxzZSBpZiAocmVzb3VyY2VUeXBl
ID09IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlKQogICAgICAgICB0cyA8PCAiW3R5cGU9TElO
RUFSLUdSQURJRU5UXSI7Ci0gICAgZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09
IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlKQorICAgIGVsc2UgaWYgKHJlc291cmNlVHlwZSA9
PSBSYWRpYWxHcmFkaWVudFJlc291cmNlVHlwZSkKICAgICAgICAgdHMgPDwgIlt0eXBlPVJBRElB
TC1HUkFESUVOVF0iOwogCi0gICAgdHMgPDwgIiBbaWQ9XCIiIDw8IGVsZW1lbnQuZ2V0SWRBdHRy
aWJ1dGUoKSA8PCAiXCJdIjsKKyAgICAvLyBBbGwgb3RoZXIgcmVzb3VyY2VzIGRlcml2ZSBmcm9t
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyCisgICAgY29uc3QgYXV0byYgY29udGFpbmVyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImPihyZXNvdXJjZSk7
CisgICAgdHMgPDwgIiBbaWQ9XCIiIDw8IGNvbnRhaW5lci5lbGVtZW50KCkuZ2V0SWRBdHRyaWJ1
dGUoKSA8PCAiXCJdIjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVTVkdGaWxsUGFpbnRpbmdSZXNv
dXJjZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IFJlbmRlclNWR1Jlc291cmNlJiBmaWxsUGFpbnRpbmdSZXNvdXJjZSkKK3sKKyAgICBUZXh0U3Ry
ZWFtU2VwYXJhdG9yIHMoIiAiKTsKKyAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7CisgICAgd3Jp
dGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBmaWxsUGFpbnRpbmdSZXNvdXJjZSk7CisKKyAgICBj
b25zdCBhdXRvJiBzdmdTdHlsZSA9IHJlbmRlcmVyLnN0eWxlKCkuc3ZnU3R5bGUoKTsKKyAgICB3
cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdmdTdHlsZS5maWxsT3BhY2l0eSgpLCAx
LjBmKTsKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImZpbGwgcnVsZSIsIHN2Z1N0eWxlLmZp
bGxSdWxlKCksIFdpbmRSdWxlOjpOb25aZXJvKTsKKyAgICB0cyA8PCAifV0iOworfQorCitzdGF0
aWMgdm9pZCB3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTVkdSZXNvdXJjZSYgc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZSwgY29uc3QgU1ZHR3JhcGhpY3NFbGVtZW50JiBzaGFwZSkKK3sK
KyAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKKyAgICB0cyA8PCAiIFtzdHJva2U9eyIg
PDwgczsKKyAgICB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIHN0cm9rZVBhaW50aW5nUmVz
b3VyY2UpOworCisgICAgY29uc3QgYXV0byYgc3R5bGUgPSByZW5kZXJlci5zdHlsZSgpOworICAg
IGNvbnN0IGF1dG8mIHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKKworICAgIFNWR0xlbmd0
aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmc2hhcGUpOworICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0g
bGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zmc2V0KCkp
OworICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgo
c3R5bGUuc3Ryb2tlV2lkdGgoKSk7CisgICAgY29uc3QgYXV0byYgZGFzaGVzID0gc3ZnU3R5bGUu
c3Ryb2tlRGFzaEFycmF5KCk7CisKKyAgICBEYXNoQXJyYXkgZGFzaEFycmF5OworICAgIGZvciAo
YXV0byYgbGVuZ3RoIDogZGFzaGVzKQorICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKGxlbmd0aC52
YWx1ZShsZW5ndGhDb250ZXh0KSk7CisKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNp
dHkiLCBzdmdTdHlsZS5zdHJva2VPcGFjaXR5KCksIDEuMGYpOworICAgIHdyaXRlSWZOb3REZWZh
dWx0KHRzLCAic3Ryb2tlIHdpZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7CisgICAgd3JpdGVJZk5v
dERlZmF1bHQodHMsICJtaXRlciBsaW1pdCIsIHN0eWxlLnN0cm9rZU1pdGVyTGltaXQoKSwgNC4w
Zik7CisgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJsaW5lIGNhcCIsIHN0eWxlLmNhcFN0eWxl
KCksIExpbmVDYXA6OkJ1dHQpOworICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAibGluZSBqb2lu
Iiwgc3R5bGUuam9pblN0eWxlKCksIExpbmVKb2luOjpNaXRlcik7CisgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJkYXNoIG9mZnNldCIsIGRhc2hPZmZzZXQsIDAuMCk7CisgICAgaWYgKCFkYXNo
QXJyYXkuaXNFbXB0eSgpKQorICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJkYXNoIGFy
cmF5IiwgZGFzaEFycmF5KTsKKworICAgIGlmIChpczxTVkdHZW9tZXRyeUVsZW1lbnQ+KHNoYXBl
KSkgeworICAgICAgICBkb3VibGUgcGF0aExlbmd0aCA9IGRvd25jYXN0PFNWR0dlb21ldHJ5RWxl
bWVudD4oc2hhcGUpLnBhdGhMZW5ndGgoKTsKKyAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMs
ICJwYXRoIGxlbmd0aCIsIHBhdGhMZW5ndGgsIDAuMCk7CisgICAgfQorCisgICAgdHMgPDwgIn1d
IjsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIpCkBAIC0xODEsNTIgKzIyOCwzNCBAQCBzdGF0aWMgdm9pZCB3
cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikK
ICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3JtIiwgcmVuZGVyZXIubG9j
YWxUcmFuc2Zvcm0oKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJpbWFnZSByZW5kZXJp
bmciLCBzdHlsZS5pbWFnZVJlbmRlcmluZygpLCBSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVu
ZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3BhY2l0eSIsIHN0eWxlLm9w
YWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOworCiAgICAgaWYgKGlzPExl
Z2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpIHsKICAgICAgICAgY29uc3QgYXV0byYgc2hh
cGUgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpOwogCiAgICAgICAg
IENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jl
c291cmNlKGNvbnN0X2Nhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGUmPihzaGFwZSksIHNoYXBlLnN0
eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7Ci0gICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9y
IHMoIiAiKTsKLSAgICAgICAgICAgIHRzIDw8ICIgW3N0cm9rZT17IiA8PCBzOwotICAgICAgICAg
ICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBzdHJva2VQYWludGluZ1Jlc291cmNlKTsK
LQotICAgICAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KCZzaGFwZS5ncmFw
aGljc0VsZW1lbnQoKSk7Ci0gICAgICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9IGxlbmd0aENv
bnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKTsKLSAgICAg
ICAgICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgo
c3R5bGUuc3Ryb2tlV2lkdGgoKSk7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBkYXNoZXMgPSBz
dmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKTsKLQotICAgICAgICAgICAgRGFzaEFycmF5IGRhc2hB
cnJheTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgbGVuZ3RoIDogZGFzaGVzKQotICAgICAgICAg
ICAgICAgIGRhc2hBcnJheS5hcHBlbmQobGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKLQot
ICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUuc3Ry
b2tlT3BhY2l0eSgpLCAxLjBmKTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAi
c3Ryb2tlIHdpZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7Ci0gICAgICAgICAgICB3cml0ZUlmTm90
RGVmYXVsdCh0cywgIm1pdGVyIGxpbWl0Iiwgc3R5bGUuc3Ryb2tlTWl0ZXJMaW1pdCgpLCA0LjBm
KTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAibGluZSBjYXAiLCBzdHlsZS5j
YXBTdHlsZSgpLCBMaW5lQ2FwOjpCdXR0KTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0
KHRzLCAibGluZSBqb2luIiwgc3R5bGUuam9pblN0eWxlKCksIExpbmVKb2luOjpNaXRlcik7Ci0g
ICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImRhc2ggb2Zmc2V0IiwgZGFzaE9mZnNl
dCwgMC4wKTsKLSAgICAgICAgICAgIGlmICghZGFzaEFycmF5LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJkYXNoIGFycmF5IiwgZGFzaEFycmF5KTsK
LQotICAgICAgICAgICAgaWYgKGlzPFNWR0dlb21ldHJ5RWxlbWVudD4oc2hhcGUuZ3JhcGhpY3NF
bGVtZW50KCkpKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHBhdGhMZW5ndGggPSBkb3duY2Fz
dDxTVkdHZW9tZXRyeUVsZW1lbnQ+KHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKS5wYXRoTGVuZ3Ro
KCk7Ci0gICAgICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJwYXRoIGxlbmd0aCIs
IHBhdGhMZW5ndGgsIDAuMCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBzdHJv
a2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVz
b3VyY2UoY29uc3RfY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5
bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgICAgICB3cml0ZVNWR1N0cm9rZVBhaW50aW5n
UmVzb3VyY2UodHMsIHJlbmRlcmVyLCAqc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSwgc2hhcGUuZ3Jh
cGhpY3NFbGVtZW50KCkpOwogCi0gICAgICAgICAgICB0cyA8PCAifV0iOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChhdXRvKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNl
OjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PExlZ2FjeVJlbmRlclNWR1NoYXBlJj4o
c2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgICAgIHdyaXRl
U1ZHRmlsbFBhaW50aW5nUmVzb3VyY2UodHMsIHJlbmRlcmVyLCAqZmlsbFBhaW50aW5nUmVzb3Vy
Y2UpOwogCi0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3Vy
Y2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxM
ZWdhY3lSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xv
cikpIHsKLSAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwotICAgICAgICAg
ICAgdHMgPDwgIiBbZmlsbD17IiA8PCBzOwotICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jl
c291cmNlKHRzLCBmaWxsUGFpbnRpbmdSZXNvdXJjZSk7CisgICAgICAgIHdyaXRlSWZOb3REZWZh
dWx0KHRzLCAiY2xpcCBydWxlIiwgc3ZnU3R5bGUuY2xpcFJ1bGUoKSwgV2luZFJ1bGU6Ok5vblpl
cm8pOworICAgIH0KKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGVs
c2UgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpIHsKKyAgICAgICAgY29u
c3QgYXV0byYgc2hhcGUgPSBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpOworCisg
ICAgICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgICAgIGlmIChhdXRvKiBzdHJva2VQYWlu
dGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2Uo
Y29uc3RfY2FzdDxSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJh
Y2tDb2xvcikpCisgICAgICAgICAgICB3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UodHMs
IHJlbmRlcmVyLCAqc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSwgc2hhcGUuZ3JhcGhpY3NFbGVtZW50
KCkpOworCisgICAgICAgIGlmIChhdXRvKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRlclNWR1NoYXBl
Jj4oc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgICAgIHdy
aXRlU1ZHRmlsbFBhaW50aW5nUmVzb3VyY2UodHMsIHJlbmRlcmVyLCAqZmlsbFBhaW50aW5nUmVz
b3VyY2UpOwogCi0gICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBz
dmdTdHlsZS5maWxsT3BhY2l0eSgpLCAxLjBmKTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZh
dWx0KHRzLCAiZmlsbCBydWxlIiwgc3ZnU3R5bGUuZmlsbFJ1bGUoKSwgV2luZFJ1bGU6Ok5vblpl
cm8pOwotICAgICAgICAgICAgdHMgPDwgIn1dIjsKLSAgICAgICAgfQogICAgICAgICB3cml0ZUlm
Tm90RGVmYXVsdCh0cywgImNsaXAgcnVsZSIsIHN2Z1N0eWxlLmNsaXBSdWxlKCksIFdpbmRSdWxl
OjpOb25aZXJvKTsKICAgICB9CisjZW5kaWYKIAogICAgIHdyaXRlSWZOb3RFbXB0eSh0cywgInN0
YXJ0IG1hcmtlciIsIHN2Z1N0eWxlLm1hcmtlclN0YXJ0UmVzb3VyY2UoKSk7CiAgICAgd3JpdGVJ
Zk5vdEVtcHR5KHRzLCAibWlkZGxlIG1hcmtlciIsIHN2Z1N0eWxlLm1hcmtlck1pZFJlc291cmNl
KCkpOwpAQCAtMjUwLDExICsyNzksOCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgd3JpdGVQb3NpdGlv
bkFuZFN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JiByZQogICAgIHJl
dHVybiB0czsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlJiBzaGFwZSkKK3N0YXRpYyB2b2lkIHdyaXRl
U1ZHR3JhcGhpY3NFbGVtZW50KFRleHRTdHJlYW0mIHRzLCBTVkdHcmFwaGljc0VsZW1lbnQmIHN2
Z0VsZW1lbnQpCiB7Ci0gICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBzaGFwZSk7Ci0KLSAg
ICBTVkdHcmFwaGljc0VsZW1lbnQmIHN2Z0VsZW1lbnQgPSBzaGFwZS5ncmFwaGljc0VsZW1lbnQo
KTsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoJnN2Z0VsZW1lbnQpOwogCiAg
ICAgaWYgKGlzPFNWR1JlY3RFbGVtZW50PihzdmdFbGVtZW50KSkgewpAQCAtMjkxLDkgKzMxNywy
NCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
TGVnYWN5UmVuZGVyU1ZHU2hhcGUmIHNoYXBlKQogICAgICAgICB3cml0ZU5hbWVBbmRRdW90ZWRW
YWx1ZSh0cywgImRhdGEiLCBwYXRoU3RyaW5nKTsKICAgICB9IGVsc2UKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCit7CisgICAgd3Jp
dGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBzaGFwZSk7CisgICAgd3JpdGVTVkdHcmFwaGljc0VsZW1l
bnQodHMsIHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKKyNp
ZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCit7Cisg
ICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBzaGFwZSk7CisgICAgd3JpdGVTVkdHcmFwaGlj
c0VsZW1lbnQodHMsIHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKTsKKyAgICByZXR1cm4gdHM7Cit9
CisjZW5kaWYKKwogc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJTVkdUZXh0Qm94KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSZW5kZXJTVkdUZXh0JiB0ZXh0KQogewogICAgIGF1dG8qIGJveCA9IGRvd25j
YXN0PFNWR1Jvb3RJbmxpbmVCb3g+KHRleHQuZmlyc3RSb290Qm94KCkpOwpAQCAtNTUxLDYgKzU5
MiwxNSBAQCB2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNW
R0ltYWdlJiBpbWFnZSwgT3B0aW9uU2V0PFJlbmRlcgogICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBp
bWFnZSwgYmVoYXZpb3IpOwogfQogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
Cit2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hhcGUs
IE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPiBiZWhhdmlvcikKK3sKKyAgICB3cml0ZVN0YW5k
YXJkUHJlZml4KHRzLCBzaGFwZSwgYmVoYXZpb3IpOworICAgIHRzIDw8IHNoYXBlIDw8ICJcbiI7
CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNoYXBlLCBiZWhhdmlvcik7Cit9CisjZW5kaWYKKwog
dm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUmIHNo
YXBlLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4gYmVoYXZpb3IpCiB7CiAgICAgd3JpdGVT
dGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGJlaGF2aW9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKaW5kZXggN2FjM2ZjZWM4ZDM3
ZTc1NDUxNTA4YWQ0YzVmMmRjMmJlMThlMjdmZS4uZWM4ODQ1NTM1ZjA4NWQ2MDY0MDFjM2M2ZGJi
YTExODcwOWNlNDlhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmgKQEAgLTQ1LDE1ICs0NSwxNyBAQCBjbGFzcyBSZW5kZXJTVkdJ
bWFnZTsKIGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7CiBjbGFzcyBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lcjsKIGNsYXNzIFJlbmRlclNWR1Jvb3Q7CitjbGFzcyBSZW5kZXJTVkdTaGFwZTsK
IGNsYXNzIFJlbmRlclNWR1RleHQ7CiBjbGFzcyBTVkdVbml0VHlwZXM7CiAKIC8vIGZ1bmN0aW9u
cyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRyZWVBc1RleHQgY29kZQogdm9pZCB3cml0ZShXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdSb290JiwgT3B0aW9uU2V0PFJlbmRl
ckFzVGV4dEZsYWc+KTsKK3ZvaWQgd3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTGVnYWN5
UmVuZGVyU1ZHU2hhcGUmLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwogI2lmIEVOQUJM
RShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQogdm9pZCB3cml0ZShXVEY6OlRleHRTdHJlYW0mLCBj
b25zdCBSZW5kZXJTVkdSb290JiwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+KTsKK3ZvaWQg
d3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUmLCBPcHRpb25TZXQ8
UmVuZGVyQXNUZXh0RmxhZz4pOwogI2VuZGlmCi12b2lkIHdyaXRlKFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlJiwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+
KTsKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUmVu
ZGVyU1ZHR3JhZGllbnRTdG9wJiwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+KTsKIHZvaWQg
d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lciYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7CiB2b2lk
IHdyaXRlU1ZHQ29udGFpbmVyKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0NvbnRh
aW5lciYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKaW5kZXggYzc0NzEwYmMxY2Y4MjYzYzgwOGJj
Yzg1MDdmZTNiODBlNTgwZWI2Ny4uOGQyYWQyNTE1ZDUxNmFkZTc3MWQ0ZjhmZGQ4OTg2ZDhmMzhj
MTlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNw
cApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJQYXRoT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXJJbmxp
bmVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxw
ZXJzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNw
cAppbmRleCBmNTI5OTk2NjZhODFiZmQ1NDBhZGZlM2M0N2YwOTllOGIzZGZhOWMxLi5mOTUyNzJh
NGQ1ZDhhODliNTYwYzZkZWE4MGY2ODljMDFmMWE2NjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNp
bmNsdWRlICJQYXRoVHJhdmVyc2FsU3RhdGUuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlw
ZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGluZUVsZW1lbnQuY3BwCmluZGV4IDEyZWZmNDNkNWY1YjJlMjg1MzMwZjBlMGY5ZDBjMDg5
MmZmMjcwMWMuLmVmYjliOGJjZmQ5Y2M5NWVhYTQ5M2JmZTFhYWQ5MTljYTc5Y2IzYzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0xpbmVFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJM
ZWdhY3lSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAj
aW5jbHVkZSAiU1ZHTGVuZ3RoVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448628</attachid>
            <date>2022-01-07 13:59:39 -0800</date>
            <delta_ts>2022-01-07 15:25:56 -0800</delta_ts>
            <desc>Patch, v3</desc>
            <filename>bug-234954-20220107135938.patch</filename>
            <type>text/plain</type>
            <size>76367</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2E1NDc0MTcxZDFjZDdj
Yzk0ZTY1OTMwYjhiNTJiMzViMTM1MWFhZS4uODlmNDhjZGYzOWRlY2U2NTEzMTlmYTU2MTNkYWZk
MjAwZDkyOWYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAyMi0wMS0wNyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHU2hhcGUgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk1NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGltcGxlbWVu
dGluZyBSZW5kZXJTVkdTaGFwZSwgYmFzZWQgb24gdGhlIGRvd25zdHJlYW0gdmVyc2lvbiBpbiB0
aGUKKyAgICAgICAgTEJTRSBicmFuY2guIE1hbnkgcGFydHMgYXJlIDE6MSBjb3BpZXMgZnJvbSBM
ZWdhY3lSZW5kZXJTVkdTaGFwZSwgYWx0aG91Z2gKKyAgICAgICAgdGhlIGNvcmUgbWV0aG9kcyBm
b3IgbGF5b3V0IC8gcGFpbnQgLyBoaXQtdGVzdGluZyBsb29rcyBxdWl0ZSBkaWZmZXJlbnQgaW4K
KyAgICAgICAgUmVuZGVyU1ZHU2hhcGUgLS0gdGhlIGNvZGUgaXMgbW9zdGx5IGFkYXB0ZWQgZnJv
bSBsYXllci1hd2FyZSBDU1MgcmVuZGVyZXJzCisgICAgICAgIHN1Y2ggYXMgUmVuZGVyQm94IC8g
UmVuZGVyQmxvY2sgdGFraW5nIFNWRyBzcGVjaWZpY3MgaW50byBhY2NvdW50LgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaG9va3MgaW4gUmVuZGVyU1ZHU2hhcGUgaW4gYWxsIHBsYWNlcyB0aGF0IHVz
ZWQgdG8gaGFuZGxlCisgICAgICAgIExlZ2FjeVJlbmRlclNWR1NoYXBlLCBlLmcuIGluIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuIEhvd2V2ZXIgbm8KKyAgICAgICAgcmVuZGVyZXIgaW5oZXJp
dHMgZnJvbSBSZW5kZXJTVkdTaGFwZSB5ZXQgLS0gYSBmb2xsb3ctdXAgcGF0Y2ggd2lsbAorICAg
ICAgICBpbnRyb2R1Y2UgUmVuZGVyU1ZHUmVjdC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdXBwb3J0c1BhdGggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudFBh
dGggY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpmaWxs
QW5kU3Ryb2tlUGF0aE9yU2hhcGUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpw
b3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudDo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
UGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OmZpbGxTaGFwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ry
b2tlU2hhcGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBl
RGVwZW5kZW50U3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vblNjYWxp
bmdTdHJva2VQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpz
ZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFN0cm9rZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
Ojppc1BvaW50SW5GaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc1Bv
aW50SW5TdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmdldFRvdGFs
TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpnZXRQb2lu
dEF0TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpub2Rl
QXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJGb3JUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjb21wdXRlTWFya2VyQm91bmRpbmdCb3ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU9iamVjdEJvdW5kaW5n
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVT
dHJva2VCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6c3Ryb2tlV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
Omhhc1Ntb290aFN0cm9rZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6ZHJhd01hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNyZWF0
ZVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnByb2Nlc3NN
YXJrZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0eWxl
V2lsbENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYXRoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjbGVhclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6Omhhc05vblNjYWxpbmdTdHJva2UgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmdyYXBoaWNzRWxlbWVudCBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdQ
YWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHRmlsbFBhaW50aW5n
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVTVkdHcmFwaGljc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHR2VvbWV0cnlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0dlb21ldHJ5RWxlbWVudDo6Z2V0VG90YWxMZW5ndGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHR2VvbWV0cnlFbGVtZW50OjpnZXRQb2ludEF0TGVuZ3RoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0dlb21ldHJ5RWxlbWVudDo6aXNQb2ludEluRmlsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdHZW9tZXRyeUVsZW1lbnQ6OmlzUG9pbnRJblN0cm9rZSk6Cisg
ICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKwogMjAyMi0wMS0wNyAgUGF0cmljayBB
bmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBXZWIgRHJpdmVyOiBX
ZWJTb2NrZXQgb3ZlciBUTFMgZmFpbGluZyBvdmVyIFdlYkRyaXZlciB3aXRoIGFjY2VwdEluc2Vj
dXJlQ2VydHMgb24gQmlnIFN1cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAyODA3NjllMjQ5Y2RkMWM4ZmZj
ZTQ3NDAyZmQ0ZmM2NGEzNjgxY2NlLi41OGY0NzA5MGQ2ZjZjY2Q2MmE2NGIzNTEzNTQ3Mzc0OGQy
NTk1ZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjQ5NCw2ICsyNDk0LDcgQEAgcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnQuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKK3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNw
cAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0UGF0aC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAwYjhjZjRmYjYyNTRlZGE4MTI2MjYyMjY4YThlZmYwMjFlOTNl
MjU4Li5jMzViNGM0MmM0MDdhNzJkY2I0MmI1ZmRkMzA2ZDQ1OTJlZjdmMGVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMjcy
LDYgKzMyNzIsNyBAQAogCQlBMTA0RjI0NDE0QzcxRjdBMDA5RTJDMjMgLyogQ2FjaGVkU1ZHRG9j
dW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEx
MDRGMjQyMTRDNzFGN0EwMDlFMkMyMyAvKiBDYWNoZWRTVkdEb2N1bWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExMEJCNTg1MTQ4NEUzQTcw
MEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBCQjU4MzE0ODRFM0E3MDBCMkU4N0EgLyogTGVnYWN5
UmVuZGVyU1ZHUmVjdC5oICovOyB9OwogCQlBMTBCQjU4QjE0ODRFM0IzMDBCMkU4N0EgLyogTGVn
YWN5UmVuZGVyU1ZHU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEExMEJCNTg5MTQ4NEUzQjMwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdTaGFw
ZS5oICovOyB9OworCQlBMTBCQjU4QjE0ODRFM0IzMDBDM0Y3N0IgLyogUmVuZGVyU1ZHU2hhcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEJCNTg5
MTQ4NEUzQjMwMEMzRjc3QiAvKiBSZW5kZXJTVkdTaGFwZS5oICovOyB9OwogCQlBMTBEQkY0NzE4
RjkyMzE3MDAwRDcwQzYgLyogTGVnYWN5UHJldmlld0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwREJGNDYxOEY5MjMxNzAwMEQ3
MEM2IC8qIExlZ2FjeVByZXZpZXdMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTBEQzc2QjE0NzQ3QkFCMDA1RTI0NzEgLyog
U3R5bGVHcmlkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTEwREM3NjkxNDc0N0JBQjAwNUUyNDcxIC8qIFN0eWxlR3JpZERhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTBGN0M3MzI3MzEw
MEQwMDA4RkE5QUYgLyogTW9kYWxDb250YWluZXJPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwRjdDNzAyNzMxMDA3MzAwOEZBOUFGIC8q
IE1vZGFsQ29udGFpbmVyT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtNDYzMSw2ICs0NjMyLDcgQEAKIAkJQ0RGNzQ3RjMyNzBGNzZD
RjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGMjI3MEY3
NkNGMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudElubGluZXMuaCAq
LzsgfTsKIAkJQ0RGNzQ3RjUyNzBGODNCMTAwOEZFRUVDIC8qIFJlbmRlclNWR0dyYWRpZW50U3Rv
cElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENERjc0N0Y0MjcwRjgzQjEwMDhGRUVFQyAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3BJbmxpbmVz
LmggKi87IH07CiAJCUNERjc0N0Y3MjcwRjg2QTQwMDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJTVkdT
aGFwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENERjc0N0Y2MjcwRjg2QTQwMDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZUlubGlu
ZXMuaCAqLzsgfTsKKwkJQ0RGNzQ3RjcyNzBGODNCNDEwN0RFRUVDIC8qIFJlbmRlclNWR1NoYXBl
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RGNzQ3RjYyNzBGODNCNDEwN0RFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5lcy5oICovOyB9
OwogCQlDREY3NDdGOTI3MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxH
cmFkaWVudElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENERjc0N0Y4MjcwRjg3Q0IwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlh
bEdyYWRpZW50SW5saW5lcy5oICovOyB9OwogCQlDREY3NDdGQjI3MEY4OTFBMDA4RkVFRUMgLyog
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGQTI3MEY4OTFBMDA4RkVFRUMgLyogUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXJJbmxpbmVzLmggKi87IH07CiAJCUNERjc0ODNGMThGRUJDRUMwMDA2
RUNDMCAvKiBHcmlkUG9zaXRpb25zUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0ODNEMThGRUJDRUMwMDA2RUNDMCAvKiBHcmlkUG9z
aXRpb25zUmVzb2x2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTMzNzcsNyArMTMzNzksOSBAQAogCQlBMTBCQjU4MjE0ODRFM0E3MDBCMkU4
N0EgLyogTGVnYWN5UmVuZGVyU1ZHUmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTEwQkI1ODMxNDg0RTNBNzAwQjJFODdBIC8qIExlZ2FjeVJlbmRlclNWR1JlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHUmVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTBCQjU4ODE0ODRFM0IzMDBCMkU4N0Eg
LyogTGVnYWN5UmVuZGVyU1ZHU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBMTBDQzU4ODE0NzNFM0IzMDBCMkE4QkYgLyogUmVuZGVyU1ZHU2hhcGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHU2hhcGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTBCQjU4OTE0ODRFM0IzMDBCMkU4N0EgLyog
TGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGVnYWN5UmVuZGVyU1ZHU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEw
QkI1ODkxNDg0RTNCMzAwQzNGNzdCIC8qIFJlbmRlclNWR1NoYXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1NoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUExMEQ2RTk0MjE0NEM5OTgwMEZERDE0RCAvKiBKU1BheW1lbnRSZXNwb25zZUN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMERCRjQ2MThGOTIzMTcwMDBENzBDNiAv
KiBMZWdhY3lQcmV2aWV3TG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExlZ2FjeVByZXZpZXdMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTEwREM3NjgxNDc0N0JBQjAwNUUyNDcxIC8qIFN0eWxlR3JpZERhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVHcmlkRGF0YS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjI3OCw2ICsxNjI4Miw3IEBACiAJCUNERjc0
N0YyMjcwRjc2Q0YwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50SW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREY3NDdGNDI3MEY4M0IxMDA4
RkVFRUMgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJTVkdHcmFkaWVudFN0b3BJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNERjc0N0Y2MjcwRjg2QTQwMDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZUlubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNERjc0N0Y2MjcwRjgzQjQxMDdERUVFQyAvKiBSZW5k
ZXJTVkdTaGFwZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHU2hhcGVJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjc0N0Y4MjcwRjg3Q0IwMDhGRUVF
QyAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50SW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50SW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDREY3NDdGQTI3MEY4OTFBMDA4RkVFRUMgLyogUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXJJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNl
TWFza2VySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREY3NDgzQzE4
RkVCQ0VDMDAwNkVDQzAgLyogR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODk3MCw2ICsxODk3NSw5IEBACiAJCQkJNDM2NzA4
QTQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oICovLAog
CQkJCTQzNjcwOEE1MTJEOUNBNUMwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmNwcCAqLywKIAkJ
CQk0MzY3MDhBNjEyRDlEQjRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oICovLAorCQkJCUEx
MENDNTg4MTQ3M0UzQjMwMEIyQThCRiAvKiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8sCisJCQkJQTEw
QkI1ODkxNDg0RTNCMzAwQzNGNzdCIC8qIFJlbmRlclNWR1NoYXBlLmggKi8sCisJCQkJQ0RGNzQ3
RjYyNzBGODNCNDEwN0RFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5lcy5oICovLAogCQkJCTA4
NTRCMDA2MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0LmNwcCAqLywKIAkJCQkwODU0
QjAwNzEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dC5oICovLAogCQkJCTA4NTRCMDA4
MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0UGF0aC5jcHAgKi8sCkBAIC0zNjc0Niw2
ICszNjc1NCw4IEBACiAJCQkJQ0RGNzQ3RjkyNzBGODdDQjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jl
c291cmNlUmFkaWFsR3JhZGllbnRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhF
MzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzY3MDhFNTEyRDlEQjRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQkI1OEIxNDg0RTNCMzAwQzNGNzdCIC8qIFJlbmRlclNW
R1NoYXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREY3NDdGNzI3MEY4M0I0MTA3REVFRUMgLyog
UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxOTEyNTVF
NEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIw
MUIxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RleHRQYXRoLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MzY3MDhFOTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA1NGQ3MjVj
ODU5MmJhYzMzMzNkYjQ0ZGQ0ZTVlZDI5ZWZiZmI0N2E3Li4wMDNlMjQ0NDFhOTllODI3YjVhOGIy
M2E0YTU4ZThjMDBlMjMwZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTk2LDYgKzk2LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVM
aXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1No
YXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4
dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCkBAIC05MTAsNyArOTExLDcgQEAg
TGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjplbGVtZW50UmVjdCgpIGNvbnN0
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3VwcG9ydHNQYXRoKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIoKSkgfHwgaXM8TGVnYWN5UmVu
ZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKCkpOworICAgIHJldHVybiBpczxSZW5kZXJUZXh0PihyZW5k
ZXJlcigpKSB8fCAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1NWR1NoYXBlT3JMZWdhY3lT
VkdTaGFwZSgpKTsKIH0KIAogUGF0aCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjplbGVtZW50
UGF0aCgpIGNvbnN0CkBAIC05NjAsMTUgKzk2MSwyNCBAQCBQYXRoIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmVsZW1lbnRQYXRoKCkgY29uc3QKICAgICAgICAgaWYgKGF1dG8gc3ZnUm9vdCA9
IGFuY2VzdG9yc09mVHlwZTxMZWdhY3lSZW5kZXJTVkdSb290PigqbV9yZW5kZXJlcikuZmlyc3Qo
KSkgewogICAgICAgICAgICAgTGF5b3V0UG9pbnQgcGFyZW50T2Zmc2V0ID0gYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZSgmKnN2Z1Jvb3QpLT5lbGVtZW50UmVjdCgpLmxvY2F0aW9uKCk7CiAg
ICAgICAgICAgICBwYXRoLnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFy
ZW50T2Zmc2V0LngoKSwgcGFyZW50T2Zmc2V0LnkoKSkpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHBhdGg7CisgICAgfQorCiAjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
Ci0gICAgICAgIH0gZWxzZSBpZiAoYXV0byBzdmdSb290ID0gYW5jZXN0b3JzT2ZUeXBlPFJlbmRl
clNWR1Jvb3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7CisgICAgaWYgKGlzPFJlbmRlclNWR1No
YXBlPihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oKm1fcmVuZGVyZXIp
Lmhhc1BhdGgoKSkgeworICAgICAgICBQYXRoIHBhdGggPSBkb3duY2FzdDxSZW5kZXJTVkdTaGFw
ZT4oKm1fcmVuZGVyZXIpLnBhdGgoKTsKKworICAgICAgICAvLyBUaGUgU1ZHIHBhdGggaXMgaW4g
dGVybXMgb2YgdGhlIHBhcmVudCdzIGJvdW5kaW5nIGJveC4gVGhlIHBhdGggbmVlZHMgdG8gYmUg
b2Zmc2V0IHRvIGZyYW1lIGNvb3JkaW5hdGVzLgorICAgICAgICBpZiAoYXV0byBzdmdSb290ID0g
YW5jZXN0b3JzT2ZUeXBlPFJlbmRlclNWR1Jvb3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7CiAg
ICAgICAgICAgICBMYXlvdXRQb2ludCBwYXJlbnRPZmZzZXQgPSBheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKCYqc3ZnUm9vdCktPmVsZW1lbnRSZWN0KCkubG9jYXRpb24oKTsKICAgICAgICAg
ICAgIHBhdGgudHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRPZmZz
ZXQueCgpLCBwYXJlbnRPZmZzZXQueSgpKSk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAg
IHJldHVybiBwYXRoOwogICAgIH0KKyNlbmRpZgogCiAgICAgcmV0dXJuIFBhdGgoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA4MTVh
MzMwNDQ4ODVjZjQyNzRlNzc3YTIxYzQ3MzlhOTgxMjE4MGM3Li42OTI3YzNiYTc2YjUwMmUwMTEz
MTAwYzYzOGUwN2E5NTJlNGFmM2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3JUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2luY2x1
ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFw
ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcmludENvbnRleHQuaCIKICNp
bmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCkBAIC02NCw2ICs2NSw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTU1OCw2ICs1NjAsMTIgQEAgdm9pZCB3cml0ZShU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBPcHRpb25TZXQ8UmVuZGVyQXNU
ZXh0RmxhZz4gYmUKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICB9OwogCisjaWYgRU5BQkxFKExB
WUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihvKSkgewor
ICAgICAgICB3cml0ZSh0cywgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KG8pLCBiZWhhdmlvcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAgICBpZiAoaXM8TGVnYWN5UmVuZGVy
U1ZHU2hhcGU+KG8pKSB7CiAgICAgICAgIHdyaXRlKHRzLCBkb3duY2FzdDxMZWdhY3lSZW5kZXJT
VkdTaGFwZT4obyksIGJlaGF2aW9yKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAppbmRleCBmZmU4NWEw
MTg5ZDNlNGI4MjFlZTI3OTc0MTI5MWU3OGQyMjEzZWMxLi5mOTQ4NTRkMzAwMmRkNzljNTVkNDVh
MWMwZTQ1ZWY5ZDRlMjdlODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcApAQCAtMjYsMTEgKzI2LDEzIEBACiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJMZWdhY3lSZW5kZXJT
VkdSb290LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTWFza2VyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5o
IgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
I2luY2x1ZGUgIlNWR1Jlc291cmNlRWxlbWVudENsaWVudC5oIgogI2luY2x1ZGUgIlNWR1Jlc291
cmNlcy5oIgpAQCAtMjQzLDQgKzI0NSw0MiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlOjptYXJr
Rm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oUmVuZGVyT2JqZWN0JgogICAg
IH0KIH0KIAordm9pZCBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbEFuZFN0cm9rZVBhdGhPclNoYXBl
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9k
ZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJFbGVtZW50KiBz
aGFwZSkgY29uc3QKK3sKKyAgICBpZiAoc2hhcGUpIHsKKyAgICAgICAgQVNTRVJUKHNoYXBlLT5p
c1NWR1NoYXBlT3JMZWdhY3lTVkdTaGFwZSgpKTsKKworICAgICAgICBpZiAocmVzb3VyY2VNb2Rl
LmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKSB7CisgICAgICAg
ICAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHNoYXBlKSkKKyAgICAgICAgICAgICAg
ICBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4oc2hhcGUpLT5maWxsU2hhcGUoY29udGV4
dCk7CisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgICAgICBlbHNl
IGlmIChpczxSZW5kZXJTVkdTaGFwZT4oc2hhcGUpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlclNWR1NoYXBlPihzaGFwZSktPmZpbGxTaGFwZShjb250ZXh0KTsKKyNlbmRpZgorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNv
dXJjZU1vZGU6OkFwcGx5VG9TdHJva2UpKSB7CisgICAgICAgICAgICBpZiAoaXM8TGVnYWN5UmVu
ZGVyU1ZHU2hhcGU+KHNoYXBlKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxMZWdhY3lSZW5k
ZXJTVkdTaGFwZT4oc2hhcGUpLT5zdHJva2VTaGFwZShjb250ZXh0KTsKKyNpZiBFTkFCTEUoTEFZ
RVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclNWR1No
YXBlPihzaGFwZSkpCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KHNo
YXBlKS0+c3Ryb2tlU2hhcGUoY29udGV4dCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocGF0aCkgeworICAgICAgICBpZiAocmVzb3VyY2VN
b2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKQorICAgICAg
ICAgICAgY29udGV4dC5maWxsUGF0aCgqcGF0aCk7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUu
Y29udGFpbnMoUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQuc3Ryb2tlUGF0aCgqcGF0aCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgKaW5kZXggZDIyYTg0YjI3MmQ0Njhm
OWQwMTM2MWFhNWEwYjIxYzRlYWM0N2QxNS4uYThkOTFmMzY3MTE5ZmU3NDM1Y2EzMmFkMWZlMGQ5
NmEzZGFjZjVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2UuaApAQCAtMTksOCArMTksOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkxlZ2FjeVJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFu
dHMuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Nyw5ICs0NywxMCBAQCBjbGFzcyBDb2xv
cjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFBhdGg7
CitjbGFzcyBSZW5kZXJFbGVtZW50OwogY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVy
U3R5bGU7CiBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I7CitjbGFzcyBSZW5kZXJT
dHlsZTsKIAogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2UgewogcHVibGljOgpAQCAtNjAsNyArNjEs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5k
ZXJFbGVtZW50JiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgPSAwOwogCiAgICAg
dmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0
eWxlJiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
LCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNv
bnN0IFBhdGgqLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSopIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYs
IE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgUmVu
ZGVyRWxlbWVudCogLyogc2hhcGUgKi8pIHsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291
cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JikgPSAwOwogCiAgICAgdmlydHVhbCBS
ZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOwpAQCAtNzEsNiAr
NzIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciog
c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CiAKICAgICBzdGF0aWMgdm9pZCBtYXJrRm9y
TGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oUmVuZGVyT2JqZWN0JiwgYm9vbCBu
ZWVkc0xheW91dCA9IHRydWUpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmaWxsQW5kU3Ryb2tl
UGF0aE9yU2hhcGUoR3JhcGhpY3NDb250ZXh0JiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNl
TW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJFbGVtZW50KiBzaGFwZSkgY29uc3Q7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IGE0NjJiYmRl
ODNhNjljYWM4MDE3N2Y1OTdmOWQ3MDYzM2I2ODBlNzMuLjg3NGI2YzE1YTIyMjJhZmFmYWJjMTA3
NDYxYmVlNDgwNGUxMDVlZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xNzIsNyArMTcyLDcgQEAg
Ym9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNv
dXJjZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IExlZ2FjeVJlbmRlclNW
R1NoYXBlKikKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRp
b25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBj
b25zdCBSZW5kZXJFbGVtZW50KikKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJU
X1VOVVNFRChyZXNvdXJjZU1vZGUsICFyZXNvdXJjZU1vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IGVh
MmNjMzE1NTAzNGU0YjY3MTAzYjQ3ZTA5MmRhZjQ5ZDYzMWQ4ZDYuLmExMTFlOWVjMDJlYWY0NzE0
Yzg4ODRhOTY5ODI5YmIyNTc0ODI1YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTY3LDcgKzY3LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmLCBi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSBvdmVycmlkZTsKIAogICAgIGJvb2wgYXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0Nv
bnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4pIG92ZXJyaWRlOwotICAg
IHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dCom
LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IExl
Z2FjeVJlbmRlclNWR1NoYXBlKikgb3ZlcnJpZGU7CisgICAgdm9pZCBwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdS
ZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyRWxlbWVudCopIG92ZXJyaWRl
OwogCiAgICAgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0
Jikgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCmluZGV4IDBkNGIwMjA1NWMyNzk1Mjlj
OTEyYjlmNjVhOTdiNzcyN2JkNzZmOWMuLmQxNTkyNTNmMWZiOGJiMDg1ZjRlMzdkYzAzODE4YTA5
Njk1ZWVlMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgUmVuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJj
ZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgTGVnYWN5UmVuZGVy
U1ZHU2hhcGUqIHNoYXBlKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJFbGVtZW50KiBzaGFwZSkKIHsKICAgICBBU1NFUlQo
Y29udGV4dCk7CiAgICAgQVNTRVJUKCFyZXNvdXJjZU1vZGUuaXNFbXB0eSgpKTsKQEAgLTIwNywy
MCArMjA3LDggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGgKICNlbHNlCiAgICAgICAgIFVOVVNF
RF9QQVJBTShyZW5kZXJlcik7CiAjZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocmVz
b3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKSB7
Ci0gICAgICAgICAgICBpZiAocGF0aCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0
aCgqcGF0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzaGFwZSkKLSAgICAgICAgICAgICAgICBz
aGFwZS0+ZmlsbFNoYXBlKCpjb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzb3Vy
Y2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkpIHsK
LSAgICAgICAgICAgIGlmIChwYXRoKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBh
dGgoKnBhdGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGUpCi0gICAgICAgICAgICAgICAg
c2hhcGUtPnN0cm9rZVNoYXBlKCpjb250ZXh0KTsKLSAgICAgICAgfQotICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgZmlsbEFuZFN0cm9rZVBhdGhPclNoYXBlKCpjb250ZXh0LCByZXNvdXJjZU1v
ZGUsIHBhdGgsIHNoYXBlKTsKIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmgKaW5kZXggZWU2YmRjZmFkNjhmOGVlMzBmZTNiOGZhM2U3ZmNlOTA2MjI4NmFjOS4uMWNk
MjdmNzQyOGZlMTQxOGVkMjgwNGQ1OGRjNThiZGY5MDI1YzA2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgK
QEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KFJlbmRlckVsZW1lbnQmLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSBmaW5hbDsK
IAogICAgIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4p
IGZpbmFsOwotICAgIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBo
aWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0
aCosIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlKikgZmluYWw7CisgICAgdm9pZCBwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxS
ZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyRWxlbWVudCop
IGZpbmFsOwogICAgIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9i
amVjdCYpIGZpbmFsIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKIHByb3RlY3RlZDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcAppbmRleCAyZDZmODkwZmM0NGJjZWFhYWRiOTJhYzYzYjg1NDdmMTdmMWU4NGE1
Li5iNTYyYmVlZTRjYjk4OWUyMTFmNDI3M2FhZDY2OGEyZWUzNmJhOTFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCkBAIC0yMDEsMjQgKzIwMSwxMSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZAogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9w
dGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCog
cGF0aCwgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUqIHNoYXBlKQordm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNv
dXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IFJlbmRlckVsZW1lbnQqIHNoYXBlKQog
ewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQoIXJlc291cmNlTW9kZS5pc0VtcHR5
KCkpOwotCi0gICAgaWYgKHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNvdXJjZU1v
ZGU6OkFwcGx5VG9GaWxsKSkgewotICAgICAgICBpZiAocGF0aCkKLSAgICAgICAgICAgIGNvbnRl
eHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAoc2hhcGUpCi0gICAgICAgICAg
ICBzaGFwZS0+ZmlsbFNoYXBlKCpjb250ZXh0KTsKLSAgICB9Ci0gICAgaWYgKHJlc291cmNlTW9k
ZS5jb250YWlucyhSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJva2UpKSB7Ci0gICAg
ICAgIGlmIChwYXRoKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7Ci0g
ICAgICAgIGVsc2UgaWYgKHNoYXBlKQotICAgICAgICAgICAgc2hhcGUtPnN0cm9rZVNoYXBlKCpj
b250ZXh0KTsKLSAgICB9Ci0KKyAgICBmaWxsQW5kU3Ryb2tlUGF0aE9yU2hhcGUoKmNvbnRleHQs
IHJlc291cmNlTW9kZSwgcGF0aCwgc2hhcGUpOwogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuLmgKaW5kZXggOTU5NmYyYWZkMjJhZTkwMWU3ZGFlOTVhMDI1MjVhN2RkZDE3
ZWU4Ni4uNzExN2YxMjdkMGRkZDczYmE1ZWJjNTU5OTAxMGMyNGJiNjJmMDhhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUNsaWVudEZy
b21DYWNoZShSZW5kZXJFbGVtZW50JiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkg
b3ZlcnJpZGU7CiAKICAgICBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0
IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNv
dXJjZU1vZGU+KSBvdmVycmlkZTsKLSAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9k
ZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSopIG92ZXJyaWRlOwor
ICAgIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4
dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0
IFJlbmRlckVsZW1lbnQqKSBvdmVycmlkZTsKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGlu
Z0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3QoKTsg
fQogCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIFBhdHRlcm5SZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNw
cAppbmRleCAxMDk1YmI1MTZjMDZhMTY1NDEyYWZmZTcyZWI4MTc5NGRiYWFiYTNhLi5kZDdlNWY3
MTljMDFjMjBlYmM1ODA5NmMyOGUzZmE3MGQwNmI0MDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
Y3BwCkBAIC0yMyw4ICsyMywxMCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVy
RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC02NywyMyArNjksMTEgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6
OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFIKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBs
eVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRp
b25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBh
dGgsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlKiBzaGFwZSkKK3ZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJFbGVtZW50KiBzaGFwZSkK
IHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKCFyZXNvdXJjZU1vZGUuaXNFbXB0
eSgpKTsKLQotICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZHUmVzb3VyY2VN
b2RlOjpBcHBseVRvRmlsbCkpIHsKLSAgICAgICAgaWYgKHBhdGgpCi0gICAgICAgICAgICBjb250
ZXh0LT5maWxsUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHNoYXBlKQotICAgICAgICAg
ICAgc2hhcGUtPmZpbGxTaGFwZSgqY29udGV4dCk7Ci0gICAgfQotICAgIGlmIChyZXNvdXJjZU1v
ZGUuY29udGFpbnMoUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkgewotICAg
ICAgICBpZiAocGF0aCkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBhdGgpOwot
ICAgICAgICBlbHNlIGlmIChzaGFwZSkKLSAgICAgICAgICAgIHNoYXBlLT5zdHJva2VTaGFwZSgq
Y29udGV4dCk7Ci0gICAgfQorICAgIGZpbGxBbmRTdHJva2VQYXRoT3JTaGFwZSgqY29udGV4dCwg
cmVzb3VyY2VNb2RlLCBwYXRoLCBzaGFwZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCmlu
ZGV4IDdmMWI3NDY4MmUyZDNiZDNlMzk0ZDY5M2MwNzliNTJhOWE4NTk0NTAuLjBlZWIwY2JkYjlj
ZTA3NGM2YjBjZTdjM2M1NGIwNjQ1MzZkMGNlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaApAQCAt
MjQsNiArMjQsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRlck9iamVj
dDsKKwogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yIGZpbmFsIDogcHVibGljIFJl
bmRlclNWR1Jlc291cmNlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
QEAgLTM0LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KFJlbmRlckVsZW1lbnQmLCBib29sID0gdHJ1ZSkgb3ZlcnJpZGUgeyB9CiAKICAgICBib29sIGFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3ND
b250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+KSBvdmVycmlkZTsKLSAg
ICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQq
JiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBM
ZWdhY3lSZW5kZXJTVkdTaGFwZSopIG92ZXJyaWRlOworICAgIHZvaWQgcG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlckVsZW1lbnQqKSBvdmVycmlk
ZTsKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3Qm
KSBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFNvbGlkQ29sb3JS
ZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5NWZhMjU0OGQwZjQ3NDE0OTYyNDI4ZTM4YzE0NTg1
MTBhNzc2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA4IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSwgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKKworI2lmIEVOQUJMRShMQVlF
Ul9CQVNFRF9TVkdfRU5HSU5FKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRU
ZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJMYXlv
dXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKKyNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIlNWR1BhdGhEYXRhLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgi
CisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJTVkdTaGFwZSk7CisKK1Jl
bmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZShTVkdHcmFwaGljc0VsZW1lbnQmIGVsZW1lbnQs
IFJlbmRlclN0eWxlJiYgc3R5bGUpCisgICAgOiBSZW5kZXJTVkdNb2RlbE9iamVjdChlbGVtZW50
LCBXVEZNb3ZlKHN0eWxlKSkKK3sKK30KKworUmVuZGVyU1ZHU2hhcGU6On5SZW5kZXJTVkdTaGFw
ZSgpID0gZGVmYXVsdDsKKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlU2hhcGVGcm9tRWxl
bWVudCgpCit7CisgICAgbV9wYXRoID0gY3JlYXRlUGF0aCgpOworICAgIHByb2Nlc3NNYXJrZXJQ
b3NpdGlvbnMoKTsKKworICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gY2FsY3VsYXRlT2JqZWN0Qm91
bmRpbmdCb3goKTsKKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gY2FsY3VsYXRlU3Ryb2tlQm91
bmRpbmdCb3goKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0eSgpIGNvbnN0Cit7
CisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGJlZm9yZSBhc3Np
Z25pbmcgYSBuZXcgUGF0aCB0byBtX3BhdGguCisgICAgLy8gQnV0IHRoaXMgYnVnIGNhbiBoYXBw
ZW4gaWYgdGhpcyByZW5kZXJlciB3YXMgY3JlYXRlZCBhbmQgaXRzIGxheW91dCB3YXMgbm90Cisg
ICAgLy8gZG9uZSBiZWZvcmUgcGFpbnRpbmcuIEFzc2VydCB0aGlzIGRpZCBub3QgaGFwcGVuIGJ1
dCBkbyBub3QgY3Jhc2guCisgICAgQVNTRVJUKGhhc1BhdGgoKSk7CisgICAgcmV0dXJuICFoYXNQ
YXRoKCkgfHwgcGF0aCgpLmlzRW1wdHkoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6Zmls
bFNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZp
bGxQYXRoKHBhdGgoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wYXRoKTsKKyAg
ICBQYXRoKiB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworCisgICAgaWYgKGhhc05vblNjYWxpbmdT
dHJva2UoKSkKKyAgICAgICAgdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBhdGgs
IG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKSk7CisKKyAgICBjb250ZXh0LnN0cm9rZVBhdGgo
KnVzZVBhdGgpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQb2ludENvb3JkaW5hdGVTcGFjZSBw
b2ludENvb3JkaW5hdGVTcGFjZSkKK3sKKyAgICBBU1NFUlQobV9wYXRoKTsKKworICAgIGlmICho
YXNOb25TY2FsaW5nU3Ryb2tlKCkgJiYgcG9pbnRDb29yZGluYXRlU3BhY2UgIT0gTG9jYWxDb29y
ZGluYXRlU3BhY2UpIHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zv
cm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCk7CisgICAgICAgIFBhdGgqIHVzZVBhdGgg
PSBub25TY2FsaW5nU3Ryb2tlUGF0aChtX3BhdGguZ2V0KCksIG5vblNjYWxpbmdUcmFuc2Zvcm0p
OworICAgICAgICByZXR1cm4gdXNlUGF0aC0+c3Ryb2tlQ29udGFpbnMobm9uU2NhbGluZ1RyYW5z
Zm9ybS5tYXBQb2ludChwb2ludCksIFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7
CisgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0
dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMocG9pbnQsIFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSB7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVU
b0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwgKnRoaXMpOworICAgIH0pOworfQorCitib29sIFJl
bmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBh
dGgoKS5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBl
OjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNGaWxs
LCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBpZiAobV9maWxsQm91bmRpbmdCb3gu
aXNFbXB0eSgpIHx8ICFtX2ZpbGxCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJlcXVp
cmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKCp0aGlz
LCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7Cit9CisK
K2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmIChzdHJva2VCb3VuZGluZ0JveCgp
LmlzRW1wdHkoKSB8fCAhc3Ryb2tlQm91bmRpbmdCb3goKS5jb250YWlucyhwb2ludCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKHJl
cXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSgqdGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKK30KKwor
dm9pZCBSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KCkKK3sKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRD
aGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CisKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWlu
dGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CisgICAgaWYgKG1fbmVl
ZHNTaGFwZVVwZGF0ZSkgeworICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0xl
bmd0aENvbnRleHQgY2hhbmdlcworICAgICAgICAvLyBncmFwaGljc0VsZW1lbnQoKS51cGRhdGVM
ZW5ndGhDb250ZXh0KCk7CisgICAgICAgIHVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKTsKKworICAg
ICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgc2V0TGF5b3V0UmVjdChl
bmNsb3NpbmdMYXlvdXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94KSk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdMYXllclRyYW5zZm9ybVVwZGF0ZXIKKyAgICAvLyBT
VkdSZW5kZXJTdXBwb3J0Ojp1cGRhdGVMYXllclRyYW5zZm9ybSgqdGhpcyk7CisKKyAgICAvLyBJ
bnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3VyIGxheW91dCBjaGFu
Z2VkLgorICAgIGlmIChldmVySGFkTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5b3V0KCkpCisgICAg
ICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKCp0aGlzKTsKKworICAg
IHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKyAgICBjbGVhck5lZWRzTGF5b3V0KCk7
Cit9CisKK1BhdGgqIFJlbmRlclNWR1NoYXBlOjpub25TY2FsaW5nU3Ryb2tlUGF0aChjb25zdCBQ
YXRoKiBwYXRoLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZVRyYW5zZm9ybSkgY29uc3QK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGF0aD4gdGVtcFBhdGg7CisKKyAgICB0ZW1w
UGF0aC5nZXQoKSA9ICpwYXRoOworICAgIHRlbXBQYXRoLmdldCgpLnRyYW5zZm9ybShzdHJva2VU
cmFuc2Zvcm0pOworCisgICAgcmV0dXJuICZ0ZW1wUGF0aC5nZXQoKTsKK30KKworYm9vbCBSZW5k
ZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlQ29udGV4dChBZmZpbmVUcmFuc2Zvcm0m
IHN0cm9rZVRyYW5zZm9ybSwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYgc3RhdGVTYXZlcikK
K3sKKyAgICBzdGQ6Om9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSA9IHN0cm9rZVRy
YW5zZm9ybS5pbnZlcnNlKCk7CisgICAgaWYgKCFpbnZlcnNlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKKyAgICBzdGF0ZVNhdmVyLmNvbnRleHQoKS0+
Y29uY2F0Q1RNKGludmVyc2UudmFsdWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0FmZmlu
ZVRyYW5zZm9ybSBSZW5kZXJTVkdTaGFwZTo6bm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGdyYXBoaWNzRWxlbWVudCgpLmdldFNjcmVlbkNUTShTVkdMb2Nh
dGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpz
aG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucygpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSgp
LnN2Z1N0eWxlKCkuaGFzTWFya2VycygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIWdyYXBoaWNzRWxlbWVudCgpLnN1cHBvcnRzTWFya2VycygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBhdXRvKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVk
UmVzb3VyY2VzRm9yUmVuZGVyZXIoKnRoaXMpOworICAgIGlmICghcmVzb3VyY2VzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpIHx8
IHJlc291cmNlcy0+bWFya2VyTWlkKCkgfHwgcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKK30KKwor
dm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
R3JhcGhpY3NDb250ZXh0JiBvcmlnaW5hbENvbnRleHQpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0ID0gJm9yaWdpbmFsQ29udGV4dDsKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOwor
ICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJT
VkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoKnRoaXMsIHN0eWxlLCBmYWxsYmFja0Nv
bG9yKSkgeworICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2Uo
KnRoaXMsIHN0eWxlLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxs
KSkKKyAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSgq
dGhpcywgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvRmlsbCwgbnVsbHB0
ciwgdGhpcyk7CisgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7Cisg
ICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2Ug
PSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAg
ICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKKyAgICAg
ICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKCp0aGlzLCBzdHlsZSwg
Y29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvRmlsbCkpCisgICAgICAgICAg
ICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UoKnRoaXMsIGNvbnRleHQs
IFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwsIG51bGxwdHIsIHRoaXMpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdyYXBoaWNzQ29udGV4dCYgb3JpZ2luYWxDb250ZXh0KQor
eworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9ICZvcmlnaW5hbENvbnRleHQ7CisgICAg
Q29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBh
aW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSgqdGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlmIChzdHJva2VQYWlu
dGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKCp0aGlzLCBzdHlsZSwgY29udGV4dCwgUmVuZGVy
U1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkKKyAgICAgICAgICAgIHN0cm9rZVBhaW50
aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKCp0aGlzLCBjb250ZXh0LCBSZW5kZXJTVkdS
ZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJva2UsIG51bGxwdHIsIHRoaXMpOworICAgICAgICBlbHNl
IGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNo
YXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJj
ZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNv
dXJjZS0+YXBwbHlSZXNvdXJjZSgqdGhpcywgc3R5bGUsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291
cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkpCisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJj
ZS0+cG9zdEFwcGx5UmVzb3VyY2UoKnRoaXMsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9k
ZTo6QXBwbHlUb1N0cm9rZSwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBpZiAoIXN0eWxlKCkuaGFzVmlzaWJsZVN0cm9rZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwg
ZmFsc2UpOworICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsKKyAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3Jt
KCk7CisgICAgICAgIGlmICghc2V0dXBOb25TY2FsaW5nU3Ryb2tlQ29udGV4dChub25TY2FsaW5n
VHJhbnNmb3JtLCBzdGF0ZVNhdmVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
c3Ryb2tlU2hhcGUoc3R5bGUoKSwgY29udGV4dCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6
OmZpbGxTdHJva2VNYXJrZXJzKFBhaW50SW5mbyYgY2hpbGRQYWludEluZm8pCit7CisgICAgYXV0
byBwYWludE9yZGVyID0gUmVuZGVyU3R5bGU6OnBhaW50VHlwZXNGb3JQYWludE9yZGVyKHN0eWxl
KCkucGFpbnRPcmRlcigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFpbnRPcmRl
ci5zaXplKCk7ICsraSkgeworICAgICAgICBzd2l0Y2ggKHBhaW50T3JkZXIuYXQoaSkpIHsKKyAg
ICAgICAgY2FzZSBQYWludFR5cGU6OkZpbGw6CisgICAgICAgICAgICBmaWxsU2hhcGUoc3R5bGUo
KSwgY2hpbGRQYWludEluZm8uY29udGV4dCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFBhaW50VHlwZTo6U3Ryb2tlOgorICAgICAgICAgICAgc3Ryb2tlU2hhcGUoY2hpbGRQ
YWludEluZm8uY29udGV4dCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBh
aW50VHlwZTo6TWFya2VyczoKKyAgICAgICAgICAgIGlmICghbV9tYXJrZXJQb3NpdGlvbnMuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIGRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlclNWR1No
YXBlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0KQoreworICAgIGlmIChwYWludEluZm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdS
ZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAvLyBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnNob3Vs
ZFBhaW50SGlkZGVuUmVuZGVyZXIoKnRoaXMpKQorICAgIC8vICAgIHJldHVybjsKKworICAgIGlm
ICghc2hvdWxkUGFpbnRTVkdSZW5kZXJlcihwYWludEluZm8pIHx8IGlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpDbGlw
cGluZ01hc2spIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJT
dXBwb3J0IGNoYW5nZXMKKyAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRTVkdDbGlw
cGluZ01hc2soKnRoaXMsIHBhaW50SW5mbyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxheW91dExvY2F0aW9u
KCk7CisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpNYXNrKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9ydCBjaGFuZ2VzCisg
ICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50U1ZHTWFzaygqdGhpcywgcGFpbnRJbmZv
LCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1
dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0RXF1aXZhbGVudCgpOwor
ICAgIHZpc3VhbE92ZXJmbG93UmVjdC5tb3ZlQnkoYWRqdXN0ZWRQYWludE9mZnNldCk7CisgICAg
aWYgKCF2aXN1YWxPdmVyZmxvd1JlY3QuaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6T3V0
bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZk91dGxpbmUpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBvdXRsaW5lIHBhaW50aW5nCisgICAgICAg
IC8vIHBhaW50U1ZHT3V0bGluZShwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0KCkpOworCisgICAgYXV0byBjb29yZGluYXRlU3lzdGVt
T3JpZ2luVHJhbnNsYXRpb24gPSBhZGp1c3RlZFBhaW50T2Zmc2V0IC0gZmxvb3JlZExheW91dFBv
aW50KG9iamVjdEJvdW5kaW5nQm94KCkubG9jYXRpb24oKSk7CisgICAgcGFpbnRJbmZvLmNvbnRl
eHQoKS50cmFuc2xhdGUoY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0aW9uLndpZHRoKCks
IGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbi5oZWlnaHQoKSk7CisKKyAgICBpZiAo
c3R5bGUoKS5zdmdTdHlsZSgpLnNoYXBlUmVuZGVyaW5nKCkgPT0gU2hhcGVSZW5kZXJpbmc6OkNy
aXNwRWRnZXMpCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U2hvdWxkQW50aWFsaWFz
KGZhbHNlKTsKKworICAgIGZpbGxTdHJva2VNYXJrZXJzKHBhaW50SW5mbyk7Cit9CisKK2Jvb2wg
UmVuZGVyU1ZHU2hhcGU6OmlzUG9pbnRJbkZpbGwoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7
CisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBzdHlsZSgpLnN2
Z1N0eWxlKCkuZmlsbFJ1bGUoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmlzUG9pbnRJ
blN0cm9rZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoIXN0eWxlKCkuc3Zn
U3R5bGUoKS5oYXNTdHJva2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQsIExvY2FsQ29vcmRpbmF0ZVNwYWNl
KTsKK30KKworZmxvYXQgUmVuZGVyU1ZHU2hhcGU6OmdldFRvdGFsTGVuZ3RoKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gaGFzUGF0aCgpID8gcGF0aCgpLmxlbmd0aCgpIDogY3JlYXRlUGF0aCgpLT5s
ZW5ndGgoKTsKK30KKworRmxvYXRQb2ludCBSZW5kZXJTVkdTaGFwZTo6Z2V0UG9pbnRBdExlbmd0
aChmbG9hdCBkaXN0YW5jZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUGF0aCgpID8gcGF0aCgp
LnBvaW50QXRMZW5ndGgoZGlzdGFuY2UpIDogY3JlYXRlUGF0aCgpLT5wb2ludEF0TGVuZ3RoKGRp
c3RhbmNlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK3sKKyAgICBpZiAoaGl0
VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsYXlvdXRM
b2NhdGlvbigpOworCisgICAgYXV0byBsb2NhbFBvaW50ID0gbG9jYXRpb25JbkNvbnRhaW5lci5w
b2ludCgpOworICAgIGF1dG8gYm91bmRpbmdCb3hUb3BMZWZ0Q29ybmVyID0gZmxvb3JlZExheW91
dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSk7CisgICAgYXV0byBj
b29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24gPSBib3VuZGluZ0JveFRvcExlZnRDb3Ju
ZXIgLSBhZGp1c3RlZExvY2F0aW9uOworICAgIGxvY2FsUG9pbnQubW92ZShjb29yZGluYXRlU3lz
dGVtT3JpZ2luVHJhbnNsYXRpb24pOworCisgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2lu
dEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGUgaGl0VGVzdFNjb3BlKCp0aGlz
KTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0
UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCkucG9pbnRlckV2ZW50
cygpKTsKKyAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNp
YmlsaXR5OjpWaXNpYmxlKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJl
VmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHls
ZSgpLnN2Z1N0eWxlKCk7CisgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0gc3ZnU3R5bGUuZmls
bFJ1bGUoKTsKKyAgICAgICAgaWYgKHJlcXVlc3Quc3ZnQ2xpcENvbnRlbnQoKSkKKyAgICAgICAg
ICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUuY2xpcFJ1bGUoKTsKKworICAgICAgICBpZiAoaGl0UnVs
ZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdTdHlsZS5oYXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVx
dWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWly
ZVN0cm9rZSkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2Nh
dGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikp
OworICAgICAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KG5v
ZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIG1fc3Ryb2tlQm91
bmRpbmdCb3gpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICgoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUuaGFzRmlsbCgpIHx8ICFoaXRS
dWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQsIGhpdFJ1bGVzLnJl
cXVpcmVGaWxsLCBmaWxsUnVsZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0Qm91
bmRpbmdCb3ggJiYgbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMobG9jYWxQb2ludCkpKSB7Cisg
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5l
ci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0VGVzdCgp
LCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBtX2ZpbGxCb3VuZGluZ0JveCkgPT0gSGl0
VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJGb3JU
eXBlKFNWR01hcmtlclR5cGUgdHlwZSwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlclN0
YXJ0LCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkLCBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogbWFya2VyRW5kKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgU3Rh
cnRNYXJrZXI6CisgICAgICAgIHJldHVybiBtYXJrZXJTdGFydDsKKyAgICBjYXNlIE1pZE1hcmtl
cjoKKyAgICAgICAgcmV0dXJuIG1hcmtlck1pZDsKKyAgICBjYXNlIEVuZE1hcmtlcjoKKyAgICAg
ICAgcmV0dXJuIG1hcmtlckVuZDsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpjb21wdXRlTWFy
a2VyQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmIChtX21hcmtlclBvc2l0aW9ucy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIGF1dG8qIHJlc291cmNl
cyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJlcigqdGhpcyk7
CisgICAgQVNTRVJUKHJlc291cmNlcyk7CisKKyAgICBhdXRvKiBtYXJrZXJTdGFydCA9IHJlc291
cmNlcy0+bWFya2VyU3RhcnQoKTsKKyAgICBhdXRvKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1h
cmtlck1pZCgpOworICAgIGF1dG8qIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7
CisgICAgaWYgKCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCisgICAg
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOworICAg
IHVuc2lnbmVkIHNpemUgPSBtX21hcmtlclBvc2l0aW9ucy5zaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIG1hcmtlciA9IG1hcmtlckZvclR5cGUobV9tYXJrZXJQb3NpdGlvbnNbaV0udHlw
ZSwgbWFya2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2VyRW5kKSkKKyAgICAgICAgICAgIGJvdW5k
YXJpZXMudW5pdGUobWFya2VyLT5tYXJrZXJCb3VuZGFyaWVzKG1hcmtlci0+bWFya2VyVHJhbnNm
b3JtYXRpb24obV9tYXJrZXJQb3NpdGlvbnNbaV0ub3JpZ2luLCBtX21hcmtlclBvc2l0aW9uc1tp
XS5hbmdsZSwgc3Ryb2tlV2lkdGgoKSkpKTsKKyAgICB9CisgICAgcmV0dXJuIGJvdW5kYXJpZXM7
Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlT2JqZWN0Qm91bmRpbmdC
b3goKSBjb25zdAoreworICAgIHJldHVybiBwYXRoKCkuYm91bmRpbmdSZWN0KCk7Cit9CisKK0Zs
b2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlU3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dAoreworICAgIEFTU0VSVChtX3BhdGgpOworICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0Jv
eCA9IG1fZmlsbEJvdW5kaW5nQm94OworCisgICAgaWYgKHN0eWxlKCkuc3ZnU3R5bGUoKS5oYXNT
dHJva2UoKSkgeworICAgICAgICBpZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgpKSB7CisgICAgICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxpbmdTdHJv
a2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPEFmZmluZVRyYW5z
Zm9ybT4gaW52ZXJzZSA9IG5vblNjYWxpbmdUcmFuc2Zvcm0uaW52ZXJzZSgpKSB7CisgICAgICAg
ICAgICAgICAgUGF0aCogdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQYXRoKG1fcGF0aC5nZXQo
KSwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHN0cm9r
ZUJvdW5kaW5nUmVjdCA9IHVzZVBhdGgtPnN0cm9rZUJvdW5kaW5nUmVjdChGdW5jdGlvbjx2b2lk
KEdyYXBoaWNzQ29udGV4dCYpPiB7IFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7
CisgICAgICAgICAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVU
b0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwgKnRoaXMpOworICAgICAgICAgICAgICAgIH0gfSk7
CisgICAgICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdSZWN0ID0gaW52ZXJzZS52YWx1ZSgpLm1h
cFJlY3Qoc3Ryb2tlQm91bmRpbmdSZWN0KTsKKyAgICAgICAgICAgICAgICBzdHJva2VCb3VuZGlu
Z0JveC51bml0ZShzdHJva2VCb3VuZGluZ1JlY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUocGF0aCgpLnN0cm9r
ZUJvdW5kaW5nUmVjdChGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiB7IFt0aGlzXSAo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSgpLCAqdGhpcyk7
CisgICAgICAgICAgICB9IH0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdHJv
a2VCb3VuZGluZ0JveDsKK30KKworZmxvYXQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVdpZHRoKCkg
Y29uc3QKK3sKKyAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoJmdyYXBoaWNzRWxl
bWVudCgpKTsKKyAgICByZXR1cm4gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdHlsZSgp
LnN0cm9rZVdpZHRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpoYXNTbW9vdGhTdHJv
a2UoKSBjb25zdAoreworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxl
KCkuc3ZnU3R5bGUoKTsKKyAgICByZXR1cm4gc3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5KCkuaXNF
bXB0eSgpCisgICAgICAgICYmIHN0eWxlKCkuc3Ryb2tlTWl0ZXJMaW1pdCgpID09IHN0eWxlKCku
aW5pdGlhbFN0cm9rZU1pdGVyTGltaXQoKQorICAgICAgICAmJiBzdHlsZSgpLmpvaW5TdHlsZSgp
ID09IHN0eWxlKCkuaW5pdGlhbEpvaW5TdHlsZSgpCisgICAgICAgICYmIHN0eWxlKCkuY2FwU3R5
bGUoKSA9PSBzdHlsZSgpLmluaXRpYWxDYXBTdHlsZSgpOworfQorCit2b2lkIFJlbmRlclNWR1No
YXBlOjpkcmF3TWFya2VycyhQYWludEluZm8mKQoreworICAgIEFTU0VSVCghbV9tYXJrZXJQb3Np
dGlvbnMuaXNFbXB0eSgpKTsKKworICAgIGF1dG8qIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0Nh
Y2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJlcigqdGhpcyk7CisgICAgaWYgKCFyZXNvdXJj
ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2Vz
LT5tYXJrZXJTdGFydCgpOworICAgIGF1dG8qIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2Vy
TWlkKCk7CisgICAgYXV0byogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAg
ICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOwor
ICAgIHVuc2lnbmVkIHNpemUgPSBtX21hcmtlclBvc2l0aW9ucy5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAoYXV0byogbWFya2Vy
ID0gbWFya2VyRm9yVHlwZShtX21hcmtlclBvc2l0aW9uc1tpXS50eXBlLCBtYXJrZXJTdGFydCwg
bWFya2VyTWlkLCBtYXJrZXJFbmQpKSB7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0obWFya2Vy
KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzdHJva2VXaWR0aCk7CisKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyTGF5ZXIgY2hhbmdlcworICAgICAgICAg
ICAgLy8gQVNTRVJUKG1hcmtlci0+aGFzTGF5ZXIoKSk7CisgICAgICAgICAgICAvLyBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRJbmZvLmNvbnRleHQoKSk7CisgICAg
ICAgICAgICAvLyBhdXRvIGNvbnRlbnRUcmFuc2Zvcm0gPSBtYXJrZXItPm1hcmtlclRyYW5zZm9y
bWF0aW9uKG1fbWFya2VyUG9zaXRpb25zW2ldLm9yaWdpbiwgbV9tYXJrZXJQb3NpdGlvbnNbaV0u
YW5nbGUsIHN0cm9rZVdpZHRoKTsKKyAgICAgICAgICAgIC8vIG1hcmtlci0+bGF5ZXIoKS0+cGFp
bnRTVkdSZXNvdXJjZUxheWVyKHBhaW50SW5mby5jb250ZXh0KCksIExheW91dFJlY3Q6OmluZmlu
aXRlUmVjdCgpLCBjb250ZW50VHJhbnNmb3JtKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3Rk
Ojp1bmlxdWVfcHRyPFBhdGg+IFJlbmRlclNWR1NoYXBlOjpjcmVhdGVQYXRoKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbWFrZVVuaXF1ZTxQYXRoPihwYXRoRnJvbUdyYXBoaWNzRWxlbWVudCgmZ3Jh
cGhpY3NFbGVtZW50KCkpKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6cHJvY2Vzc01hcmtl
clBvc2l0aW9ucygpCit7CisgICAgbV9tYXJrZXJQb3NpdGlvbnMuY2xlYXIoKTsKKworICAgIGlm
ICghc2hvdWxkR2VuZXJhdGVNYXJrZXJQb3NpdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKG1fcGF0aCk7CisKKyAgICBTVkdNYXJrZXJEYXRhIG1hcmtlckRhdGEobV9tYXJr
ZXJQb3NpdGlvbnMsIFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJl
cigqdGhpcyktPm1hcmtlclJldmVyc2VTdGFydCgpKTsKKyAgICBtX3BhdGgtPmFwcGx5KFsmbWFy
a2VyRGF0YV0oY29uc3QgUGF0aEVsZW1lbnQmIHBhdGhFbGVtZW50KSB7CisgICAgICAgIFNWR01h
cmtlckRhdGE6OnVwZGF0ZUZyb21QYXRoRWxlbWVudChtYXJrZXJEYXRhLCBwYXRoRWxlbWVudCk7
CisgICAgfSk7CisgICAgbWFya2VyRGF0YS5wYXRoSXNEb25lKCk7Cit9CisKK3ZvaWQgUmVuZGVy
U1ZHU2hhcGU6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUmIG5ld1N0eWxlKQoreworICAgIGF1dG8qIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6
ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOworICAgIGlmIChvbGRTdHlsZSkgeworICAg
ICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2U6OkxheW91dCkKKyAgICAgICAgICAgIHNl
dE5lZWRzU2hhcGVVcGRhdGUoKTsKKyAgICB9CisKKyAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6
c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWZhNGQ4YzM2MjU3NWMwNjlmYThiMjkw
ZjdhZWE3ZjZlODMzMDQ3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5p
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQK
KyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSwgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R01vZGVsT2JqZWN0LmgiCisvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94
Q29tcHV0YXRpb24KKy8vICNpbmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmgiCisj
aW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHTWFya2VyRGF0YS5o
IgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBSZW5kZXJTVkdQYXRo
OworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2U7CitjbGFzcyBTVkdHcmFwaGljc0VsZW1lbnQ7CisK
K2NsYXNzIFJlbmRlclNWR1NoYXBlIDogcHVibGljIFJlbmRlclNWR01vZGVsT2JqZWN0IHsKKyAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR1NoYXBlKTsKK3B1YmxpYzoKKyAgICBl
bnVtIFBvaW50Q29vcmRpbmF0ZVNwYWNlIHsKKyAgICAgICAgR2xvYmFsQ29vcmRpbmF0ZVNwYWNl
LAorICAgICAgICBMb2NhbENvb3JkaW5hdGVTcGFjZQorICAgIH07CisgICAgUmVuZGVyU1ZHU2hh
cGUoU1ZHR3JhcGhpY3NFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CisgICAgdmlydHVhbCB+UmVu
ZGVyU1ZHU2hhcGUoKTsKKworICAgIGlubGluZSBTVkdHcmFwaGljc0VsZW1lbnQmIGdyYXBoaWNz
RWxlbWVudCgpIGNvbnN0OworCisgICAgdm9pZCBzZXROZWVkc1NoYXBlVXBkYXRlKCkgeyBtX25l
ZWRzU2hhcGVVcGRhdGUgPSB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFNoYXBlKEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VTaGFwZShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJpbmdEaXNhYmxl
ZCgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNQb2ludEluRmlsbChjb25zdCBGbG9hdFBvaW50
Jik7CisgICAgYm9vbCBpc1BvaW50SW5TdHJva2UoY29uc3QgRmxvYXRQb2ludCYpOworCisgICAg
ZmxvYXQgZ2V0VG90YWxMZW5ndGgoKSBjb25zdDsKKyAgICBGbG9hdFBvaW50IGdldFBvaW50QXRM
ZW5ndGgoZmxvYXQgZGlzdGFuY2UpIGNvbnN0OworCisgICAgYm9vbCBoYXNQYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRoLmdldCgpOyB9CisgICAgUGF0aCYgcGF0aCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV9wYXRoKTsKKyAgICAgICAgcmV0dXJuICptX3BhdGg7CisgICAgfQor
ICAgIHZvaWQgY2xlYXJQYXRoKCkgeyBtX3BhdGggPSBudWxscHRyOyB9CisKKyAgICBGbG9hdFJl
Y3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbGxCb3VuZGlu
Z0JveDsgfQorICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKworICAgIEZsb2F0UmVjdCByZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICAvLyBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKyAgICAgICAgLy8g
cmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBhaW50Qm91bmRpbmdC
b3goKnRoaXMpOyB9CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICB9CisKKyAgICBG
bG9hdFJlY3QgY29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKKworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiwgUG9pbnRDb29yZGluYXRlU3BhY2UgPSBHbG9iYWxDb29yZGluYXRlU3BhY2Up
OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgV2luZFJ1bGUpIGNvbnN0OworICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNTbW9vdGhTdHJva2UoKSBjb25zdDsKKworICAgIGJvb2wgaGFz
Tm9uU2NhbGluZ1N0cm9rZSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuc3ZnU3R5bGUoKS52ZWN0
b3JFZmZlY3QoKSA9PSBWZWN0b3JFZmZlY3Q6Ok5vblNjYWxpbmdTdHJva2U7IH0KKyAgICBBZmZp
bmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpIGNvbnN0OworICAgIFBhdGgq
IG5vblNjYWxpbmdTdHJva2VQYXRoKGNvbnN0IFBhdGgqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBGbG9hdFJl
Y3QgbV9zdHJva2VCb3VuZGluZ0JveDsKKworcHJpdmF0ZToKKyAgICAvLyBIaXQtZGV0ZWN0aW9u
IHNlcGFyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKKyAgICBib29sIGZpbGxDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBjb25zdCBX
aW5kUnVsZSBmaWxsUnVsZSA9IFdpbmRSdWxlOjpOb25aZXJvKTsKKyAgICBib29sIHN0cm9rZUNv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSk7CisK
KyAgICBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAg
Ym9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAg
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVy
U1ZHU2hhcGUiOyB9CisKKyAgICB2b2lkIGxheW91dCgpIGZpbmFsOworICAgIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBmaW5hbDsKKworICAgIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IGNh
bGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0
ZVN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisKKyAgICBib29sIHNldHVwTm9uU2NhbGluZ1N0
cm9rZUNvbnRleHQoQWZmaW5lVHJhbnNmb3JtJiwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYp
OworCisgICAgYm9vbCBzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucygpIGNvbnN0OworICAg
IAorICAgIHN0ZDo6dW5pcXVlX3B0cjxQYXRoPiBjcmVhdGVQYXRoKCkgY29uc3Q7CisgICAgdm9p
ZCBwcm9jZXNzTWFya2VyUG9zaXRpb25zKCk7CisKKyAgICB2b2lkIGZpbGxTaGFwZShjb25zdCBS
ZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgc3Ryb2tlU2hhcGUoY29u
c3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIHN0cm9rZVNoYXBl
KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZmlsbFN0cm9rZU1hcmtlcnMoUGFpbnRJbmZv
Jik7CisgICAgdm9pZCBkcmF3TWFya2VycyhQYWludEluZm8mKTsKKworICAgIHZvaWQgc3R5bGVX
aWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBib29sIG1fbmVlZHNTaGFwZVVwZGF0ZSB7IHRydWUg
fTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQYXRoPiBtX3BhdGg7CisgICAgVmVjdG9yPE1hcmtl
clBvc2l0aW9uPiBtX21hcmtlclBvc2l0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlclNWR1NoYXBl
LCBpc1NWR1NoYXBlKCkpCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hh
cGVJbmxpbmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
SW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0NTA5ZjRmNGVhODVhYzc1NTQzMjk5M2JiODg4ZjFiYzBk
M2M1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlSW5saW5lcy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorI2luY2x1ZGUg
IlJlbmRlclNWR1NoYXBlLmgiCisjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIFNWR0dyYXBoaWNzRWxlbWVudCYgUmVuZGVyU1ZH
U2hhcGU6OmdyYXBoaWNzRWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvd25jYXN0PFNW
R0dyYXBoaWNzRWxlbWVudD4oUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmVsZW1lbnQoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExBWUVSX0JBU0VEX1NWR19FTkdJ
TkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwCmluZGV4IDc0Y2VjYzQxZjg1OTM2YTBhM2EzNzhkMTNhM2RkMDRhODM2ZDFlN2QuLjEwNDIw
YzAzMWJmYTliODQ4MTZkZDViOWNlNTAzMjA3ZWRiNTkzMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMjksNiArMjksNyBA
QAogCiAjaW5jbHVkZSAiRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJMZWdh
Y3lSZW5kZXJTVkdSb290LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCIKICNp
bmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYzk5NWFlMzFiYzZm
MTM0NWE0YjFjNGQwOTRiNzE3ODgyMWMyNzIwYy4uZDVlM2MwOTNmZDkwMjJlOTU3YzI5MTczNjAw
MGZjYzkxNzRhZDc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5o
IgogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlw
ZUhlbHBlcnMuaCIKQEAgLTE1MSwyNSArMTUyLDcxIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTVkdTcHJlYWRNZXRob2RUeXBlJiB0eXBlKQog
ICAgIHJldHVybiB0czsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVTVkdQYWludGluZ1Jlc291cmNl
KFRleHRTdHJlYW0mIHRzLCBSZW5kZXJTVkdSZXNvdXJjZSogcmVzb3VyY2UpCitzdGF0aWMgdm9p
ZCB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNW
R1Jlc291cmNlJiByZXNvdXJjZSkKIHsKLSAgICBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgp
ID09IFNvbGlkQ29sb3JSZXNvdXJjZVR5cGUpIHsKLSAgICAgICAgdHMgPDwgIlt0eXBlPVNPTElE
XSBbY29sb3I9IiA8PCBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqPihy
ZXNvdXJjZSktPmNvbG9yKCkgPDwgIl0iOworICAgIGF1dG8gcmVzb3VyY2VUeXBlID0gcmVzb3Vy
Y2UucmVzb3VyY2VUeXBlKCk7CisgICAgaWYgKHJlc291cmNlVHlwZSA9PSBTb2xpZENvbG9yUmVz
b3VyY2VUeXBlKSB7CisgICAgICAgIHRzIDw8ICJbdHlwZT1TT0xJRF0gW2NvbG9yPSIgPDwgZG93
bmNhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yPihyZXNvdXJjZSkuY29sb3IoKSA8PCAi
XSI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBBbGwgb3RoZXIgcmVzb3VyY2Vz
IGRlcml2ZSBmcm9tIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyCi0gICAgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIqIGNvbnRhaW5lciA9IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyKj4ocmVzb3VyY2UpOwotICAgIFNWR0VsZW1lbnQmIGVsZW1lbnQgPSBjb250YWlu
ZXItPmVsZW1lbnQoKTsKLQotICAgIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gUGF0
dGVyblJlc291cmNlVHlwZSkKKyAgICBpZiAocmVzb3VyY2VUeXBlID09IFBhdHRlcm5SZXNvdXJj
ZVR5cGUpCiAgICAgICAgIHRzIDw8ICJbdHlwZT1QQVRURVJOXSI7Ci0gICAgZWxzZSBpZiAocmVz
b3VyY2UtPnJlc291cmNlVHlwZSgpID09IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlKQorICAg
IGVsc2UgaWYgKHJlc291cmNlVHlwZSA9PSBMaW5lYXJHcmFkaWVudFJlc291cmNlVHlwZSkKICAg
ICAgICAgdHMgPDwgIlt0eXBlPUxJTkVBUi1HUkFESUVOVF0iOwotICAgIGVsc2UgaWYgKHJlc291
cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBSYWRpYWxHcmFkaWVudFJlc291cmNlVHlwZSkKKyAgICBl
bHNlIGlmIChyZXNvdXJjZVR5cGUgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJjZVR5cGUpCiAgICAg
ICAgIHRzIDw8ICJbdHlwZT1SQURJQUwtR1JBRElFTlRdIjsKIAotICAgIHRzIDw8ICIgW2lkPVwi
IiA8PCBlbGVtZW50LmdldElkQXR0cmlidXRlKCkgPDwgIlwiXSI7CisgICAgLy8gQWxsIG90aGVy
IHJlc291cmNlcyBkZXJpdmUgZnJvbSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcgorICAgIGNv
bnN0IGF1dG8mIGNvbnRhaW5lciA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyJj4ocmVzb3VyY2UpOworICAgIHRzIDw8ICIgW2lkPVwiIiA8PCBjb250YWluZXIu
ZWxlbWVudCgpLmdldElkQXR0cmlidXRlKCkgPDwgIlwiXSI7Cit9CisKK3N0YXRpYyB2b2lkIHdy
aXRlU1ZHRmlsbFBhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTVkdSZXNvdXJjZSYgZmlsbFBhaW50aW5nUmVz
b3VyY2UpCit7CisgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CisgICAgdHMgPDwgIiBb
ZmlsbD17IiA8PCBzOworICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgZmlsbFBhaW50
aW5nUmVzb3VyY2UpOworCisgICAgY29uc3QgYXV0byYgc3ZnU3R5bGUgPSByZW5kZXJlci5zdHls
ZSgpLnN2Z1N0eWxlKCk7CisgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3Zn
U3R5bGUuZmlsbE9wYWNpdHkoKSwgMS4wZik7CisgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJm
aWxsIHJ1bGUiLCBzdmdTdHlsZS5maWxsUnVsZSgpLCBXaW5kUnVsZTo6Tm9uWmVybyk7CisgICAg
dHMgPDwgIn1dIjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291
cmNlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU1ZHUmVzb3VyY2UmIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UsIGNvbnN0IFNWR0dyYXBo
aWNzRWxlbWVudCYgc2hhcGUpCit7CisgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7Cisg
ICAgdHMgPDwgIiBbc3Ryb2tlPXsiIDw8IHM7CisgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNl
KHRzLCBzdHJva2VQYWludGluZ1Jlc291cmNlKTsKKworICAgIGNvbnN0IGF1dG8mIHN0eWxlID0g
cmVuZGVyZXIuc3R5bGUoKTsKKyAgICBjb25zdCBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0
eWxlKCk7CisKKyAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoJnNoYXBlKTsKKyAg
ICBkb3VibGUgZGFzaE9mZnNldCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5
bGUuc3Ryb2tlRGFzaE9mZnNldCgpKTsKKyAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBsZW5ndGhD
b250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN0cm9rZVdpZHRoKCkpOworICAgIGNvbnN0IGF1
dG8mIGRhc2hlcyA9IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpOworCisgICAgRGFzaEFycmF5
IGRhc2hBcnJheTsKKyAgICBmb3IgKGF1dG8mIGxlbmd0aCA6IGRhc2hlcykKKyAgICAgICAgZGFz
aEFycmF5LmFwcGVuZChsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCkpOworCisgICAgd3JpdGVJ
Zk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUuc3Ryb2tlT3BhY2l0eSgpLCAxLjBm
KTsKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgInN0cm9rZSB3aWR0aCIsIHN0cm9rZVdpZHRo
LCAxLjApOworICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAibWl0ZXIgbGltaXQiLCBzdHlsZS5z
dHJva2VNaXRlckxpbWl0KCksIDQuMGYpOworICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAibGlu
ZSBjYXAiLCBzdHlsZS5jYXBTdHlsZSgpLCBMaW5lQ2FwOjpCdXR0KTsKKyAgICB3cml0ZUlmTm90
RGVmYXVsdCh0cywgImxpbmUgam9pbiIsIHN0eWxlLmpvaW5TdHlsZSgpLCBMaW5lSm9pbjo6TWl0
ZXIpOworICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiZGFzaCBvZmZzZXQiLCBkYXNoT2Zmc2V0
LCAwLjApOworICAgIGlmICghZGFzaEFycmF5LmlzRW1wdHkoKSkKKyAgICAgICAgd3JpdGVOYW1l
VmFsdWVQYWlyKHRzLCAiZGFzaCBhcnJheSIsIGRhc2hBcnJheSk7CisKKyAgICBpZiAoaXM8U1ZH
R2VvbWV0cnlFbGVtZW50PihzaGFwZSkpIHsKKyAgICAgICAgZG91YmxlIHBhdGhMZW5ndGggPSBk
b3duY2FzdDxTVkdHZW9tZXRyeUVsZW1lbnQ+KHNoYXBlKS5wYXRoTGVuZ3RoKCk7CisgICAgICAg
IHdyaXRlSWZOb3REZWZhdWx0KHRzLCAicGF0aCBsZW5ndGgiLCBwYXRoTGVuZ3RoLCAwLjApOwor
ICAgIH0KKworICAgIHRzIDw8ICJ9XSI7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQpAQCAtMTgxLDUyICsy
MjgsMzQgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInRy
YW5zZm9ybSIsIHJlbmRlcmVyLmxvY2FsVHJhbnNmb3JtKCkpOwogICAgIHdyaXRlSWZOb3REZWZh
dWx0KHRzLCAiaW1hZ2UgcmVuZGVyaW5nIiwgc3R5bGUuaW1hZ2VSZW5kZXJpbmcoKSwgUmVuZGVy
U3R5bGU6OmluaXRpYWxJbWFnZVJlbmRlcmluZygpKTsKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0
cywgIm9wYWNpdHkiLCBzdHlsZS5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0
eSgpKTsKKwogICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpKSB7CiAg
ICAgICAgIGNvbnN0IGF1dG8mIHNoYXBlID0gZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+
KHJlbmRlcmVyKTsKIAogICAgICAgICBDb2xvciBmYWxsYmFja0NvbG9yOwotICAgICAgICBpZiAo
UmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PExlZ2FjeVJlbmRlclNWR1No
YXBlJj4oc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICAg
ICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7Ci0gICAgICAgICAgICB0cyA8PCAiIFtzdHJv
a2U9eyIgPDwgczsKLSAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgc3Ry
b2tlUGFpbnRpbmdSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVu
Z3RoQ29udGV4dCgmc2hhcGUuZ3JhcGhpY3NFbGVtZW50KCkpOwotICAgICAgICAgICAgZG91Ymxl
IGRhc2hPZmZzZXQgPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9r
ZURhc2hPZmZzZXQoKSk7Ci0gICAgICAgICAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBsZW5ndGhD
b250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN0cm9rZVdpZHRoKCkpOwotICAgICAgICAgICAg
Y29uc3QgYXV0byYgZGFzaGVzID0gc3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5KCk7Ci0KLSAgICAg
ICAgICAgIERhc2hBcnJheSBkYXNoQXJyYXk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGxlbmd0
aCA6IGRhc2hlcykKLSAgICAgICAgICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKGxlbmd0aC52YWx1
ZShsZW5ndGhDb250ZXh0KSk7Ci0KLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAi
b3BhY2l0eSIsIHN2Z1N0eWxlLnN0cm9rZU9wYWNpdHkoKSwgMS4wZik7Ci0gICAgICAgICAgICB3
cml0ZUlmTm90RGVmYXVsdCh0cywgInN0cm9rZSB3aWR0aCIsIHN0cm9rZVdpZHRoLCAxLjApOwot
ICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJtaXRlciBsaW1pdCIsIHN0eWxlLnN0
cm9rZU1pdGVyTGltaXQoKSwgNC4wZik7Ci0gICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0
cywgImxpbmUgY2FwIiwgc3R5bGUuY2FwU3R5bGUoKSwgTGluZUNhcDo6QnV0dCk7Ci0gICAgICAg
ICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImxpbmUgam9pbiIsIHN0eWxlLmpvaW5TdHlsZSgp
LCBMaW5lSm9pbjo6TWl0ZXIpOwotICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJk
YXNoIG9mZnNldCIsIGRhc2hPZmZzZXQsIDAuMCk7Ci0gICAgICAgICAgICBpZiAoIWRhc2hBcnJh
eS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiZGFz
aCBhcnJheSIsIGRhc2hBcnJheSk7Ci0KLSAgICAgICAgICAgIGlmIChpczxTVkdHZW9tZXRyeUVs
ZW1lbnQ+KHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKSkgewotICAgICAgICAgICAgICAgIGRvdWJs
ZSBwYXRoTGVuZ3RoID0gZG93bmNhc3Q8U1ZHR2VvbWV0cnlFbGVtZW50PihzaGFwZS5ncmFwaGlj
c0VsZW1lbnQoKSkucGF0aExlbmd0aCgpOwotICAgICAgICAgICAgICAgIHdyaXRlSWZOb3REZWZh
dWx0KHRzLCAicGF0aCBsZW5ndGgiLCBwYXRoTGVuZ3RoLCAwLjApOwotICAgICAgICAgICAgfQor
ICAgICAgICBpZiAoYXV0byogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291
cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hh
cGUmPihzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQorICAgICAgICAgICAg
d3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291cmNlKHRzLCByZW5kZXJlciwgKnN0cm9rZVBhaW50
aW5nUmVzb3VyY2UsIHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKTsKIAotICAgICAgICAgICAgdHMg
PDwgIn1dIjsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogZmlsbFBhaW50aW5nUmVzb3Vy
Y2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxM
ZWdhY3lSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xv
cikpCisgICAgICAgICAgICB3cml0ZVNWR0ZpbGxQYWludGluZ1Jlc291cmNlKHRzLCByZW5kZXJl
ciwgKmZpbGxQYWludGluZ1Jlc291cmNlKTsKIAotICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3Vy
Y2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGlu
Z1Jlc291cmNlKGNvbnN0X2Nhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGUmPihzaGFwZSksIHNoYXBl
LnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7Ci0gICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJh
dG9yIHMoIiAiKTsKLSAgICAgICAgICAgIHRzIDw8ICIgW2ZpbGw9eyIgPDwgczsKLSAgICAgICAg
ICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgZmlsbFBhaW50aW5nUmVzb3VyY2UpOwor
ICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImNsaXAgcnVsZSIsIHN2Z1N0eWxlLmNsaXBS
dWxlKCksIFdpbmRSdWxlOjpOb25aZXJvKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKKyAgICBlbHNlIGlmIChpczxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVu
ZGVyZXIpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHNoYXBlID0gZG93bmNhc3Q8UmVuZGVyU1ZH
U2hhcGU+KHJlbmRlcmVyKTsKKworICAgICAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgICAg
ICBpZiAoYXV0byogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpz
dHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hhcGUmPihzaGFwZSks
IHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQorICAgICAgICAgICAgd3JpdGVTVkdTdHJv
a2VQYWludGluZ1Jlc291cmNlKHRzLCByZW5kZXJlciwgKnN0cm9rZVBhaW50aW5nUmVzb3VyY2Us
IHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKTsKKworICAgICAgICBpZiAoYXV0byogZmlsbFBhaW50
aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29u
c3RfY2FzdDxSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tD
b2xvcikpCisgICAgICAgICAgICB3cml0ZVNWR0ZpbGxQYWludGluZ1Jlc291cmNlKHRzLCByZW5k
ZXJlciwgKmZpbGxQYWludGluZ1Jlc291cmNlKTsKIAotICAgICAgICAgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUuZmlsbE9wYWNpdHkoKSwgMS4wZik7Ci0gICAg
ICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImZpbGwgcnVsZSIsIHN2Z1N0eWxlLmZpbGxS
dWxlKCksIFdpbmRSdWxlOjpOb25aZXJvKTsKLSAgICAgICAgICAgIHRzIDw8ICJ9XSI7Ci0gICAg
ICAgIH0KICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJjbGlwIHJ1bGUiLCBzdmdTdHls
ZS5jbGlwUnVsZSgpLCBXaW5kUnVsZTo6Tm9uWmVybyk7CiAgICAgfQorI2VuZGlmCiAKICAgICB3
cml0ZUlmTm90RW1wdHkodHMsICJzdGFydCBtYXJrZXIiLCBzdmdTdHlsZS5tYXJrZXJTdGFydFJl
c291cmNlKCkpOwogICAgIHdyaXRlSWZOb3RFbXB0eSh0cywgIm1pZGRsZSBtYXJrZXIiLCBzdmdT
dHlsZS5tYXJrZXJNaWRSZXNvdXJjZSgpKTsKQEAgLTI1MCwxMSArMjc5LDggQEAgc3RhdGljIFRl
eHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmUKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSYgc2hh
cGUpCitzdGF0aWMgdm9pZCB3cml0ZVNWR0dyYXBoaWNzRWxlbWVudChUZXh0U3RyZWFtJiB0cywg
U1ZHR3JhcGhpY3NFbGVtZW50JiBzdmdFbGVtZW50KQogewotICAgIHdyaXRlUG9zaXRpb25BbmRT
dHlsZSh0cywgc2hhcGUpOwotCi0gICAgU1ZHR3JhcGhpY3NFbGVtZW50JiBzdmdFbGVtZW50ID0g
c2hhcGUuZ3JhcGhpY3NFbGVtZW50KCk7CiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250
ZXh0KCZzdmdFbGVtZW50KTsKIAogICAgIGlmIChpczxTVkdSZWN0RWxlbWVudD4oc3ZnRWxlbWVu
dCkpIHsKQEAgLTI5MSw5ICszMTcsMjQgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlJiBzaGFwZSkKICAgICAg
ICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUodHMsICJkYXRhIiwgcGF0aFN0cmluZyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hh
cGUmIHNoYXBlKQoreworICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgc2hhcGUpOworICAg
IHdyaXRlU1ZHR3JhcGhpY3NFbGVtZW50KHRzLCBzaGFwZS5ncmFwaGljc0VsZW1lbnQoKSk7CiAg
ICAgcmV0dXJuIHRzOwogfQogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
U1ZHU2hhcGUmIHNoYXBlKQoreworICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywgc2hhcGUp
OworICAgIHdyaXRlU1ZHR3JhcGhpY3NFbGVtZW50KHRzLCBzaGFwZS5ncmFwaGljc0VsZW1lbnQo
KSk7CisgICAgcmV0dXJuIHRzOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHdyaXRlUmVuZGVy
U1ZHVGV4dEJveChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHVGV4dCYgdGV4dCkKIHsK
ICAgICBhdXRvKiBib3ggPSBkb3duY2FzdDxTVkdSb290SW5saW5lQm94Pih0ZXh0LmZpcnN0Um9v
dEJveCgpKTsKQEAgLTU1MSw2ICs1OTIsMTUgQEAgdm9pZCB3cml0ZVNWR0ltYWdlKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIE9wdGlvblNldDxSZW5kZXIKICAg
ICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGJlaGF2aW9yKTsKIH0KIAorI2lmIEVOQUJMRShM
QVlFUl9CQVNFRF9TVkdfRU5HSU5FKQordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyU1ZHU2hhcGUmIHNoYXBlLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4gYmVoYXZp
b3IpCit7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGJlaGF2aW9yKTsKKyAg
ICB0cyA8PCBzaGFwZSA8PCAiXG4iOworICAgIHdyaXRlUmVzb3VyY2VzKHRzLCBzaGFwZSwgYmVo
YXZpb3IpOworfQorI2VuZGlmCisKIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IExl
Z2FjeVJlbmRlclNWR1NoYXBlJiBzaGFwZSwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+IGJl
aGF2aW9yKQogewogICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBlLCBiZWhhdmlvcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5oCmluZGV4IDdhYzNmY2VjOGQzN2U3NTQ1MTUwOGFkNGM1ZjJkYzJiZTE4ZTI3ZmUuLmVjODg0
NTUzNWYwODVkNjA2NDAxYzNjNmRiYmExMTg3MDljZTQ5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCkBAIC00NSwxNSArNDUs
MTcgQEAgY2xhc3MgUmVuZGVyU1ZHSW1hZ2U7CiBjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0Owog
Y2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI7CiBjbGFzcyBSZW5kZXJTVkdSb290Owor
Y2xhc3MgUmVuZGVyU1ZHU2hhcGU7CiBjbGFzcyBSZW5kZXJTVkdUZXh0OwogY2xhc3MgU1ZHVW5p
dFR5cGVzOwogCiAvLyBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbWFpbiBSZW5kZXJUcmVlQXNUZXh0
IGNvZGUKIHZvaWQgd3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTGVnYWN5UmVuZGVyU1ZH
Um9vdCYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7Cit2b2lkIHdyaXRlKFdURjo6VGV4
dFN0cmVhbSYsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlJiwgT3B0aW9uU2V0PFJlbmRlckFz
VGV4dEZsYWc+KTsKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKIHZvaWQgd3Jp
dGUoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUm9vdCYsIE9wdGlvblNldDxSZW5k
ZXJBc1RleHRGbGFnPik7Cit2b2lkIHdyaXRlKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
clNWR1NoYXBlJiwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+KTsKICNlbmRpZgotdm9pZCB3
cml0ZShXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSYsIE9wdGlv
blNldDxSZW5kZXJBc1RleHRGbGFnPik7CiB2b2lkIHdyaXRlU1ZHR3JhZGllbnRTdG9wKFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYsIE9wdGlvblNldDxSZW5k
ZXJBc1RleHRGbGFnPik7CiB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoV1RGOjpUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImLCBPcHRpb25TZXQ8UmVu
ZGVyQXNUZXh0RmxhZz4pOwogdm9pZCB3cml0ZVNWR0NvbnRhaW5lcihXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBSZW5kZXJTVkdDb250YWluZXImLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKaW5k
ZXggZjUyOTk5NjY2YTgxYmZkNTQwYWRmZTNjNDdmMDk5ZThiM2RmYTljMS4uZjk1MjcyYTRkNWQ4
YTg5YjU2MGM2ZGVhODBmNjg5YzAxZjFhNjY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiUGF0aFRyYXZlcnNhbFN0YXRlLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHR2VvbWV0cnlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdHZW9tZXRyeUVsZW1lbnQuY3BwCmluZGV4IDljNjhkNGU3NDQ2YzE4NjBhNTA2MThhMGNlMzBh
NmMxOTI1NjJmN2QuLmU2ZjJjMTc5OTY2YWJkYTIyMTRiNzZiMDk2YTNjNWFiNTQyN2YxYTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHZW9tZXRyeUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHZW9tZXRyeUVsZW1lbnQuY3BwCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiRE9NUG9pbnQuaCIKICNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFw
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
U2hhcGUuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJT
VkdQYXRoVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIKQEAgLTQ4LDUyICs0OSw4
OCBAQCBmbG9hdCBTVkdHZW9tZXRyeUVsZW1lbnQ6OmdldFRvdGFsTGVuZ3RoKCkgY29uc3QKIHsK
ICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
Ci0gICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4odGhp
cy0+cmVuZGVyZXIoKSk7CisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHJlbmRl
cmVyLT5nZXRUb3RhbExlbmd0aCgpOworICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdTaGFwZT4o
cmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+
KHJlbmRlcmVyKS0+Z2V0VG90YWxMZW5ndGgoKTsKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9T
VkdfRU5HSU5FKQorICAgIGlmIChpczxSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpKQorICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKS0+Z2V0VG90YWxMZW5n
dGgoKTsKKyNlbmRpZgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7
CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZjxTVkdQb2ludD4+IFNWR0dlb21ldHJ5RWxlbWVudDo6Z2V0
UG9pbnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSkgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgYXV0byogcmVuZGVy
ZXIgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSk7Ci0g
ICAgCisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOworCiAgICAgLy8gU3Bl
YzogSWYgY3VycmVudCBlbGVtZW50IGlzIGEgbm9uLXJlbmRlcmVkIGVsZW1lbnQsIHRocm93IGFu
IEludmFsaWRTdGF0ZUVycm9yLgogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotICAgIAorCiAgICAgLy8gU3BlYzogQ2xh
bXAgZGlzdGFuY2UgdG8gWzAsIGxlbmd0aF0uCiAgICAgZGlzdGFuY2UgPSBjbGFtcFRvPGZsb2F0
PihkaXN0YW5jZSwgMCwgZ2V0VG90YWxMZW5ndGgoKSk7CiAKICAgICAvLyBTcGVjOiBSZXR1cm4g
YSBuZXdseSBjcmVhdGVkLCBkZXRhY2hlZCBTVkdQb2ludCBvYmplY3QuCi0gICAgcmV0dXJuIFNW
R1BvaW50OjpjcmVhdGUocmVuZGVyZXItPmdldFBvaW50QXRMZW5ndGgoZGlzdGFuY2UpKTsKKyAg
ICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJu
IFNWR1BvaW50OjpjcmVhdGUoZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVy
KS0+Z2V0UG9pbnRBdExlbmd0aChkaXN0YW5jZSkpOworCisjaWYgRU5BQkxFKExBWUVSX0JBU0VE
X1NWR19FTkdJTkUpCisgICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpCisgICAg
ICAgIHJldHVybiBTVkdQb2ludDo6Y3JlYXRlKGRvd25jYXN0PFJlbmRlclNWR1NoYXBlPihyZW5k
ZXJlciktPmdldFBvaW50QXRMZW5ndGgoZGlzdGFuY2UpKTsKKyNlbmRpZgorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9y
IH07CiB9CiAKIGJvb2wgU1ZHR2VvbWV0cnlFbGVtZW50Ojppc1BvaW50SW5GaWxsKERPTVBvaW50
SW5pdCYmIHBvaW50SW5pdCkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxMZWdh
Y3lSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgYXV0byogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIEZsb2F0UG9pbnQgcG9pbnQge3N0YXRpY19jYXN0PGZsb2F0Pihwb2ludElu
aXQueCksIHN0YXRpY19jYXN0PGZsb2F0Pihwb2ludEluaXQueSl9OwotICAgIHJldHVybiByZW5k
ZXJlci0+aXNQb2ludEluRmlsbChwb2ludCk7CisgICAgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1No
YXBlPihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdT
aGFwZT4ocmVuZGVyZXIpLT5pc1BvaW50SW5GaWxsKHBvaW50KTsKKworI2lmIEVOQUJMRShMQVlF
Ul9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChpczxSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIp
KQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKS0+aXNQ
b2ludEluRmlsbChwb2ludCk7CisjZW5kaWYKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBTVkdHZW9tZXRyeUVsZW1lbnQ6OmlzUG9pbnRJ
blN0cm9rZShET01Qb2ludEluaXQmJiBwb2ludEluaXQpCiB7CiAgICAgZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGF1dG8qIHJlbmRlcmVy
ID0gZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHRoaXMtPnJlbmRlcmVyKCkpOworICAg
IGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdFBvaW50IHBvaW50IHtzdGF0aWNfY2Fz
dDxmbG9hdD4ocG9pbnRJbml0LngpLCBzdGF0aWNfY2FzdDxmbG9hdD4ocG9pbnRJbml0LnkpfTsK
LSAgICByZXR1cm4gcmVuZGVyZXItPmlzUG9pbnRJblN0cm9rZShwb2ludCk7CisgICAgaWYgKGlz
PExlZ2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpLT5pc1BvaW50SW5TdHJva2UocG9pbnQp
OworCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGlzPFJlbmRl
clNWR1NoYXBlPihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdT
aGFwZT4ocmVuZGVyZXIpLT5pc1BvaW50SW5TdHJva2UocG9pbnQpOworI2VuZGlmCisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgU1ZHR2Vv
bWV0cnlFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMaW5lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3Bw
CmluZGV4IDEyZWZmNDNkNWY1YjJlMjg1MzMwZjBlMGY5ZDBjMDg5MmZmMjcwMWMuLmVmYjliOGJj
ZmQ5Y2M5NWVhYTQ5M2JmZTFhYWQ5MTljYTc5Y2IzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNWR0xpbmVFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFw
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3Ro
VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgo=
</data>
<flag name="commit-queue"
          id="474558"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448637</attachid>
            <date>2022-01-07 15:13:01 -0800</date>
            <delta_ts>2022-01-08 02:10:19 -0800</delta_ts>
            <desc>Patch, v4</desc>
            <filename>bug-234954-20220107151259.patch</filename>
            <type>text/plain</type>
            <size>76436</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NzgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2VkNTdiMDkzZDBlMjk3
NWQzYzdlNGYwYjczZTJiY2UzYWQ4NjVhMC4uMDU0NGFjN2YyN2MwNGI3OTk0NDlmMDNlMWY2NTBk
YjkwZGU5YTIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAyMi0wMS0wNyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHU2hhcGUgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk1NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGltcGxlbWVu
dGluZyBSZW5kZXJTVkdTaGFwZSwgYmFzZWQgb24gdGhlIGRvd25zdHJlYW0gdmVyc2lvbiBpbiB0
aGUKKyAgICAgICAgTEJTRSBicmFuY2guIE1hbnkgcGFydHMgYXJlIDE6MSBjb3BpZXMgZnJvbSBM
ZWdhY3lSZW5kZXJTVkdTaGFwZSwgYWx0aG91Z2gKKyAgICAgICAgdGhlIGNvcmUgbWV0aG9kcyBm
b3IgbGF5b3V0IC8gcGFpbnQgLyBoaXQtdGVzdGluZyBsb29rcyBxdWl0ZSBkaWZmZXJlbnQgaW4K
KyAgICAgICAgUmVuZGVyU1ZHU2hhcGUgLS0gdGhlIGNvZGUgaXMgbW9zdGx5IGFkYXB0ZWQgZnJv
bSBsYXllci1hd2FyZSBDU1MgcmVuZGVyZXJzCisgICAgICAgIHN1Y2ggYXMgUmVuZGVyQm94IC8g
UmVuZGVyQmxvY2sgdGFraW5nIFNWRyBzcGVjaWZpY3MgaW50byBhY2NvdW50LgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaG9va3MgaW4gUmVuZGVyU1ZHU2hhcGUgaW4gYWxsIHBsYWNlcyB0aGF0IHVz
ZWQgdG8gaGFuZGxlCisgICAgICAgIExlZ2FjeVJlbmRlclNWR1NoYXBlLCBlLmcuIGluIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuIEhvd2V2ZXIgbm8KKyAgICAgICAgcmVuZGVyZXIgaW5oZXJp
dHMgZnJvbSBSZW5kZXJTVkdTaGFwZSB5ZXQgLS0gYSBmb2xsb3ctdXAgcGF0Y2ggd2lsbAorICAg
ICAgICBpbnRyb2R1Y2UgUmVuZGVyU1ZHUmVjdC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdXBwb3J0c1BhdGggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudFBh
dGggY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpmaWxs
QW5kU3Ryb2tlUGF0aE9yU2hhcGUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpw
b3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudDo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
UGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OmZpbGxTaGFwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ry
b2tlU2hhcGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBl
RGVwZW5kZW50U3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vblNjYWxp
bmdTdHJva2VQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpz
ZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFN0cm9rZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
Ojppc1BvaW50SW5GaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc1Bv
aW50SW5TdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmdldFRvdGFs
TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpnZXRQb2lu
dEF0TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpub2Rl
QXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJGb3JUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjb21wdXRlTWFya2VyQm91bmRpbmdCb3ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU9iamVjdEJvdW5kaW5n
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVT
dHJva2VCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6c3Ryb2tlV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
Omhhc1Ntb290aFN0cm9rZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6ZHJhd01hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNyZWF0
ZVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnByb2Nlc3NN
YXJrZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0eWxl
V2lsbENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYXRoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjbGVhclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6Omhhc05vblNjYWxpbmdTdHJva2UgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmdyYXBoaWNzRWxlbWVudCBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdQ
YWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHRmlsbFBhaW50aW5n
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVTVkdHcmFwaGljc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHR2VvbWV0cnlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0dlb21ldHJ5RWxlbWVudDo6Z2V0VG90YWxMZW5ndGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHR2VvbWV0cnlFbGVtZW50OjpnZXRQb2ludEF0TGVuZ3RoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0dlb21ldHJ5RWxlbWVudDo6aXNQb2ludEluRmlsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdHZW9tZXRyeUVsZW1lbnQ6OmlzUG9pbnRJblN0cm9rZSk6Cisg
ICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKwogMjAyMi0wMS0wNyAgS2F0ZSBDaGVu
ZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBDU1A6IHN0cmljdC1k
eW5hbWljIGlzIGNhdXNpbmcgaW5jb3JyZWN0IGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9yCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDI4MDc2OWUyNDljZGQxYzhmZmNlNDc0MDJmZDRmYzY0YTM2ODFjY2UuLjU4
ZjQ3MDkwZDZmNmNjZDYyYTY0YjM1MTM1NDczNzQ4ZDI1OTVmZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0yNDk0LDYgKzI0OTQsNyBAQCByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHAKIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAK
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcAorcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAK
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVFNwYW4uY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1RleHQuY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY1Yjdj
MzkwODdhMzcyY2M0MTFlNzk4MGRkZDIzNTNiNGJlZDE5NDkuLmFjYmRkNDczNGQxMThlZmNmMzFk
YTg5OGJmMjZiMjM2OTYwMjQ1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMyNzMsNiArMzI3Myw3IEBACiAJCUExMDRGMjQ0
MTRDNzFGN0EwMDlFMkMyMyAvKiBDYWNoZWRTVkdEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwNEYyNDIxNEM3MUY3QTAwOUUyQzIzIC8q
IENhY2hlZFNWR0RvY3VtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTEwQkI1ODUxNDg0RTNBNzAwQjJFODdBIC8qIExlZ2FjeVJlbmRlclNW
R1JlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEx
MEJCNTgzMTQ4NEUzQTcwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdSZWN0LmggKi87IH07CiAJ
CUExMEJCNThCMTQ4NEUzQjMwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQkI1ODkxNDg0RTNC
MzAwQjJFODdBIC8qIExlZ2FjeVJlbmRlclNWR1NoYXBlLmggKi87IH07CisJCUExMEJCNThCMTQ4
NEUzQjMwMEMzRjc3QiAvKiBSZW5kZXJTVkdTaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQkI1ODkxNDg0RTNCMzAwQzNGNzdCIC8qIFJlbmRl
clNWR1NoYXBlLmggKi87IH07CiAJCUExMERCRjQ3MThGOTIzMTcwMDBENzBDNiAvKiBMZWdhY3lQ
cmV2aWV3TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBMTBEQkY0NjE4RjkyMzE3MDAwRDcwQzYgLyogTGVnYWN5UHJldmlld0xvYWRl
ckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUExMERDNzZCMTQ3NDdCQUIwMDVFMjQ3MSAvKiBTdHlsZUdyaWREYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBEQzc2OTE0NzQ3QkFCMDA1
RTI0NzEgLyogU3R5bGVHcmlkRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUExMEY3QzczMjczMTAwRDAwMDhGQTlBRiAvKiBNb2RhbENvbnRh
aW5lck9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMTBGN0M3MDI3MzEwMDczMDA4RkE5QUYgLyogTW9kYWxDb250YWluZXJPYnNlcnZlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NjMy
LDYgKzQ2MzMsNyBAQAogCQlDREY3NDdGMzI3MEY3NkNGMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0N0YyMjcwRjc2Q0YwMDhGRUVFQyAvKiBSZW5kZXJTVkdS
ZXNvdXJjZUxpbmVhckdyYWRpZW50SW5saW5lcy5oICovOyB9OwogCQlDREY3NDdGNTI3MEY4M0Ix
MDA4RkVFRUMgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNzQ3RjQyNzBGODNCMTAwOEZFRUVD
IC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcElubGluZXMuaCAqLzsgfTsKIAkJQ0RGNzQ3RjcyNzBG
ODZBNDAwOEZFRUVDIC8qIExlZ2FjeVJlbmRlclNWR1NoYXBlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNzQ3RjYyNzBGODZBNDAwOEZF
RUVDIC8qIExlZ2FjeVJlbmRlclNWR1NoYXBlSW5saW5lcy5oICovOyB9OworCQlDREY3NDdGNzI3
MEY4M0I0MTA3REVFRUMgLyogUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGNjI3MEY4M0I0MTA3REVFRUMg
LyogUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggKi87IH07CiAJCUNERjc0N0Y5MjcwRjg3Q0IwMDhG
RUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNzQ3RjgyNzBGODdDQjAw
OEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRJbmxpbmVzLmggKi87IH07
CiAJCUNERjc0N0ZCMjcwRjg5MUEwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcklu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
Rjc0N0ZBMjcwRjg5MUEwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcklubGluZXMu
aCAqLzsgfTsKIAkJQ0RGNzQ4M0YxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNv
bHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RG
NzQ4M0QxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzM3OSw3ICsxMzM4
MSw5IEBACiAJCUExMEJCNTgyMTQ4NEUzQTcwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdSZWN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeVJlbmRlclNW
R1JlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTBCQjU4MzE0ODRFM0E3
MDBCMkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZHUmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUExMEJCNTg4MTQ4NEUzQjMwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdT
aGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExMENDNTg4MTQ3M0UzQjMw
MEIyQThCRiAvKiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdTaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUExMEJCNTg5MTQ4NEUzQjMwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lSZW5kZXJTVkdTaGFwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTBCQjU4OTE0ODRFM0IzMDBDM0Y3N0IgLyog
UmVuZGVyU1ZHU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVy
U1ZHU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwRDZFOTQyMTQ0Qzk5
ODAwRkREMTREIC8qIEpTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTUGF5bWVudFJlc3BvbnNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTEwREJGNDYxOEY5MjMxNzAwMEQ3MEM2IC8qIExlZ2FjeVByZXZpZXdMb2FkZXJDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UHJldmlld0xvYWRl
ckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTBEQzc2ODE0NzQ3QkFC
MDA1RTI0NzEgLyogU3R5bGVHcmlkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHlsZUdyaWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2MjgwLDYgKzE2Mjg0LDcgQEAKIAkJQ0RGNzQ3RjIyNzBGNzZDRjAwOEZFRUVDIC8qIFJl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNERjc0N0Y0MjcwRjgzQjEwMDhGRUVFQyAvKiBSZW5kZXJTVkdHcmFkaWVu
dFN0b3BJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0dyYWRpZW50U3RvcElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RGNzQ3RjYyNzBGODZBNDAwOEZF
RUVDIC8qIExlZ2FjeVJlbmRlclNWR1NoYXBlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdh
Y3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0RGNzQ3RjYyNzBGODNCNDEwN0RFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJTVkdTaGFwZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0RGNzQ3RjgyNzBGODdDQjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjc0
N0ZBMjcwRjg5MUEwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcklubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXJJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjc0ODNDMThGRUJDRUMwMDA2RUNDMCAvKiBHcmlkUG9z
aXRpb25zUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4OTcyLDYgKzE4OTc3LDkgQEAKIAkJCQk0MzY3MDhBNDEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggKi8sCiAJCQkJNDM2NzA4QTUxMkQ5Q0E1QzAwMDQ0
MjM0IC8qIFJlbmRlclNWR1Jvb3QuY3BwICovLAogCQkJCTQzNjcwOEE2MTJEOURCNEIwMDA0NDIz
NCAvKiBSZW5kZXJTVkdSb290LmggKi8sCisJCQkJQTEwQ0M1ODgxNDczRTNCMzAwQjJBOEJGIC8q
IFJlbmRlclNWR1NoYXBlLmNwcCAqLywKKwkJCQlBMTBCQjU4OTE0ODRFM0IzMDBDM0Y3N0IgLyog
UmVuZGVyU1ZHU2hhcGUuaCAqLywKKwkJCQlDREY3NDdGNjI3MEY4M0I0MTA3REVFRUMgLyogUmVu
ZGVyU1ZHU2hhcGVJbmxpbmVzLmggKi8sCiAJCQkJMDg1NEIwMDYxMjU1RTRFNjAwQjlDREQwIC8q
IFJlbmRlclNWR1RleHQuY3BwICovLAogCQkJCTA4NTRCMDA3MTI1NUU0RTYwMEI5Q0REMCAvKiBS
ZW5kZXJTVkdUZXh0LmggKi8sCiAJCQkJMDg1NEIwMDgxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRl
clNWR1RleHRQYXRoLmNwcCAqLywKQEAgLTM2NzUwLDYgKzM2NzU4LDggQEAKIAkJCQlDREY3NDdG
OTI3MEY4N0NCMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEUzMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEU1MTJE
OURCNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTBC
QjU4QjE0ODRFM0IzMDBDM0Y3N0IgLyogUmVuZGVyU1ZHU2hhcGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUNERjc0N0Y3MjcwRjgzQjQxMDdERUVFQyAvKiBSZW5kZXJTVkdTaGFwZUlubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4NTRCMDE5MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdU
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxQjEyNTVFNEU2MDBCOUNERDAgLyogUmVu
ZGVyU1ZHVGV4dFBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcwOEU5MTJEOUNBNEIwMDA0
NDIzNCAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDU0ZDcyNWM4NTkyYmFjMzMzM2RiNDRkZDRlNWVkMjll
ZmJmYjQ3YTcuLjAwM2UyNDQ0MWE5OWU4MjdiNWE4YjIzYTRhNThlOGMwMGUyMzBlM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcApAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgIlJlbmRlck1hdGhN
TEJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdSb290LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJU
YWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4
dENvbnRyb2wuaCIKQEAgLTkxMCw3ICs5MTEsNyBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmVsZW1lbnRSZWN0KCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzdXBwb3J0c1BhdGgoKSBjb25zdAogewotICAgIHJldHVybiBpczxSZW5kZXJU
ZXh0PihyZW5kZXJlcigpKSB8fCBpczxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIoKSk7
CisgICAgcmV0dXJuIGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKCkpIHx8IChyZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPmlzU1ZHU2hhcGVPckxlZ2FjeVNWR1NoYXBlKCkpOwogfQogCiBQYXRoIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRQYXRoKCkgY29uc3QKQEAgLTk2MCwxNSAr
OTYxLDI0IEBAIFBhdGggQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudFBhdGgoKSBj
b25zdAogICAgICAgICBpZiAoYXV0byBzdmdSb290ID0gYW5jZXN0b3JzT2ZUeXBlPExlZ2FjeVJl
bmRlclNWR1Jvb3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7CiAgICAgICAgICAgICBMYXlvdXRQ
b2ludCBwYXJlbnRPZmZzZXQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCYqc3ZnUm9v
dCktPmVsZW1lbnRSZWN0KCkubG9jYXRpb24oKTsKICAgICAgICAgICAgIHBhdGgudHJhbnNmb3Jt
KEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRPZmZzZXQueCgpLCBwYXJlbnRPZmZz
ZXQueSgpKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGF0aDsKKyAgICB9CisKICNp
ZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKLSAgICAgICAgfSBlbHNlIGlmIChhdXRv
IHN2Z1Jvb3QgPSBhbmNlc3RvcnNPZlR5cGU8UmVuZGVyU1ZHUm9vdD4oKm1fcmVuZGVyZXIpLmZp
cnN0KCkpIHsKKyAgICBpZiAoaXM8UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKCkpICYmIGRvd25j
YXN0PFJlbmRlclNWR1NoYXBlPigqbV9yZW5kZXJlcikuaGFzUGF0aCgpKSB7CisgICAgICAgIFBh
dGggcGF0aCA9IGRvd25jYXN0PFJlbmRlclNWR1NoYXBlPigqbV9yZW5kZXJlcikucGF0aCgpOwor
CisgICAgICAgIC8vIFRoZSBTVkcgcGF0aCBpcyBpbiB0ZXJtcyBvZiB0aGUgcGFyZW50J3MgYm91
bmRpbmcgYm94LiBUaGUgcGF0aCBuZWVkcyB0byBiZSBvZmZzZXQgdG8gZnJhbWUgY29vcmRpbmF0
ZXMuCisgICAgICAgIGlmIChhdXRvIHN2Z1Jvb3QgPSBhbmNlc3RvcnNPZlR5cGU8UmVuZGVyU1ZH
Um9vdD4oKm1fcmVuZGVyZXIpLmZpcnN0KCkpIHsKICAgICAgICAgICAgIExheW91dFBvaW50IHBh
cmVudE9mZnNldCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoJipzdmdSb290KS0+ZWxl
bWVudFJlY3QoKS5sb2NhdGlvbigpOwogICAgICAgICAgICAgcGF0aC50cmFuc2Zvcm0oQWZmaW5l
VHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudE9mZnNldC54KCksIHBhcmVudE9mZnNldC55KCkp
KTsKLSNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHBhdGg7CiAgICAgfQorI2Vu
ZGlmCiAKICAgICByZXR1cm4gUGF0aCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDgxNWEzMzA0NDg4NWNmNDI3NGU3NzdhMjFjNDcz
OWE5ODEyMTgwYzcuLjY5MjdjM2JhNzZiNTAyZTAxMTMxMDBjNjM4ZTA3YTk1MmU0YWYzYTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJJbmxpbmVJdGVyYXRvclRleHRCb3guaCIKICNpbmNsdWRl
ICJMZWdhY3lJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHUm9vdC5o
IgorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIK
QEAgLTY0LDYgKzY1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290Lmgi
CisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpA
QCAtNTU4LDYgKzU2MCwxMiBAQCB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPiBiZQogICAgICAgICB0cyA8
PCAiXG4iOwogICAgIH07CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAg
ICBpZiAoaXM8UmVuZGVyU1ZHU2hhcGU+KG8pKSB7CisgICAgICAgIHdyaXRlKHRzLCBkb3duY2Fz
dDxSZW5kZXJTVkdTaGFwZT4obyksIGJlaGF2aW9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgogICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdTaGFwZT4obykpIHsKICAgICAgICAg
d3JpdGUodHMsIGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1NoYXBlPihvKSwgYmVoYXZpb3IpOwog
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwCmluZGV4IGZmZTg1YTAxODlkM2U0YjgyMWVlMjc5NzQxMjkxZTc4
ZDIyMTNlYzEuLmY5NDg1NGQzMDAyZGQ3OWM1NWQ0NWExYzBlNDVlZjlkNGUyN2U4MzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3Bw
CkBAIC0yNiwxMSArMjYsMTMgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJMZWdh
Y3lSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hh
cGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VFbGVt
ZW50Q2xpZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCkBAIC0yNDMsNCArMjQ1LDQy
IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJj
ZUludmFsaWRhdGlvbihSZW5kZXJPYmplY3QmCiAgICAgfQogfQogCit2b2lkIFJlbmRlclNWR1Jl
c291cmNlOjpmaWxsQW5kU3Ryb2tlUGF0aE9yU2hhcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqIHBhdGgsIGNvbnN0IFJlbmRlckVsZW1lbnQqIHNoYXBlKSBjb25zdAoreworICAgIGlmIChz
aGFwZSkgeworICAgICAgICBBU1NFUlQoc2hhcGUtPmlzU1ZHU2hhcGVPckxlZ2FjeVNWR1NoYXBl
KCkpOworCisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZHUmVzb3Vy
Y2VNb2RlOjpBcHBseVRvRmlsbCkpIHsKKyAgICAgICAgICAgIGlmIChpczxMZWdhY3lSZW5kZXJT
VkdTaGFwZT4oc2hhcGUpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0PExlZ2FjeVJlbmRlclNW
R1NoYXBlPihzaGFwZSktPmZpbGxTaGFwZShjb250ZXh0KTsKKyNpZiBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihz
aGFwZSkpCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KHNoYXBlKS0+
ZmlsbFNoYXBlKGNvbnRleHQpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAocmVz
b3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkp
IHsKKyAgICAgICAgICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdTaGFwZT4oc2hhcGUpKQorICAg
ICAgICAgICAgICAgIGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1NoYXBlPihzaGFwZSktPnN0cm9r
ZVNoYXBlKGNvbnRleHQpOworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAg
ICAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyU1ZHU2hhcGU+KHNoYXBlKSkKKyAgICAgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oc2hhcGUpLT5zdHJva2VTaGFwZShjb250ZXh0
KTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChwYXRoKSB7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZHUmVz
b3VyY2VNb2RlOjpBcHBseVRvRmlsbCkpCisgICAgICAgICAgICBjb250ZXh0LmZpbGxQYXRoKCpw
YXRoKTsKKyAgICAgICAgaWYgKHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNvdXJj
ZU1vZGU6OkFwcGx5VG9TdHJva2UpKQorICAgICAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKCpw
YXRoKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2UuaAppbmRleCBkMjJhODRiMjcyZDQ2OGY5ZDAxMzYxYWE1YTBiMjFjNGVhYzQ3ZDE1
Li5hOGQ5MWYzNjcxMTlmZTc0MzVjYTMyYWQxZmUwZDk2YTNkYWNmNWM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCkBAIC0xOSw4ICsx
OSw4IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZHU2hhcGUu
aCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25TZXQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ3LDkgKzQ3LDEwIEBAIGNsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGF0aDsKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CiBj
bGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvcjsKK2NsYXNzIFJlbmRlclN0eWxlOwogCiBjbGFzcyBSZW5kZXJTVkdS
ZXNvdXJjZSB7CiBwdWJsaWM6CkBAIC02MCw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmLCBib29sIG1hcmtGb3JJ
bnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiwg
T3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRp
b25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IExlZ2FjeVJl
bmRlclNWR1NoYXBlKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJl
bmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291
cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBjb25zdCBSZW5kZXJFbGVtZW50KiAvKiBzaGFwZSAqLykg
eyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJPYmplY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNv
dXJjZVR5cGUoKSBjb25zdCA9IDA7CkBAIC03MSw2ICs3Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3Vy
Y2UoKTsKIAogICAgIHN0YXRpYyB2b2lkIG1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUlu
dmFsaWRhdGlvbihSZW5kZXJPYmplY3QmLCBib29sIG5lZWRzTGF5b3V0ID0gdHJ1ZSk7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGZpbGxBbmRTdHJva2VQYXRoT3JTaGFwZShHcmFwaGljc0NvbnRl
eHQmLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0
IFJlbmRlckVsZW1lbnQqIHNoYXBlKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggZDM2MmZhZWQ1ZDI0YTVmMWYxN2U3NWZhYWE4NTFkOGQ3
OTYwZWI1YS4uMmY3MmZlM2QxNTkwYTI4NjQ5MGNiMDk1M2E1NDM5YWZjNjkxZGMxOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0KiYg
Y29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBj
b25zdCBQYXRoKiwgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUqKQordm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1v
ZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlckVsZW1lbnQqKQogewog
ICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlTW9kZSwgIXJl
c291cmNlTW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmgKaW5kZXggZTdmZGExNDdhNjJhYjdiOTNiMzRhMTY1NDMw
Yzg5MjRhMGNmOThhNi4uY2YzZjZiYTQ5MDdmYWIyZWYyOTBjNDFjYjQ1Njc1N2QwMjkzM2IxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuaApAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYsIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9
IHRydWUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
LCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVy
U1ZHUmVzb3VyY2VNb2RlPikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNv
dXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUqKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGlj
c0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgq
LCBjb25zdCBSZW5kZXJFbGVtZW50Kikgb3ZlcnJpZGU7CiAKICAgICBGbG9hdFJlY3QgcmVzb3Vy
Y2VCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAKaW5kZXggMGQ0YjAyMDU1YzI3OTUyOWM5MTJiOWY2NWE5N2I3NzI3YmQ3NmY5Yy4u
ZDE1OTI1M2YxZmI4YmIwODVmNGUzN2RjMDM4MThhMDk2OTVlZWUwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
OjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW4KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKiBwYXRoLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSogc2hhcGUpCit2b2lkIFJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IFJlbmRl
ckVsZW1lbnQqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQoIXJl
c291cmNlTW9kZS5pc0VtcHR5KCkpOwpAQCAtMjA3LDIwICsyMDcsOCBAQCB2b2lkIFJlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBHcmFwaAogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVyKTsKICNlbmRp
ZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVy
U1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvRmlsbCkpIHsKLSAgICAgICAgICAgIGlmIChwYXRoKQot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKHNoYXBlKQotICAgICAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoKmNvbnRleHQp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZH
UmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkgewotICAgICAgICAgICAgaWYgKHBhdGgpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChzaGFwZSkKLSAgICAgICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoKmNvbnRl
eHQpOwotICAgICAgICB9Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICBmaWxsQW5kU3Ryb2tl
UGF0aE9yU2hhcGUoKmNvbnRleHQsIHJlc291cmNlTW9kZSwgcGF0aCwgc2hhcGUpOwogCiAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAppbmRleCBlZTZiZGNmYWQ2OGY4
ZWUzMGZlM2I4ZmEzZTdmY2U5MDYyMjg2YWM5Li4xY2QyN2Y3NDI4ZmUxNDE4ZWQyODA0ZDU4ZGM1
OGJkZjkwMjVjMDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYsIGJvb2wgbWFy
a0ZvckludmFsaWRhdGlvbiA9IHRydWUpIGZpbmFsOwogCiAgICAgYm9vbCBhcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComLCBP
cHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPikgZmluYWw7Ci0gICAgdm9pZCBwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxS
ZW5kZXJTVkdSZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgTGVnYWN5UmVuZGVyU1ZH
U2hhcGUqKSBmaW5hbDsKKyAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
LCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNv
bnN0IFBhdGgqLCBjb25zdCBSZW5kZXJFbGVtZW50KikgZmluYWw7CiAgICAgRmxvYXRSZWN0IHJl
c291cmNlQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0JikgZmluYWwgeyByZXR1cm4gRmxv
YXRSZWN0KCk7IH0KIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCmluZGV4IDJkNmY4OTBm
YzQ0YmNlYWFhZGI5MmFjNjNiODU0N2YxN2YxZTg0YTUuLmI1NjJiZWVlNGNiOTg5ZTIxMWY0Mjcz
YWFkNjY4YTJlZTM2YmE5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTIwMSwyNCArMjAxLDEx
IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50
JiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNl
TW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBMZWdhY3lSZW5kZXJT
VkdTaGFwZSogc2hhcGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlv
blNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0
aCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwog
ICAgIEFTU0VSVCghcmVzb3VyY2VNb2RlLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAocmVzb3VyY2VN
b2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKSB7Ci0gICAg
ICAgIGlmIChwYXRoKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAg
ICAgICBlbHNlIGlmIChzaGFwZSkKLSAgICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoKmNvbnRl
eHQpOwotICAgIH0KLSAgICBpZiAocmVzb3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291
cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkpIHsKLSAgICAgICAgaWYgKHBhdGgpCi0gICAgICAgICAg
ICBjb250ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKLSAgICAgICAgZWxzZSBpZiAoc2hhcGUpCi0g
ICAgICAgICAgICBzaGFwZS0+c3Ryb2tlU2hhcGUoKmNvbnRleHQpOwotICAgIH0KLQorICAgIGZp
bGxBbmRTdHJva2VQYXRoT3JTaGFwZSgqY29udGV4dCwgcmVzb3VyY2VNb2RlLCBwYXRoLCBzaGFw
ZSk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAppbmRleCA5NTk2
ZjJhZmQyMmFlOTAxZTdkYWU5NWEwMjUyNWE3ZGRkMTdlZTg2Li43MTE3ZjEyN2QwZGRkNzNiYTVl
YmM1NTk5MDEwYzI0YmI2MmYwOGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmLCBi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSBvdmVycmlkZTsKIAogICAgIGJvb2wgYXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0Nv
bnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4pIG92ZXJyaWRlOwotICAg
IHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dCom
LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IExl
Z2FjeVJlbmRlclNWR1NoYXBlKikgb3ZlcnJpZGU7CisgICAgdm9pZCBwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdS
ZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyRWxlbWVudCopIG92ZXJyaWRl
OwogICAgIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYp
IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKICAgICBSZW5kZXJTVkdSZXNvdXJj
ZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGF0dGVyblJlc291
cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCmluZGV4IDEwOTViYjUxNmMwNmExNjU0
MTJhZmZlNzJlYjgxNzk0ZGJhYWJhM2EuLmRkN2U1ZjcxOWMwMWMyMGViYzU4MDk2YzI4ZTNmYTcw
ZDA2YjQwNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKQEAgLTIzLDggKzIzLDEwIEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVy
U3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY3LDIzICs2OSwxMSBAQCBi
b29sIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgUgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYs
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1v
ZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgTGVnYWN5UmVuZGVyU1ZH
U2hhcGUqIHNoYXBlKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBs
eVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRp
b25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBh
dGgsIGNvbnN0IFJlbmRlckVsZW1lbnQqIHNoYXBlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsK
ICAgICBBU1NFUlQoIXJlc291cmNlTW9kZS5pc0VtcHR5KCkpOwotCi0gICAgaWYgKHJlc291cmNl
TW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxsKSkgewotICAg
ICAgICBpZiAocGF0aCkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCpwYXRoKTsKLSAg
ICAgICAgZWxzZSBpZiAoc2hhcGUpCi0gICAgICAgICAgICBzaGFwZS0+ZmlsbFNoYXBlKCpjb250
ZXh0KTsKLSAgICB9Ci0gICAgaWYgKHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNv
dXJjZU1vZGU6OkFwcGx5VG9TdHJva2UpKSB7Ci0gICAgICAgIGlmIChwYXRoKQotICAgICAgICAg
ICAgY29udGV4dC0+c3Ryb2tlUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHNoYXBlKQot
ICAgICAgICAgICAgc2hhcGUtPnN0cm9rZVNoYXBlKCpjb250ZXh0KTsKLSAgICB9CisgICAgZmls
bEFuZFN0cm9rZVBhdGhPclNoYXBlKCpjb250ZXh0LCByZXNvdXJjZU1vZGUsIHBhdGgsIHNoYXBl
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKaW5kZXggN2YxYjc0NjgyZTJkM2JkM2UzOTRk
NjkzYzA3OWI1MmE5YTg1OTQ1MC4uYTgwMWFlZjczYmQ4NmUxMTczMzQyZjg3MjRiYmRhYTQ3ZTA3
MGY5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVNvbGlkQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCkBAIC0yMCwxMCArMjAsMTMgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IFJlbmRlck9iamVjdDsKKwogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yIGZpbmFs
IDogcHVibGljIFJlbmRlclNWR1Jlc291cmNlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKQEAgLTM0LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQ2xp
ZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmLCBib29sID0gdHJ1ZSkgb3ZlcnJpZGUgeyB9CiAK
ICAgICBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxl
JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+KSBv
dmVycmlkZTsKLSAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFw
aGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBh
dGgqLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSopIG92ZXJyaWRlOworICAgIHZvaWQgcG9z
dEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25T
ZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlckVsZW1l
bnQqKSBvdmVycmlkZTsKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBS
ZW5kZXJPYmplY3QmKSBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgUmVu
ZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IFNvbGlkQ29sb3JSZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE5NWZhMjU0OGQwZjQ3NDE0OTYy
NDI4ZTM4YzE0NTg1MTBhNzc2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA4IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKZWZmIFNjaGlsbGVyIDxjb2RlZHJlYWRA
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSwgMjAyMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKKworI2lm
IEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNp
bmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVs
ZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIgorI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhEYXRhLmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1Jlc291
cmNlc0NhY2hlLmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChSZW5kZXJTVkdT
aGFwZSk7CisKK1JlbmRlclNWR1NoYXBlOjpSZW5kZXJTVkdTaGFwZShTVkdHcmFwaGljc0VsZW1l
bnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCisgICAgOiBSZW5kZXJTVkdNb2RlbE9i
amVjdChlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKK3sKK30KKworUmVuZGVyU1ZHU2hhcGU6On5S
ZW5kZXJTVkdTaGFwZSgpID0gZGVmYXVsdDsKKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6dXBkYXRl
U2hhcGVGcm9tRWxlbWVudCgpCit7CisgICAgbV9wYXRoID0gY3JlYXRlUGF0aCgpOworICAgIHBy
b2Nlc3NNYXJrZXJQb3NpdGlvbnMoKTsKKworICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gY2FsY3Vs
YXRlT2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gY2FsY3Vs
YXRlU3Ryb2tlQm91bmRpbmdCb3goKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6aXNFbXB0
eSgpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgYmUgY2FsbGVk
IGJlZm9yZSBhc3NpZ25pbmcgYSBuZXcgUGF0aCB0byBtX3BhdGguCisgICAgLy8gQnV0IHRoaXMg
YnVnIGNhbiBoYXBwZW4gaWYgdGhpcyByZW5kZXJlciB3YXMgY3JlYXRlZCBhbmQgaXRzIGxheW91
dCB3YXMgbm90CisgICAgLy8gZG9uZSBiZWZvcmUgcGFpbnRpbmcuIEFzc2VydCB0aGlzIGRpZCBu
b3QgaGFwcGVuIGJ1dCBkbyBub3QgY3Jhc2guCisgICAgQVNTRVJUKGhhc1BhdGgoKSk7CisgICAg
cmV0dXJuICFoYXNQYXRoKCkgfHwgcGF0aCgpLmlzRW1wdHkoKTsKK30KKwordm9pZCBSZW5kZXJT
VkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAg
ICBjb250ZXh0LmZpbGxQYXRoKHBhdGgoKSk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9wYXRoKTsKKyAgICBQYXRoKiB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworCisgICAgaWYgKGhh
c05vblNjYWxpbmdTdHJva2UoKSkKKyAgICAgICAgdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQ
YXRoKHVzZVBhdGgsIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKSk7CisKKyAgICBjb250ZXh0
LnN0cm9rZVBhdGgoKnVzZVBhdGgpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaGFwZURl
cGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBQb2ludENvb3Jk
aW5hdGVTcGFjZSBwb2ludENvb3JkaW5hdGVTcGFjZSkKK3sKKyAgICBBU1NFUlQobV9wYXRoKTsK
KworICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkgJiYgcG9pbnRDb29yZGluYXRlU3BhY2Ug
IT0gTG9jYWxDb29yZGluYXRlU3BhY2UpIHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNj
YWxpbmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCk7CisgICAgICAgIFBh
dGgqIHVzZVBhdGggPSBub25TY2FsaW5nU3Ryb2tlUGF0aChtX3BhdGguZ2V0KCksIG5vblNjYWxp
bmdUcmFuc2Zvcm0pOworICAgICAgICByZXR1cm4gdXNlUGF0aC0+c3Ryb2tlQ29udGFpbnMobm9u
U2NhbGluZ1RyYW5zZm9ybS5tYXBQb2ludChwb2ludCksIFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSB7CisgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0
eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsKKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgcmV0dXJuIG1fcGF0aC0+c3Ryb2tlQ29udGFpbnMocG9pbnQsIFt0aGlzXSAoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwgKnRoaXMpOworICAgIH0pOwor
fQorCitib29sIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUgZmlsbFJ1bGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHBhdGgoKS5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOworfQorCitib29sIFJl
bmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wg
cmVxdWlyZXNGaWxsLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBpZiAobV9maWxs
Qm91bmRpbmdCb3guaXNFbXB0eSgpIHx8ICFtX2ZpbGxCb3VuZGluZ0JveC5jb250YWlucyhwb2lu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Cisg
ICAgaWYgKHJlcXVpcmVzRmlsbCAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jl
c291cmNlKCp0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50LCBmaWxs
UnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQoreworICAgIGlmIChzdHJva2VC
b3VuZGluZ0JveCgpLmlzRW1wdHkoKSB8fCAhc3Ryb2tlQm91bmRpbmdCb3goKS5jb250YWlucyhw
b2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7
CisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZSgqdGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBv
aW50KTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6bGF5b3V0KCkKK3sKKyAgICBTdGFja1N0
YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7CisKKyAgICBMYXlvdXRSZXBh
aW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7Cisg
ICAgaWYgKG1fbmVlZHNTaGFwZVVwZGF0ZSkgeworICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVw
c3RyZWFtIFNWR0xlbmd0aENvbnRleHQgY2hhbmdlcworICAgICAgICAvLyBncmFwaGljc0VsZW1l
bnQoKS51cGRhdGVMZW5ndGhDb250ZXh0KCk7CisgICAgICAgIHVwZGF0ZVNoYXBlRnJvbUVsZW1l
bnQoKTsKKworICAgICAgICBtX25lZWRzU2hhcGVVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgc2V0
TGF5b3V0UmVjdChlbmNsb3NpbmdMYXlvdXRSZWN0KG1fZmlsbEJvdW5kaW5nQm94KSk7CisgICAg
fQorCisgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdMYXllclRyYW5zZm9ybVVwZGF0
ZXIKKyAgICAvLyBTVkdSZW5kZXJTdXBwb3J0Ojp1cGRhdGVMYXllclRyYW5zZm9ybSgqdGhpcyk7
CisKKyAgICAvLyBJbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2YgdGhpcyBjbGllbnQgaWYgb3Vy
IGxheW91dCBjaGFuZ2VkLgorICAgIGlmIChldmVySGFkTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5
b3V0KCkpCisgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRMYXlvdXRDaGFuZ2VkKCp0
aGlzKTsKKworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKKyAgICBjbGVhck5l
ZWRzTGF5b3V0KCk7Cit9CisKK1BhdGgqIFJlbmRlclNWR1NoYXBlOjpub25TY2FsaW5nU3Ryb2tl
UGF0aChjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZVRyYW5z
Zm9ybSkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGF0aD4gdGVtcFBhdGg7
CisKKyAgICB0ZW1wUGF0aC5nZXQoKSA9ICpwYXRoOworICAgIHRlbXBQYXRoLmdldCgpLnRyYW5z
Zm9ybShzdHJva2VUcmFuc2Zvcm0pOworCisgICAgcmV0dXJuICZ0ZW1wUGF0aC5nZXQoKTsKK30K
KworYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2V0dXBOb25TY2FsaW5nU3Ryb2tlQ29udGV4dChBZmZp
bmVUcmFuc2Zvcm0mIHN0cm9rZVRyYW5zZm9ybSwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciYg
c3RhdGVTYXZlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gaW52ZXJz
ZSA9IHN0cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgaWYgKCFpbnZlcnNlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKKyAgICBzdGF0ZVNhdmVy
LmNvbnRleHQoKS0+Y29uY2F0Q1RNKGludmVyc2UudmFsdWUoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdTaGFwZTo6bm9uU2NhbGluZ1N0cm9rZVRy
YW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdyYXBoaWNzRWxlbWVudCgpLmdldFNjcmVl
bkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVVcGRhdGUpOworfQorCitib29sIFJlbmRl
clNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucygpIGNvbnN0Cit7CisgICAg
aWYgKCFzdHlsZSgpLnN2Z1N0eWxlKCkuaGFzTWFya2VycygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIWdyYXBoaWNzRWxlbWVudCgpLnN1cHBvcnRzTWFya2VycygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXND
YWNoZTo6Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyZXIoKnRoaXMpOworICAgIGlmICghcmVzb3Vy
Y2VzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzb3VyY2VzLT5tYXJr
ZXJTdGFydCgpIHx8IHJlc291cmNlcy0+bWFya2VyTWlkKCkgfHwgcmVzb3VyY2VzLT5tYXJrZXJF
bmQoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0JiBvcmlnaW5hbENvbnRleHQpCit7CisgICAgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0ID0gJm9yaWdpbmFsQ29udGV4dDsKKyAgICBDb2xvciBmYWxs
YmFja0NvbG9yOworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3Vy
Y2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoKnRoaXMsIHN0eWxl
LCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFw
cGx5UmVzb3VyY2UoKnRoaXMsIHN0eWxlLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6
OkFwcGx5VG9GaWxsKSkKKyAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZSgqdGhpcywgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRv
RmlsbCwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNW
YWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxi
YWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291
cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0Nv
bG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKCp0
aGlzLCBzdHlsZSwgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvRmlsbCkp
CisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UoKnRo
aXMsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwsIG51bGxwdHIs
IHRoaXMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJv
a2VTaGFwZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdyYXBoaWNzQ29udGV4dCYgb3JpZ2lu
YWxDb250ZXh0KQoreworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9ICZvcmlnaW5hbENv
bnRleHQ7CisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAoUmVuZGVyU1ZHUmVzb3Vy
Y2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZSgqdGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CisgICAgICAgIGlm
IChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKCp0aGlzLCBzdHlsZSwgY29u
dGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkKKyAgICAgICAgICAg
IHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKCp0aGlzLCBjb250ZXh0
LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJva2UsIG51bGxwdHIsIHRoaXMpOwor
ICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZH
UmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgICAgICAgICAgZmFs
bGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CisgICAgICAgICAgICBpZiAo
ZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSgqdGhpcywgc3R5bGUsIGNvbnRleHQsIFJl
bmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkpCisgICAgICAgICAgICAgICAgZmFs
bGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UoKnRoaXMsIGNvbnRleHQsIFJlbmRlclNW
R1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIXN0eWxlKCkuaGFzVmlzaWJsZVN0cm9rZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCwgZmFsc2UpOworICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsKKyAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ry
b2tlVHJhbnNmb3JtKCk7CisgICAgICAgIGlmICghc2V0dXBOb25TY2FsaW5nU3Ryb2tlQ29udGV4
dChub25TY2FsaW5nVHJhbnNmb3JtLCBzdGF0ZVNhdmVyKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgc3Ryb2tlU2hhcGUoc3R5bGUoKSwgY29udGV4dCk7Cit9CisKK3ZvaWQgUmVu
ZGVyU1ZHU2hhcGU6OmZpbGxTdHJva2VNYXJrZXJzKFBhaW50SW5mbyYgY2hpbGRQYWludEluZm8p
Cit7CisgICAgYXV0byBwYWludE9yZGVyID0gUmVuZGVyU3R5bGU6OnBhaW50VHlwZXNGb3JQYWlu
dE9yZGVyKHN0eWxlKCkucGFpbnRPcmRlcigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFpbnRPcmRlci5zaXplKCk7ICsraSkgeworICAgICAgICBzd2l0Y2ggKHBhaW50T3JkZXIu
YXQoaSkpIHsKKyAgICAgICAgY2FzZSBQYWludFR5cGU6OkZpbGw6CisgICAgICAgICAgICBmaWxs
U2hhcGUoc3R5bGUoKSwgY2hpbGRQYWludEluZm8uY29udGV4dCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFBhaW50VHlwZTo6U3Ryb2tlOgorICAgICAgICAgICAgc3Ryb2tl
U2hhcGUoY2hpbGRQYWludEluZm8uY29udGV4dCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFBhaW50VHlwZTo6TWFya2VyczoKKyAgICAgICAgICAgIGlmICghbV9tYXJrZXJQ
b3NpdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGRyYXdNYXJrZXJzKGNoaWxkUGFp
bnRJbmZvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IFJlbmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQoreworICAgIGlmIChwYWludEluZm8uY29udGV4dCgpLnBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFtMQlNFXSBV
cHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAvLyBpZiAoIVNWR1JlbmRlclN1
cHBvcnQ6OnNob3VsZFBhaW50SGlkZGVuUmVuZGVyZXIoKnRoaXMpKQorICAgIC8vICAgIHJldHVy
bjsKKworICAgIGlmICghc2hvdWxkUGFpbnRTVkdSZW5kZXJlcihwYWludEluZm8pIHx8IGlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlOjpDbGlwcGluZ01hc2spIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVh
bSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAgLy8gU1ZHUmVuZGVyU3VwcG9ydDo6
cGFpbnRTVkdDbGlwcGluZ01hc2soKnRoaXMsIHBhaW50SW5mbyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhdXRvIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxh
eW91dExvY2F0aW9uKCk7CisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpN
YXNrKSB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHUmVuZGVyU3VwcG9y
dCBjaGFuZ2VzCisgICAgICAgIC8vIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50U1ZHTWFzaygqdGhp
cywgcGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gdmlzdWFsT3ZlcmZsb3dSZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0RXF1
aXZhbGVudCgpOworICAgIHZpc3VhbE92ZXJmbG93UmVjdC5tb3ZlQnkoYWRqdXN0ZWRQYWludE9m
ZnNldCk7CisgICAgaWYgKCF2aXN1YWxPdmVyZmxvd1JlY3QuaW50ZXJzZWN0cyhwYWludEluZm8u
cmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZTo6T3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZk91
dGxpbmUpIHsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBvdXRsaW5lIHBhaW50
aW5nCisgICAgICAgIC8vIHBhaW50U1ZHT3V0bGluZShwYWludEluZm8sIGFkanVzdGVkUGFpbnRP
ZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0KCkpOworCisgICAgYXV0byBjb29y
ZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24gPSBhZGp1c3RlZFBhaW50T2Zmc2V0IC0gZmxv
b3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubG9jYXRpb24oKSk7CisgICAgcGFp
bnRJbmZvLmNvbnRleHQoKS50cmFuc2xhdGUoY29vcmRpbmF0ZVN5c3RlbU9yaWdpblRyYW5zbGF0
aW9uLndpZHRoKCksIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xhdGlvbi5oZWlnaHQoKSk7
CisKKyAgICBpZiAoc3R5bGUoKS5zdmdTdHlsZSgpLnNoYXBlUmVuZGVyaW5nKCkgPT0gU2hhcGVS
ZW5kZXJpbmc6OkNyaXNwRWRnZXMpCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U2hv
dWxkQW50aWFsaWFzKGZhbHNlKTsKKworICAgIGZpbGxTdHJva2VNYXJrZXJzKHBhaW50SW5mbyk7
Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmlzUG9pbnRJbkZpbGwoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCit7CisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKHBvaW50
LCBzdHlsZSgpLnN2Z1N0eWxlKCkuZmlsbFJ1bGUoKSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hh
cGU6OmlzUG9pbnRJblN0cm9rZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAo
IXN0eWxlKCkuc3ZnU3R5bGUoKS5oYXNTdHJva2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQsIExvY2FsQ29v
cmRpbmF0ZVNwYWNlKTsKK30KKworZmxvYXQgUmVuZGVyU1ZHU2hhcGU6OmdldFRvdGFsTGVuZ3Ro
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUGF0aCgpID8gcGF0aCgpLmxlbmd0aCgpIDogY3Jl
YXRlUGF0aCgpLT5sZW5ndGgoKTsKK30KKworRmxvYXRQb2ludCBSZW5kZXJTVkdTaGFwZTo6Z2V0
UG9pbnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUGF0
aCgpID8gcGF0aCgpLnBvaW50QXRMZW5ndGgoZGlzdGFuY2UpIDogY3JlYXRlUGF0aCgpLT5wb2lu
dEF0TGVuZ3RoKGRpc3RhbmNlKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK3sK
KyAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZz
ZXQgKyBsYXlvdXRMb2NhdGlvbigpOworCisgICAgYXV0byBsb2NhbFBvaW50ID0gbG9jYXRpb25J
bkNvbnRhaW5lci5wb2ludCgpOworICAgIGF1dG8gYm91bmRpbmdCb3hUb3BMZWZ0Q29ybmVyID0g
Zmxvb3JlZExheW91dFBvaW50KG9iamVjdEJvdW5kaW5nQm94KCkubWluWE1pbllDb3JuZXIoKSk7
CisgICAgYXV0byBjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24gPSBib3VuZGluZ0Jv
eFRvcExlZnRDb3JuZXIgLSBhZGp1c3RlZExvY2F0aW9uOworICAgIGxvY2FsUG9pbnQubW92ZShj
b29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24pOworCisgICAgaWYgKCFTVkdSZW5kZXJT
dXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKCp0aGlzLCBsb2NhbFBvaW50KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgU1ZHSGl0VGVzdEN5Y2xlRGV0ZWN0aW9uU2NvcGUgaGl0VGVz
dFNjb3BlKCp0aGlzKTsKKworICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2lu
dGVyRXZlbnRzSGl0UnVsZXM6OlNWR19QQVRIX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCku
cG9pbnRlckV2ZW50cygpKTsKKyAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLnZpc2liaWxp
dHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlKTsKKyAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRS
dWxlcy5yZXF1aXJlVmlzaWJsZSkgeworICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3Zn
U3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CisgICAgICAgIFdpbmRSdWxlIGZpbGxSdWxlID0g
c3ZnU3R5bGUuZmlsbFJ1bGUoKTsKKyAgICAgICAgaWYgKHJlcXVlc3Quc3ZnQ2xpcENvbnRlbnQo
KSkKKyAgICAgICAgICAgIGZpbGxSdWxlID0gc3ZnU3R5bGUuY2xpcFJ1bGUoKTsKKworICAgICAg
ICBpZiAoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdmdTdHlsZS5oYXNTdHJva2UoKSB8fCAh
aGl0UnVsZXMucmVxdWlyZVN0cm9rZSkgJiYgc3Ryb2tlQ29udGFpbnMobG9jYWxQb2ludCwgaGl0
UnVsZXMucmVxdWlyZVN0cm9rZSkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0
ZWRMb2NhdGlvbikpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRU
ZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIs
IG1fc3Ryb2tlQm91bmRpbmdCb3gpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3ZnU3R5bGUuaGFzRmls
bCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkgJiYgZmlsbENvbnRhaW5zKGxvY2FsUG9pbnQs
IGhpdFJ1bGVzLnJlcXVpcmVGaWxsLCBmaWxsUnVsZSkpCisgICAgICAgICAgICB8fCAoaGl0UnVs
ZXMuY2FuSGl0Qm91bmRpbmdCb3ggJiYgbV9maWxsQm91bmRpbmdCb3guY29udGFpbnMobG9jYWxQ
b2ludCkpKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRp
b25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsK
KyAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2Rl
Rm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBtX2ZpbGxCb3VuZGlu
Z0JveCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
KiBtYXJrZXJGb3JUeXBlKFNWR01hcmtlclR5cGUgdHlwZSwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIqIG1hcmtlclN0YXJ0LCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyTWlkLCBSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyRW5kKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgU3RhcnRNYXJrZXI6CisgICAgICAgIHJldHVybiBtYXJrZXJTdGFydDsKKyAgICBj
YXNlIE1pZE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIG1hcmtlck1pZDsKKyAgICBjYXNlIEVuZE1h
cmtlcjoKKyAgICAgICAgcmV0dXJuIG1hcmtlckVuZDsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBl
Ojpjb21wdXRlTWFya2VyQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmIChtX21hcmtlclBv
c2l0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIGF1
dG8qIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5k
ZXJlcigqdGhpcyk7CisgICAgQVNTRVJUKHJlc291cmNlcyk7CisKKyAgICBhdXRvKiBtYXJrZXJT
dGFydCA9IHJlc291cmNlcy0+bWFya2VyU3RhcnQoKTsKKyAgICBhdXRvKiBtYXJrZXJNaWQgPSBy
ZXNvdXJjZXMtPm1hcmtlck1pZCgpOworICAgIGF1dG8qIG1hcmtlckVuZCA9IHJlc291cmNlcy0+
bWFya2VyRW5kKCk7CisgICAgaWYgKCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJr
ZXJFbmQpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIEZsb2F0UmVjdCBib3Vu
ZGFyaWVzOworICAgIHVuc2lnbmVkIHNpemUgPSBtX21hcmtlclBvc2l0aW9ucy5zaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAoUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlciA9IG1hcmtlckZvclR5cGUobV9tYXJrZXJQb3Np
dGlvbnNbaV0udHlwZSwgbWFya2VyU3RhcnQsIG1hcmtlck1pZCwgbWFya2VyRW5kKSkKKyAgICAg
ICAgICAgIGJvdW5kYXJpZXMudW5pdGUobWFya2VyLT5tYXJrZXJCb3VuZGFyaWVzKG1hcmtlci0+
bWFya2VyVHJhbnNmb3JtYXRpb24obV9tYXJrZXJQb3NpdGlvbnNbaV0ub3JpZ2luLCBtX21hcmtl
clBvc2l0aW9uc1tpXS5hbmdsZSwgc3Ryb2tlV2lkdGgoKSkpKTsKKyAgICB9CisgICAgcmV0dXJu
IGJvdW5kYXJpZXM7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlT2Jq
ZWN0Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIHJldHVybiBwYXRoKCkuYm91bmRpbmdSZWN0
KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlU3Ryb2tlQm91bmRp
bmdCb3goKSBjb25zdAoreworICAgIEFTU0VSVChtX3BhdGgpOworICAgIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveCA9IG1fZmlsbEJvdW5kaW5nQm94OworCisgICAgaWYgKHN0eWxlKCkuc3Zn
U3R5bGUoKS5oYXNTdHJva2UoKSkgeworICAgICAgICBpZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgp
KSB7CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5v
blNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFs
PEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSA9IG5vblNjYWxpbmdUcmFuc2Zvcm0uaW52ZXJzZSgp
KSB7CisgICAgICAgICAgICAgICAgUGF0aCogdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQYXRo
KG1fcGF0aC5nZXQoKSwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgRmxv
YXRSZWN0IHN0cm9rZUJvdW5kaW5nUmVjdCA9IHVzZVBhdGgtPnN0cm9rZUJvdW5kaW5nUmVjdChG
dW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiB7IFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5
U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUoKSwgKnRoaXMpOworICAgICAgICAg
ICAgICAgIH0gfSk7CisgICAgICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdSZWN0ID0gaW52ZXJz
ZS52YWx1ZSgpLm1hcFJlY3Qoc3Ryb2tlQm91bmRpbmdSZWN0KTsKKyAgICAgICAgICAgICAgICBz
dHJva2VCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3VuZGluZ1JlY3QpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUo
cGF0aCgpLnN0cm9rZUJvdW5kaW5nUmVjdChGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYp
PiB7IFt0aGlzXSAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHls
ZSgpLCAqdGhpcyk7CisgICAgICAgICAgICB9IH0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBzdHJva2VCb3VuZGluZ0JveDsKK30KKworZmxvYXQgUmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZVdpZHRoKCkgY29uc3QKK3sKKyAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQo
JmdyYXBoaWNzRWxlbWVudCgpKTsKKyAgICByZXR1cm4gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxl
bmd0aChzdHlsZSgpLnN0cm9rZVdpZHRoKCkpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpo
YXNTbW9vdGhTdHJva2UoKSBjb25zdAoreworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdT
dHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKKyAgICByZXR1cm4gc3ZnU3R5bGUuc3Ryb2tlRGFz
aEFycmF5KCkuaXNFbXB0eSgpCisgICAgICAgICYmIHN0eWxlKCkuc3Ryb2tlTWl0ZXJMaW1pdCgp
ID09IHN0eWxlKCkuaW5pdGlhbFN0cm9rZU1pdGVyTGltaXQoKQorICAgICAgICAmJiBzdHlsZSgp
LmpvaW5TdHlsZSgpID09IHN0eWxlKCkuaW5pdGlhbEpvaW5TdHlsZSgpCisgICAgICAgICYmIHN0
eWxlKCkuY2FwU3R5bGUoKSA9PSBzdHlsZSgpLmluaXRpYWxDYXBTdHlsZSgpOworfQorCit2b2lk
IFJlbmRlclNWR1NoYXBlOjpkcmF3TWFya2VycyhQYWludEluZm8mKQoreworICAgIEFTU0VSVCgh
bV9tYXJrZXJQb3NpdGlvbnMuaXNFbXB0eSgpKTsKKworICAgIGF1dG8qIHJlc291cmNlcyA9IFNW
R1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJlcigqdGhpcyk7CisgICAg
aWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIG1hcmtlclN0YXJ0
ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOworICAgIGF1dG8qIG1hcmtlck1pZCA9IHJlc291
cmNlcy0+bWFya2VyTWlkKCk7CisgICAgYXV0byogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJr
ZXJFbmQoKTsKKyAgICBpZiAoIW1hcmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVu
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJv
a2VXaWR0aCgpOworICAgIHVuc2lnbmVkIHNpemUgPSBtX21hcmtlclBvc2l0aW9ucy5zaXplKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAo
YXV0byogbWFya2VyID0gbWFya2VyRm9yVHlwZShtX21hcmtlclBvc2l0aW9uc1tpXS50eXBlLCBt
YXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQpKSB7CisgICAgICAgICAgICBVTlVTRURf
UEFSQU0obWFya2VyKTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzdHJva2VXaWR0aCk7CisK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVuZGVyTGF5ZXIgY2hhbmdl
cworICAgICAgICAgICAgLy8gQVNTRVJUKG1hcmtlci0+aGFzTGF5ZXIoKSk7CisgICAgICAgICAg
ICAvLyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRJbmZvLmNvbnRl
eHQoKSk7CisgICAgICAgICAgICAvLyBhdXRvIGNvbnRlbnRUcmFuc2Zvcm0gPSBtYXJrZXItPm1h
cmtlclRyYW5zZm9ybWF0aW9uKG1fbWFya2VyUG9zaXRpb25zW2ldLm9yaWdpbiwgbV9tYXJrZXJQ
b3NpdGlvbnNbaV0uYW5nbGUsIHN0cm9rZVdpZHRoKTsKKyAgICAgICAgICAgIC8vIG1hcmtlci0+
bGF5ZXIoKS0+cGFpbnRTVkdSZXNvdXJjZUxheWVyKHBhaW50SW5mby5jb250ZXh0KCksIExheW91
dFJlY3Q6OmluZmluaXRlUmVjdCgpLCBjb250ZW50VHJhbnNmb3JtKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworc3RkOjp1bmlxdWVfcHRyPFBhdGg+IFJlbmRlclNWR1NoYXBlOjpjcmVhdGVQYXRo
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxQYXRoPihwYXRoRnJvbUdyYXBoaWNz
RWxlbWVudCgmZ3JhcGhpY3NFbGVtZW50KCkpKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6
cHJvY2Vzc01hcmtlclBvc2l0aW9ucygpCit7CisgICAgbV9tYXJrZXJQb3NpdGlvbnMuY2xlYXIo
KTsKKworICAgIGlmICghc2hvdWxkR2VuZXJhdGVNYXJrZXJQb3NpdGlvbnMoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fcGF0aCk7CisKKyAgICBTVkdNYXJrZXJEYXRhIG1hcmtl
ckRhdGEobV9tYXJrZXJQb3NpdGlvbnMsIFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJj
ZXNGb3JSZW5kZXJlcigqdGhpcyktPm1hcmtlclJldmVyc2VTdGFydCgpKTsKKyAgICBtX3BhdGgt
PmFwcGx5KFsmbWFya2VyRGF0YV0oY29uc3QgUGF0aEVsZW1lbnQmIHBhdGhFbGVtZW50KSB7Cisg
ICAgICAgIFNWR01hcmtlckRhdGE6OnVwZGF0ZUZyb21QYXRoRWxlbWVudChtYXJrZXJEYXRhLCBw
YXRoRWxlbWVudCk7CisgICAgfSk7CisgICAgbWFya2VyRGF0YS5wYXRoSXNEb25lKCk7Cit9CisK
K3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQoreworICAgIGF1dG8qIG9sZFN0eWxlID0g
aGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOworICAgIGlmIChvbGRT
dHlsZSkgeworICAgICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2U6OkxheW91dCkKKyAg
ICAgICAgICAgIHNldE5lZWRzU2hhcGVVcGRhdGUoKTsKKyAgICB9CisKKyAgICBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKK30KKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWZhNGQ4YzM2MjU3
NWMwNjlmYThiMjkwZjdhZWE3ZjZlODMzMDQ3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaApAQCAtMCwwICsxLDE1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBI
b2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSwgMjAyMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCisvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24KKy8vICNpbmNsdWRlICJTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZH
TWFya2VyRGF0YS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXI7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CitjbGFzcyBS
ZW5kZXJTVkdQYXRoOworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2U7CitjbGFzcyBTVkdHcmFwaGlj
c0VsZW1lbnQ7CisKK2NsYXNzIFJlbmRlclNWR1NoYXBlIDogcHVibGljIFJlbmRlclNWR01vZGVs
T2JqZWN0IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFJlbmRlclNWR1NoYXBlKTsKK3B1
YmxpYzoKKyAgICBlbnVtIFBvaW50Q29vcmRpbmF0ZVNwYWNlIHsKKyAgICAgICAgR2xvYmFsQ29v
cmRpbmF0ZVNwYWNlLAorICAgICAgICBMb2NhbENvb3JkaW5hdGVTcGFjZQorICAgIH07CisgICAg
UmVuZGVyU1ZHU2hhcGUoU1ZHR3JhcGhpY3NFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CisgICAg
dmlydHVhbCB+UmVuZGVyU1ZHU2hhcGUoKTsKKworICAgIGlubGluZSBTVkdHcmFwaGljc0VsZW1l
bnQmIGdyYXBoaWNzRWxlbWVudCgpIGNvbnN0OworCisgICAgdm9pZCBzZXROZWVkc1NoYXBlVXBk
YXRlKCkgeyBtX25lZWRzU2hhcGVVcGRhdGUgPSB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlsbFNoYXBlKEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJv
a2VTaGFwZShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5k
ZXJpbmdEaXNhYmxlZCgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNQb2ludEluRmlsbChjb25z
dCBGbG9hdFBvaW50Jik7CisgICAgYm9vbCBpc1BvaW50SW5TdHJva2UoY29uc3QgRmxvYXRQb2lu
dCYpOworCisgICAgZmxvYXQgZ2V0VG90YWxMZW5ndGgoKSBjb25zdDsKKyAgICBGbG9hdFBvaW50
IGdldFBvaW50QXRMZW5ndGgoZmxvYXQgZGlzdGFuY2UpIGNvbnN0OworCisgICAgYm9vbCBoYXNQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9CisgICAgUGF0aCYgcGF0aCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9wYXRoKTsKKyAgICAgICAgcmV0dXJuICptX3Bh
dGg7CisgICAgfQorICAgIHZvaWQgY2xlYXJQYXRoKCkgeyBtX3BhdGggPSBudWxscHRyOyB9CisK
KyAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2ZpbGxCb3VuZGluZ0JveDsgfQorICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKworICAgIEZsb2F0UmVj
dCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IGZpbmFsCisgICAgeworICAg
ICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24K
KyAgICAgICAgLy8gcmV0dXJuIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OmNvbXB1dGVSZXBh
aW50Qm91bmRpbmdCb3goKnRoaXMpOyB9CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAg
ICB9CisKKyAgICBGbG9hdFJlY3QgY29tcHV0ZU1hcmtlckJvdW5kaW5nQm94KCkgY29uc3Q7CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGVsZW1lbnQoKSBjb25zdCA9IGRlbGV0ZTsKKworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7CisgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiwgUG9pbnRDb29yZGluYXRlU3BhY2UgPSBHbG9iYWxDb29y
ZGluYXRlU3BhY2UpOworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1bGUpIGNvbnN0OworICAgIGZsb2F0IHN0
cm9rZVdpZHRoKCkgY29uc3Q7CisgICAgYm9vbCBoYXNTbW9vdGhTdHJva2UoKSBjb25zdDsKKwor
ICAgIGJvb2wgaGFzTm9uU2NhbGluZ1N0cm9rZSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuc3Zn
U3R5bGUoKS52ZWN0b3JFZmZlY3QoKSA9PSBWZWN0b3JFZmZlY3Q6Ok5vblNjYWxpbmdTdHJva2U7
IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpIGNvbnN0
OworICAgIFBhdGgqIG5vblNjYWxpbmdTdHJva2VQYXRoKGNvbnN0IFBhdGgqLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsK
KyAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKKworcHJpdmF0ZToKKyAgICAvLyBI
aXQtZGV0ZWN0aW9uIHNlcGFyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKKyAgICBi
b29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0
cnVlLCBjb25zdCBXaW5kUnVsZSBmaWxsUnVsZSA9IFdpbmRSdWxlOjpOb25aZXJvKTsKKyAgICBi
b29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tl
ID0gdHJ1ZSk7CisKKyAgICBib29sIGlzU1ZHU2hhcGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CisgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAiUmVuZGVyU1ZHU2hhcGUiOyB9CisKKyAgICB2b2lkIGxheW91dCgpIGZpbmFsOworICAg
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBmaW5hbDsKKworICAg
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOworCisgICAg
RmxvYXRSZWN0IGNhbGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZVN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisKKyAgICBib29sIHNldHVw
Tm9uU2NhbGluZ1N0cm9rZUNvbnRleHQoQWZmaW5lVHJhbnNmb3JtJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciYpOworCisgICAgYm9vbCBzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucygp
IGNvbnN0OworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxQYXRoPiBjcmVhdGVQYXRoKCkgY29u
c3Q7CisgICAgdm9pZCBwcm9jZXNzTWFya2VyUG9zaXRpb25zKCk7CisKKyAgICB2b2lkIGZpbGxT
aGFwZShjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgc3Ry
b2tlU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lk
IHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZmlsbFN0cm9rZU1hcmtl
cnMoUGFpbnRJbmZvJik7CisgICAgdm9pZCBkcmF3TWFya2VycyhQYWludEluZm8mKTsKKworICAg
IHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUm
IG5ld1N0eWxlKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBib29sIG1fbmVlZHNTaGFwZVVw
ZGF0ZSB7IHRydWUgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxQYXRoPiBtX3BhdGg7CisgICAg
VmVjdG9yPE1hcmtlclBvc2l0aW9uPiBtX21hcmtlclBvc2l0aW9uczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJl
bmRlclNWR1NoYXBlLCBpc1NWR1NoYXBlKCkpCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlSW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0NTA5ZjRmNGVhODVhYzc1NTQzMjk5
M2JiODg4ZjFiYzBkM2M1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlSW5saW5lcy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5F
KQorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCisjaW5jbHVkZSAiU1ZHR3JhcGhpY3NFbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIFNWR0dyYXBoaWNzRWxlbWVu
dCYgUmVuZGVyU1ZHU2hhcGU6OmdyYXBoaWNzRWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGRvd25jYXN0PFNWR0dyYXBoaWNzRWxlbWVudD4oUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmVsZW1l
bnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExBWUVSX0JB
U0VEX1NWR19FTkdJTkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwCmluZGV4IDc0Y2VjYzQxZjg1OTM2YTBhM2EzNzhkMTNhM2RkMDRhODM2
ZDFlN2QuLjEwNDIwYzAzMWJmYTliODQ4MTZkZDViOWNlNTAzMjA3ZWRiNTkzMGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCIKICNp
bmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCisjaW5jbHVkZSAiTGVnYWN5UmVuZGVyU1ZH
U2hhcGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJD
aGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXgg
Yzk5NWFlMzFiYzZmMTM0NWE0YjFjNGQwOTRiNzE3ODgyMWMyNzIwYy4uZDVlM2MwOTNmZDkwMjJl
OTU3YzI5MTczNjAwMGZjYzkxNzRhZDc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGluZXMuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdS
b290LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJT
VkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKQEAgLTE1MSwyNSArMTUyLDcxIEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTVkdTcHJlYWRNZXRob2RU
eXBlJiB0eXBlKQogICAgIHJldHVybiB0czsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVTVkdQYWlu
dGluZ1Jlc291cmNlKFRleHRTdHJlYW0mIHRzLCBSZW5kZXJTVkdSZXNvdXJjZSogcmVzb3VyY2Up
CitzdGF0aWMgdm9pZCB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR1Jlc291cmNlJiByZXNvdXJjZSkKIHsKLSAgICBpZiAocmVzb3VyY2UtPnJl
c291cmNlVHlwZSgpID09IFNvbGlkQ29sb3JSZXNvdXJjZVR5cGUpIHsKLSAgICAgICAgdHMgPDwg
Ilt0eXBlPVNPTElEXSBbY29sb3I9IiA8PCBzdGF0aWNfY2FzdDxSZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IqPihyZXNvdXJjZSktPmNvbG9yKCkgPDwgIl0iOworICAgIGF1dG8gcmVzb3VyY2VU
eXBlID0gcmVzb3VyY2UucmVzb3VyY2VUeXBlKCk7CisgICAgaWYgKHJlc291cmNlVHlwZSA9PSBT
b2xpZENvbG9yUmVzb3VyY2VUeXBlKSB7CisgICAgICAgIHRzIDw8ICJbdHlwZT1TT0xJRF0gW2Nv
bG9yPSIgPDwgZG93bmNhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yPihyZXNvdXJjZSku
Y29sb3IoKSA8PCAiXSI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBBbGwgb3Ro
ZXIgcmVzb3VyY2VzIGRlcml2ZSBmcm9tIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyCi0gICAg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIGNvbnRhaW5lciA9IHN0YXRpY19jYXN0PFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyKj4ocmVzb3VyY2UpOwotICAgIFNWR0VsZW1lbnQmIGVsZW1l
bnQgPSBjb250YWluZXItPmVsZW1lbnQoKTsKLQotICAgIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VU
eXBlKCkgPT0gUGF0dGVyblJlc291cmNlVHlwZSkKKyAgICBpZiAocmVzb3VyY2VUeXBlID09IFBh
dHRlcm5SZXNvdXJjZVR5cGUpCiAgICAgICAgIHRzIDw8ICJbdHlwZT1QQVRURVJOXSI7Ci0gICAg
ZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNlVHlwZSgpID09IExpbmVhckdyYWRpZW50UmVzb3Vy
Y2VUeXBlKQorICAgIGVsc2UgaWYgKHJlc291cmNlVHlwZSA9PSBMaW5lYXJHcmFkaWVudFJlc291
cmNlVHlwZSkKICAgICAgICAgdHMgPDwgIlt0eXBlPUxJTkVBUi1HUkFESUVOVF0iOwotICAgIGVs
c2UgaWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBSYWRpYWxHcmFkaWVudFJlc291cmNl
VHlwZSkKKyAgICBlbHNlIGlmIChyZXNvdXJjZVR5cGUgPT0gUmFkaWFsR3JhZGllbnRSZXNvdXJj
ZVR5cGUpCiAgICAgICAgIHRzIDw8ICJbdHlwZT1SQURJQUwtR1JBRElFTlRdIjsKIAotICAgIHRz
IDw8ICIgW2lkPVwiIiA8PCBlbGVtZW50LmdldElkQXR0cmlidXRlKCkgPDwgIlwiXSI7CisgICAg
Ly8gQWxsIG90aGVyIHJlc291cmNlcyBkZXJpdmUgZnJvbSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lcgorICAgIGNvbnN0IGF1dG8mIGNvbnRhaW5lciA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyJj4ocmVzb3VyY2UpOworICAgIHRzIDw8ICIgW2lkPVwiIiA8
PCBjb250YWluZXIuZWxlbWVudCgpLmdldElkQXR0cmlidXRlKCkgPDwgIlwiXSI7Cit9CisKK3N0
YXRpYyB2b2lkIHdyaXRlU1ZHRmlsbFBhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTVkdSZXNvdXJjZSYgZmls
bFBhaW50aW5nUmVzb3VyY2UpCit7CisgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7Cisg
ICAgdHMgPDwgIiBbZmlsbD17IiA8PCBzOworICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0
cywgZmlsbFBhaW50aW5nUmVzb3VyY2UpOworCisgICAgY29uc3QgYXV0byYgc3ZnU3R5bGUgPSBy
ZW5kZXJlci5zdHlsZSgpLnN2Z1N0eWxlKCk7CisgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJv
cGFjaXR5Iiwgc3ZnU3R5bGUuZmlsbE9wYWNpdHkoKSwgMS4wZik7CisgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJmaWxsIHJ1bGUiLCBzdmdTdHlsZS5maWxsUnVsZSgpLCBXaW5kUnVsZTo6Tm9u
WmVybyk7CisgICAgdHMgPDwgIn1dIjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVTVkdTdHJva2VQ
YWludGluZ1Jlc291cmNlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2UmIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UsIGNv
bnN0IFNWR0dyYXBoaWNzRWxlbWVudCYgc2hhcGUpCit7CisgICAgVGV4dFN0cmVhbVNlcGFyYXRv
ciBzKCIgIik7CisgICAgdHMgPDwgIiBbc3Ryb2tlPXsiIDw8IHM7CisgICAgd3JpdGVTVkdQYWlu
dGluZ1Jlc291cmNlKHRzLCBzdHJva2VQYWludGluZ1Jlc291cmNlKTsKKworICAgIGNvbnN0IGF1
dG8mIHN0eWxlID0gcmVuZGVyZXIuc3R5bGUoKTsKKyAgICBjb25zdCBhdXRvJiBzdmdTdHlsZSA9
IHN0eWxlLnN2Z1N0eWxlKCk7CisKKyAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQo
JnNoYXBlKTsKKyAgICBkb3VibGUgZGFzaE9mZnNldCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JM
ZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKTsKKyAgICBkb3VibGUgc3Ryb2tlV2lk
dGggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN0cm9rZVdpZHRoKCkpOwor
ICAgIGNvbnN0IGF1dG8mIGRhc2hlcyA9IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpOworCisg
ICAgRGFzaEFycmF5IGRhc2hBcnJheTsKKyAgICBmb3IgKGF1dG8mIGxlbmd0aCA6IGRhc2hlcykK
KyAgICAgICAgZGFzaEFycmF5LmFwcGVuZChsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCkpOwor
CisgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUuc3Ryb2tlT3Bh
Y2l0eSgpLCAxLjBmKTsKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgInN0cm9rZSB3aWR0aCIs
IHN0cm9rZVdpZHRoLCAxLjApOworICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAibWl0ZXIgbGlt
aXQiLCBzdHlsZS5zdHJva2VNaXRlckxpbWl0KCksIDQuMGYpOworICAgIHdyaXRlSWZOb3REZWZh
dWx0KHRzLCAibGluZSBjYXAiLCBzdHlsZS5jYXBTdHlsZSgpLCBMaW5lQ2FwOjpCdXR0KTsKKyAg
ICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImxpbmUgam9pbiIsIHN0eWxlLmpvaW5TdHlsZSgpLCBM
aW5lSm9pbjo6TWl0ZXIpOworICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAiZGFzaCBvZmZzZXQi
LCBkYXNoT2Zmc2V0LCAwLjApOworICAgIGlmICghZGFzaEFycmF5LmlzRW1wdHkoKSkKKyAgICAg
ICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiZGFzaCBhcnJheSIsIGRhc2hBcnJheSk7CisKKyAg
ICBpZiAoaXM8U1ZHR2VvbWV0cnlFbGVtZW50PihzaGFwZSkpIHsKKyAgICAgICAgZG91YmxlIHBh
dGhMZW5ndGggPSBkb3duY2FzdDxTVkdHZW9tZXRyeUVsZW1lbnQ+KHNoYXBlKS5wYXRoTGVuZ3Ro
KCk7CisgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAicGF0aCBsZW5ndGgiLCBwYXRoTGVu
Z3RoLCAwLjApOworICAgIH0KKworICAgIHRzIDw8ICJ9XSI7CiB9CiAKIHN0YXRpYyB2b2lkIHdy
aXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQpA
QCAtMTgxLDUyICsyMjgsMzQgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiAgICAgICAgIHdyaXRlTmFtZVZhbHVl
UGFpcih0cywgInRyYW5zZm9ybSIsIHJlbmRlcmVyLmxvY2FsVHJhbnNmb3JtKCkpOwogICAgIHdy
aXRlSWZOb3REZWZhdWx0KHRzLCAiaW1hZ2UgcmVuZGVyaW5nIiwgc3R5bGUuaW1hZ2VSZW5kZXJp
bmcoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlbmRlcmluZygpKTsKICAgICB3cml0ZUlm
Tm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdHlsZS5vcGFjaXR5KCksIFJlbmRlclN0eWxlOjpp
bml0aWFsT3BhY2l0eSgpKTsKKwogICAgIGlmIChpczxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVu
ZGVyZXIpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHNoYXBlID0gZG93bmNhc3Q8TGVnYWN5UmVu
ZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKTsKIAogICAgICAgICBDb2xvciBmYWxsYmFja0NvbG9yOwot
ICAgICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBS
ZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PExlZ2Fj
eVJlbmRlclNWR1NoYXBlJj4oc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkg
ewotICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7Ci0gICAgICAgICAgICB0
cyA8PCAiIFtzdHJva2U9eyIgPDwgczsKLSAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNv
dXJjZSh0cywgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIFNWR0xlbmd0
aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmc2hhcGUuZ3JhcGhpY3NFbGVtZW50KCkpOwotICAgICAg
ICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2
Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSk7Ci0gICAgICAgICAgICBkb3VibGUgc3Ryb2tlV2lk
dGggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN0cm9rZVdpZHRoKCkpOwot
ICAgICAgICAgICAgY29uc3QgYXV0byYgZGFzaGVzID0gc3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5
KCk7Ci0KLSAgICAgICAgICAgIERhc2hBcnJheSBkYXNoQXJyYXk7Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGxlbmd0aCA6IGRhc2hlcykKLSAgICAgICAgICAgICAgICBkYXNoQXJyYXkuYXBwZW5k
KGxlbmd0aC52YWx1ZShsZW5ndGhDb250ZXh0KSk7Ci0KLSAgICAgICAgICAgIHdyaXRlSWZOb3RE
ZWZhdWx0KHRzLCAib3BhY2l0eSIsIHN2Z1N0eWxlLnN0cm9rZU9wYWNpdHkoKSwgMS4wZik7Ci0g
ICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgInN0cm9rZSB3aWR0aCIsIHN0cm9rZVdp
ZHRoLCAxLjApOwotICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJtaXRlciBsaW1p
dCIsIHN0eWxlLnN0cm9rZU1pdGVyTGltaXQoKSwgNC4wZik7Ci0gICAgICAgICAgICB3cml0ZUlm
Tm90RGVmYXVsdCh0cywgImxpbmUgY2FwIiwgc3R5bGUuY2FwU3R5bGUoKSwgTGluZUNhcDo6QnV0
dCk7Ci0gICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImxpbmUgam9pbiIsIHN0eWxl
LmpvaW5TdHlsZSgpLCBMaW5lSm9pbjo6TWl0ZXIpOwotICAgICAgICAgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJkYXNoIG9mZnNldCIsIGRhc2hPZmZzZXQsIDAuMCk7Ci0gICAgICAgICAgICBp
ZiAoIWRhc2hBcnJheS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgd3JpdGVOYW1lVmFsdWVQ
YWlyKHRzLCAiZGFzaCBhcnJheSIsIGRhc2hBcnJheSk7Ci0KLSAgICAgICAgICAgIGlmIChpczxT
VkdHZW9tZXRyeUVsZW1lbnQ+KHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKSkgewotICAgICAgICAg
ICAgICAgIGRvdWJsZSBwYXRoTGVuZ3RoID0gZG93bmNhc3Q8U1ZHR2VvbWV0cnlFbGVtZW50Pihz
aGFwZS5ncmFwaGljc0VsZW1lbnQoKSkucGF0aExlbmd0aCgpOwotICAgICAgICAgICAgICAgIHdy
aXRlSWZOb3REZWZhdWx0KHRzLCAicGF0aCBsZW5ndGgiLCBwYXRoTGVuZ3RoLCAwLjApOwotICAg
ICAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJl
bmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8TGVnYWN5
UmVuZGVyU1ZHU2hhcGUmPihzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQor
ICAgICAgICAgICAgd3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291cmNlKHRzLCByZW5kZXJlciwg
KnN0cm9rZVBhaW50aW5nUmVzb3VyY2UsIHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKTsKIAotICAg
ICAgICAgICAgdHMgPDwgIn1dIjsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogZmlsbFBh
aW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2Uo
Y29uc3RfY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5bGUoKSwg
ZmFsbGJhY2tDb2xvcikpCisgICAgICAgICAgICB3cml0ZVNWR0ZpbGxQYWludGluZ1Jlc291cmNl
KHRzLCByZW5kZXJlciwgKmZpbGxQYWludGluZ1Jlc291cmNlKTsKIAotICAgICAgICBpZiAoUmVu
ZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6
OmZpbGxQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGUmPihz
aGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7Ci0gICAgICAgICAgICBUZXh0
U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKLSAgICAgICAgICAgIHRzIDw8ICIgW2ZpbGw9eyIgPDwg
czsKLSAgICAgICAgICAgIHdyaXRlU1ZHUGFpbnRpbmdSZXNvdXJjZSh0cywgZmlsbFBhaW50aW5n
UmVzb3VyY2UpOworICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImNsaXAgcnVsZSIsIHN2
Z1N0eWxlLmNsaXBSdWxlKCksIFdpbmRSdWxlOjpOb25aZXJvKTsKKyAgICB9CisKKyNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBlbHNlIGlmIChpczxMZWdhY3lSZW5kZXJT
VkdTaGFwZT4ocmVuZGVyZXIpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHNoYXBlID0gZG93bmNh
c3Q8UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKTsKKworICAgICAgICBDb2xvciBmYWxsYmFja0Nv
bG9yOworICAgICAgICBpZiAoYXV0byogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8UmVuZGVyU1ZHU2hh
cGUmPihzaGFwZSksIHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKQorICAgICAgICAgICAg
d3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291cmNlKHRzLCByZW5kZXJlciwgKnN0cm9rZVBhaW50
aW5nUmVzb3VyY2UsIHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKTsKKworICAgICAgICBpZiAoYXV0
byogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5n
UmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5bGUo
KSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgICAgICB3cml0ZVNWR0ZpbGxQYWludGluZ1Jlc291
cmNlKHRzLCByZW5kZXJlciwgKmZpbGxQYWludGluZ1Jlc291cmNlKTsKIAotICAgICAgICAgICAg
d3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUuZmlsbE9wYWNpdHkoKSwg
MS4wZik7Ci0gICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImZpbGwgcnVsZSIsIHN2
Z1N0eWxlLmZpbGxSdWxlKCksIFdpbmRSdWxlOjpOb25aZXJvKTsKLSAgICAgICAgICAgIHRzIDw8
ICJ9XSI7Ci0gICAgICAgIH0KICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJjbGlwIHJ1
bGUiLCBzdmdTdHlsZS5jbGlwUnVsZSgpLCBXaW5kUnVsZTo6Tm9uWmVybyk7CiAgICAgfQorI2Vu
ZGlmCiAKICAgICB3cml0ZUlmTm90RW1wdHkodHMsICJzdGFydCBtYXJrZXIiLCBzdmdTdHlsZS5t
YXJrZXJTdGFydFJlc291cmNlKCkpOwogICAgIHdyaXRlSWZOb3RFbXB0eSh0cywgIm1pZGRsZSBt
YXJrZXIiLCBzdmdTdHlsZS5tYXJrZXJNaWRSZXNvdXJjZSgpKTsKQEAgLTI1MCwxMSArMjc5LDgg
QEAgc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHlsZShUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyRWxlbWVudCYgcmUKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBMZWdhY3lSZW5kZXJT
VkdTaGFwZSYgc2hhcGUpCitzdGF0aWMgdm9pZCB3cml0ZVNWR0dyYXBoaWNzRWxlbWVudChUZXh0
U3RyZWFtJiB0cywgU1ZHR3JhcGhpY3NFbGVtZW50JiBzdmdFbGVtZW50KQogewotICAgIHdyaXRl
UG9zaXRpb25BbmRTdHlsZSh0cywgc2hhcGUpOwotCi0gICAgU1ZHR3JhcGhpY3NFbGVtZW50JiBz
dmdFbGVtZW50ID0gc2hhcGUuZ3JhcGhpY3NFbGVtZW50KCk7CiAgICAgU1ZHTGVuZ3RoQ29udGV4
dCBsZW5ndGhDb250ZXh0KCZzdmdFbGVtZW50KTsKIAogICAgIGlmIChpczxTVkdSZWN0RWxlbWVu
dD4oc3ZnRWxlbWVudCkpIHsKQEAgLTI5MSw5ICszMTcsMjQgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlJiBz
aGFwZSkKICAgICAgICAgd3JpdGVOYW1lQW5kUXVvdGVkVmFsdWUodHMsICJkYXRhIiwgcGF0aFN0
cmluZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTGVnYWN5
UmVuZGVyU1ZHU2hhcGUmIHNoYXBlKQoreworICAgIHdyaXRlUG9zaXRpb25BbmRTdHlsZSh0cywg
c2hhcGUpOworICAgIHdyaXRlU1ZHR3JhcGhpY3NFbGVtZW50KHRzLCBzaGFwZS5ncmFwaGljc0Vs
ZW1lbnQoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlKQoreworICAgIHdyaXRlUG9zaXRpb25BbmRTdHls
ZSh0cywgc2hhcGUpOworICAgIHdyaXRlU1ZHR3JhcGhpY3NFbGVtZW50KHRzLCBzaGFwZS5ncmFw
aGljc0VsZW1lbnQoKSk7CisgICAgcmV0dXJuIHRzOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lk
IHdyaXRlUmVuZGVyU1ZHVGV4dEJveChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHVGV4
dCYgdGV4dCkKIHsKICAgICBhdXRvKiBib3ggPSBkb3duY2FzdDxTVkdSb290SW5saW5lQm94Pih0
ZXh0LmZpcnN0Um9vdEJveCgpKTsKQEAgLTU1MSw2ICs1OTIsMTUgQEAgdm9pZCB3cml0ZVNWR0lt
YWdlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdJbWFnZSYgaW1hZ2UsIE9wdGlvblNl
dDxSZW5kZXIKICAgICB3cml0ZVJlc291cmNlcyh0cywgaW1hZ2UsIGJlaGF2aW9yKTsKIH0KIAor
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQordm9pZCB3cml0ZShUZXh0U3RyZWFt
JiB0cywgY29uc3QgUmVuZGVyU1ZHU2hhcGUmIHNoYXBlLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0
RmxhZz4gYmVoYXZpb3IpCit7CisgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGJl
aGF2aW9yKTsKKyAgICB0cyA8PCBzaGFwZSA8PCAiXG4iOworICAgIHdyaXRlUmVzb3VyY2VzKHRz
LCBzaGFwZSwgYmVoYXZpb3IpOworfQorI2VuZGlmCisKIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlJiBzaGFwZSwgT3B0aW9uU2V0PFJlbmRlckFz
VGV4dEZsYWc+IGJlaGF2aW9yKQogewogICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHNoYXBl
LCBiZWhhdmlvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5oCmluZGV4IDdhYzNmY2VjOGQzN2U3NTQ1MTUwOGFkNGM1ZjJkYzJiZTE4
ZTI3ZmUuLmVjODg0NTUzNWYwODVkNjA2NDAxYzNjNmRiYmExMTg3MDljZTQ5YWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCkBA
IC00NSwxNSArNDUsMTcgQEAgY2xhc3MgUmVuZGVyU1ZHSW1hZ2U7CiBjbGFzcyBSZW5kZXJTVkdJ
bmxpbmVUZXh0OwogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI7CiBjbGFzcyBSZW5k
ZXJTVkdSb290OworY2xhc3MgUmVuZGVyU1ZHU2hhcGU7CiBjbGFzcyBSZW5kZXJTVkdUZXh0Owog
Y2xhc3MgU1ZHVW5pdFR5cGVzOwogCiAvLyBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbWFpbiBSZW5k
ZXJUcmVlQXNUZXh0IGNvZGUKIHZvaWQgd3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgTGVn
YWN5UmVuZGVyU1ZHUm9vdCYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7Cit2b2lkIHdy
aXRlKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlJiwgT3B0aW9u
U2V0PFJlbmRlckFzVGV4dEZsYWc+KTsKICNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKIHZvaWQgd3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUm9vdCYsIE9w
dGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7Cit2b2lkIHdyaXRlKFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlclNWR1NoYXBlJiwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+KTsKICNl
bmRpZgotdm9pZCB3cml0ZShXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdT
aGFwZSYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7CiB2b2lkIHdyaXRlU1ZHR3JhZGll
bnRTdG9wKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0dyYWRpZW50U3RvcCYsIE9w
dGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7CiB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWlu
ZXIoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImLCBP
cHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwogdm9pZCB3cml0ZVNWR0NvbnRhaW5lcihXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdDb250YWluZXImLCBPcHRpb25TZXQ8UmVuZGVy
QXNUZXh0RmxhZz4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxl
bWVudC5jcHAKaW5kZXggZjUyOTk5NjY2YTgxYmZkNTQwYWRmZTNjNDdmMDk5ZThiM2RmYTljMS4u
Zjk1MjcyYTRkNWQ4YTg5YjU2MGM2ZGVhODBmNjg5YzAxZjFhNjY2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiUGF0aFRyYXZlcnNhbFN0YXRlLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxl
bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxl
bWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2VvbWV0cnlFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdHZW9tZXRyeUVsZW1lbnQuY3BwCmluZGV4IDljNjhkNGU3NDQ2YzE4NjBh
NTA2MThhMGNlMzBhNmMxOTI1NjJmN2QuLmU2ZjJjMTc5OTY2YWJkYTIyMTRiNzZiMDk2YTNjNWFi
NTQyN2YxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHZW9tZXRyeUVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHZW9tZXRyeUVsZW1lbnQuY3BwCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRE9NUG9pbnQuaCIKICNpbmNsdWRlICJMZWdhY3lS
ZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIK
ICNpbmNsdWRlICJTVkdQYXRoVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIKQEAg
LTQ4LDUyICs0OSw4OCBAQCBmbG9hdCBTVkdHZW9tZXRyeUVsZW1lbnQ6OmdldFRvdGFsTGVuZ3Ro
KCkgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogCi0gICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJT
VkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzLT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
cmV0dXJuIHJlbmRlcmVyLT5nZXRUb3RhbExlbmd0aCgpOworICAgIGlmIChpczxMZWdhY3lSZW5k
ZXJTVkdTaGFwZT4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8TGVnYWN5UmVu
ZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKS0+Z2V0VG90YWxMZW5ndGgoKTsKKworI2lmIEVOQUJMRShM
QVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChpczxSZW5kZXJTVkdTaGFwZT4ocmVuZGVy
ZXIpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKS0+
Z2V0VG90YWxMZW5ndGgoKTsKKyNlbmRpZgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZjxTVkdQb2ludD4+IFNWR0dlb21ldHJ5
RWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSkgY29uc3QKIHsKICAgICBk
b2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAg
YXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVu
ZGVyZXIoKSk7Ci0gICAgCisgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwor
CiAgICAgLy8gU3BlYzogSWYgY3VycmVudCBlbGVtZW50IGlzIGEgbm9uLXJlbmRlcmVkIGVsZW1l
bnQsIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yLgogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotICAgIAorCiAgICAg
Ly8gU3BlYzogQ2xhbXAgZGlzdGFuY2UgdG8gWzAsIGxlbmd0aF0uCiAgICAgZGlzdGFuY2UgPSBj
bGFtcFRvPGZsb2F0PihkaXN0YW5jZSwgMCwgZ2V0VG90YWxMZW5ndGgoKSk7CiAKICAgICAvLyBT
cGVjOiBSZXR1cm4gYSBuZXdseSBjcmVhdGVkLCBkZXRhY2hlZCBTVkdQb2ludCBvYmplY3QuCi0g
ICAgcmV0dXJuIFNWR1BvaW50OjpjcmVhdGUocmVuZGVyZXItPmdldFBvaW50QXRMZW5ndGgoZGlz
dGFuY2UpKTsKKyAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKSkKKyAg
ICAgICAgcmV0dXJuIFNWR1BvaW50OjpjcmVhdGUoZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hh
cGU+KHJlbmRlcmVyKS0+Z2V0UG9pbnRBdExlbmd0aChkaXN0YW5jZSkpOworCisjaWYgRU5BQkxF
KExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihyZW5k
ZXJlcikpCisgICAgICAgIHJldHVybiBTVkdQb2ludDo6Y3JlYXRlKGRvd25jYXN0PFJlbmRlclNW
R1NoYXBlPihyZW5kZXJlciktPmdldFBvaW50QXRMZW5ndGgoZGlzdGFuY2UpKTsKKyNlbmRpZgor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yIH07CiB9CiAKIGJvb2wgU1ZHR2VvbWV0cnlFbGVtZW50Ojppc1BvaW50SW5G
aWxsKERPTVBvaW50SW5pdCYmIHBvaW50SW5pdCkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgYXV0byogcmVuZGVyZXIgPSBk
b3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgYXV0
byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEZsb2F0UG9pbnQgcG9pbnQge3N0YXRpY19jYXN0PGZs
b2F0Pihwb2ludEluaXQueCksIHN0YXRpY19jYXN0PGZsb2F0Pihwb2ludEluaXQueSl9OwotICAg
IHJldHVybiByZW5kZXJlci0+aXNQb2ludEluRmlsbChwb2ludCk7CisgICAgaWYgKGlzPExlZ2Fj
eVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxMZWdh
Y3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpLT5pc1BvaW50SW5GaWxsKHBvaW50KTsKKworI2lm
IEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChpczxSZW5kZXJTVkdTaGFw
ZT4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KHJl
bmRlcmVyKS0+aXNQb2ludEluRmlsbChwb2ludCk7CisjZW5kaWYKKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBTVkdHZW9tZXRyeUVsZW1l
bnQ6OmlzUG9pbnRJblN0cm9rZShET01Qb2ludEluaXQmJiBwb2ludEluaXQpCiB7CiAgICAgZG9j
dW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGF1
dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHRoaXMtPnJlbmRl
cmVyKCkpOworICAgIGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdFBvaW50IHBvaW50
IHtzdGF0aWNfY2FzdDxmbG9hdD4ocG9pbnRJbml0LngpLCBzdGF0aWNfY2FzdDxmbG9hdD4ocG9p
bnRJbml0LnkpfTsKLSAgICByZXR1cm4gcmVuZGVyZXItPmlzUG9pbnRJblN0cm9rZShwb2ludCk7
CisgICAgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpCisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpLT5pc1BvaW50SW5T
dHJva2UocG9pbnQpOworCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisgICAg
aWYgKGlzPFJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpLT5pc1BvaW50SW5TdHJva2UocG9pbnQpOworI2Vu
ZGlmCisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IHZvaWQgU1ZHR2VvbWV0cnlFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGlu
ZUVsZW1lbnQuY3BwCmluZGV4IDEyZWZmNDNkNWY1YjJlMjg1MzMwZjBlMGY5ZDBjMDg5MmZmMjcw
MWMuLmVmYjliOGJjZmQ5Y2M5NWVhYTQ5M2JmZTFhYWQ5MTljYTc5Y2IzYzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlNWR0xpbmVFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJMZWdhY3lS
ZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHTGVuZ3RoVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448666</attachid>
            <date>2022-01-08 02:10:24 -0800</date>
            <delta_ts>2022-01-10 00:33:40 -0800</delta_ts>
            <desc>Patch, v5</desc>
            <filename>bug-234954-20220108021023.patch</filename>
            <type>text/plain</type>
            <size>76411</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3ODA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGEzYjNjYjhiOWRjMTgx
YWM2Y2JmN2E1NmE1ZjM5YzhkMWI4MzZhMi4uMGVlYmNiZWRiMWVhNTc0NjBlZGZmZjUzZjMxZTRl
ZWQ2ZWFmNThlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAyMi0wMS0wNyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBbTEJT
RV0gQmVnaW4gbGF5ZXItYXdhcmUgUmVuZGVyU1ZHU2hhcGUgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDk1NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZ2luIGltcGxlbWVu
dGluZyBSZW5kZXJTVkdTaGFwZSwgYmFzZWQgb24gdGhlIGRvd25zdHJlYW0gdmVyc2lvbiBpbiB0
aGUKKyAgICAgICAgTEJTRSBicmFuY2guIE1hbnkgcGFydHMgYXJlIDE6MSBjb3BpZXMgZnJvbSBM
ZWdhY3lSZW5kZXJTVkdTaGFwZSwgYWx0aG91Z2gKKyAgICAgICAgdGhlIGNvcmUgbWV0aG9kcyBm
b3IgbGF5b3V0IC8gcGFpbnQgLyBoaXQtdGVzdGluZyBsb29rcyBxdWl0ZSBkaWZmZXJlbnQgaW4K
KyAgICAgICAgUmVuZGVyU1ZHU2hhcGUgLS0gdGhlIGNvZGUgaXMgbW9zdGx5IGFkYXB0ZWQgZnJv
bSBsYXllci1hd2FyZSBDU1MgcmVuZGVyZXJzCisgICAgICAgIHN1Y2ggYXMgUmVuZGVyQm94IC8g
UmVuZGVyQmxvY2sgdGFraW5nIFNWRyBzcGVjaWZpY3MgaW50byBhY2NvdW50LgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaG9va3MgaW4gUmVuZGVyU1ZHU2hhcGUgaW4gYWxsIHBsYWNlcyB0aGF0IHVz
ZWQgdG8gaGFuZGxlCisgICAgICAgIExlZ2FjeVJlbmRlclNWR1NoYXBlLCBlLmcuIGluIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuIEhvd2V2ZXIgbm8KKyAgICAgICAgcmVuZGVyZXIgaW5oZXJp
dHMgZnJvbSBSZW5kZXJTVkdTaGFwZSB5ZXQgLS0gYSBmb2xsb3ctdXAgcGF0Y2ggd2lsbAorICAg
ICAgICBpbnRyb2R1Y2UgUmVuZGVyU1ZHUmVjdC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdXBwb3J0c1BhdGggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudFBh
dGggY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpmaWxs
QW5kU3Ryb2tlUGF0aE9yU2hhcGUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpw
b3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudDo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
UGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdTaGFwZTo6UmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
U2hhcGU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
OmZpbGxTaGFwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ry
b2tlU2hhcGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnNoYXBl
RGVwZW5kZW50U3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1NoYXBlOjpmaWxsQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1No
YXBlOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vblNjYWxp
bmdTdHJva2VQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpz
ZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1NoYXBlOjpub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFN0cm9rZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
Ojppc1BvaW50SW5GaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjppc1Bv
aW50SW5TdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmdldFRvdGFs
TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpnZXRQb2lu
dEF0TGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpub2Rl
QXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjptYXJrZXJGb3JUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjb21wdXRlTWFya2VyQm91bmRpbmdCb3ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZU9iamVjdEJvdW5kaW5n
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVT
dHJva2VCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6c3Ryb2tlV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6
Omhhc1Ntb290aFN0cm9rZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFw
ZTo6ZHJhd01hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNyZWF0
ZVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnByb2Nlc3NN
YXJrZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0eWxl
V2lsbENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzZXROZWVkc1NoYXBlVXBk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYXRoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpjbGVhclBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHU2hhcGU6Omhhc05vblNjYWxpbmdTdHJva2UgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHU2hhcGU6OmdyYXBoaWNzRWxlbWVudCBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdQ
YWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHRmlsbFBhaW50aW5n
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVTVkdHcmFwaGljc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHR2VvbWV0cnlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0dlb21ldHJ5RWxlbWVudDo6Z2V0VG90YWxMZW5ndGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHR2VvbWV0cnlFbGVtZW50OjpnZXRQb2ludEF0TGVuZ3RoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0dlb21ldHJ5RWxlbWVudDo6aXNQb2ludEluRmlsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdHZW9tZXRyeUVsZW1lbnQ6OmlzUG9pbnRJblN0cm9rZSk6Cisg
ICAgICAgICogc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKwogMjAyMi0wMS0wNyAgSmVhbi1ZdmVz
IEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBJUEM6OlNoYXJlZEJ1
ZmZlckRhdGFSZWZlcmVuY2UgYW5kIHVzZSBJUEM6OlNoYXJlZEJ1ZmZlckNvcHkgaW5zdGVhZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCAyODA3NjllMjQ5Y2RkMWM4ZmZjZTQ3NDAyZmQ0ZmM2NGEzNjgxY2Nl
Li41OGY0NzA5MGQ2ZjZjY2Q2MmE2NGIzNTEzNTQ3Mzc0OGQyNTk1ZmQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dApAQCAtMjQ5NCw2ICsyNDk0LDcgQEAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQu
Y3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKK3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RTcGFuLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBm
NWI3YzM5MDg3YTM3MmNjNDExZTc5ODBkZGQyMzUzYjRiZWQxOTQ5Li5hY2JkZDQ3MzRkMTE4ZWZj
ZjMxZGE4OThiZjI2YjIzNjk2MDI0NWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMjczLDYgKzMyNzMsNyBAQAogCQlBMTA0
RjI0NDE0QzcxRjdBMDA5RTJDMjMgLyogQ2FjaGVkU1ZHRG9jdW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMDRGMjQyMTRDNzFGN0EwMDlFMkMy
MyAvKiBDYWNoZWRTVkdEb2N1bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUExMEJCNTg1MTQ4NEUzQTcwMEIyRTg3QSAvKiBMZWdhY3lSZW5k
ZXJTVkdSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMTBCQjU4MzE0ODRFM0E3MDBCMkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZHUmVjdC5oICovOyB9
OwogCQlBMTBCQjU4QjE0ODRFM0IzMDBCMkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEJCNTg5MTQ4
NEUzQjMwMEIyRTg3QSAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZS5oICovOyB9OworCQlBMTBCQjU4
QjE0ODRFM0IzMDBDM0Y3N0IgLyogUmVuZGVyU1ZHU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEJCNTg5MTQ4NEUzQjMwMEMzRjc3QiAvKiBS
ZW5kZXJTVkdTaGFwZS5oICovOyB9OwogCQlBMTBEQkY0NzE4RjkyMzE3MDAwRDcwQzYgLyogTGVn
YWN5UHJldmlld0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTEwREJGNDYxOEY5MjMxNzAwMEQ3MEM2IC8qIExlZ2FjeVByZXZpZXdM
b2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBMTBEQzc2QjE0NzQ3QkFCMDA1RTI0NzEgLyogU3R5bGVHcmlkRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwREM3NjkxNDc0N0JB
QjAwNUUyNDcxIC8qIFN0eWxlR3JpZERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTBGN0M3MzI3MzEwMEQwMDA4RkE5QUYgLyogTW9kYWxD
b250YWluZXJPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTEwRjdDNzAyNzMxMDA3MzAwOEZBOUFGIC8qIE1vZGFsQ29udGFpbmVyT2JzZXJ2
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NDYzMiw2ICs0NjMzLDcgQEAKIAkJQ0RGNzQ3RjMyNzBGNzZDRjAwOEZFRUVDIC8qIFJlbmRlclNW
R1Jlc291cmNlTGluZWFyR3JhZGllbnRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREY3NDdGMjI3MEY3NkNGMDA4RkVFRUMgLyogUmVuZGVy
U1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudElubGluZXMuaCAqLzsgfTsKIAkJQ0RGNzQ3RjUyNzBG
ODNCMTAwOEZFRUVDIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcElubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0N0Y0MjcwRjgzQjEwMDhG
RUVFQyAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3BJbmxpbmVzLmggKi87IH07CiAJCUNERjc0N0Y3
MjcwRjg2QTQwMDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0N0Y2MjcwRjg2QTQw
MDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaCAqLzsgfTsKKwkJQ0RGNzQ3
RjcyNzBGODNCNDEwN0RFRUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNzQ3RjYyNzBGODNCNDEwN0RF
RUVDIC8qIFJlbmRlclNWR1NoYXBlSW5saW5lcy5oICovOyB9OwogCQlDREY3NDdGOTI3MEY4N0NC
MDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERjc0N0Y4MjcwRjg3
Q0IwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50SW5saW5lcy5oICov
OyB9OwogCQlDREY3NDdGQjI3MEY4OTFBMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREY3NDdGQTI3MEY4OTFBMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXJJbmxp
bmVzLmggKi87IH07CiAJCUNERjc0ODNGMThGRUJDRUMwMDA2RUNDMCAvKiBHcmlkUG9zaXRpb25z
UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENERjc0ODNEMThGRUJDRUMwMDA2RUNDMCAvKiBHcmlkUG9zaXRpb25zUmVzb2x2ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMzNzksNyAr
MTMzODEsOSBAQAogCQlBMTBCQjU4MjE0ODRFM0E3MDBCMkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZH
UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lSZW5k
ZXJTVkdSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwQkI1ODMxNDg0
RTNBNzAwQjJFODdBIC8qIExlZ2FjeVJlbmRlclNWR1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMTBCQjU4ODE0ODRFM0IzMDBCMkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZHU2hh
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5UmVuZGVy
U1ZHU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTBDQzU4ODE0NzNF
M0IzMDBCMkE4QkYgLyogUmVuZGVyU1ZHU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBMTBCQjU4OTE0ODRFM0IzMDBCMkU4N0EgLyogTGVnYWN5UmVuZGVyU1ZHU2hhcGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5UmVuZGVyU1ZHU2hhcGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEwQkI1ODkxNDg0RTNCMzAwQzNGNzdC
IC8qIFJlbmRlclNWR1NoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclNWR1NoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMEQ2RTk0MjE0
NEM5OTgwMEZERDE0RCAvKiBKU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1BheW1lbnRSZXNwb25zZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUExMERCRjQ2MThGOTIzMTcwMDBENzBDNiAvKiBMZWdhY3lQcmV2aWV3TG9hZGVy
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeVByZXZpZXdM
b2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwREM3NjgxNDc0
N0JBQjAwNUUyNDcxIC8qIFN0eWxlR3JpZERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3R5bGVHcmlkRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjI4MCw2ICsxNjI4NCw3IEBACiAJCUNERjc0N0YyMjcwRjc2Q0YwMDhGRUVFQyAv
KiBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50SW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50SW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREY3NDdGNDI3MEY4M0IxMDA4RkVFRUMgLyogUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3BJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERjc0N0Y2MjcwRjg2QTQw
MDhGRUVFQyAvKiBMZWdhY3lSZW5kZXJTVkdTaGFwZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGVnYWN5UmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUNERjc0N0Y2MjcwRjgzQjQxMDdERUVFQyAvKiBSZW5kZXJTVkdTaGFwZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNERjc0N0Y4MjcwRjg3Q0IwMDhGRUVFQyAvKiBSZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
REY3NDdGQTI3MEY4OTFBMDA4RkVFRUMgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXJJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlTWFza2VySW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREY3NDgzQzE4RkVCQ0VDMDAwNkVDQzAgLyogR3Jp
ZFBvc2l0aW9uc1Jlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xODk3Miw2ICsxODk3Nyw5IEBACiAJCQkJNDM2NzA4QTQxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oICovLAogCQkJCTQzNjcwOEE1MTJEOUNBNUMw
MDA0NDIzNCAvKiBSZW5kZXJTVkdSb290LmNwcCAqLywKIAkJCQk0MzY3MDhBNjEyRDlEQjRCMDAw
NDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oICovLAorCQkJCUExMENDNTg4MTQ3M0UzQjMwMEIyQThC
RiAvKiBSZW5kZXJTVkdTaGFwZS5jcHAgKi8sCisJCQkJQTEwQkI1ODkxNDg0RTNCMzAwQzNGNzdC
IC8qIFJlbmRlclNWR1NoYXBlLmggKi8sCisJCQkJQ0RGNzQ3RjYyNzBGODNCNDEwN0RFRUVDIC8q
IFJlbmRlclNWR1NoYXBlSW5saW5lcy5oICovLAogCQkJCTA4NTRCMDA2MTI1NUU0RTYwMEI5Q0RE
MCAvKiBSZW5kZXJTVkdUZXh0LmNwcCAqLywKIAkJCQkwODU0QjAwNzEyNTVFNEU2MDBCOUNERDAg
LyogUmVuZGVyU1ZHVGV4dC5oICovLAogCQkJCTA4NTRCMDA4MTI1NUU0RTYwMEI5Q0REMCAvKiBS
ZW5kZXJTVkdUZXh0UGF0aC5jcHAgKi8sCkBAIC0zNjc1MCw2ICszNjc1OCw4IEBACiAJCQkJQ0RG
NzQ3RjkyNzBGODdDQjAwOEZFRUVDIC8qIFJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnRJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhFMzEyRDlDQTRCMDAwNDQyMzQgLyog
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhF
NTEyRDlEQjRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUm9vdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTEwQkI1OEIxNDg0RTNCMzAwQzNGNzdCIC8qIFJlbmRlclNWR1NoYXBlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlDREY3NDdGNzI3MEY4M0I0MTA3REVFRUMgLyogUmVuZGVyU1ZHU2hhcGVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAxOTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVy
U1ZHVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1NEIwMUIxMjU1RTRFNjAwQjlDREQwIC8q
IFJlbmRlclNWR1RleHRQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhFOTEyRDlDQTRC
MDAwNDQyMzQgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA1NGQ3MjVjODU5MmJhYzMzMzNkYjQ0ZGQ0ZTVl
ZDI5ZWZiZmI0N2E3Li4wMDNlMjQ0NDFhOTllODI3YjVhOGIyM2E0YTU4ZThjMDBlMjMwZTNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTk2LDYgKzk2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJN
YXRoTUxCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRl
clRleHRDb250cm9sLmgiCkBAIC05MTAsNyArOTExLDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjplbGVtZW50UmVjdCgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6c3VwcG9ydHNQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXM8UmVu
ZGVyVGV4dD4ocmVuZGVyZXIoKSkgfHwgaXM8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVy
KCkpOworICAgIHJldHVybiBpczxSZW5kZXJUZXh0PihyZW5kZXJlcigpKSB8fCAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5pc1NWR1NoYXBlT3JMZWdhY3lTVkdTaGFwZSgpKTsKIH0KIAogUGF0
aCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjplbGVtZW50UGF0aCgpIGNvbnN0CkBAIC05NjAs
MTUgKzk2MSwyNCBAQCBQYXRoIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRQYXRo
KCkgY29uc3QKICAgICAgICAgaWYgKGF1dG8gc3ZnUm9vdCA9IGFuY2VzdG9yc09mVHlwZTxMZWdh
Y3lSZW5kZXJTVkdSb290PigqbV9yZW5kZXJlcikuZmlyc3QoKSkgewogICAgICAgICAgICAgTGF5
b3V0UG9pbnQgcGFyZW50T2Zmc2V0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgmKnN2
Z1Jvb3QpLT5lbGVtZW50UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgICAgICAgICBwYXRoLnRyYW5z
Zm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50T2Zmc2V0LngoKSwgcGFyZW50
T2Zmc2V0LnkoKSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgfQor
CiAjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCi0gICAgICAgIH0gZWxzZSBpZiAo
YXV0byBzdmdSb290ID0gYW5jZXN0b3JzT2ZUeXBlPFJlbmRlclNWR1Jvb3Q+KCptX3JlbmRlcmVy
KS5maXJzdCgpKSB7CisgICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihyZW5kZXJlcigpKSAmJiBk
b3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oKm1fcmVuZGVyZXIpLmhhc1BhdGgoKSkgeworICAgICAg
ICBQYXRoIHBhdGggPSBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oKm1fcmVuZGVyZXIpLnBhdGgo
KTsKKworICAgICAgICAvLyBUaGUgU1ZHIHBhdGggaXMgaW4gdGVybXMgb2YgdGhlIHBhcmVudCdz
IGJvdW5kaW5nIGJveC4gVGhlIHBhdGggbmVlZHMgdG8gYmUgb2Zmc2V0IHRvIGZyYW1lIGNvb3Jk
aW5hdGVzLgorICAgICAgICBpZiAoYXV0byBzdmdSb290ID0gYW5jZXN0b3JzT2ZUeXBlPFJlbmRl
clNWR1Jvb3Q+KCptX3JlbmRlcmVyKS5maXJzdCgpKSB7CiAgICAgICAgICAgICBMYXlvdXRQb2lu
dCBwYXJlbnRPZmZzZXQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCYqc3ZnUm9vdCkt
PmVsZW1lbnRSZWN0KCkubG9jYXRpb24oKTsKICAgICAgICAgICAgIHBhdGgudHJhbnNmb3JtKEFm
ZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwYXJlbnRPZmZzZXQueCgpLCBwYXJlbnRPZmZzZXQu
eSgpKSk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBwYXRoOwogICAgIH0K
KyNlbmRpZgogCiAgICAgcmV0dXJuIFBhdGgoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA4MTVhMzMwNDQ4ODVjZjQyNzRlNzc3YTIx
YzQ3MzlhOTgxMjE4MGM3Li42OTI3YzNiYTc2YjUwMmUwMTEzMTAwYzYzOGUwN2E5NTJlNGFmM2Ex
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JUZXh0Qm94LmgiCiAjaW5j
bHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jv
b3QuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJQcmludENvbnRleHQuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50
LmgiCkBAIC02NCw2ICs2NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9v
dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4
dC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKQEAgLTU1OCw2ICs1NjAsMTIgQEAgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4gYmUKICAgICAgICAg
dHMgPDwgIlxuIjsKICAgICB9OwogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CisgICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihvKSkgeworICAgICAgICB3cml0ZSh0cywgZG93
bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KG8pLCBiZWhhdmlvcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKICAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KG8pKSB7CiAgICAg
ICAgIHdyaXRlKHRzLCBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4obyksIGJlaGF2aW9y
KTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlLmNwcAppbmRleCBmZmU4NWEwMTg5ZDNlNGI4MjFlZTI3OTc0MTI5
MWU3OGQyMjEzZWMxLi5iNGVmOTc4NGE5NTc5Y2E2MjY4NzE3NDZiNTU0MGU2ODFjOWY3ZDY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
LmNwcApAQCAtMjYsMTEgKzI2LDEzIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKICNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdSb290LmgiCisjaW5jbHVkZSAi
TGVnYWN5UmVuZGVyU1ZHU2hhcGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlTWFza2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1NoYXBlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNl
RWxlbWVudENsaWVudC5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgpAQCAtMjQzLDQgKzI0
NSw0MCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVz
b3VyY2VJbnZhbGlkYXRpb24oUmVuZGVyT2JqZWN0JgogICAgIH0KIH0KIAordm9pZCBSZW5kZXJT
VkdSZXNvdXJjZTo6ZmlsbEFuZFN0cm9rZVBhdGhPclNoYXBlKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25z
dCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJFbGVtZW50KiBzaGFwZSkgY29uc3QKK3sKKyAgICBp
ZiAoc2hhcGUpIHsKKyAgICAgICAgQVNTRVJUKHNoYXBlLT5pc1NWR1NoYXBlT3JMZWdhY3lTVkdT
aGFwZSgpKTsKKworICAgICAgICBpZiAocmVzb3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jl
c291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKSB7CisgICAgICAgICAgICBpZiAoaXM8TGVnYWN5UmVu
ZGVyU1ZHU2hhcGU+KHNoYXBlKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxMZWdhY3lSZW5k
ZXJTVkdTaGFwZT4oc2hhcGUpLT5maWxsU2hhcGUoY29udGV4dCk7CisjaWYgRU5BQkxFKExBWUVS
X0JBU0VEX1NWR19FTkdJTkUpCisgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJTVkdTaGFw
ZT4oc2hhcGUpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNWR1NoYXBlPihzaGFw
ZSktPmZpbGxTaGFwZShjb250ZXh0KTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgaWYg
KHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJv
a2UpKSB7CisgICAgICAgICAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHNoYXBlKSkK
KyAgICAgICAgICAgICAgICBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4oc2hhcGUpLT5z
dHJva2VTaGFwZShjb250ZXh0KTsKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihzaGFwZSkpCisgICAgICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KHNoYXBlKS0+c3Ryb2tlU2hhcGUoY29u
dGV4dCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAocGF0aCkgeworICAgICAgICBpZiAocmVzb3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNW
R1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKQorICAgICAgICAgICAgY29udGV4dC5maWxsUGF0
aCgqcGF0aCk7CisgICAgICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZHUmVz
b3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkKKyAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0
aCgqcGF0aCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCmluZGV4IGQyMmE4NGIy
NzJkNDY4ZjlkMDEzNjFhYTVhMGIyMWM0ZWFjNDdkMTUuLmE4ZDkxZjM2NzExOWZlNzQzNWNhMzJh
ZDFmZTBkOTZhM2RhY2Y1YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlLmgKQEAgLTE5LDggKzE5LDggQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
Q29uc3RhbnRzLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogI2luY2x1ZGUgPHd0Zi9U
eXBlQ2FzdHMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsOSArNDcsMTAgQEAgY2xh
c3MgQ29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFz
cyBQYXRoOworY2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNz
IFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOworY2xhc3Mg
UmVuZGVyU3R5bGU7CiAKIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlIHsKIHB1YmxpYzoKQEAgLTYw
LDcgKzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2Fj
aGUoUmVuZGVyRWxlbWVudCYsIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpID0gMDsK
IAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3Vy
Y2VNb2RlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJF
bGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1v
ZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUqKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29u
dGV4dComLCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNv
bnN0IFJlbmRlckVsZW1lbnQqIC8qIHNoYXBlICovKSB7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYpID0gMDsKIAogICAgIHZp
cnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0ID0gMDsKQEAg
LTcxLDYgKzcyLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IqIHNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwogCiAgICAgc3RhdGljIHZvaWQg
bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKFJlbmRlck9iamVjdCYs
IGJvb2wgbmVlZHNMYXlvdXQgPSB0cnVlKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZmlsbEFu
ZFN0cm9rZVBhdGhPclNoYXBlKEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxSZW5kZXJTVkdS
ZXNvdXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyRWxlbWVudCogc2hhcGUpIGNv
bnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCBk
MzYyZmFlZDVkMjRhNWYxZjE3ZTc1ZmFhYTg1MWQ4ZDc5NjBlYjVhLi4yZjcyZmUzZDE1OTBhMjg2
NDkwY2IwOTUzYTU0MzlhZmM2OTFkYzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTcyLDcgKzE3
Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVy
U1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqLCBjb25zdCBMZWdhY3lS
ZW5kZXJTVkdTaGFwZSopCit2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4
dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKiwgY29uc3QgUmVuZGVyRWxlbWVudCopCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAg
IEFTU0VSVF9VTlVTRUQocmVzb3VyY2VNb2RlLCAhcmVzb3VyY2VNb2RlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaApp
bmRleCBlN2ZkYTE0N2E2MmFiN2I5M2IzNGExNjU0MzBjODkyNGEwY2Y5OGE2Li5jZjNmNmJhNDkw
N2ZhYjJlZjI5MGM0MWNiNDU2NzU3ZDAyOTMzYjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBAIC02OSw3ICs2
OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJFbGVt
ZW50JiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkgb3ZlcnJpZGU7CiAKICAgICBi
b29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3Jh
cGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+KSBvdmVycmlk
ZTsKLSAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0Nv
bnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgqLCBj
b25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSopIG92ZXJyaWRlOworICAgIHZvaWQgcG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVu
ZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlckVsZW1lbnQqKSBv
dmVycmlkZTsKIAogICAgIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRl
ck9iamVjdCYpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCAwZDRiMDIwNTVj
Mjc5NTI5YzkxMmI5ZjY1YTk3Yjc3MjdiZDc2ZjljLi5kMTU5MjUzZjFmYjhiYjA4NWY0ZTM3ZGMw
MzgxOGEwOTY5NWVlZTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTE3OSw3ICsxNzksNyBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGNvbnN0IExlZ2Fj
eVJlbmRlclNWR1NoYXBlKiBzaGFwZSkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9k
ZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2hhcGUpCiB7CiAgICAg
QVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVCghcmVzb3VyY2VNb2RlLmlzRW1wdHkoKSk7CkBA
IC0yMDcsMjAgKzIwNyw4IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoCiAjZWxzZQogICAgICAg
ICBVTlVTRURfUEFSQU0ocmVuZGVyZXIpOwogI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9G
aWxsKSkgewotICAgICAgICAgICAgaWYgKHBhdGgpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICAgICAgZWxzZSBpZiAoc2hhcGUpCi0gICAgICAgICAg
ICAgICAgc2hhcGUtPmZpbGxTaGFwZSgqY29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHJlc291cmNlTW9kZS5jb250YWlucyhSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9TdHJv
a2UpKSB7Ci0gICAgICAgICAgICBpZiAocGF0aCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5z
dHJva2VQYXRoKCpwYXRoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNoYXBlKQotICAgICAgICAg
ICAgICAgIHNoYXBlLT5zdHJva2VTaGFwZSgqY29udGV4dCk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgfSBlbHNlCisgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoT3JTaGFwZSgqY29udGV4dCwgcmVz
b3VyY2VNb2RlLCBwYXRoLCBzaGFwZSk7CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5oCmluZGV4IGVlNmJkY2ZhZDY4ZjhlZTMwZmUzYjhmYTNlN2ZjZTkwNjIyODZh
YzkuLjFjZDI3Zjc0MjhmZTE0MThlZDI4MDRkNThkYzU4YmRmOTAyNWMwNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUNsaWVudEZy
b21DYWNoZShSZW5kZXJFbGVtZW50JiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSkg
ZmluYWw7CiAKICAgICBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJl
bmRlclN0eWxlJiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJj
ZU1vZGU+KSBmaW5hbDsKLSAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
LCBHcmFwaGljc0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNv
bnN0IFBhdGgqLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSopIGZpbmFsOworICAgIHZvaWQg
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRp
b25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IFJlbmRlckVs
ZW1lbnQqKSBmaW5hbDsKICAgICBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChjb25zdCBS
ZW5kZXJPYmplY3QmKSBmaW5hbCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5jcHAKaW5kZXggMmQ2Zjg5MGZjNDRiY2VhYWFkYjkyYWM2M2I4NTQ3ZjE3
ZjFlODRhNS4uYjU2MmJlZWU0Y2I5ODllMjExZjQyNzNhYWQ2NjhhMmVlMzZiYTkxYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VQYXR0ZXJuLmNwcApAQCAtMjAxLDI0ICsyMDEsMTEgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJl
bmQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46
OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGljc0NvbnRleHQqJiBjb250
ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUsIGNvbnN0
IFBhdGgqIHBhdGgsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlKiBzaGFwZSkKK3ZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50Jiwg
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9k
ZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJFbGVtZW50KiBz
aGFwZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKCFyZXNvdXJjZU1vZGUu
aXNFbXB0eSgpKTsKLQotICAgIGlmIChyZXNvdXJjZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZHUmVz
b3VyY2VNb2RlOjpBcHBseVRvRmlsbCkpIHsKLSAgICAgICAgaWYgKHBhdGgpCi0gICAgICAgICAg
ICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7Ci0gICAgICAgIGVsc2UgaWYgKHNoYXBlKQotICAg
ICAgICAgICAgc2hhcGUtPmZpbGxTaGFwZSgqY29udGV4dCk7Ci0gICAgfQotICAgIGlmIChyZXNv
dXJjZU1vZGUuY29udGFpbnMoUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ryb2tlKSkg
ewotICAgICAgICBpZiAocGF0aCkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnBh
dGgpOwotICAgICAgICBlbHNlIGlmIChzaGFwZSkKLSAgICAgICAgICAgIHNoYXBlLT5zdHJva2VT
aGFwZSgqY29udGV4dCk7Ci0gICAgfQotCisgICAgZmlsbEFuZFN0cm9rZVBhdGhPclNoYXBlKCpj
b250ZXh0LCByZXNvdXJjZU1vZGUsIHBhdGgsIHNoYXBlKTsKICAgICBjb250ZXh0LT5yZXN0b3Jl
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlUGF0dGVybi5oCmluZGV4IDk1OTZmMmFmZDIyYWU5MDFlN2RhZTk1YTAyNTI1
YTdkZGQxN2VlODYuLjcxMTdmMTI3ZDBkZGQ3M2JhNWViYzU1OTkwMTBjMjRiYjYyZjA4YTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYsIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9
IHRydWUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
LCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8UmVuZGVy
U1ZHUmVzb3VyY2VNb2RlPikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNv
dXJjZU1vZGU+LCBjb25zdCBQYXRoKiwgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUqKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmLCBHcmFwaGlj
c0NvbnRleHQqJiwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4sIGNvbnN0IFBhdGgq
LCBjb25zdCBSZW5kZXJFbGVtZW50Kikgb3ZlcnJpZGU7CiAgICAgRmxvYXRSZWN0IHJlc291cmNl
Qm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRS
ZWN0KCk7IH0KIAogICAgIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBQYXR0ZXJuUmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRD
b2xvci5jcHAKaW5kZXggMTA5NWJiNTE2YzA2YTE2NTQxMmFmZmU3MmViODE3OTRkYmFhYmEzYS4u
ZGQ3ZTVmNzE5YzAxYzIwZWJjNTgwOTZjMjhlM2ZhNzBkMDZiNDA3OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmNwcApAQCAtMjMsOCArMjMsMTAgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjcsMjMgKzY5LDExIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpw
b3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4
dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlLCBjb25zdCBQ
YXRoKiBwYXRoLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSogc2hhcGUpCit2b2lkIFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYs
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1v
ZGU+IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCogcGF0aCwgY29uc3QgUmVuZGVyRWxlbWVudCog
c2hhcGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVCghcmVzb3VyY2VNb2Rl
LmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAocmVzb3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jl
c291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKSB7Ci0gICAgICAgIGlmIChwYXRoKQotICAgICAgICAg
ICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgpOwotICAgICAgICBlbHNlIGlmIChzaGFwZSkKLSAg
ICAgICAgICAgIHNoYXBlLT5maWxsU2hhcGUoKmNvbnRleHQpOwotICAgIH0KLSAgICBpZiAocmVz
b3VyY2VNb2RlLmNvbnRhaW5zKFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb1N0cm9rZSkp
IHsKLSAgICAgICAgaWYgKHBhdGgpCi0gICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCpw
YXRoKTsKLSAgICAgICAgZWxzZSBpZiAoc2hhcGUpCi0gICAgICAgICAgICBzaGFwZS0+c3Ryb2tl
U2hhcGUoKmNvbnRleHQpOwotICAgIH0KKyAgICBmaWxsQW5kU3Ryb2tlUGF0aE9yU2hhcGUoKmNv
bnRleHQsIHJlc291cmNlTW9kZSwgcGF0aCwgc2hhcGUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuaAppbmRleCA3ZjFiNzQ2ODJlMmQzYmQzZTM5NGQ2OTNjMDc5YjUyYTlhODU5NDUwLi5hODAx
YWVmNzNiZDg2ZTExNzMzNDJmODcyNGJiZGFhNDdlMDcwZjkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmgKQEAgLTIwLDEwICsyMCwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5o
IgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyT2JqZWN0OworCiBjbGFzcyBS
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IgZmluYWwgOiBwdWJsaWMgUmVuZGVyU1ZHUmVzb3Vy
Y2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMzQsNyArMzcs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVu
dCYsIGJvb2wgPSB0cnVlKSBvdmVycmlkZSB7IH0KIAogICAgIGJvb2wgYXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiwgT3B0
aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4pIG92ZXJyaWRlOwotICAgIHZvaWQgcG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYsIEdyYXBoaWNzQ29udGV4dComLCBPcHRpb25TZXQ8
UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiwgY29uc3QgUGF0aCosIGNvbnN0IExlZ2FjeVJlbmRlclNW
R1NoYXBlKikgb3ZlcnJpZGU7CisgICAgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVt
ZW50JiwgR3JhcGhpY3NDb250ZXh0KiYsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+
LCBjb25zdCBQYXRoKiwgY29uc3QgUmVuZGVyRWxlbWVudCopIG92ZXJyaWRlOwogICAgIEZsb2F0
UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlck9iamVjdCYpIG92ZXJyaWRlIHsg
cmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3Vy
Y2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU29saWRDb2xvclJlc291cmNlVHlwZTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45YTk1ZmEyNTQ4ZDBmNDc0MTQ5NjI0MjhlMzhjMTQ1ODUxMGE3NzYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFw
ZS5jcHAKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEplZmYgU2NoaWxsZXIgPGNvZGVkcmVhZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDE4IEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLCAyMDIxLCAyMDIyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0Lmgi
CisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkxheW91dFJlcGFpbnRlci5o
IgorI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlTWFya2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0
aERhdGEuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiU1ZH
UmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzQ2FjaGUuaCIKKyNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclNWR1NoYXBlKTsKKworUmVuZGVyU1ZHU2hhcGU6
OlJlbmRlclNWR1NoYXBlKFNWR0dyYXBoaWNzRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUm
JiBzdHlsZSkKKyAgICA6IFJlbmRlclNWR01vZGVsT2JqZWN0KGVsZW1lbnQsIFdURk1vdmUoc3R5
bGUpKQoreworfQorCitSZW5kZXJTVkdTaGFwZTo6flJlbmRlclNWR1NoYXBlKCkgPSBkZWZhdWx0
OworCit2b2lkIFJlbmRlclNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCkKK3sKKyAg
ICBtX3BhdGggPSBjcmVhdGVQYXRoKCk7CisgICAgcHJvY2Vzc01hcmtlclBvc2l0aW9ucygpOwor
CisgICAgbV9maWxsQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0JveCgpOwor
ICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCgpOwor
fQorCitib29sIFJlbmRlclNWR1NoYXBlOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgYmVmb3JlIGFzc2lnbmluZyBhIG5ldyBQ
YXRoIHRvIG1fcGF0aC4KKyAgICAvLyBCdXQgdGhpcyBidWcgY2FuIGhhcHBlbiBpZiB0aGlzIHJl
bmRlcmVyIHdhcyBjcmVhdGVkIGFuZCBpdHMgbGF5b3V0IHdhcyBub3QKKyAgICAvLyBkb25lIGJl
Zm9yZSBwYWludGluZy4gQXNzZXJ0IHRoaXMgZGlkIG5vdCBoYXBwZW4gYnV0IGRvIG5vdCBjcmFz
aC4KKyAgICBBU1NFUlQoaGFzUGF0aCgpKTsKKyAgICByZXR1cm4gIWhhc1BhdGgoKSB8fCBwYXRo
KCkuaXNFbXB0eSgpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCgp
KTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworICAgIEFTU0VSVChtX3BhdGgpOworICAgIFBhdGgqIHVzZVBh
dGggPSBtX3BhdGguZ2V0KCk7CisKKyAgICBpZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgpKQorICAg
ICAgICB1c2VQYXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgbm9uU2NhbGluZ1N0
cm9rZVRyYW5zZm9ybSgpKTsKKworICAgIGNvbnRleHQuc3Ryb2tlUGF0aCgqdXNlUGF0aCk7Cit9
CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIFBvaW50Q29vcmRpbmF0ZVNwYWNlIHBvaW50Q29vcmRpbmF0
ZVNwYWNlKQoreworICAgIEFTU0VSVChtX3BhdGgpOworCisgICAgaWYgKGhhc05vblNjYWxpbmdT
dHJva2UoKSAmJiBwb2ludENvb3JkaW5hdGVTcGFjZSAhPSBMb2NhbENvb3JkaW5hdGVTcGFjZSkg
eworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxp
bmdTdHJva2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgUGF0aCogdXNlUGF0aCA9IG5vblNjYWxpbmdT
dHJva2VQYXRoKG1fcGF0aC5nZXQoKSwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7CisgICAgICAgIHJl
dHVybiB1c2VQYXRoLT5zdHJva2VDb250YWlucyhub25TY2FsaW5nVHJhbnNmb3JtLm1hcFBvaW50
KHBvaW50KSwgW3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAg
IFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5
bGUoKSwgKnRoaXMpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9wYXRoLT5z
dHJva2VDb250YWlucyhwb2ludCwgW3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsK
KyAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250
ZXh0LCBzdHlsZSgpLCAqdGhpcyk7CisgICAgfSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6
OnNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25z
dCBXaW5kUnVsZSBmaWxsUnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gcGF0aCgpLmNvbnRhaW5z
KHBvaW50LCBmaWxsUnVsZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIGNvbnN0IFdpbmRS
dWxlIGZpbGxSdWxlKQoreworICAgIGlmIChtX2ZpbGxCb3VuZGluZ0JveC5pc0VtcHR5KCkgfHwg
IW1fZmlsbEJvdW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAocmVxdWlyZXNGaWxsICYmICFS
ZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoKnRoaXMsIHN0eWxlKCksIGZh
bGxiYWNrQ29sb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhcGVE
ZXBlbmRlbnRGaWxsQ29udGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKK30KKworYm9vbCBSZW5kZXJT
VkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVx
dWlyZXNTdHJva2UpCit7CisgICAgaWYgKHN0cm9rZUJvdW5kaW5nQm94KCkuaXNFbXB0eSgpIHx8
ICFzdHJva2VCb3VuZGluZ0JveCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAocmVxdWlyZXNTdHJva2Ug
JiYgIVJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKCp0aGlzLCBzdHls
ZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOworfQorCit2b2lkIFJlbmRlclNW
R1NoYXBlOjpsYXlvdXQoKQoreworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5
b3V0Q2hlY2tQb2ludDsKKworICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNo
ZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKKyAgICBpZiAobV9uZWVkc1NoYXBlVXBkYXRl
KSB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHTGVuZ3RoQ29udGV4dCBj
aGFuZ2VzCisgICAgICAgIC8vIGdyYXBoaWNzRWxlbWVudCgpLnVwZGF0ZUxlbmd0aENvbnRleHQo
KTsKKyAgICAgICAgdXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpOworCisgICAgICAgIG1fbmVlZHNT
aGFwZVVwZGF0ZSA9IGZhbHNlOworICAgICAgICBzZXRMYXlvdXRSZWN0KGVuY2xvc2luZ0xheW91
dFJlY3QobV9maWxsQm91bmRpbmdCb3gpKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogW0xCU0Vd
IFVwc3RyZWFtIFNWR0xheWVyVHJhbnNmb3JtVXBkYXRlcgorICAgIC8vIFNWR1JlbmRlclN1cHBv
cnQ6OnVwZGF0ZUxheWVyVHJhbnNmb3JtKCp0aGlzKTsKKworICAgIC8vIEludmFsaWRhdGUgYWxs
IHJlc291cmNlcyBvZiB0aGlzIGNsaWVudCBpZiBvdXIgbGF5b3V0IGNoYW5nZWQuCisgICAgaWYg
KGV2ZXJIYWRMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNsaWVudExheW91dENoYW5nZWQoKnRoaXMpOworCisgICAgcmVwYWludGVyLnJl
cGFpbnRBZnRlckxheW91dCgpOworICAgIGNsZWFyTmVlZHNMYXlvdXQoKTsKK30KKworUGF0aCog
UmVuZGVyU1ZHU2hhcGU6Om5vblNjYWxpbmdTdHJva2VQYXRoKGNvbnN0IFBhdGgqIHBhdGgsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlVHJhbnNmb3JtKSBjb25zdAoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxQYXRoPiB0ZW1wUGF0aDsKKworICAgIHRlbXBQYXRoLmdldCgpID0g
KnBhdGg7CisgICAgdGVtcFBhdGguZ2V0KCkudHJhbnNmb3JtKHN0cm9rZVRyYW5zZm9ybSk7CisK
KyAgICByZXR1cm4gJnRlbXBQYXRoLmdldCgpOworfQorCitib29sIFJlbmRlclNWR1NoYXBlOjpz
ZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlVHJhbnNm
b3JtLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJiBzdGF0ZVNhdmVyKQoreworICAgIHN0ZDo6
b3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBpbnZlcnNlID0gc3Ryb2tlVHJhbnNmb3JtLmludmVy
c2UoKTsKKyAgICBpZiAoIWludmVyc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0
YXRlU2F2ZXIuc2F2ZSgpOworICAgIHN0YXRlU2F2ZXIuY29udGV4dCgpLT5jb25jYXRDVE0oaW52
ZXJzZS52YWx1ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQWZmaW5lVHJhbnNmb3JtIFJl
bmRlclNWR1NoYXBlOjpub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZ3JhcGhpY3NFbGVtZW50KCkuZ2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxs
b3dTdHlsZVVwZGF0ZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6OnNob3VsZEdlbmVyYXRl
TWFya2VyUG9zaXRpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKCkuc3ZnU3R5bGUoKS5o
YXNNYXJrZXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZ3JhcGhpY3NF
bGVtZW50KCkuc3VwcG9ydHNNYXJrZXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8qIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JS
ZW5kZXJlcigqdGhpcyk7CisgICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCkgfHwgcmVzb3VyY2VzLT5t
YXJrZXJNaWQoKSB8fCByZXNvdXJjZXMtPm1hcmtlckVuZCgpOworfQorCit2b2lkIFJlbmRlclNW
R1NoYXBlOjpmaWxsU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHcmFwaGljc0NvbnRl
eHQmIG9yaWdpbmFsQ29udGV4dCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSAm
b3JpZ2luYWxDb250ZXh0OworICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgaWYgKFJlbmRl
clNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpm
aWxsUGFpbnRpbmdSZXNvdXJjZSgqdGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CisgICAg
ICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSgqdGhpcywgc3R5bGUs
IGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6QXBwbHlUb0ZpbGwpKQorICAgICAgICAg
ICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKCp0aGlzLCBjb250ZXh0
LCBSZW5kZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxsLCBudWxscHRyLCB0aGlzKTsKKyAg
ICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIFJl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jl
c291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAgICAgICAgICAgIGZhbGxi
YWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAgICAgICAgICAgaWYgKGZh
bGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UoKnRoaXMsIHN0eWxlLCBjb250ZXh0LCBSZW5k
ZXJTVkdSZXNvdXJjZU1vZGU6OkFwcGx5VG9GaWxsKSkKKyAgICAgICAgICAgICAgICBmYWxsYmFj
a1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSgqdGhpcywgY29udGV4dCwgUmVuZGVyU1ZHUmVz
b3VyY2VNb2RlOjpBcHBseVRvRmlsbCwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0JiBvcmlnaW5hbENvbnRleHQpCit7CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0ID0gJm9yaWdpbmFsQ29udGV4dDsKKyAgICBDb2xvciBmYWxsYmFj
a0NvbG9yOworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291cmNlKCp0aGlzLCBzdHls
ZSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAgaWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ut
PmFwcGx5UmVzb3VyY2UoKnRoaXMsIHN0eWxlLCBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZU1v
ZGU6OkFwcGx5VG9TdHJva2UpKQorICAgICAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+
cG9zdEFwcGx5UmVzb3VyY2UoKnRoaXMsIGNvbnRleHQsIFJlbmRlclNWR1Jlc291cmNlTW9kZTo6
QXBwbHlUb1N0cm9rZSwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNr
Q29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWlu
dGluZ1Jlc291cmNlKCk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihm
YWxsYmFja0NvbG9yKTsKKyAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJl
c291cmNlKCp0aGlzLCBzdHlsZSwgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBs
eVRvU3Ryb2tlKSkKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlS
ZXNvdXJjZSgqdGhpcywgY29udGV4dCwgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlOjpBcHBseVRvU3Ry
b2tlLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJT
VkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlm
ICghc3R5bGUoKS5oYXNWaXNpYmxlU3Ryb2tlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBmYWxzZSk7CisgICAg
aWYgKGhhc05vblNjYWxpbmdTdHJva2UoKSkgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9u
U2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKTsKKyAgICAgICAg
aWYgKCFzZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KG5vblNjYWxpbmdUcmFuc2Zvcm0sIHN0
YXRlU2F2ZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzdHJva2VTaGFwZShz
dHlsZSgpLCBjb250ZXh0KTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFN0cm9rZU1h
cmtlcnMoUGFpbnRJbmZvJiBjaGlsZFBhaW50SW5mbykKK3sKKyAgICBhdXRvIHBhaW50T3JkZXIg
PSBSZW5kZXJTdHlsZTo6cGFpbnRUeXBlc0ZvclBhaW50T3JkZXIoc3R5bGUoKS5wYWludE9yZGVy
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYWludE9yZGVyLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHN3aXRjaCAocGFpbnRPcmRlci5hdChpKSkgeworICAgICAgICBjYXNlIFBh
aW50VHlwZTo6RmlsbDoKKyAgICAgICAgICAgIGZpbGxTaGFwZShzdHlsZSgpLCBjaGlsZFBhaW50
SW5mby5jb250ZXh0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGFpbnRU
eXBlOjpTdHJva2U6CisgICAgICAgICAgICBzdHJva2VTaGFwZShjaGlsZFBhaW50SW5mby5jb250
ZXh0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGFpbnRUeXBlOjpNYXJr
ZXJzOgorICAgICAgICAgICAgaWYgKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7Cisg
ICAgaWYgKHBhaW50SW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQg
Y2hhbmdlcworICAgIC8vIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6c2hvdWxkUGFpbnRIaWRkZW5S
ZW5kZXJlcigqdGhpcykpCisgICAgLy8gICAgcmV0dXJuOworCisgICAgaWYgKCFzaG91bGRQYWlu
dFNWR1JlbmRlcmVyKHBhaW50SW5mbykgfHwgaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OkNsaXBwaW5nTWFzaykgewor
ICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR1JlbmRlclN1cHBvcnQgY2hhbmdl
cworICAgICAgICAvLyBTVkdSZW5kZXJTdXBwb3J0OjpwYWludFNWR0NsaXBwaW5nTWFzaygqdGhp
cywgcGFpbnRJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gYWRqdXN0
ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbGF5b3V0TG9jYXRpb24oKTsKKyAgICBpZiAo
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6Ok1hc2spIHsKKyAgICAgICAgLy8gRklYTUU6
IFtMQlNFXSBVcHN0cmVhbSBTVkdSZW5kZXJTdXBwb3J0IGNoYW5nZXMKKyAgICAgICAgLy8gU1ZH
UmVuZGVyU3VwcG9ydDo6cGFpbnRTVkdNYXNrKCp0aGlzLCBwYWludEluZm8sIGFkanVzdGVkUGFp
bnRPZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byB2aXN1YWxPdmVy
Zmxvd1JlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3RFcXVpdmFsZW50KCk7CisgICAgdmlzdWFsT3Zl
cmZsb3dSZWN0Lm1vdmVCeShhZGp1c3RlZFBhaW50T2Zmc2V0KTsKKyAgICBpZiAoIXZpc3VhbE92
ZXJmbG93UmVjdC5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpPdXRsaW5lIHx8IHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpTZWxmT3V0bGluZSkgeworICAgICAgICAvLyBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIG91dGxpbmUgcGFpbnRpbmcKKyAgICAgICAgLy8gcGFpbnRTVkdP
dXRsaW5lKHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRJ
bmZvLmNvbnRleHQoKSk7CisKKyAgICBhdXRvIGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFuc2xh
dGlvbiA9IGFkanVzdGVkUGFpbnRPZmZzZXQgLSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0Qm91
bmRpbmdCb3goKS5sb2NhdGlvbigpKTsKKyAgICBwYWludEluZm8uY29udGV4dCgpLnRyYW5zbGF0
ZShjb29yZGluYXRlU3lzdGVtT3JpZ2luVHJhbnNsYXRpb24ud2lkdGgoKSwgY29vcmRpbmF0ZVN5
c3RlbU9yaWdpblRyYW5zbGF0aW9uLmhlaWdodCgpKTsKKworICAgIGlmIChzdHlsZSgpLnN2Z1N0
eWxlKCkuc2hhcGVSZW5kZXJpbmcoKSA9PSBTaGFwZVJlbmRlcmluZzo6Q3Jpc3BFZGdlcykKKyAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworCisg
ICAgZmlsbFN0cm9rZU1hcmtlcnMocGFpbnRJbmZvKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFw
ZTo6aXNQb2ludEluRmlsbChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4g
c2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMocG9pbnQsIHN0eWxlKCkuc3ZnU3R5bGUoKS5maWxs
UnVsZSgpKTsKK30KKworYm9vbCBSZW5kZXJTVkdTaGFwZTo6aXNQb2ludEluU3Ryb2tlKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmICghc3R5bGUoKS5zdmdTdHlsZSgpLmhhc1N0
cm9rZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhcGVEZXBlbmRl
bnRTdHJva2VDb250YWlucyhwb2ludCwgTG9jYWxDb29yZGluYXRlU3BhY2UpOworfQorCitmbG9h
dCBSZW5kZXJTVkdTaGFwZTo6Z2V0VG90YWxMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBo
YXNQYXRoKCkgPyBwYXRoKCkubGVuZ3RoKCkgOiBjcmVhdGVQYXRoKCktPmxlbmd0aCgpOworfQor
CitGbG9hdFBvaW50IFJlbmRlclNWR1NoYXBlOjpnZXRQb2ludEF0TGVuZ3RoKGZsb2F0IGRpc3Rh
bmNlKSBjb25zdAoreworICAgIHJldHVybiBoYXNQYXRoKCkgPyBwYXRoKCkucG9pbnRBdExlbmd0
aChkaXN0YW5jZSkgOiBjcmVhdGVQYXRoKCktPnBvaW50QXRMZW5ndGgoZGlzdGFuY2UpOworfQor
Citib29sIFJlbmRlclNWR1NoYXBlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxv
Y2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIGlmIChoaXRUZXN0QWN0aW9uICE9
IEhpdFRlc3RGb3JlZ3JvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGFk
anVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxheW91dExvY2F0aW9uKCk7CisK
KyAgICBhdXRvIGxvY2FsUG9pbnQgPSBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCk7CisgICAg
YXV0byBib3VuZGluZ0JveFRvcExlZnRDb3JuZXIgPSBmbG9vcmVkTGF5b3V0UG9pbnQob2JqZWN0
Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKTsKKyAgICBhdXRvIGNvb3JkaW5hdGVTeXN0
ZW1PcmlnaW5UcmFuc2xhdGlvbiA9IGJvdW5kaW5nQm94VG9wTGVmdENvcm5lciAtIGFkanVzdGVk
TG9jYXRpb247CisgICAgbG9jYWxQb2ludC5tb3ZlKGNvb3JkaW5hdGVTeXN0ZW1PcmlnaW5UcmFu
c2xhdGlvbik7CisKKyAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0Fy
ZWEoKnRoaXMsIGxvY2FsUG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTVkdI
aXRUZXN0Q3ljbGVEZXRlY3Rpb25TY29wZSBoaXRUZXN0U2NvcGUoKnRoaXMpOworCisgICAgUG9p
bnRlckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1BB
VEhfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS5wb2ludGVyRXZlbnRzKCkpOworICAgIGJv
b2wgaXNWaXNpYmxlID0gKHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2li
bGUpOworICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7Cisg
ICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUo
KTsKKyAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGUgPSBzdmdTdHlsZS5maWxsUnVsZSgpOworICAg
ICAgICBpZiAocmVxdWVzdC5zdmdDbGlwQ29udGVudCgpKQorICAgICAgICAgICAgZmlsbFJ1bGUg
PSBzdmdTdHlsZS5jbGlwUnVsZSgpOworCisgICAgICAgIGlmIChoaXRSdWxlcy5jYW5IaXRTdHJv
a2UgJiYgKHN2Z1N0eWxlLmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSAm
JiBzdHJva2VDb250YWlucyhsb2NhbFBvaW50LCBoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkgewor
ICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWlu
ZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7CisgICAgICAgICAg
ICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQobm9kZUZvckhpdFRlc3Qo
KSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgbV9zdHJva2VCb3VuZGluZ0JveCkgPT0g
SGl0VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChoaXRSdWxl
cy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVG
aWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZpbGwsIGZp
bGxSdWxlKSkKKyAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRCb3VuZGluZ0JveCAmJiBt
X2ZpbGxCb3VuZGluZ0JveC5jb250YWlucyhsb2NhbFBvaW50KSkpIHsKKyAgICAgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0
b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5h
ZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxv
Y2F0aW9uSW5Db250YWluZXIsIG1fZmlsbEJvdW5kaW5nQm94KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6
OlN0b3ApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyBpbmxpbmUgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtlckZvclR5cGUoU1ZHTWFya2Vy
VHlwZSB0eXBlLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQsIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJr
ZXJFbmQpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTdGFydE1hcmtlcjoKKyAg
ICAgICAgcmV0dXJuIG1hcmtlclN0YXJ0OworICAgIGNhc2UgTWlkTWFya2VyOgorICAgICAgICBy
ZXR1cm4gbWFya2VyTWlkOworICAgIGNhc2UgRW5kTWFya2VyOgorICAgICAgICByZXR1cm4gbWFy
a2VyRW5kOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNvbXB1dGVNYXJrZXJCb3VuZGluZ0Jv
eCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgYXV0byogcmVzb3VyY2VzID0gU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKCp0aGlzKTsKKyAgICBBU1NFUlQo
cmVzb3VyY2VzKTsKKworICAgIGF1dG8qIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJT
dGFydCgpOworICAgIGF1dG8qIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7Cisg
ICAgYXV0byogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKKyAgICBpZiAoIW1h
cmtlclN0YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKKyAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOworCisgICAgRmxvYXRSZWN0IGJvdW5kYXJpZXM7CisgICAgdW5zaWduZWQgc2l6
ZSA9IG1fbWFya2VyUG9zaXRpb25zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFy
a2VyID0gbWFya2VyRm9yVHlwZShtX21hcmtlclBvc2l0aW9uc1tpXS50eXBlLCBtYXJrZXJTdGFy
dCwgbWFya2VyTWlkLCBtYXJrZXJFbmQpKQorICAgICAgICAgICAgYm91bmRhcmllcy51bml0ZSht
YXJrZXItPm1hcmtlckJvdW5kYXJpZXMobWFya2VyLT5tYXJrZXJUcmFuc2Zvcm1hdGlvbihtX21h
cmtlclBvc2l0aW9uc1tpXS5vcmlnaW4sIG1fbWFya2VyUG9zaXRpb25zW2ldLmFuZ2xlLCBzdHJv
a2VXaWR0aCgpKSkpOworICAgIH0KKyAgICByZXR1cm4gYm91bmRhcmllczsKK30KKworRmxvYXRS
ZWN0IFJlbmRlclNWR1NoYXBlOjpjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHBhdGgoKS5ib3VuZGluZ1JlY3QoKTsKK30KKworRmxvYXRSZWN0IFJlbmRl
clNWR1NoYXBlOjpjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fcGF0aCk7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94ID0gbV9maWxsQm91
bmRpbmdCb3g7CisKKyAgICBpZiAoc3R5bGUoKS5zdmdTdHlsZSgpLmhhc1N0cm9rZSgpKSB7Cisg
ICAgICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsKKyAgICAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgp
OworICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBpbnZlcnNl
ID0gbm9uU2NhbGluZ1RyYW5zZm9ybS5pbnZlcnNlKCkpIHsKKyAgICAgICAgICAgICAgICBQYXRo
KiB1c2VQYXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgobV9wYXRoLmdldCgpLCBub25TY2FsaW5n
VHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdSZWN0
ID0gdXNlUGF0aC0+c3Ryb2tlQm91bmRpbmdSZWN0KEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+IHsgW3RoaXNdIChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250
ZXh0LCBzdHlsZSgpLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgfSB9KTsKKyAgICAgICAgICAg
ICAgICBzdHJva2VCb3VuZGluZ1JlY3QgPSBpbnZlcnNlLnZhbHVlKCkubWFwUmVjdChzdHJva2VC
b3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKHN0
cm9rZUJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShwYXRoKCkuc3Ryb2tlQm91bmRpbmdSZWN0
KEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+IHsgW3RoaXNdIChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0
cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlKCksICp0aGlzKTsKKyAgICAgICAgICAg
IH0gfSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94
OworfQorCitmbG9hdCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlV2lkdGgoKSBjb25zdAoreworICAg
IFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmZ3JhcGhpY3NFbGVtZW50KCkpOworICAg
IHJldHVybiBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkuc3Ryb2tlV2lkdGgo
KSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHU2hhcGU6Omhhc1Ntb290aFN0cm9rZSgpIGNvbnN0Cit7
CisgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgp
OworICAgIHJldHVybiBzdmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKS5pc0VtcHR5KCkKKyAgICAg
ICAgJiYgc3R5bGUoKS5zdHJva2VNaXRlckxpbWl0KCkgPT0gc3R5bGUoKS5pbml0aWFsU3Ryb2tl
TWl0ZXJMaW1pdCgpCisgICAgICAgICYmIHN0eWxlKCkuam9pblN0eWxlKCkgPT0gc3R5bGUoKS5p
bml0aWFsSm9pblN0eWxlKCkKKyAgICAgICAgJiYgc3R5bGUoKS5jYXBTdHlsZSgpID09IHN0eWxl
KCkuaW5pdGlhbENhcFN0eWxlKCk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmRyYXdNYXJr
ZXJzKFBhaW50SW5mbyYpCit7CisgICAgQVNTRVJUKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5
KCkpOworCisgICAgYXV0byogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJl
c291cmNlc0ZvclJlbmRlcmVyKCp0aGlzKTsKKyAgICBpZiAoIXJlc291cmNlcykKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byogbWFya2VyU3RhcnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0
KCk7CisgICAgYXV0byogbWFya2VyTWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsKKyAgICBh
dXRvKiBtYXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOworICAgIGlmICghbWFya2Vy
U3RhcnQgJiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQorICAgICAgICByZXR1cm47CisKKyAg
ICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgdW5zaWduZWQg
c2l6ZSA9IG1fbWFya2VyUG9zaXRpb25zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChhdXRvKiBtYXJrZXIgPSBtYXJrZXJGb3JU
eXBlKG1fbWFya2VyUG9zaXRpb25zW2ldLnR5cGUsIG1hcmtlclN0YXJ0LCBtYXJrZXJNaWQsIG1h
cmtlckVuZCkpIHsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShtYXJrZXIpOworICAgICAgICAg
ICAgVU5VU0VEX1BBUkFNKHN0cm9rZVdpZHRoKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFtM
QlNFXSBVcHN0cmVhbSBSZW5kZXJMYXllciBjaGFuZ2VzCisgICAgICAgICAgICAvLyBBU1NFUlQo
bWFya2VyLT5oYXNMYXllcigpKTsKKyAgICAgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihwYWludEluZm8uY29udGV4dCgpKTsKKyAgICAgICAgICAgIC8vIGF1
dG8gY29udGVudFRyYW5zZm9ybSA9IG1hcmtlci0+bWFya2VyVHJhbnNmb3JtYXRpb24obV9tYXJr
ZXJQb3NpdGlvbnNbaV0ub3JpZ2luLCBtX21hcmtlclBvc2l0aW9uc1tpXS5hbmdsZSwgc3Ryb2tl
V2lkdGgpOworICAgICAgICAgICAgLy8gbWFya2VyLT5sYXllcigpLT5wYWludFNWR1Jlc291cmNl
TGF5ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCksIGNv
bnRlbnRUcmFuc2Zvcm0pOworICAgICAgICB9CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8
UGF0aD4gUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBt
YWtlVW5pcXVlPFBhdGg+KHBhdGhGcm9tR3JhcGhpY3NFbGVtZW50KCZncmFwaGljc0VsZW1lbnQo
KSkpOworfQorCit2b2lkIFJlbmRlclNWR1NoYXBlOjpwcm9jZXNzTWFya2VyUG9zaXRpb25zKCkK
K3sKKyAgICBtX21hcmtlclBvc2l0aW9ucy5jbGVhcigpOworCisgICAgaWYgKCFzaG91bGRHZW5l
cmF0ZU1hcmtlclBvc2l0aW9ucygpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9w
YXRoKTsKKworICAgIFNWR01hcmtlckRhdGEgbWFya2VyRGF0YShtX21hcmtlclBvc2l0aW9ucywg
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKCp0aGlzKS0+bWFy
a2VyUmV2ZXJzZVN0YXJ0KCkpOworICAgIG1fcGF0aC0+YXBwbHkoWyZtYXJrZXJEYXRhXShjb25z
dCBQYXRoRWxlbWVudCYgcGF0aEVsZW1lbnQpIHsKKyAgICAgICAgU1ZHTWFya2VyRGF0YTo6dXBk
YXRlRnJvbVBhdGhFbGVtZW50KG1hcmtlckRhdGEsIHBhdGhFbGVtZW50KTsKKyAgICB9KTsKKyAg
ICBtYXJrZXJEYXRhLnBhdGhJc0RvbmUoKTsKK30KKwordm9pZCBSZW5kZXJTVkdTaGFwZTo6c3R5
bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3
U3R5bGUpCit7CisgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkgPyAm
c3R5bGUoKSA6IG51bGxwdHI7CisgICAgaWYgKG9sZFN0eWxlKSB7CisgICAgICAgIGlmIChkaWZm
ID09IFN0eWxlRGlmZmVyZW5jZTo6TGF5b3V0KQorICAgICAgICAgICAgc2V0TmVlZHNTaGFwZVVw
ZGF0ZSgpOworICAgIH0KKworICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZVdpbGxDaGFu
Z2UoZGlmZiwgbmV3U3R5bGUpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFT
RURfU1ZHX0VOR0lORSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xZmE0ZDhjMzYyNTc1YzA2OWZhOGIyOTBmN2FlYTdmNmU4MzMw
NDcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdTaGFwZS5oCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0
IChDKSAyMDIwLCAyMDIxLCAyMDIyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aCIKKy8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgor
Ly8gI2luY2x1ZGUgIlNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCIKKyNpbmNsdWRlICJTVkdH
cmFwaGljc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdNYXJrZXJEYXRhLmgiCisjaW5jbHVkZSA8
bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjsKK2Ns
YXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKK2NsYXNzIFJlbmRlclNWR1BhdGg7CitjbGFzcyBSZW5k
ZXJTVkdSZXNvdXJjZTsKK2NsYXNzIFNWR0dyYXBoaWNzRWxlbWVudDsKKworY2xhc3MgUmVuZGVy
U1ZHU2hhcGUgOiBwdWJsaWMgUmVuZGVyU1ZHTW9kZWxPYmplY3QgeworICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoUmVuZGVyU1ZHU2hhcGUpOworcHVibGljOgorICAgIGVudW0gUG9pbnRDb29y
ZGluYXRlU3BhY2UgeworICAgICAgICBHbG9iYWxDb29yZGluYXRlU3BhY2UsCisgICAgICAgIExv
Y2FsQ29vcmRpbmF0ZVNwYWNlCisgICAgfTsKKyAgICBSZW5kZXJTVkdTaGFwZShTVkdHcmFwaGlj
c0VsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTVkdTaGFwZSgp
OworCisgICAgaW5saW5lIFNWR0dyYXBoaWNzRWxlbWVudCYgZ3JhcGhpY3NFbGVtZW50KCkgY29u
c3Q7CisKKyAgICB2b2lkIHNldE5lZWRzU2hhcGVVcGRhdGUoKSB7IG1fbmVlZHNTaGFwZVVwZGF0
ZSA9IHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBmaWxsU2hhcGUoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmluZ0Rpc2FibGVkKCkgY29uc3QgPSAw
OworCisgICAgYm9vbCBpc1BvaW50SW5GaWxsKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBib29s
IGlzUG9pbnRJblN0cm9rZShjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICBmbG9hdCBnZXRUb3Rh
bExlbmd0aCgpIGNvbnN0OworICAgIEZsb2F0UG9pbnQgZ2V0UG9pbnRBdExlbmd0aChmbG9hdCBk
aXN0YW5jZSkgY29uc3Q7CisKKyAgICBib29sIGhhc1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3Bh
dGguZ2V0KCk7IH0KKyAgICBQYXRoJiBwYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3BhdGgpOworICAgICAgICByZXR1cm4gKm1fcGF0aDsKKyAgICB9CisgICAgdm9pZCBjbGVh
clBhdGgoKSB7IG1fcGF0aCA9IG51bGxwdHI7IH0KKworICAgIEZsb2F0UmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94OyB9CisgICAg
RmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJv
a2VCb3VuZGluZ0JveDsgfQorCisgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBz
dHJlYW0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbgorICAgICAgICAvLyByZXR1cm4gU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbjo6Y29tcHV0ZVJlcGFpbnRCb3VuZGluZ0JveCgqdGhpcyk7IH0K
KyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIH0KKworICAgIEZsb2F0UmVjdCBjb21w
dXRlTWFya2VyQm91bmRpbmdCb3goKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZWxl
bWVudCgpIGNvbnN0ID0gZGVsZXRlOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNoYXBlRnJv
bUVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBQ
b2ludENvb3JkaW5hdGVTcGFjZSA9IEdsb2JhbENvb3JkaW5hdGVTcGFjZSk7CisgICAgdmlydHVh
bCBib29sIHNoYXBlRGVwZW5kZW50RmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBXaW5kUnVsZSkgY29uc3Q7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGgoKSBjb25zdDsKKyAgICBi
b29sIGhhc1Ntb290aFN0cm9rZSgpIGNvbnN0OworCisgICAgYm9vbCBoYXNOb25TY2FsaW5nU3Ry
b2tlKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS5zdmdTdHlsZSgpLnZlY3RvckVmZmVjdCgpID09
IFZlY3RvckVmZmVjdDo6Tm9uU2NhbGluZ1N0cm9rZTsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBu
b25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgUGF0aCogbm9uU2NhbGluZ1N0
cm9rZVBhdGgoY29uc3QgUGF0aCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OworCisg
ICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OworICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJv
dW5kaW5nQm94OworCitwcml2YXRlOgorICAgIC8vIEhpdC1kZXRlY3Rpb24gc2VwYXJhdGVkIGZv
ciB0aGUgZmlsbCBhbmQgdGhlIHN0cm9rZQorICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmLCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUsIGNvbnN0IFdpbmRSdWxlIGZpbGxS
dWxlID0gV2luZFJ1bGU6Ok5vblplcm8pOworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNTdHJva2UgPSB0cnVlKTsKKworICAgIGJvb2wgaXNT
VkdTaGFwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGNhbkhhdmVD
aGlsZHJlbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJTVkdTaGFwZSI7IH0K
KworICAgIHZvaWQgbGF5b3V0KCkgZmluYWw7CisgICAgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYpIGZpbmFsOworCisgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxv
Y2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlT2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlU3Ryb2tlQm91bmRp
bmdCb3goKSBjb25zdDsKKworICAgIGJvb2wgc2V0dXBOb25TY2FsaW5nU3Ryb2tlQ29udGV4dChB
ZmZpbmVUcmFuc2Zvcm0mLCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyJik7CisKKyAgICBib29s
IHNob3VsZEdlbmVyYXRlTWFya2VyUG9zaXRpb25zKCkgY29uc3Q7CisgICAgCisgICAgc3RkOjp1
bmlxdWVfcHRyPFBhdGg+IGNyZWF0ZVBhdGgoKSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NNYXJr
ZXJQb3NpdGlvbnMoKTsKKworICAgIHZvaWQgZmlsbFNoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiwg
R3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBzdHJva2VTaGFwZShjb25zdCBSZW5kZXJTdHls
ZSYsIEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250
ZXh0Jik7CisgICAgdm9pZCBmaWxsU3Ryb2tlTWFya2VycyhQYWludEluZm8mKTsKKyAgICB2b2lk
IGRyYXdNYXJrZXJzKFBhaW50SW5mbyYpOworCisgICAgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGJvb2wgbV9uZWVkc1NoYXBlVXBkYXRlIHsgdHJ1ZSB9OworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFBhdGg+IG1fcGF0aDsKKyAgICBWZWN0b3I8TWFya2VyUG9zaXRpb24+IG1f
bWFya2VyUG9zaXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyU1ZHU2hhcGUsIGlzU1ZHU2hhcGUo
KSkKKworI2VuZGlmIC8vIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZUlubGluZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGVJbmxpbmVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTQ1MDlmNGY0ZWE4NWFjNzU1NDMyOTkzYmI4ODhmMWJjMGQzYzViMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGVJ
bmxpbmVzLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisjaW5jbHVkZSAiUmVuZGVyU1ZHU2hh
cGUuaCIKKyNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitpbmxpbmUgU1ZHR3JhcGhpY3NFbGVtZW50JiBSZW5kZXJTVkdTaGFwZTo6Z3JhcGhp
Y3NFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8U1ZHR3JhcGhpY3NFbGVt
ZW50PihSZW5kZXJTVkdNb2RlbE9iamVjdDo6ZWxlbWVudCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTEFZRVJfQkFTRURfU1ZHX0VOR0lORQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggNzRj
ZWNjNDFmODU5MzZhMGEzYTM3OGQxM2EzZGQwNGE4MzZkMWU3ZC4uMTA0MjBjMDMxYmZhOWI4NDgx
NmRkNWI5Y2U1MDMyMDdlZGI1OTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRl
ICJFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1Jv
b3QuaCIKKyNpbmNsdWRlICJMZWdhY3lSZW5kZXJTVkdTaGFwZS5oIgogI2luY2x1ZGUgIk5vZGVS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJSZW5kZXJFbGVtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBjOTk1YWUzMWJjNmYxMzQ1YTRiMWM0ZDA5
NGI3MTc4ODIxYzI3MjBjLi5kNWUzYzA5M2ZkOTAyMmU5NTdjMjkxNzM2MDAwZmNjOTE3NGFkNzc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZVJhZGlhbEdyYWRpZW50SW5saW5lcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJT
VkdTaGFwZUlubGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAi
U1ZHQ2lyY2xlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRUeXBlSGVscGVycy5oIgpA
QCAtMTUxLDI1ICsxNTIsNzEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFNWR1NwcmVhZE1ldGhvZFR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRz
OwogfQogCi1zdGF0aWMgdm9pZCB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYg
dHMsIFJlbmRlclNWR1Jlc291cmNlKiByZXNvdXJjZSkKK3N0YXRpYyB2b2lkIHdyaXRlU1ZHUGFp
bnRpbmdSZXNvdXJjZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2UmIHJl
c291cmNlKQogewotICAgIGlmIChyZXNvdXJjZS0+cmVzb3VyY2VUeXBlKCkgPT0gU29saWRDb2xv
clJlc291cmNlVHlwZSkgewotICAgICAgICB0cyA8PCAiW3R5cGU9U09MSURdIFtjb2xvcj0iIDw8
IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcio+KHJlc291cmNlKS0+Y29s
b3IoKSA8PCAiXSI7CisgICAgYXV0byByZXNvdXJjZVR5cGUgPSByZXNvdXJjZS5yZXNvdXJjZVR5
cGUoKTsKKyAgICBpZiAocmVzb3VyY2VUeXBlID09IFNvbGlkQ29sb3JSZXNvdXJjZVR5cGUpIHsK
KyAgICAgICAgdHMgPDwgIlt0eXBlPVNPTElEXSBbY29sb3I9IiA8PCBkb3duY2FzdDxSZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3I+KHJlc291cmNlKS5jb2xvcigpIDw8ICJdIjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIC8vIEFsbCBvdGhlciByZXNvdXJjZXMgZGVyaXZlIGZyb20g
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIKLSAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ciogY29udGFpbmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqPihy
ZXNvdXJjZSk7Ci0gICAgU1ZHRWxlbWVudCYgZWxlbWVudCA9IGNvbnRhaW5lci0+ZWxlbWVudCgp
OwotCi0gICAgaWYgKHJlc291cmNlLT5yZXNvdXJjZVR5cGUoKSA9PSBQYXR0ZXJuUmVzb3VyY2VU
eXBlKQorICAgIGlmIChyZXNvdXJjZVR5cGUgPT0gUGF0dGVyblJlc291cmNlVHlwZSkKICAgICAg
ICAgdHMgPDwgIlt0eXBlPVBBVFRFUk5dIjsKLSAgICBlbHNlIGlmIChyZXNvdXJjZS0+cmVzb3Vy
Y2VUeXBlKCkgPT0gTGluZWFyR3JhZGllbnRSZXNvdXJjZVR5cGUpCisgICAgZWxzZSBpZiAocmVz
b3VyY2VUeXBlID09IExpbmVhckdyYWRpZW50UmVzb3VyY2VUeXBlKQogICAgICAgICB0cyA8PCAi
W3R5cGU9TElORUFSLUdSQURJRU5UXSI7Ci0gICAgZWxzZSBpZiAocmVzb3VyY2UtPnJlc291cmNl
VHlwZSgpID09IFJhZGlhbEdyYWRpZW50UmVzb3VyY2VUeXBlKQorICAgIGVsc2UgaWYgKHJlc291
cmNlVHlwZSA9PSBSYWRpYWxHcmFkaWVudFJlc291cmNlVHlwZSkKICAgICAgICAgdHMgPDwgIlt0
eXBlPVJBRElBTC1HUkFESUVOVF0iOwogCi0gICAgdHMgPDwgIiBbaWQ9XCIiIDw8IGVsZW1lbnQu
Z2V0SWRBdHRyaWJ1dGUoKSA8PCAiXCJdIjsKKyAgICAvLyBBbGwgb3RoZXIgcmVzb3VyY2VzIGRl
cml2ZSBmcm9tIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyCisgICAgY29uc3QgYXV0byYgY29u
dGFpbmVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImPihy
ZXNvdXJjZSk7CisgICAgdHMgPDwgIiBbaWQ9XCIiIDw8IGNvbnRhaW5lci5lbGVtZW50KCkuZ2V0
SWRBdHRyaWJ1dGUoKSA8PCAiXCJdIjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVTVkdGaWxsUGFp
bnRpbmdSZXNvdXJjZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclNWR1Jlc291cmNlJiBmaWxsUGFpbnRpbmdSZXNvdXJjZSkKK3sKKyAg
ICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKKyAgICB0cyA8PCAiIFtmaWxsPXsiIDw8IHM7
CisgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBmaWxsUGFpbnRpbmdSZXNvdXJjZSk7
CisKKyAgICBjb25zdCBhdXRvJiBzdmdTdHlsZSA9IHJlbmRlcmVyLnN0eWxlKCkuc3ZnU3R5bGUo
KTsKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdmdTdHlsZS5maWxsT3Bh
Y2l0eSgpLCAxLjBmKTsKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImZpbGwgcnVsZSIsIHN2
Z1N0eWxlLmZpbGxSdWxlKCksIFdpbmRSdWxlOjpOb25aZXJvKTsKKyAgICB0cyA8PCAifV0iOwor
fQorCitzdGF0aWMgdm9pZCB3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTVkdSZXNv
dXJjZSYgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSwgY29uc3QgU1ZHR3JhcGhpY3NFbGVtZW50JiBz
aGFwZSkKK3sKKyAgICBUZXh0U3RyZWFtU2VwYXJhdG9yIHMoIiAiKTsKKyAgICB0cyA8PCAiIFtz
dHJva2U9eyIgPDwgczsKKyAgICB3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2UodHMsIHN0cm9rZVBh
aW50aW5nUmVzb3VyY2UpOworCisgICAgY29uc3QgYXV0byYgc3R5bGUgPSByZW5kZXJlci5zdHls
ZSgpOworICAgIGNvbnN0IGF1dG8mIHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKKworICAg
IFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmc2hhcGUpOworICAgIGRvdWJsZSBkYXNo
T2Zmc2V0ID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNo
T2Zmc2V0KCkpOworICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVG
b3JMZW5ndGgoc3R5bGUuc3Ryb2tlV2lkdGgoKSk7CisgICAgY29uc3QgYXV0byYgZGFzaGVzID0g
c3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5KCk7CisKKyAgICBEYXNoQXJyYXkgZGFzaEFycmF5Owor
ICAgIGZvciAoYXV0byYgbGVuZ3RoIDogZGFzaGVzKQorICAgICAgICBkYXNoQXJyYXkuYXBwZW5k
KGxlbmd0aC52YWx1ZShsZW5ndGhDb250ZXh0KSk7CisKKyAgICB3cml0ZUlmTm90RGVmYXVsdCh0
cywgIm9wYWNpdHkiLCBzdmdTdHlsZS5zdHJva2VPcGFjaXR5KCksIDEuMGYpOworICAgIHdyaXRl
SWZOb3REZWZhdWx0KHRzLCAic3Ryb2tlIHdpZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7CisgICAg
d3JpdGVJZk5vdERlZmF1bHQodHMsICJtaXRlciBsaW1pdCIsIHN0eWxlLnN0cm9rZU1pdGVyTGlt
aXQoKSwgNC4wZik7CisgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJsaW5lIGNhcCIsIHN0eWxl
LmNhcFN0eWxlKCksIExpbmVDYXA6OkJ1dHQpOworICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAi
bGluZSBqb2luIiwgc3R5bGUuam9pblN0eWxlKCksIExpbmVKb2luOjpNaXRlcik7CisgICAgd3Jp
dGVJZk5vdERlZmF1bHQodHMsICJkYXNoIG9mZnNldCIsIGRhc2hPZmZzZXQsIDAuMCk7CisgICAg
aWYgKCFkYXNoQXJyYXkuaXNFbXB0eSgpKQorICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMs
ICJkYXNoIGFycmF5IiwgZGFzaEFycmF5KTsKKworICAgIGlmIChpczxTVkdHZW9tZXRyeUVsZW1l
bnQ+KHNoYXBlKSkgeworICAgICAgICBkb3VibGUgcGF0aExlbmd0aCA9IGRvd25jYXN0PFNWR0dl
b21ldHJ5RWxlbWVudD4oc2hhcGUpLnBhdGhMZW5ndGgoKTsKKyAgICAgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJwYXRoIGxlbmd0aCIsIHBhdGhMZW5ndGgsIDAuMCk7CisgICAgfQorCisgICAg
dHMgPDwgIn1dIjsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCkBAIC0xODEsNTIgKzIyOCwzNCBAQCBzdGF0
aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlcikKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAidHJhbnNmb3JtIiwgcmVu
ZGVyZXIubG9jYWxUcmFuc2Zvcm0oKSk7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJpbWFn
ZSByZW5kZXJpbmciLCBzdHlsZS5pbWFnZVJlbmRlcmluZygpLCBSZW5kZXJTdHlsZTo6aW5pdGlh
bEltYWdlUmVuZGVyaW5nKCkpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3BhY2l0eSIs
IHN0eWxlLm9wYWNpdHkoKSwgUmVuZGVyU3R5bGU6OmluaXRpYWxPcGFjaXR5KCkpOworCiAgICAg
aWYgKGlzPExlZ2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpIHsKICAgICAgICAgY29uc3Qg
YXV0byYgc2hhcGUgPSBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpOwog
CiAgICAgICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7Ci0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNv
dXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQ
YWludGluZ1Jlc291cmNlKGNvbnN0X2Nhc3Q8TGVnYWN5UmVuZGVyU1ZHU2hhcGUmPihzaGFwZSks
IHNoYXBlLnN0eWxlKCksIGZhbGxiYWNrQ29sb3IpKSB7Ci0gICAgICAgICAgICBUZXh0U3RyZWFt
U2VwYXJhdG9yIHMoIiAiKTsKLSAgICAgICAgICAgIHRzIDw8ICIgW3N0cm9rZT17IiA8PCBzOwot
ICAgICAgICAgICAgd3JpdGVTVkdQYWludGluZ1Jlc291cmNlKHRzLCBzdHJva2VQYWludGluZ1Jl
c291cmNlKTsKLQotICAgICAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KCZz
aGFwZS5ncmFwaGljc0VsZW1lbnQoKSk7Ci0gICAgICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9
IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgp
KTsKLSAgICAgICAgICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVG
b3JMZW5ndGgoc3R5bGUuc3Ryb2tlV2lkdGgoKSk7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBk
YXNoZXMgPSBzdmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKTsKLQotICAgICAgICAgICAgRGFzaEFy
cmF5IGRhc2hBcnJheTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgbGVuZ3RoIDogZGFzaGVzKQot
ICAgICAgICAgICAgICAgIGRhc2hBcnJheS5hcHBlbmQobGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRl
eHQpKTsKLQotICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3Zn
U3R5bGUuc3Ryb2tlT3BhY2l0eSgpLCAxLjBmKTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZh
dWx0KHRzLCAic3Ryb2tlIHdpZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7Ci0gICAgICAgICAgICB3
cml0ZUlmTm90RGVmYXVsdCh0cywgIm1pdGVyIGxpbWl0Iiwgc3R5bGUuc3Ryb2tlTWl0ZXJMaW1p
dCgpLCA0LjBmKTsKLSAgICAgICAgICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAibGluZSBjYXAi
LCBzdHlsZS5jYXBTdHlsZSgpLCBMaW5lQ2FwOjpCdXR0KTsKLSAgICAgICAgICAgIHdyaXRlSWZO
b3REZWZhdWx0KHRzLCAibGluZSBqb2luIiwgc3R5bGUuam9pblN0eWxlKCksIExpbmVKb2luOjpN
aXRlcik7Ci0gICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImRhc2ggb2Zmc2V0Iiwg
ZGFzaE9mZnNldCwgMC4wKTsKLSAgICAgICAgICAgIGlmICghZGFzaEFycmF5LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJkYXNoIGFycmF5IiwgZGFz
aEFycmF5KTsKLQotICAgICAgICAgICAgaWYgKGlzPFNWR0dlb21ldHJ5RWxlbWVudD4oc2hhcGUu
Z3JhcGhpY3NFbGVtZW50KCkpKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHBhdGhMZW5ndGgg
PSBkb3duY2FzdDxTVkdHZW9tZXRyeUVsZW1lbnQ+KHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKS5w
YXRoTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJwYXRo
IGxlbmd0aCIsIHBhdGhMZW5ndGgsIDAuMCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChh
dXRvKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBh
aW50aW5nUmVzb3VyY2UoY29uc3RfY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwg
c2hhcGUuc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgICAgICB3cml0ZVNWR1N0cm9r
ZVBhaW50aW5nUmVzb3VyY2UodHMsIHJlbmRlcmVyLCAqc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSwg
c2hhcGUuZ3JhcGhpY3NFbGVtZW50KCkpOwogCi0gICAgICAgICAgICB0cyA8PCAifV0iOwotICAg
ICAgICB9CisgICAgICAgIGlmIChhdXRvKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNW
R1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PExlZ2FjeVJlbmRlclNW
R1NoYXBlJj4oc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAgICAg
ICAgIHdyaXRlU1ZHRmlsbFBhaW50aW5nUmVzb3VyY2UodHMsIHJlbmRlcmVyLCAqZmlsbFBhaW50
aW5nUmVzb3VyY2UpOwogCi0gICAgICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50
aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UoY29u
c3RfY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5bGUoKSwgZmFs
bGJhY2tDb2xvcikpIHsKLSAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3IgcygiICIpOwot
ICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IiA8PCBzOwotICAgICAgICAgICAgd3JpdGVTVkdQ
YWludGluZ1Jlc291cmNlKHRzLCBmaWxsUGFpbnRpbmdSZXNvdXJjZSk7CisgICAgICAgIHdyaXRl
SWZOb3REZWZhdWx0KHRzLCAiY2xpcCBydWxlIiwgc3ZnU3R5bGUuY2xpcFJ1bGUoKSwgV2luZFJ1
bGU6Ok5vblplcm8pOworICAgIH0KKworI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5F
KQorICAgIGVsc2UgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpIHsKKyAg
ICAgICAgY29uc3QgYXV0byYgc2hhcGUgPSBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4ocmVuZGVy
ZXIpOworCisgICAgICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CisgICAgICAgIGlmIChhdXRvKiBz
dHJva2VQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5n
UmVzb3VyY2UoY29uc3RfY2FzdDxSZW5kZXJTVkdTaGFwZSY+KHNoYXBlKSwgc2hhcGUuc3R5bGUo
KSwgZmFsbGJhY2tDb2xvcikpCisgICAgICAgICAgICB3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVz
b3VyY2UodHMsIHJlbmRlcmVyLCAqc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSwgc2hhcGUuZ3JhcGhp
Y3NFbGVtZW50KCkpOworCisgICAgICAgIGlmIChhdXRvKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9
IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZShjb25zdF9jYXN0PFJlbmRl
clNWR1NoYXBlJj4oc2hhcGUpLCBzaGFwZS5zdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKKyAgICAg
ICAgICAgIHdyaXRlU1ZHRmlsbFBhaW50aW5nUmVzb3VyY2UodHMsIHJlbmRlcmVyLCAqZmlsbFBh
aW50aW5nUmVzb3VyY2UpOwogCi0gICAgICAgICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9w
YWNpdHkiLCBzdmdTdHlsZS5maWxsT3BhY2l0eSgpLCAxLjBmKTsKLSAgICAgICAgICAgIHdyaXRl
SWZOb3REZWZhdWx0KHRzLCAiZmlsbCBydWxlIiwgc3ZnU3R5bGUuZmlsbFJ1bGUoKSwgV2luZFJ1
bGU6Ok5vblplcm8pOwotICAgICAgICAgICAgdHMgPDwgIn1dIjsKLSAgICAgICAgfQogICAgICAg
ICB3cml0ZUlmTm90RGVmYXVsdCh0cywgImNsaXAgcnVsZSIsIHN2Z1N0eWxlLmNsaXBSdWxlKCks
IFdpbmRSdWxlOjpOb25aZXJvKTsKICAgICB9CisjZW5kaWYKIAogICAgIHdyaXRlSWZOb3RFbXB0
eSh0cywgInN0YXJ0IG1hcmtlciIsIHN2Z1N0eWxlLm1hcmtlclN0YXJ0UmVzb3VyY2UoKSk7CiAg
ICAgd3JpdGVJZk5vdEVtcHR5KHRzLCAibWlkZGxlIG1hcmtlciIsIHN2Z1N0eWxlLm1hcmtlck1p
ZFJlc291cmNlKCkpOwpAQCAtMjUwLDExICsyNzksOCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgd3Jp
dGVQb3NpdGlvbkFuZFN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JiBy
ZQogICAgIHJldHVybiB0czsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlJiBzaGFwZSkKK3N0YXRpYyB2
b2lkIHdyaXRlU1ZHR3JhcGhpY3NFbGVtZW50KFRleHRTdHJlYW0mIHRzLCBTVkdHcmFwaGljc0Vs
ZW1lbnQmIHN2Z0VsZW1lbnQpCiB7Ci0gICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBzaGFw
ZSk7Ci0KLSAgICBTVkdHcmFwaGljc0VsZW1lbnQmIHN2Z0VsZW1lbnQgPSBzaGFwZS5ncmFwaGlj
c0VsZW1lbnQoKTsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoJnN2Z0VsZW1l
bnQpOwogCiAgICAgaWYgKGlzPFNWR1JlY3RFbGVtZW50PihzdmdFbGVtZW50KSkgewpAQCAtMjkx
LDkgKzMxNywyNCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUmIHNoYXBlKQogICAgICAgICB3cml0ZU5hbWVB
bmRRdW90ZWRWYWx1ZSh0cywgImRhdGEiLCBwYXRoU3RyaW5nKTsKICAgICB9IGVsc2UKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdTaGFwZSYgc2hhcGUpCit7
CisgICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBzaGFwZSk7CisgICAgd3JpdGVTVkdHcmFw
aGljc0VsZW1lbnQodHMsIHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFwZSYgc2hh
cGUpCit7CisgICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBzaGFwZSk7CisgICAgd3JpdGVT
VkdHcmFwaGljc0VsZW1lbnQodHMsIHNoYXBlLmdyYXBoaWNzRWxlbWVudCgpKTsKKyAgICByZXR1
cm4gdHM7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJTVkdUZXh0Qm94KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdUZXh0JiB0ZXh0KQogewogICAgIGF1dG8qIGJv
eCA9IGRvd25jYXN0PFNWR1Jvb3RJbmxpbmVCb3g+KHRleHQuZmlyc3RSb290Qm94KCkpOwpAQCAt
NTUxLDYgKzU5MiwxNSBAQCB2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlclNWR0ltYWdlJiBpbWFnZSwgT3B0aW9uU2V0PFJlbmRlcgogICAgIHdyaXRlUmVzb3Vy
Y2VzKHRzLCBpbWFnZSwgYmVoYXZpb3IpOwogfQogCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NW
R19FTkdJTkUpCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdTaGFw
ZSYgc2hhcGUsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPiBiZWhhdmlvcikKK3sKKyAgICB3
cml0ZVN0YW5kYXJkUHJlZml4KHRzLCBzaGFwZSwgYmVoYXZpb3IpOworICAgIHRzIDw8IHNoYXBl
IDw8ICJcbiI7CisgICAgd3JpdGVSZXNvdXJjZXModHMsIHNoYXBlLCBiZWhhdmlvcik7Cit9Cisj
ZW5kaWYKKwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgTGVnYWN5UmVuZGVyU1ZH
U2hhcGUmIHNoYXBlLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4gYmVoYXZpb3IpCiB7CiAg
ICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0cywgc2hhcGUsIGJlaGF2aW9yKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKaW5kZXggN2Fj
M2ZjZWM4ZDM3ZTc1NDUxNTA4YWQ0YzVmMmRjMmJlMThlMjdmZS4uZWM4ODQ1NTM1ZjA4NWQ2MDY0
MDFjM2M2ZGJiYTExODcwOWNlNDlhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKQEAgLTQ1LDE1ICs0NSwxNyBAQCBjbGFzcyBS
ZW5kZXJTVkdJbWFnZTsKIGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7CiBjbGFzcyBSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lcjsKIGNsYXNzIFJlbmRlclNWR1Jvb3Q7CitjbGFzcyBSZW5kZXJT
VkdTaGFwZTsKIGNsYXNzIFJlbmRlclNWR1RleHQ7CiBjbGFzcyBTVkdVbml0VHlwZXM7CiAKIC8v
IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRyZWVBc1RleHQgY29kZQogdm9pZCB3
cml0ZShXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBMZWdhY3lSZW5kZXJTVkdSb290JiwgT3B0aW9u
U2V0PFJlbmRlckFzVGV4dEZsYWc+KTsKK3ZvaWQgd3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwgY29u
c3QgTGVnYWN5UmVuZGVyU1ZHU2hhcGUmLCBPcHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwog
I2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQogdm9pZCB3cml0ZShXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+
KTsKK3ZvaWQgd3JpdGUoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHU2hhcGUmLCBP
cHRpb25TZXQ8UmVuZGVyQXNUZXh0RmxhZz4pOwogI2VuZGlmCi12b2lkIHdyaXRlKFdURjo6VGV4
dFN0cmVhbSYsIGNvbnN0IExlZ2FjeVJlbmRlclNWR1NoYXBlJiwgT3B0aW9uU2V0PFJlbmRlckFz
VGV4dEZsYWc+KTsKIHZvaWQgd3JpdGVTVkdHcmFkaWVudFN0b3AoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgUmVuZGVyU1ZHR3JhZGllbnRTdG9wJiwgT3B0aW9uU2V0PFJlbmRlckFzVGV4dEZsYWc+
KTsKIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFn
Pik7CiB2b2lkIHdyaXRlU1ZHQ29udGFpbmVyKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRl
clNWR0NvbnRhaW5lciYsIE9wdGlvblNldDxSZW5kZXJBc1RleHRGbGFnPik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAppbmRleCBmNTI5OTk2NjZh
ODFiZmQ1NDBhZGZlM2M0N2YwOTllOGIzZGZhOWMxLi5mOTUyNzJhNGQ1ZDhhODliNTYwYzZkZWE4
MGY2ODljMDFmMWE2NjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90
aW9uRWxlbWVudC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJQYXRoVHJhdmVy
c2FsU3RhdGUuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKICNpbmNs
dWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdHZW9tZXRyeUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dlb21ldHJ5RWxl
bWVudC5jcHAKaW5kZXggOWM2OGQ0ZTc0NDZjMTg2MGE1MDYxOGEwY2UzMGE2YzE5MjU2MmY3ZC4u
ZTZmMmMxNzk5NjZhYmRhMjIxNGI3NmIwOTZhM2M1YWI1NDI3ZjFhMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0dlb21ldHJ5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0dlb21ldHJ5RWxlbWVudC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJET01Qb2ludC5oIgogI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgogI2lu
Y2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJTVkdQb2ludC5oIgpAQCAtNDgsNTIgKzQ5LDg4IEBAIGZsb2F0IFNW
R0dlb21ldHJ5RWxlbWVudDo6Z2V0VG90YWxMZW5ndGgoKSBjb25zdAogewogICAgIGRvY3VtZW50
KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBhdXRvKiBy
ZW5kZXJlciA9IGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1NoYXBlPih0aGlzLT5yZW5kZXJlcigp
KTsKKyAgICBhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gcmVuZGVyZXItPmdldFRvdGFs
TGVuZ3RoKCk7CisgICAgaWYgKGlzPExlZ2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpCisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpLT5n
ZXRUb3RhbExlbmd0aCgpOworCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCisg
ICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpLT5nZXRUb3RhbExlbmd0aCgpOworI2VuZGlm
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogRXhjZXB0
aW9uT3I8UmVmPFNWR1BvaW50Pj4gU1ZHR2VvbWV0cnlFbGVtZW50OjpnZXRQb2ludEF0TGVuZ3Ro
KGZsb2F0IGRpc3RhbmNlKSBjb25zdAogewogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0
PExlZ2FjeVJlbmRlclNWR1NoYXBlPih0aGlzLT5yZW5kZXJlcigpKTsKLSAgICAKKyAgICBhdXRv
KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CisKICAgICAvLyBTcGVjOiBJZiBjdXJyZW50
IGVsZW1lbnQgaXMgYSBub24tcmVuZGVyZWQgZWxlbWVudCwgdGhyb3cgYW4gSW52YWxpZFN0YXRl
RXJyb3IuCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRTdGF0ZUVycm9yIH07Ci0gICAgCisKICAgICAvLyBTcGVjOiBDbGFtcCBkaXN0YW5jZSB0
byBbMCwgbGVuZ3RoXS4KICAgICBkaXN0YW5jZSA9IGNsYW1wVG88ZmxvYXQ+KGRpc3RhbmNlLCAw
LCBnZXRUb3RhbExlbmd0aCgpKTsKIAogICAgIC8vIFNwZWM6IFJldHVybiBhIG5ld2x5IGNyZWF0
ZWQsIGRldGFjaGVkIFNWR1BvaW50IG9iamVjdC4KLSAgICByZXR1cm4gU1ZHUG9pbnQ6OmNyZWF0
ZShyZW5kZXJlci0+Z2V0UG9pbnRBdExlbmd0aChkaXN0YW5jZSkpOworICAgIGlmIChpczxMZWdh
Y3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gU1ZHUG9pbnQ6OmNy
ZWF0ZShkb3duY2FzdDxMZWdhY3lSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpLT5nZXRQb2ludEF0
TGVuZ3RoKGRpc3RhbmNlKSk7CisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
KyAgICBpZiAoaXM8UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIFNW
R1BvaW50OjpjcmVhdGUoZG93bmNhc3Q8UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVyKS0+Z2V0UG9p
bnRBdExlbmd0aChkaXN0YW5jZSkpOworI2VuZGlmCisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIH0KIAogYm9v
bCBTVkdHZW9tZXRyeUVsZW1lbnQ6OmlzUG9pbnRJbkZpbGwoRE9NUG9pbnRJbml0JiYgcG9pbnRJ
bml0KQogewogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CiAKLSAgICBhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1No
YXBlPih0aGlzLT5yZW5kZXJlcigpKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
RmxvYXRQb2ludCBwb2ludCB7c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvaW50SW5pdC54KSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHBvaW50SW5pdC55KX07Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5pc1BvaW50
SW5GaWxsKHBvaW50KTsKKyAgICBpZiAoaXM8TGVnYWN5UmVuZGVyU1ZHU2hhcGU+KHJlbmRlcmVy
KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PExlZ2FjeVJlbmRlclNWR1NoYXBlPihyZW5kZXJl
ciktPmlzUG9pbnRJbkZpbGwocG9pbnQpOworCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19F
TkdJTkUpCisgICAgaWYgKGlzPFJlbmRlclNWR1NoYXBlPihyZW5kZXJlcikpCisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4ocmVuZGVyZXIpLT5pc1BvaW50SW5GaWxsKHBv
aW50KTsKKyNlbmRpZgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCiBib29sIFNWR0dlb21ldHJ5RWxlbWVudDo6aXNQb2ludEluU3Ryb2tlKERPTVBv
aW50SW5pdCYmIHBvaW50SW5pdCkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxM
ZWdhY3lSZW5kZXJTVkdTaGFwZT4odGhpcy0+cmVuZGVyZXIoKSk7CisgICAgYXV0byogcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEZsb2F0UG9pbnQgcG9pbnQge3N0YXRpY19jYXN0PGZsb2F0Pihwb2lu
dEluaXQueCksIHN0YXRpY19jYXN0PGZsb2F0Pihwb2ludEluaXQueSl9OwotICAgIHJldHVybiBy
ZW5kZXJlci0+aXNQb2ludEluU3Ryb2tlKHBvaW50KTsKKyAgICBpZiAoaXM8TGVnYWN5UmVuZGVy
U1ZHU2hhcGU+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PExlZ2FjeVJlbmRl
clNWR1NoYXBlPihyZW5kZXJlciktPmlzUG9pbnRJblN0cm9rZShwb2ludCk7CisKKyNpZiBFTkFC
TEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKKyAgICBpZiAoaXM8UmVuZGVyU1ZHU2hhcGU+KHJl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclNWR1NoYXBlPihyZW5kZXJl
ciktPmlzUG9pbnRJblN0cm9rZShwb2ludCk7CisjZW5kaWYKKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBTVkdHZW9tZXRyeUVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKaW5kZXggMTJlZmY0
M2Q1ZjViMmUyODUzMzBmMGUwZjlkMGMwODkyZmYyNzAxYy4uZWZiOWI4YmNmZDljYzk1ZWFhNDkz
YmZlMWFhZDkxOWNhNzljYjNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3Bw
CkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHTGlu
ZUVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkxlZ2FjeVJlbmRlclNWR1NoYXBlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdMZW5ndGhWYWx1ZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Cg==
</data>
<flag name="review"
          id="474586"
          type_id="1"
          status="+"
          setter="rbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>