<?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>221881</bug_id>
          
          <creation_ts>2021-02-14 15:38:16 -0800</creation_ts>
          <short_desc>Prepare for adding relative color support</short_desc>
          <delta_ts>2021-02-18 22:44:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=222156</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>221880</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1729019</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-14 15:38:16 -0800</bug_when>
    <thetext>Prepare for adding relative color support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729020</commentid>
    <comment_count>1</comment_count>
      <attachid>420256</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-14 15:52:53 -0800</bug_when>
    <thetext>Created attachment 420256
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729024</commentid>
    <comment_count>2</comment_count>
      <attachid>420258</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-14 16:03:30 -0800</bug_when>
    <thetext>Created attachment 420258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729026</commentid>
    <comment_count>3</comment_count>
      <attachid>420260</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-14 16:15:14 -0800</bug_when>
    <thetext>Created attachment 420260
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729027</commentid>
    <comment_count>4</comment_count>
      <attachid>420261</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-14 16:27:24 -0800</bug_when>
    <thetext>Created attachment 420261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729034</commentid>
    <comment_count>5</comment_count>
      <attachid>420265</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-14 19:04:01 -0800</bug_when>
    <thetext>Created attachment 420265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729038</commentid>
    <comment_count>6</comment_count>
      <attachid>420267</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-14 20:11:54 -0800</bug_when>
    <thetext>Created attachment 420267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729168</commentid>
    <comment_count>7</comment_count>
      <attachid>420267</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-15 08:41:10 -0800</bug_when>
    <thetext>Comment on attachment 420267
Patch

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

&gt; Source/WebCore/css/parser/CSSParser.cpp:120
&gt; -    return CSSPropertyParserHelpers::consumeColorWorkerSafe(range, HTMLStandardMode);
&gt; +    return CSSPropertyParserHelpers::consumeColorWorkerSafe(range, strictCSSParserContext());

Rationale for going from &quot;standard mode&quot; to &quot;strict&quot;?

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:699
&gt; +        return clampTo&lt;double&gt;(*alphaParameter, 0.0, 1.0);

Should not need the &lt;double&gt; here.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:712
&gt; +    if (auto number = consumeNumberRaw(range))
&gt; +        return *number;
&gt; +
&gt; +    return WTF::nullopt;

Doesn’t seem like we need an if here. Just a return.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:723
&gt; +enum class RGBComponentType {
&gt; +    Number,
&gt; +    Percentage
&gt; +};

Looks better on a single line?

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:736
&gt; +enum class RGBOrHSLSeparatorSyntax {
&gt; +    Commas,
&gt; +    WhitespaceSlash
&gt; +};

Looks better on a single line?

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:760
&gt; +    if (auto alphaParameter = consumeNumberOrPercentDividedBy100Raw(args))
&gt; +        return *alphaParameter;
&gt; +
&gt; +    return WTF::nullopt;

Doesn’t seem like we need an if here. Just a return.

&gt; Source/WebCore/editing/cocoa/DataDetection.mm:603
&gt; +                        hsla.lightness = 50.0f;

How do you know you found all the places that depend on the old range?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729169</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-15 08:42:17 -0800</bug_when>
    <thetext>ChangeLog entry in Tools/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729186</commentid>
    <comment_count>9</comment_count>
      <attachid>420267</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-15 09:21:18 -0800</bug_when>
    <thetext>Comment on attachment 420267
Patch

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

&gt;&gt; Source/WebCore/css/parser/CSSParser.cpp:120
&gt;&gt; +    return CSSPropertyParserHelpers::consumeColorWorkerSafe(range, strictCSSParserContext());
&gt; 
&gt; Rationale for going from &quot;standard mode&quot; to &quot;strict&quot;?

Oh, wait, I guess those are two names for the same sort of thing. Somehow I thought &quot;standard&quot; was the non-strict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729223</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-15 10:27:17 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 420267 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=420267&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSParser.cpp:120
&gt; &gt; -    return CSSPropertyParserHelpers::consumeColorWorkerSafe(range, HTMLStandardMode);
&gt; &gt; +    return CSSPropertyParserHelpers::consumeColorWorkerSafe(range, strictCSSParserContext());
&gt; 
&gt; Rationale for going from &quot;standard mode&quot; to &quot;strict&quot;?

strictCSSParserContext() is just a CSSParserContext with HTMLStandardMode. 

const CSSParserContext&amp; strictCSSParserContext()
{
    static MainThreadNeverDestroyed&lt;CSSParserContext&gt; strictContext(HTMLStandardMode);
    return strictContext;
}

So it should behave the same.

&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:699
&gt; &gt; +        return clampTo&lt;double&gt;(*alphaParameter, 0.0, 1.0);
&gt; 
&gt; Should not need the &lt;double&gt; here.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:712
&gt; &gt; +    if (auto number = consumeNumberRaw(range))
&gt; &gt; +        return *number;
&gt; &gt; +
&gt; &gt; +    return WTF::nullopt;
&gt; 
&gt; Doesn’t seem like we need an if here. Just a return.

Good point. Fixed.

&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:723
&gt; &gt; +enum class RGBComponentType {
&gt; &gt; +    Number,
&gt; &gt; +    Percentage
&gt; &gt; +};
&gt; 
&gt; Looks better on a single line?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:736
&gt; &gt; +enum class RGBOrHSLSeparatorSyntax {
&gt; &gt; +    Commas,
&gt; &gt; +    WhitespaceSlash
&gt; &gt; +};
&gt; 
&gt; Looks better on a single line?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:760
&gt; &gt; +    if (auto alphaParameter = consumeNumberOrPercentDividedBy100Raw(args))
&gt; &gt; +        return *alphaParameter;
&gt; &gt; +
&gt; &gt; +    return WTF::nullopt;
&gt; 
&gt; Doesn’t seem like we need an if here. Just a return.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/editing/cocoa/DataDetection.mm:603
&gt; &gt; +                        hsla.lightness = 50.0f;
&gt; 
&gt; How do you know you found all the places that depend on the old range?

Searched for all uses of HSLA in the code. Since you explicit conversion is needed it&apos;s pretty easy to find them all.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729225</commentid>
    <comment_count>11</comment_count>
      <attachid>420330</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-15 10:32:22 -0800</bug_when>
    <thetext>Created attachment 420330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729262</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-15 11:24:18 -0800</bug_when>
    <thetext>Committed r272870: &lt;https://commits.webkit.org/r272870&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 420330.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729263</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-15 11:25:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/74358043&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729312</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-02-15 13:10:02 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729314</commentid>
    <comment_count>15</comment_count>
      <attachid>420353</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-02-15 13:10:29 -0800</bug_when>
    <thetext>Created attachment 420353
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729345</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-15 13:40:51 -0800</bug_when>
    <thetext>Committed r272876: &lt;https://commits.webkit.org/r272876&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 420353.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731231</commentid>
    <comment_count>17</comment_count>
      <attachid>420330</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-02-18 22:44:11 -0800</bug_when>
    <thetext>Comment on attachment 420330
Patch

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

&gt; Source/WebCore/css/parser/CSSParser.cpp:120
&gt; +    return CSSPropertyParserHelpers::consumeColorWorkerSafe(range, strictCSSParserContext());

You can&apos;t use strictCSSParserContext in parseColorWorkerSafe. See Bug 222156.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420256</attachid>
            <date>2021-02-14 15:52:53 -0800</date>
            <delta_ts>2021-02-14 19:04:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221881-20210214155252.patch</filename>
            <type>text/plain</type>
            <size>71936</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIxLTAyLTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVwYXJlIGZvciBhZGRpbmcgcmVs
YXRpdmUgY29sb3Igc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxODgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBleHBlcmltZW50YWwgcmVsYXRp
dmUgY29sb3Igc3VwcG9ydCBhIGxpdHRsZSBjbGVhbnVwCisgICAgICAgIGlzIGluIG9yZGVyLiBU
aGlzIGNoYW5nZToKKyAgICAgICAgCisgICAgICAgIC0gVGhyZWFkcyBhIENTU1BhcnNlckNvbnRl
eHQgdGhyb3VnaCB0aGUgY29sb3IgcGFyc2luZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBiZQorICAg
ICAgICAgIG5lZWRlZCB0byBjaGVjayBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdC4K
KyAgICAgICAgLSBEb2VzIGEgc21hbGwgY2xlYW51cCBvZiBDU1NQYXJzZXJDb250ZXh0LCBzb3J0
aW5nIGZlYXR1cmVzIGFuZCB1c2luZyB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICBsaXN0
IGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgLSBSZWZhY3RvcnMgc29tZSBvZiB0aGUgY29s
b3IgcGFyc2luZyBoZWxwZXJzIHRvIGV4dHJhY3QgbW9yZSBoZWxwZXJzLiBUaGVzZSBjbGFyaWZ5
CisgICAgICAgICAgdGhlIGNvZGUgYmV0dGVyIGFuZCB3aWxsIGJlIHNoYXJlZCBieSB0aGUgcmVs
YXRpdmUgcGFyc2Vycy4KKyAgICAgICAgLSBNb3ZlIG5vcm1hbGl6YXRpb24gb2YgY29tcG9uZW50
cyB0byBhZnRlciBwYXJzaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdvcmsKKyAgICAgICAgICBp
biB0aGUgY2FzZSBvZiBmYWlsdXJlIGFuZCBzZXBhcmF0ZSB0aGUgcGhhc2VzIGEgYml0IG1vcmUu
CisgICAgICAgIC0gUmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IFZhbHVlUmFuZ2VBbGwgcGFyYW1l
dGVycyB0aGF0IHdlcmUgYWxyZWFkeSB0aGUgZGVmYXVsdC4KKyAgICAgICAgLSBTd2l0Y2ggSFNM
QSBhbmQgSFdCQSB0byBzdG9wIHN0b3JpbmcgdGhlaXIgY29tcG9uZW50cyBpbiBhIDAtMSBub3Jt
YWxpemF0aW9uCisgICAgICAgICAgYW5kIGluc3RlYWQgdXNlIHZhbHVlcyB0aGF0IG1hdGNoIHRo
ZSBpbnB1dCwgMC0zNjAgZm9yIGh1ZSwgYW5kIDAtMTAwIGZvciB0aGUKKyAgICAgICAgICB0aGUg
cmVtYWluaW5nIHR3byBjb21wb25lbnRzLiBUaGlzIHNlZW1zIG1vcmUgbmF0dXJhbCwgYW5kIHdp
bGwgc2ltcGxpZnkKKyAgICAgICAgICBmdXR1cmUgY29sb3IgZnVuY3Rpb24gd29yayB0aGF0IGV4
cGVjdHMgdGhlIHZhbHVlcyBpbiB0aGlzIGZvcm0uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3Jr
ZXJTYWZlKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2hvdWxkRW5hYmxlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dEhhc2g6
Omhhc2gpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3VtZVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1l
Q2FyZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lT3V0bGluZUNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQYWludFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdW1lQmFja2dyb3VuZENvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6Y29uc3VtZUJvcmRlcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpub3JtYWxpemVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6
ZVdoaXRlbmVzc0JsYWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OnBhcnNlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTENIUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZv
clJHQlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkR3JhZGllbnRDb2xvclN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGluZWFyR3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29uaWNHcmFkaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbWFnZU9y
Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVDcm9zc0ZhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lRmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lU2luZ2xlU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VPcHRpb25hbEFscGhh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SW1hZ2UpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsY3VsYXRlSFNMSHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj46
OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhXQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRl
eHRDb2xvciBjb25zdCk6CisKIDIwMjEtMDItMTQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBNb2JpbGVTYWZhcmkgY3Jhc2hlcyBhdCBXZWJDb3Jl
OiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZG9FbnRlckZ1bGxzY3Jl
ZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9u
IDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIENvbG9yIENTU1BhcnNlcjo6cGFyc2VDb2xv
cldvcmtlclNhZmUoY28KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50
b2tlblJhbmdlKCkpOwogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdl
LCBIVE1MU3RhbmRhcmRNb2RlKTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdlLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkp
OwogfQogCiBDb2xvciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoU3RyaW5nVmlldyBzdHJp
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywzOSArNDcsNDYgQEAgQ1NT
UGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChDU1NQYQogewogfQogCi1DU1NQYXJzZXJD
b250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
VVJMJiBzaGVldEJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IGJhc2VVUkwo
c2hlZXRCYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogc2hlZXRCYXNlVVJM
KQotICAgICwgY2hhcnNldChjaGFyc2V0KQotICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01v
ZGUoKSA/IEhUTUxRdWlya3NNb2RlIDogSFRNTFN0YW5kYXJkTW9kZSkKLSAgICAsIGlzSFRNTERv
Y3VtZW50KGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKHNoZWV0QmFzZVVSTC5pc051bGwoKSB8fCBkb2N1bWVudC5zZWN1cml0eU9yaWdp
bigpLmNhblJlcXVlc3QoYmFzZVVSTCkpCi17Ci0gICAgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpOwotICAgIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3Ig
PSBkb2N1bWVudC5zZXR0aW5ncygpLnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVo
YXZpb3IoKTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHRleHRBdXRvc2l6aW5n
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0j
ZW5kaWYKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIGxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5sZWdhY3lP
dmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCgpOworc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxl
TGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7
CiAgICAgLy8gVGhlIGxlZ2FjeSAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2ggYmVo
YXZpb3IgbWF5IGhhdmUgYmVlbiBkaXNhYmxlZCB0aHJvdWdoIHRoZSB3ZWJzaXRlIHBvbGljeSwK
ICAgICAvLyBpbiB0aGF0IGNhc2Ugd2Ugd2FudCB0byBkaXNhYmxlIHRoZSBsZWdhY3kgYmVoYXZp
b3IgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBzZXR0aW5nIHNheXMuCiAgICAgaWYgKGF1dG8qIGxv
YWRlciA9IGRvY3VtZW50LmxvYWRlcigpKSB7CiAgICAgICAgIGlmIChsb2FkZXItPmxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3koKSA9PSBMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1Rv
dWNoUG9saWN5OjpEaXNhYmxlKQotICAgICAgICAgICAgbGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdU
b3VjaEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cisg
ICAgcmV0dXJuIGRvY3VtZW50LnNldHRpbmdzKCkubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQoKTsKK30KKyNlbmRpZgorCitDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250
ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBzaGVldEJhc2VVUkwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IGJhc2VVUkwgeyBzaGVldEJhc2VVUkwuaXNOdWxs
KCkgPyBkb2N1bWVudC5iYXNlVVJMKCkgOiBzaGVldEJhc2VVUkwgfQorICAgICwgY2hhcnNldCB7
IGNoYXJzZXQgfQorICAgICwgbW9kZSB7IGRvY3VtZW50LmluUXVpcmtzTW9kZSgpID8gSFRNTFF1
aXJrc01vZGUgOiBIVE1MU3RhbmRhcmRNb2RlIH0KKyAgICAsIGlzSFRNTERvY3VtZW50IHsgZG9j
dW1lbnQuaXNIVE1MRG9jdW1lbnQoKSB9CisgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgc2hlZXRCYXNlVVJMLmlzTnVsbCgpIHx8IGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuY2Fu
UmVxdWVzdChiYXNlVVJMKSB9CisgICAgLCB1c2VTeXN0ZW1BcHBlYXJhbmNlIHsgZG9jdW1lbnQu
cGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCkgOiBmYWxzZSB9
CisgICAgLCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBkb2N1bWVudC5zZXR0aW5ncygpLmFzcGVjdFJh
dGlvRW5hYmxlZCgpIH0KKyAgICAsIGNvbG9yRmlsdGVyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRp
bmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCkgfQorICAgICwgY29uc3RhbnRQcm9wZXJ0aWVzRW5h
YmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpIH0K
KyAgICAsIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuZGVm
ZXJyZWRDU1NQYXJzZXJFbmFibGVkKCkgfQorICAgICwgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpIH0KKyAgICAsIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7
IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3BlcnRpZXNFbmFi
bGVkKCkgfQorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgLCBsZWdh
Y3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCB7IHNob3VsZEVuYWJsZUxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2goZG9jdW1lbnQpIH0KICNlbmRpZgotICAgIHNwcmluZ1RpbWluZ0Z1
bmN0aW9uRW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuc3ByaW5nVGltaW5nRnVuY3Rpb25F
bmFibGVkKCk7Ci0gICAgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCA9IGRvY3VtZW50LnNldHRp
bmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpOwotICAgIGNvbG9yRmlsdGVyRW5hYmxl
ZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCk7CisgICAgLCBvdmVy
c2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5vdmVyc2Nyb2xsQmVo
YXZpb3JFbmFibGVkKCkgfQorICAgICwgc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQu
c2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkKCkgfQorICAgICwgc3By
aW5nVGltaW5nRnVuY3Rpb25FbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5zcHJpbmdUaW1p
bmdGdW5jdGlvbkVuYWJsZWQoKSB9CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICAs
IHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXpp
bmdFbmFibGVkKCkgfQorI2VuZGlmCisgICAgLCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0
aGFuZEJlaGF2aW9yIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6
ZVNob3J0aGFuZEJlaGF2aW9yKCkgfQogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0g
ICAgYXR0YWNobWVudEVuYWJsZWQgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCgpOworICAgICwgYXR0YWNobWVudEVuYWJs
ZWQgeyBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRF
bGVtZW50RW5hYmxlZCgpIH0KICNlbmRpZgotICAgIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCA9
IGRvY3VtZW50LnNldHRpbmdzKCkuZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKCk7Ci0gICAgc2Ny
b2xsQmVoYXZpb3JFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhT
Y3JvbGxpbmdFbmFibGVkKCk7Ci0gICAgb3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9IGRvY3Vt
ZW50LnNldHRpbmdzKCkub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCgpOwotICAgIHVzZVN5c3Rl
bUFwcGVhcmFuY2UgPSBkb2N1bWVudC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCktPnVzZVN5c3Rl
bUFwcGVhcmFuY2UoKSA6IGZhbHNlOwotICAgIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVz
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3Bl
cnRpZXNFbmFibGVkKCk7Ci0gICAgYXNwZWN0UmF0aW9FbmFibGVkID0gZG9jdW1lbnQuc2V0dGlu
Z3MoKS5hc3BlY3RSYXRpb0VuYWJsZWQoKTsKK3sKIH0KIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCkBAIC04Nywy
OCArOTQsMzEgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIAogICAg
IHJldHVybiBhLmJhc2VVUkwgPT0gYi5iYXNlVVJMCiAgICAgICAgICYmIGEuY2hhcnNldCA9PSBi
LmNoYXJzZXQKICAgICAgICAgJiYgYS5tb2RlID09IGIubW9kZQorICAgICAgICAmJiBhLmVuY2xv
c2luZ1J1bGVUeXBlID09IGIuZW5jbG9zaW5nUnVsZVR5cGUKICAgICAgICAgJiYgYS5pc0hUTUxE
b2N1bWVudCA9PSBiLmlzSFRNTERvY3VtZW50Ci0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykK
LSAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQKLSNlbmRpZgorICAgICAgICAmJiBhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPT0g
Yi5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luCisgICAgICAgICYmIGEuaXNDb250ZW50T3BhcXVl
ID09IGIuaXNDb250ZW50T3BhcXVlCisgICAgICAgICYmIGEudXNlU3lzdGVtQXBwZWFyYW5jZSA9
PSBiLnVzZVN5c3RlbUFwcGVhcmFuY2UKKyAgICAgICAgJiYgYS5hc3BlY3RSYXRpb0VuYWJsZWQg
PT0gYi5hc3BlY3RSYXRpb0VuYWJsZWQKKyAgICAgICAgJiYgYS5jb2xvckZpbHRlckVuYWJsZWQg
PT0gYi5jb2xvckZpbHRlckVuYWJsZWQKKyAgICAgICAgJiYgYS5jb25zdGFudFByb3BlcnRpZXNF
bmFibGVkID09IGIuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZAorICAgICAgICAmJiBhLmRlZmVy
cmVkQ1NTUGFyc2VyRW5hYmxlZCA9PSBiLmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZAorICAgICAg
ICAmJiBhLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSA9PSBiLmVuZm9yY2VzQ1NT
TUlNRVR5cGVJbk5vUXVpcmtzTW9kZQorICAgICAgICAmJiBhLmluZGl2aWR1YWxUcmFuc2Zvcm1Q
cm9wZXJ0aWVzRW5hYmxlZCA9PSBiLmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxl
ZAogI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCiAgICAgICAgICYmIGEubGVn
YWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaEVuYWJsZWQgPT0gYi5sZWdhY3lPdmVyZmxvd1Njcm9s
bGluZ1RvdWNoRW5hYmxlZAogI2VuZGlmCi0gICAgICAgICYmIGEuZW5mb3JjZXNDU1NNSU1FVHlw
ZUluTm9RdWlya3NNb2RlID09IGIuZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlCi0g
ICAgICAgICYmIGEudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9PSBi
LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IKKyAgICAgICAgJiYgYS5v
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkID09IGIub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZAor
ICAgICAgICAmJiBhLnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLnNjcm9sbEJlaGF2aW9yRW5h
YmxlZAogICAgICAgICAmJiBhLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9PSBiLnNwcmlu
Z1RpbWluZ0Z1bmN0aW9uRW5hYmxlZAotICAgICAgICAmJiBhLmNvbnN0YW50UHJvcGVydGllc0Vu
YWJsZWQgPT0gYi5jb25zdGFudFByb3BlcnRpZXNFbmFibGVkCi0gICAgICAgICYmIGEuY29sb3JG
aWx0ZXJFbmFibGVkID09IGIuY29sb3JGaWx0ZXJFbmFibGVkCisjaWYgRU5BQkxFKFRFWFRfQVVU
T1NJWklORykKKyAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0
b3NpemluZ0VuYWJsZWQKKyNlbmRpZgorICAgICAgICAmJiBhLnVzZUxlZ2FjeUJhY2tncm91bmRT
aXplU2hvcnRoYW5kQmVoYXZpb3IgPT0gYi51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFu
ZEJlaGF2aW9yCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICAgICAgJiYgYS5h
dHRhY2htZW50RW5hYmxlZCA9PSBiLmF0dGFjaG1lbnRFbmFibGVkCiAjZW5kaWYKLSAgICAgICAg
JiYgYS5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgPT0gYi5kZWZlcnJlZENTU1BhcnNlckVuYWJs
ZWQKLSAgICAgICAgJiYgYS5zY3JvbGxCZWhhdmlvckVuYWJsZWQgPT0gYi5zY3JvbGxCZWhhdmlv
ckVuYWJsZWQKLSAgICAgICAgJiYgYS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJs
ZWQgPT0gYi5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQKLSAgICAgICAgJiYg
YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID09IGIuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bgotICAgICAgICAmJiBhLnVzZVN5c3RlbUFwcGVhcmFuY2UgPT0gYi51c2VTeXN0ZW1BcHBlYXJh
bmNlCi0gICAgICAgICYmIGEuYXNwZWN0UmF0aW9FbmFibGVkID09IGIuYXNwZWN0UmF0aW9FbmFi
bGVkCi0gICAgICAgICYmIGEub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLm92ZXJzY3Jv
bGxCZWhhdmlvckVuYWJsZWQ7CisgICAgOwogfQogCiBVUkwgQ1NTUGFyc2VyQ29udGV4dDo6Y29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw3ICs0MSw2IEBAIGNsYXNzIERvY3VtZW50Owogc3RydWN0IENTU1BhcnNlckNvbnRl
eHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotCiAgICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKIApAQCAtNTAsMzYgKzQ5LDM3IEBAIHB1YmxpYzoKICAgICBDU1NQYXJzZXJNb2RlIG1v
ZGUgeyBIVE1MU3RhbmRhcmRNb2RlIH07CiAgICAgT3B0aW9uYWw8U3R5bGVSdWxlVHlwZT4gZW5j
bG9zaW5nUnVsZVR5cGU7CiAgICAgYm9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07Ci0jaWYg
RU5BQkxFKFRFWFRfQVVUT1NJWklORykKLSAgICBib29sIHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7
IGZhbHNlIH07Ci0jZW5kaWYKKworICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gc3VwcG9y
dCBnZXRNYXRjaGVkQ1NTUnVsZXMuCisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgZmFsc2UgfTsKKworICAgIGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKKyAgICBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAgLy8gU2V0dGluZ3MuCisg
ICAgYm9vbCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgY29sb3JGaWx0
ZXJFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIGNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQg
eyBmYWxzZSB9OworICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsK
KyAgICBib29sIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSB7IHRydWUgfTsKKyAg
ICBib29sIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNlIH07CiAj
aWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKICAgICBib29sIGxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgZW5m
b3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIHsgdHJ1ZSB9OwotICAgIGJvb2wgdXNlTGVn
YWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciB7IGZhbHNlIH07CisgICAgYm9vbCBv
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIHNjcm9sbEJlaGF2
aW9yRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBzcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJs
ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBjb2xvckZpbHRlckVuYWJsZWQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShU
RVhUX0FVVE9TSVpJTkcpCisgICAgYm9vbCB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgeyBmYWxzZSB9
OworI2VuZGlmCisgICAgYm9vbCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2
aW9yIHsgZmFsc2UgfTsKKworICAgIC8vIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuCiAjaWYgRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBib29sIGF0dGFjaG1lbnRFbmFibGVkIHsgZmFs
c2UgfTsKICNlbmRpZgotICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2Ug
fTsKLSAgICBib29sIHNjcm9sbEJlaGF2aW9yRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBp
bmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQgeyBmYWxzZSB9OwotCi0gICAgYm9v
bCBvdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKLSAgICAKLSAgICAvLyBUaGlz
IGlzIG9ubHkgbmVlZGVkIHRvIHN1cHBvcnQgZ2V0TWF0Y2hlZENTU1J1bGVzLgotICAgIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgYm9vbCB1c2VT
eXN0ZW1BcHBlYXJhbmNlIHsgZmFsc2UgfTsKIAogICAgIFVSTCBjb21wbGV0ZVVSTChjb25zdCBT
dHJpbmcmIHVybCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQ29udGVudE9wYXF1ZSB7IGZhbHNlIH07
Ci0KLSAgICBib29sIGFzcGVjdFJhdGlvRW5hYmxlZCB7IGZhbHNlIH07CiB9OwogCiBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKQEAgLTkwLDYgKzkwLDggQEAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgcwogc3RydWN0IENTU1BhcnNlckNvbnRleHRIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBrZXkpCiAgICAgeworICAgICAgICAvLyBGSVhN
RTogQ29udmVydCB0aGlzIHRvIHVzZSBXVEY6Okhhc2hlci4KKwogICAgICAgICB1bnNpZ25lZCBo
YXNoID0gMDsKICAgICAgICAgaWYgKCFrZXkuYmFzZVVSTC5pc051bGwoKSkKICAgICAgICAgICAg
IGhhc2ggXj0gV1RGOjpVUkxIYXNoOjpoYXNoKGtleS5iYXNlVVJMKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAy
NzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyNiwxNSArMTcyNiwxNSBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lWkluZGV4KENTCiAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdl
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNoYWRvdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBib29sIGlzQm94
U2hhZG93UHJvcGVydHkpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU2hhZG93KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
LCBib29sIGlzQm94U2hhZG93UHJvcGVydHkpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgp
ID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAK
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZG8gewotICAgICAgICBpZiAoUmVmUHRyPENT
U1NoYWRvd1ZhbHVlPiBzaGFkb3dWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3cocmFuZ2UsIGNz
c1BhcnNlck1vZGUsIGlzQm94U2hhZG93UHJvcGVydHksIGlzQm94U2hhZG93UHJvcGVydHkpKQot
ICAgICAgICAgICAgc2hhZG93VmFsdWVMaXN0LT5hcHBlbmQoKnNoYWRvd1ZhbHVlKTsKKyAgICAg
ICAgaWYgKGF1dG8gc2hhZG93VmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KHJhbmdlLCBjb250
ZXh0LCBpc0JveFNoYWRvd1Byb3BlcnR5LCBpc0JveFNoYWRvd1Byb3BlcnR5KSkKKyAgICAgICAg
ICAgIHNoYWRvd1ZhbHVlTGlzdC0+YXBwZW5kKHNoYWRvd1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IHdoaWxl
IChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CkBAIC0xODEzLDE5ICsx
ODEzLDE5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVUZXh0RW1waGEKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUNhcmV0Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVD
YXJldENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIHJldHVybiBjb25z
dW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBjb25zdW1lQ29sb3Io
cmFuZ2UsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0
bGluZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0bGluZUNvbG9yKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
KQogewogICAgIC8vIEFsbG93IHRoZSBzcGVjaWFsIGZvY3VzIGNvbG9yIGV2ZW4gaW4gSFRNTCBT
dGFuZGFyZCBwYXJzaW5nIG1vZGUuCiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFu
Z2UpOwotICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAg
IHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogfQogCiBzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGluZVdpZHRoKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MpCkBAIC0yMjI4LDcgKzIyMjgsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lCiAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGlvbkxvbmdoYW5kPENTU1ZhbHVlVG9w
LCBDU1NWYWx1ZUJvdHRvbT4ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOwogfQogCi1zdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lUGFpbnRTdHJva2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVQYWludFN0cm9rZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0g
Q1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKQEAgLTIy
MzgsNyArMjIzOCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8K
ICAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUp
OworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQp
OwogICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAg
ICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHVybC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTIyNDcs
NyArMjI0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8KICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gdXJsOwogICAgIH0KLSAgICByZXR1cm4gY29uc3VtZUNv
bG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yKHJhbmdl
LCBjb250ZXh0KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdseXBoT3Jp
ZW50YXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKQEAgLTMyNTgsNyArMzI1OCw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVCYWNrZ3JvdW4KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1NpemU6CiAgICAgICAgIHJldHVybiBjb25zdW1lQmFja2dyb3VuZFNpemUocHJvcGVydHks
IHJhbmdlLCBjb250ZXh0Lm1vZGUpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQubW9kZSk7Cisg
ICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH07CkBAIC00MjQxLDcgKzQyNDEsNyBAQCBSZWZQdHI8Q1NT
VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93
czoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGl2ZUludGVnZXIobV9yYW5nZSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3I6Ci0gICAgICAgIHJldHVybiBjb25z
dW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICByZXR1cm4gY29uc3Vt
ZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uU2tpcDoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVUZXh0RGVjb3JhdGlvblNraXAobV9y
YW5nZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aDoKQEAgLTQy
NjEsMTIgKzQyNjEsMTIgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFy
cwogICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZENvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlM
aWdodGluZ0NvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxlQ29sb3I6Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAg
ICByZXR1cm4gY29uc3VtZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNhcmV0Q29sb3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvcihtX3Jh
bmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvciht
X3JhbmdlLCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICByZXR1cm4gY29uc3VtZUNvbG9y
KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBpblF1aXJrc01vZGUoKSk7CisgICAgICAgIHJldHVy
biBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0LCBpblF1aXJrc01vZGUoKSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklubGluZVN0YXJ0V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlcklubGluZUVuZFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCbG9j
a1N0YXJ0V2lkdGg6CkBAIC00Mjc4LDcgKzQyNzgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1By
b3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOiB7
CiAgICAgICAgIGJvb2wgYWxsb3dRdWlya3lDb2xvcnMgPSBpblF1aXJrc01vZGUoKQogICAgICAg
ICAgICAgJiYgKGN1cnJlbnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkIHx8IGN1cnJl
bnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlCb3JkZXJDb2xvcik7Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIGFsbG93UXVpcmt5Q29sb3JzKTsK
KyAgICAgICAgcmV0dXJuIGNvbnN1bWVDb2xvcihtX3JhbmdlLCBtX2NvbnRleHQsIGFsbG93UXVp
cmt5Q29sb3JzKTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRo
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6CkBAIC00Mjk0LDcgKzQyOTQs
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NTMi4x
LCBiYWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKICAgICBjYXNlIENTU1Byb3BlcnR5Qm94
U2hhZG93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6Ci0gICAgICAgIHJl
dHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eUJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNo
YWRvdyk7CisgICAgICAgIHJldHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dCwg
cHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlXZWJraXRCb3hTaGFkb3cpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CiAjaWYgRU5B
QkxFKEZJTFRFUlNfTEVWRUxfMikKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXI6CkBAIC00MzQyLDcgKzQzNDIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5
UGFyc2VyOjpwYXJzCiAgICAgICAgIHJldHVybiBjb25zdW1lUm90YXRlKG1fcmFuZ2UsIG1fY29u
dGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3Ryb2tlOgotICAgICAgICByZXR1cm4gY29uc3VtZVBhaW50U3Ryb2tlKG1fcmFuZ2UsIG1f
Y29udGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQYWludFN0cm9rZShtX3Jhbmdl
LCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uVmVydGlj
YWw6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgogICAg
ICAgICByZXR1cm4gY29uc3VtZUdseXBoT3JpZW50YXRpb24obV9yYW5nZSwgbV9jb250ZXh0Lm1v
ZGUsIHByb3BlcnR5KTsKQEAgLTUwOTMsNyArNTA5Myw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJz
ZXI6OmNvbnN1bWVCb3JkZXIoUmUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVDb2xv
cihtX3JhbmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVD
b2xvcihtX3JhbmdlLCBtX2NvbnRleHQpOwogICAgICAgICAgICAgaWYgKGNvbG9yKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwzNCArNjkwLDc4IEBAIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVVybChDU1MKICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSh1cmwudG9TdHJpbmcoKSwgQ1NTVW5pdFR5cGU6OkNT
U19VUkkpOwogfQogCi1zdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgdmFs
dWUsIGJvb2wgaXNQZXJjZW50YWdlKQorc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU9w
dGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGlzUGVy
Y2VudGFnZSkKKyAgICBpZiAoIWNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2Up
KQorICAgICAgICByZXR1cm4gMS4wOworCisgICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBj
b25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0
dXJuIGNsYW1wVG88ZG91YmxlPigqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKKworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVI
dWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNv
bnRleHQpCit7CisgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcocmFuZ2UsIGNv
bnRleHQubW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9y
YmlkKSkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhh
bmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVlKTsKKworICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1
bWVOdW1iZXJSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gKm51bWJlcjsKKworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBkb3VibGUgbm9ybWFsaXplSHVlKGRvdWJsZSBo
dWUpCit7CisgICAgcmV0dXJuIHN0ZDo6Zm1vZChzdGQ6OmZtb2QoaHVlLCAzNjAuMCkgKyAzNjAu
MCwgMzYwLjApOworfQorCitlbnVtIGNsYXNzIFJHQkNvbXBvbmVudFR5cGUgeworICAgIE51bWJl
ciwKKyAgICBQZXJjZW50YWdlCit9OworCitzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVu
dChkb3VibGUgdmFsdWUsIFJHQkNvbXBvbmVudFR5cGUgY29tcG9uZW50VHlwZSkKK3sKKyAgICBp
ZiAoY29tcG9uZW50VHlwZSA9PSBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlKQogICAgICAg
ICB2YWx1ZSA9IHZhbHVlIC8gMTAwLjAgKiAyNTUuMDsKIAogICAgIHJldHVybiBjb252ZXJ0UHJl
c2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKIH0KIAotc3RhdGljIENvbG9yIHBh
cnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3N0YXRpYyBDb2xv
ciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmKQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgp
ID09IENTU1ZhbHVlUmdiIHx8IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVS
Z2JhKTsKICAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0gICAgYm9v
bCBpc1BlcmNlbnRhZ2UgPSBmYWxzZTsKLSAgICBkb3VibGUgY29sb3JQYXJhbWV0ZXI7Ci0gICAg
aWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKLSAgICAgICAgY29sb3JQ
YXJhbWV0ZXIgPSAqbnVtYmVyOwotICAgIGVsc2UgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQ
ZXJjZW50UmF3KGFyZ3MpKSB7Ci0gICAgICAgIGNvbG9yUGFyYW1ldGVyID0gKnBlcmNlbnQ7Ci0g
ICAgICAgIGlzUGVyY2VudGFnZSA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiB7
IH07Ci0KICAgICBlbnVtIGNsYXNzIENvbG9yU3ludGF4IHsKICAgICAgICAgQ29tbWFzLAogICAg
ICAgICBXaGl0ZXNwYWNlU2xhc2gsCiAgICAgfTsKIAorICAgIHN0cnVjdCBJbml0aWFsQ29tcG9u
ZW50IHsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICBSR0JDb21wb25lbnRUeXBlIHR5
cGU7CisgICAgfTsKKworICAgIGF1dG8gY29uc3VtZUluaXRpYWxDb21wb25lbnQgPSBbXShhdXRv
IGFyZ3MpIC0+IE9wdGlvbmFsPEluaXRpYWxDb21wb25lbnQ+IHsKKyAgICAgICAgaWYgKGF1dG8g
bnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiB7IHsg
Km51bWJlciwgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0gfTsKKyAgICAgICAgaWYgKGF1dG8g
cGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQorICAgICAgICAgICAgcmV0dXJuIHsg
eyAqcGVyY2VudCwgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9IH07CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgfTsKKworICAgIGF1dG8gY29uc3VtZUNvbXBvbmVudCA9
IFtdKGF1dG8gYXJncywgYXV0byBjb21wb25lbnRUeXBlKSB7CisgICAgICAgIHN3aXRjaCAoY29t
cG9uZW50VHlwZSkgeworICAgICAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2U6
CisgICAgICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CisgICAgICAgIGNh
c2UgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVO
dW1iZXJSYXcoYXJncyk7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgQ29sb3JTeW50YXggc3lu
dGF4ID0gQ29sb3JTeW50YXg6OkNvbW1hczsKICAgICBhdXRvIGNvbnN1bWVTZXBhcmF0b3IgPSBb
Jl0gewogICAgICAgICBpZiAoc3ludGF4ID09IENvbG9yU3ludGF4OjpDb21tYXMpCkBAIC03MjYs
MjYgKzc3MCwyNSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH07CiAKLSAgICB1aW50OF90IGNvbG9yQXJyYXlbM107
Ci0gICAgY29sb3JBcnJheVswXSA9IGNsYW1wUkdCQ29tcG9uZW50KGNvbG9yUGFyYW1ldGVyLCBp
c1BlcmNlbnRhZ2UpOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAg
IGlmIChpID09IDEpCi0gICAgICAgICAgICBzeW50YXggPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdX
aGl0ZXNwYWNlKGFyZ3MpID8gQ29sb3JTeW50YXg6OkNvbW1hcyA6IENvbG9yU3ludGF4OjpXaGl0
ZXNwYWNlU2xhc2g7Ci0gICAgICAgIGVsc2UgaWYgKCFjb25zdW1lU2VwYXJhdG9yKCkpCi0gICAg
ICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gaW5pdGlhbENvbXBvbmVudCA9IGNvbnN1bWVJ
bml0aWFsQ29tcG9uZW50KGFyZ3MpOworICAgIGlmICghaW5pdGlhbENvbXBvbmVudCkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBpZiAoaXNQZXJjZW50YWdlKSB7Ci0gICAgICAgICAg
ICBhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKLSAgICAgICAgICAgIGlm
ICghcGVyY2VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgY29s
b3JBcnJheVtpXSA9IGNsYW1wUkdCQ29tcG9uZW50KCpwZXJjZW50LCB0cnVlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdz
KTsKLSAgICAgICAgICAgIGlmICghbnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgICAgICAgICBjb2xvckFycmF5W2ldID0gY2xhbXBSR0JDb21wb25lbnQoKm51bWJlciwg
ZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQorICAgIGF1dG8gY29tcG9uZW50VHlwZSA9IGluaXRp
YWxDb21wb25lbnQtPnR5cGU7CisgICAgYXV0byByZWQgPSBpbml0aWFsQ29tcG9uZW50LT52YWx1
ZTsKKworICAgIHN5bnRheCA9IGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykg
PyBDb2xvclN5bnRheDo6Q29tbWFzIDogQ29sb3JTeW50YXg6OldoaXRlc3BhY2VTbGFzaDsKKyAg
ICAKKyAgICBhdXRvIGdyZWVuID0gY29uc3VtZUNvbXBvbmVudChhcmdzLCBjb21wb25lbnRUeXBl
KTsKKyAgICBpZiAoIWdyZWVuKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFjb25z
dW1lU2VwYXJhdG9yKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGJsdWUgPSBj
b25zdW1lQ29tcG9uZW50KGFyZ3MsIGNvbXBvbmVudFR5cGUpOworICAgIGlmICghYmx1ZSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIEhpc3RvcmljYWxseSwgYWxwaGEgd2FzIG9ubHkg
cGFyc2VkIGZvciByZ2JhKCksIGJ1dCBjc3MtY29sb3ItNCBzcGVjaWZpZXMgdGhhdCByZ2JhKCkg
aXMgYSBzaW1wbGUgYWxpYXMgZm9yIHJnYigpLgogICAgIGF1dG8gY29uc3VtZUFscGhhU2VwYXJh
dG9yID0gWyZdIHsKQEAgLTc1NSw0MCArNzk4LDM0IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBh
cmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgcmV0dXJuIGNvbnN1bWVTbGFzaEluY2x1ZGluZ1do
aXRlc3BhY2UoYXJncyk7CiAgICAgfTsKIAotICAgIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQgPSAy
NTU7CisgICAgZG91YmxlIGFscGhhID0gMTsKICAgICBpZiAoY29uc3VtZUFscGhhU2VwYXJhdG9y
KCkpIHsKLSAgICAgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVk
QnkxMDBSYXcoYXJncyk7Ci0gICAgICAgIGlmICghYWxwaGEpCisgICAgICAgIGF1dG8gYWxwaGFD
b21wb25lbnQgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwor
ICAgICAgICBpZiAoIWFscGhhQ29tcG9uZW50KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgYWxwaGFDb21wb25lbnQgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KCphbHBo
YSk7CisgICAgICAgIGFscGhhID0gKmFscGhhQ29tcG9uZW50OwogICAgIH0KIAogICAgIGlmICgh
YXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIFNSR0JBPHVp
bnQ4X3Q+IHsgY29sb3JBcnJheVswXSwgY29sb3JBcnJheVsxXSwgY29sb3JBcnJheVsyXSwgYWxw
aGFDb21wb25lbnQgfTsKKyAgICByZXR1cm4gU1JHQkE8dWludDhfdD4geyBjbGFtcFJHQkNvbXBv
bmVudChyZWQsIGNvbXBvbmVudFR5cGUpLCBjbGFtcFJHQkNvbXBvbmVudCgqZ3JlZW4sIGNvbXBv
bmVudFR5cGUpLCBjbGFtcFJHQkNvbXBvbmVudCgqYmx1ZSwgY29tcG9uZW50VHlwZSksIGNvbnZl
cnRGbG9hdEFscGhhVG88dWludDhfdD4oYWxwaGEpIH07CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJz
ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVIc2wgfHwgcmFu
Z2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUhzbGEpOwogICAgIGF1dG8gYXJncyA9
IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKLSAgICBkb3VibGUgaHVlQW5nbGVJbkRlZ3JlZXM7
Ci0gICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcoYXJncywgY3NzUGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKLSAg
ICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3Jl
ZXMoYW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXV0byBudW1iZXIg
PSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9ICpu
dW1iZXI7Ci0gICAgZWxzZQorICAgIGF1dG8gaHVlID0gY29uc3VtZUh1ZShhcmdzLCBjb250ZXh0
KTsKKyAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGRvdWJsZSBjb2xv
ckFycmF5WzNdOwotICAgIGNvbG9yQXJyYXlbMF0gPSBmbW9kKGZtb2QoaHVlQW5nbGVJbkRlZ3Jl
ZXMsIDM2MC4wKSArIDM2MC4wLCAzNjAuMCkgLyAzNjAuMDsKLQorICAgIGRvdWJsZSBjb2xvckFy
cmF5WzJdOwogICAgIGJvb2wgcmVxdWlyZXNDb21tYXMgPSBmYWxzZTsKLSAgICBmb3IgKGludCBp
ID0gMTsgaSA8IDM7IGkrKykgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAg
ICAgICAgIGlmIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKSB7Ci0gICAg
ICAgICAgICBpZiAoaSAhPSAxICYmICFyZXF1aXJlc0NvbW1hcykKKyAgICAgICAgICAgIGlmIChp
ICE9IDAgJiYgIXJlcXVpcmVzQ29tbWFzKQogICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgICAgICAgICByZXF1aXJlc0NvbW1hcyA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAocmVx
dWlyZXNDb21tYXMgfHwgYXJncy5hdEVuZCgpIHx8ICgmYXJncy5wZWVrKCkgLSAxKS0+dHlwZSgp
ICE9IFdoaXRlc3BhY2VUb2tlbikKQEAgLTc5Niw3ICs4MzMsNyBAQCBzdGF0aWMgQ29sb3IgcGFy
c2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgIGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQ
ZXJjZW50UmF3KGFyZ3MpOwogICAgICAgICBpZiAoIXBlcmNlbnQpCiAgICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICBjb2xvckFycmF5W2ldID0gY2xhbXBUbzxkb3VibGU+KCpwZXJjZW50
LCAwLjAsIDEwMC4wKSAvIDEwMC4wOyAvLyBOZWVkcyB0byBiZSB2YWx1ZSBiZXR3ZWVuIDAgYW5k
IDEuMC4KKyAgICAgICAgY29sb3JBcnJheVtpXSA9ICpwZXJjZW50OwogICAgIH0KIAogICAgIGJv
b2wgY29tbWFDb25zdW1lZCA9IGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7
CkBAIC04MDksMTQ5ICs4NDYsMTMxIEBAIHN0YXRpYyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMo
Q1NTUGFyc2UKICAgICAgICAgYXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJPclBl
cmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CiAgICAgICAgIGlmICghYWxwaGFQYXJhbWV0ZXIp
CiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBhbHBoYSA9IGNsYW1wVG88ZG91Ymxl
PigqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKKyAgICAgICAgYWxwaGEgPSAqYWxwaGFQYXJh
bWV0ZXI7CiAgICAgfQogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICByZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihIU0xBPGZsb2F0
PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRp
Y19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgYXV0byBub3JtYWxpemVkSHVlID0gbm9ybWFs
aXplSHVlKCpodWUpOworICAgIGF1dG8gbm9ybWFsaXplZFNhdHVyYXRpb24gPSBjbGFtcFRvPGRv
dWJsZT4oY29sb3JBcnJheVswXSwgMC4wLCAxMDAuMCk7CisgICAgYXV0byBub3JtYWxpemVkTGln
aHRuZXNzID0gY2xhbXBUbzxkb3VibGU+KGNvbG9yQXJyYXlbMV0sIDAuMCwgMTAwLjApOworICAg
IGF1dG8gbm9ybWFsaXplZEFscGhhID0gY2xhbXBUbzxkb3VibGU+KGFscGhhLCAwLjAsIDEuMCk7
CisKKyAgICByZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihIU0xBPGZsb2F0PiB7
IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkSHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5v
cm1hbGl6ZWRTYXR1cmF0aW9uKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRMaWdodG5l
c3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZEFscGhhKSB9KTsKIH0KIAotc3RhdGlj
IE9wdGlvbmFsPGZsb2F0PiBwYXJzZU9wdGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCitzdHJ1Y3QgV2hpdGVuZXNzQmxhY2tuZXNzIHsKKyAgICBkb3VibGUgd2hpdGVuZXNz
OworICAgIGRvdWJsZSBibGFja25lc3M7Cit9Oworc3RhdGljIFdoaXRlbmVzc0JsYWNrbmVzcyBu
b3JtYWxpemVXaGl0ZW5lc3NCbGFja25lc3MoZG91YmxlIHdoaXRlbmVzcywgZG91YmxlIGJsYWNr
bmVzcykKIHsKLSAgICBpZiAoIWNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2Up
KQotICAgICAgICByZXR1cm4gMS4wZjsKKyAgICBXaGl0ZW5lc3NCbGFja25lc3MgcmVzdWx0Owog
Ci0gICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2
aWRlZEJ5MTAwUmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KCphbHBo
YVBhcmFtZXRlciwgMC4wLCAxLjApOworICAgIC8vICAgVmFsdWVzIG91dHNpZGUgb2YgdGhlc2Ug
cmFuZ2VzIGFyZSBub3QgaW52YWxpZCwgYnV0IGFyZSBjbGFtcGVkIHRvIHRoZQorICAgIC8vICAg
cmFuZ2VzIGRlZmluZWQgaGVyZSBhdCBjb21wdXRlZC12YWx1ZSB0aW1lLgorICAgIHJlc3VsdC53
aGl0ZW5lc3MgPSBjbGFtcFRvPGRvdWJsZT4od2hpdGVuZXNzLCAwLCAxMDApOworICAgIHJlc3Vs
dC5ibGFja25lc3MgPSBjbGFtcFRvPGRvdWJsZT4oYmxhY2tuZXNzLCAwLCAxMDApOwogCi0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAvLyAgIElmIHRoZSBzdW0gb2YgdGhlc2UgdHdvIGFy
Z3VtZW50cyBpcyBncmVhdGVyIHRoYW4gMTAwJSwgdGhlbiBhdAorICAgIC8vICAgY29tcHV0ZWQt
dmFsdWUgdGltZSB0aGV5IGFyZSBmdXJ0aGVyIG5vcm1hbGl6ZWQgdG8gYWRkIHVwIHRvIDEwMCUs
IHdpdGgKKyAgICAvLyAgIHRoZSBzYW1lIHJlbGF0aXZlIHJhdGlvLgorICAgIGlmIChhdXRvIHN1
bSA9IHJlc3VsdC53aGl0ZW5lc3MgKyByZXN1bHQuYmxhY2tuZXNzOyBzdW0gPj0gMTAwKSB7Cisg
ICAgICAgIHJlc3VsdC53aGl0ZW5lc3MgKj0gMTAwLjAgLyBzdW07CisgICAgICAgIHJlc3VsdC5i
bGFja25lc3MgKj0gMTAwLjAgLyBzdW07CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIENvbG9yIHBhcnNlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIENvbG9yIHBhcnNlSFdC
UGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9
PSBDU1NWYWx1ZUh3Yik7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsK
IAotICAgIGRvdWJsZSBodWVBbmdsZUluRGVncmVlczsKLSAgICBpZiAoYXV0byBhbmdsZSA9IGNv
bnN1bWVBbmdsZVJhdyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQs
IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZh
bHVlKTsKLSAgICBlbHNlIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncykp
Ci0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gKm51bWJlcjsKLSAgICBlbHNlCisgICAgYXV0
byBodWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGlmICghaHVlKQogICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgYXV0byB3aGl0ZW5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhh
cmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIHdoaXRlbmVzcyA9IGNvbnN1bWVQZXJjZW50
UmF3KGFyZ3MpOwogICAgIGlmICghd2hpdGVuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgYXV0byBibGFja25lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxs
KTsKKyAgICBhdXRvIGJsYWNrbmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgIGlm
ICghYmxhY2tuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhbHBoYSA9IHBh
cnNlT3B0aW9uYWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFs
QWxwaGEoYXJncyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgLy8gTm9ybWFs
aXplIGh1ZS4KLQotICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gc3RkOjpmbW9kKGh1ZUFuZ2xlSW5E
ZWdyZWVzLCAzNjAuMCk7Ci0gICAgaWYgKGh1ZUFuZ2xlSW5EZWdyZWVzIDwgMC4wKQotICAgICAg
ICBodWVBbmdsZUluRGVncmVlcyArPSAzNjAuMDsKLSAgICAKLSAgICAvLyBDb252ZXJ0IGFuZ2xl
IHRvIG5vcm1hbGl6ZWQgZm9ybSBmcm9tIDAgLSAxLgotICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9
IGh1ZUFuZ2xlSW5EZWdyZWVzIC8gMzYwLjA7Ci0KLSAgICAvLyBOb3JtYWxpemUgd2hpdGVuZXNz
L2JsYWNrbmVzcy4KLQotICAgIC8vICAgVmFsdWVzIG91dHNpZGUgb2YgdGhlc2UgcmFuZ2VzIGFy
ZSBub3QgaW52YWxpZCwgYnV0IGFyZSBjbGFtcGVkIHRvIHRoZQotICAgIC8vICAgcmFuZ2VzIGRl
ZmluZWQgaGVyZSBhdCBjb21wdXRlZC12YWx1ZSB0aW1lLgotICAgIGF1dG8gbm9tYWxpemVkV2hp
dGVuZXNzID0gY2xhbXBUbzxkb3VibGU+KCp3aGl0ZW5lc3MsIDAsIDEwMCk7Ci0gICAgYXV0byBu
b21hbGl6ZWRCbGFja25lc3MgPSBjbGFtcFRvPGRvdWJsZT4oKmJsYWNrbmVzcywgMCwgMTAwKTsK
LQotICAgIC8vICAgSWYgdGhlIHN1bSBvZiB0aGVzZSB0d28gYXJndW1lbnRzIGlzIGdyZWF0ZXIg
dGhhbiAxMDAlLCB0aGVuIGF0Ci0gICAgLy8gICBjb21wdXRlZC12YWx1ZSB0aW1lIHRoZXkgYXJl
IGZ1cnRoZXIgbm9ybWFsaXplZCB0byBhZGQgdXAgdG8gMTAwJSwgd2l0aAotICAgIC8vICAgdGhl
IHNhbWUgcmVsYXRpdmUgcmF0aW8uCi0gICAgaWYgKGF1dG8gc3VtID0gbm9tYWxpemVkV2hpdGVu
ZXNzICsgbm9tYWxpemVkQmxhY2tuZXNzOyBzdW0gPj0gMTAwKSB7Ci0gICAgICAgIG5vbWFsaXpl
ZFdoaXRlbmVzcyAqPSAxMDAuMCAvIHN1bTsKLSAgICAgICAgbm9tYWxpemVkQmxhY2tuZXNzICo9
IDEwMC4wIC8gc3VtOwotICAgIH0KKyAgICBhdXRvIG5vcm1hbGl6ZWRIdWUgPSBub3JtYWxpemVI
dWUoKmh1ZSk7CisgICAgYXV0byBbbm9ybWFsaXplZFdoaXRuZXNzLCBub3JtYWxpemVkQmxhY2tu
ZXNzXSA9IG5vcm1hbGl6ZVdoaXRlbmVzc0JsYWNrbmVzcygqd2hpdGVuZXNzLCAqYmxhY2tuZXNz
KTsKIAotICAgIC8vIENvbnZlcnQgdG8gbm9ybWFsaXplZCBmb3JtIGZyb20gMCAtIDEuCi0gICAg
bm9tYWxpemVkV2hpdGVuZXNzIC89IDEwMC4wOwotICAgIG5vbWFsaXplZEJsYWNrbmVzcyAvPSAx
MDAuMDsKLQotICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KEhXQkE8Zmxv
YXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9h
dD4obm9tYWxpemVkV2hpdGVuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vbWFsaXplZEJsYWNr
bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0pOworICAgIHJldHVybiBjb252ZXJ0
Q29sb3I8U1JHQkE8dWludDhfdD4+KEhXQkE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5v
cm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZFdoaXRuZXNzKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRCbGFja25lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
KmFscGhhKSB9KTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlTGFiUGFyYW1ldGVycyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3N0YXRpYyBDb2xvciBwYXJzZUxhYlBhcmFtZXRlcnMoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKQogewogICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlTGFiKTsKICAgICBh
dXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0gICAgYXV0byBsaWdodG5lc3Mg
PSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIGxpZ2h0
bmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgIGlmICghbGlnaHRuZXNzKQogICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFy
Z3MsIFZhbHVlUmFuZ2VBbGwpOworICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhh
cmdzKTsKICAgICBpZiAoIWFWYWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8g
YlZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRv
IGJWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CiAgICAgaWYgKCFiVmFsdWUpCiAgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFy
Z3MpOworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBp
ZiAoIWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRpY19j
YXN0PGZsb2F0PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphVmFsdWUpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oKmJWYWx1ZSksICphbHBoYSB9OworICAgIHJldHVybiBMYWI8ZmxvYXQ+
IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpsaWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFW
YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYlZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCph
bHBoYSkgfTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIENv
bG9yIHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1
bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxjaCk7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0
aW9uKHJhbmdlKTsKIAotICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJn
cywgVmFsdWVSYW5nZUFsbCk7CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJh
dyhhcmdzKTsKICAgICBpZiAoIWxpZ2h0bmVzcykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGF1dG8gY2hyb21hVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwp
OwotICAgIGlmICghY2hyb21hVmFsdWUpCisgICAgYXV0byBjaHJvbWEgPSBjb25zdW1lTnVtYmVy
UmF3KGFyZ3MpOworICAgIGlmICghY2hyb21hKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
ZG91YmxlIGh1ZUFuZ2xlSW5EZWdyZWVzOwotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFu
Z2xlUmF3KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxl
c3NaZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOwot
ICAgIGVsc2UgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJh
bmdlQWxsKSkKLSAgICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSAqbnVtYmVyOwotICAgIGVsc2UK
KyAgICBhdXRvIGh1ZSA9IGNvbnN1bWVIdWUoYXJncywgY29udGV4dCk7CisgICAgaWYgKCFodWUp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBodWVBbmdsZUluRGVncmVlcyA9IGZtb2QoaHVl
QW5nbGVJbkRlZ3JlZXMsIDM2MC4wKTsKLSAgICBpZiAoaHVlQW5nbGVJbkRlZ3JlZXMgPCAwLjAp
Ci0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzICs9IDM2MC4wOwotCi0gICAgYXV0byBhbHBoYSA9
IHBhcnNlT3B0aW9uYWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlv
bmFsQWxwaGEoYXJncyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJu
IGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihMQ0hBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0
PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpjaHJvbWFWYWx1ZSksIHN0YXRpY19j
YXN0PGZsb2F0PihodWVBbmdsZUluRGVncmVlcyksICphbHBoYSB9KTsKKyAgICBhdXRvIG5vcm1h
bGl6ZWRIdWUgPSBub3JtYWxpemVIdWUoKmh1ZSk7CisKKyAgICByZXR1cm4gY29udmVydENvbG9y
PExhYjxmbG9hdD4+KExDSEE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpsaWdodG5lc3Mp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oKmNocm9tYSksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxp
emVkSHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZT4KLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JU
eXBlcyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgYXJncykKIHsKICAgICBBU1NFUlQoYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NW
YWx1ZUE5OFJnYiB8fCBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRGlzcGxheVAzIHx8IGFy
Z3MucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVQcm9waG90b1JnYiB8fCBhcmdzLnBlZWsoKS5pZCgp
ID09IENTU1ZhbHVlUmVjMjAyMCB8fCBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlU1JHQik7
CiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwpAQCAtOTY0LDExICs5ODMsMTEgQEAgc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cAogICAgICAgICBjaGFubmVsc1tpXSA9
ICp2YWx1ZTsKICAgICB9CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFy
Z3MpOworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBp
ZiAoIWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIENvbG9yVHlwZSB7
IGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzBdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNo
YW5uZWxzWzFdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzJdLCAwLjAsIDEu
MCksICphbHBoYSB9OworICAgIHJldHVybiBDb2xvclR5cGUgeyBjbGFtcFRvPGZsb2F0PihjaGFu
bmVsc1swXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1sxXSwgMC4wLCAxLjAp
LCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1syXSwgMC4wLCAxLjApLCBzdGF0aWNfY2FzdDxmbG9h
dD4oKmFscGhhKSB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFi
UGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQpAQCAtOTc4LDI3ICs5OTcsMjcg
QEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvckxhYlBhcgogCiAgICAgZG91Ymxl
IGNoYW5uZWxzWzNdID0geyAwLCAwLCAwIH07CiAgICAgWyZdIHsKLSAgICAgICAgYXV0byBsaWdo
dG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAg
YXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKICAgICAgICAgaWYgKCFs
aWdodG5lc3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoYW5uZWxzWzBdID0gKmxp
Z2h0bmVzczsKIAotICAgICAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywg
VmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhh
cmdzKTsKICAgICAgICAgaWYgKCFhVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNoYW5uZWxzWzFdID0gKmFWYWx1ZTsKIAotICAgICAgICBhdXRvIGJWYWx1ZSA9IGNvbnN1bWVO
dW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8gYlZhbHVlID0gY29u
c3VtZU51bWJlclJhdyhhcmdzKTsKICAgICAgICAgaWYgKCFiVmFsdWUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNoYW5uZWxzWzJdID0gKmJWYWx1ZTsKICAgICB9KCk7CiAKLSAgICBh
dXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3MpOworICAgIGF1dG8gYWxwaGEgPSBj
b25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY2hh
bm5lbHNbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMV0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY2hhbm5lbHNbMl0pLCAqYWxwaGEgfTsKKyAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0
YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVs
c1sxXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0
PigqYWxwaGEpIH07CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JYWVpQ
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MpCkBAIC0xMDA4LDI3ICsxMDI3LDI3
IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JYWVpQYXIKIAogICAgIGRvdWJs
ZSBjaGFubmVsc1szXSA9IHsgMCwgMCwgMCB9OwogICAgIFsmXSB7Ci0gICAgICAgIGF1dG8geCA9
IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8geCA9
IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CiAgICAgICAgIGlmICgheCkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2hhbm5lbHNbMF0gPSAqeDsKIAotICAgICAgICBhdXRvIHkgPSBjb25z
dW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRvIHkgPSBjb25z
dW1lTnVtYmVyUmF3KGFyZ3MpOwogICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGNoYW5uZWxzWzFdID0gKnk7CiAKLSAgICAgICAgYXV0byB6ID0gY29uc3VtZU51
bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byB6ID0gY29uc3VtZU51
bWJlclJhdyhhcmdzKTsKICAgICAgICAgaWYgKCF6KQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjaGFubmVsc1syXSA9ICp6OwogICAgIH0oKTsKIAotICAgIGF1dG8gYWxwaGEgPSBwYXJz
ZU9wdGlvbmFsQWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFs
cGhhKGFyZ3MpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBy
ZXR1cm4gWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0Pihj
aGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0
PGZsb2F0PihjaGFubmVsc1syXSksICphbHBoYSB9OworICAgIHJldHVybiBYWVpBPGZsb2F0LCBX
aGl0ZVBvaW50OjpENTA+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzBdKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzJd
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNl
Q29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC0x
MTExLDcgKzExMzAsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4
CiAgICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rp
b24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9k
ZSkKK3N0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ1NTUGFyc2Vy
VG9rZW5SYW5nZSBjb2xvclJhbmdlID0gcmFuZ2U7CiAgICAgQ1NTVmFsdWVJRCBmdW5jdGlvbklk
ID0gcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKTsKQEAgLTExMTksMjAgKzExMzgsMjAgQEAgc3Rh
dGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZQogICAgIHN3aXRjaCAoZnVuY3Rp
b25JZCkgewogICAgIGNhc2UgQ1NTVmFsdWVSZ2I6CiAgICAgY2FzZSBDU1NWYWx1ZVJnYmE6Ci0g
ICAgICAgIGNvbG9yID0gcGFyc2VSR0JQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UpOworICAgICAgICBj
b2xvciA9IHBhcnNlUkdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjb250ZXh0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDU1NWYWx1ZUhzbDoKICAgICBjYXNlIENTU1ZhbHVlSHNsYToKLSAg
ICAgICAgY29sb3IgPSBwYXJzZUhTTFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY3NzUGFyc2VyTW9k
ZSk7CisgICAgICAgIGNvbG9yID0gcGFyc2VIU0xQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNvbnRl
eHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlSHdiOgotICAgICAgICBjb2xv
ciA9IHBhcnNlSFdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAg
ICAgY29sb3IgPSBwYXJzZUhXQlBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY29udGV4dCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVMYWI6Ci0gICAgICAgIGNvbG9yID0gcGFyc2VM
YWJQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UpOworICAgICAgICBjb2xvciA9IHBhcnNlTGFiUGFyYW1l
dGVycyhjb2xvclJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NW
YWx1ZUxjaDoKLSAgICAgICAgY29sb3IgPSBwYXJzZUxDSFBhcmFtZXRlcnMoY29sb3JSYW5nZSwg
Y3NzUGFyc2VyTW9kZSk7CisgICAgICAgIGNvbG9yID0gcGFyc2VMQ0hQYXJhbWV0ZXJzKGNvbG9y
UmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlQ29sb3I6
CiAgICAgICAgIGNvbG9yID0gcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyhjb2xvclJhbmdl
KTsKQEAgLTExNDUsNyArMTE2NCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24o
Q1NTUGFyc2UKICAgICByZXR1cm4gY29sb3I7CiB9CiAKLUNvbG9yIGNvbnN1bWVDb2xvcldvcmtl
clNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKK0NvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ29sb3IgcmVz
dWx0OwogICAgIGF1dG8ga2V5d29yZCA9IHJhbmdlLnBlZWsoKS5pZCgpOwpAQCAtMTE1NCw3ICsx
MTczLDcgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUbwogICAgICAg
ICAvLyAgICAgICAgRm9yIG5vdywgd2UgZGV0ZWN0IHRoZSBzeXN0ZW0gY29sb3IsIGJ1dCB0aGVu
IGludGVudGlvbmFsbHkgZmFpbCBwYXJzaW5nLgogICAgICAgICBpZiAoU3R5bGVDb2xvcjo6aXNT
eXN0ZW1Db2xvcihrZXl3b3JkKSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGlm
ICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUoa2V5d29yZCwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAg
IGlmICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUoa2V5d29yZCwgY29udGV4dC5tb2RlKSkKICAgICAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHJlc3VsdCA9IFN0eWxlQ29sb3I6OmNvbG9yRnJv
bUtleXdvcmQoa2V5d29yZCwgeyB9KTsKICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKTsKQEAgLTExNjMsNyArMTE4Miw3IEBAIENvbG9yIGNvbnN1bWVDb2xvcldvcmtl
clNhZmUoQ1NTUGFyc2VyVG8KICAgICBpZiAoYXV0byBwYXJzZWRDb2xvciA9IHBhcnNlSGV4Q29s
b3IocmFuZ2UsIGZhbHNlKSkKICAgICAgICAgcmVzdWx0ID0gKnBhcnNlZENvbG9yOwogICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjc3NQYXJzZXJN
b2RlKTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjb250ZXh0
KTsKIAogICAgIGlmICghcmFuZ2UuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTEx
NzEsMTEgKzExOTAsMTEgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJU
bwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQorUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1Bh
cnNlckNvbnRleHQmIGNvbnRleHQsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQogewogICAgIGF1
dG8ga2V5d29yZCA9IHJhbmdlLnBlZWsoKS5pZCgpOwogICAgIGlmIChTdHlsZUNvbG9yOjppc0Nv
bG9yS2V5d29yZChrZXl3b3JkKSkgewotICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2Rl
KGtleXdvcmQsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5N
b2RlKGtleXdvcmQsIGNvbnRleHQubW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAgICAgfQpAQCAtMTE4Myw3ICsx
MjAyLDcgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3IoQwogICAgIGlm
IChhdXRvIHBhcnNlZENvbG9yID0gcGFyc2VIZXhDb2xvcihyYW5nZSwgYWNjZXB0UXVpcmt5Q29s
b3JzKSkKICAgICAgICAgY29sb3IgPSAqcGFyc2VkQ29sb3I7CiAgICAgZWxzZSB7Ci0gICAgICAg
IGNvbG9yID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAg
ICAgY29sb3IgPSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBp
ZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
QEAgLTE0MTMsMTQgKzE0MzIsMTQgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZQogfQogCiAvLyBVc2VkIHRvIHBhcnNlIGNvbG9ycyBmb3IgLXdlYmtpdC1ncmFkaWVu
dCguLi4pLgotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZURlcHJlY2F0
ZWRHcmFkaWVudFN0b3BDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lRGVwcmVjYXRlZEdyYWRpZW50U3RvcENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3Ms
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGFyZ3MucGVlaygp
LmlkKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBjb25zdW1lQ29sb3IoYXJncywgY3NzUGFyc2VyTW9kZSk7CisgICAgcmV0dXJu
IGNvbnN1bWVDb2xvcihhcmdzLCBjb250ZXh0KTsKIH0KIAotc3RhdGljIGJvb2wgY29uc3VtZURl
cHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
R3JhZGllbnRDb2xvclN0b3AmIHN0b3AsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0
YXRpYyBib29sIGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVrKCku
ZnVuY3Rpb25JZCgpOwogICAgIGlmIChpZCAhPSBDU1NWYWx1ZUZyb20gJiYgaWQgIT0gQ1NTVmFs
dWVUbyAmJiBpZCAhPSBDU1NWYWx1ZUNvbG9yU3RvcCkKQEAgLTE0NDIsMTEgKzE0NjEsMTEgQEAg
c3RhdGljIGJvb2wgY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbAogICAgIH0KIAogICAgIHN0
b3AucG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBvc2l0
aW9uLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgc3RvcC5jb2xvciA9IGNvbnN1bWVE
ZXByZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJncywgY3NzUGFyc2VyTW9kZSk7CisgICAgc3Rv
cC5jb2xvciA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJncywgY29udGV4
dCk7CiAgICAgcmV0dXJuIHN0b3AuY29sb3IgJiYgYXJncy5hdEVuZCgpOwogfQogCi1zdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
YXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBSZWZQdHI8Q1NT
R3JhZGllbnRWYWx1ZT4gcmVzdWx0OwogICAgIENTU1ZhbHVlSUQgaWQgPSBhcmdzLmNvbnN1bWVJ
bmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsKQEAgLTE0OTksNyArMTUxOCw3IEBAIHN0YXRpYyBS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGUKIAogICAgIENTU0dyYWRpZW50Q29sb3JT
dG9wIHN0b3A7CiAgICAgd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJn
cykpIHsKLSAgICAgICAgaWYgKCFjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKGFy
Z3MsIHN0b3AsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICBpZiAoIWNvbnN1bWVEZXByZWNhdGVk
R3JhZGllbnRDb2xvclN0b3AoYXJncywgc3RvcCwgY29udGV4dCkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgcmVzdWx0LT5hZGRTdG9wKFdURk1vdmUoc3RvcCkpOwogICAg
IH0KQEAgLTE1MDgsMjAgKzE1MjcsMjAgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZURlcHJlY2F0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNvbnN1bWVH
cmFkaWVudENvbG9yU3RvcHMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1v
ZGUgbW9kZSwgQ1NTR3JhZGllbnRWYWx1ZSYgZ3JhZGllbnQpCitzdGF0aWMgYm9vbCBjb25zdW1l
R3JhZGllbnRDb2xvclN0b3BzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0LCBDU1NHcmFkaWVudFZhbHVlJiBncmFkaWVudCkKIHsKICAg
ICBib29sIHN1cHBvcnRzQ29sb3JIaW50cyA9IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENT
U0xpbmVhckdyYWRpZW50IHx8IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU1JhZGlhbEdy
YWRpZW50IHx8IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0NvbmljR3JhZGllbnQ7CiAg
ICAgCiAgICAgYXV0byBjb25zdW1lU3RvcFBvc2l0aW9uID0gWyZdIHsKICAgICAgICAgcmV0dXJu
IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0NvbmljR3JhZGllbnQKLSAgICAgICAgICAg
ID8gY29uc3VtZUFuZ2xlT3JQZXJjZW50KHJhbmdlLCBtb2RlLCBWYWx1ZVJhbmdlQWxsLCBVbml0
bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykKLSAgICAgICAgICAg
IDogY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgbW9kZSwgVmFsdWVSYW5nZUFsbCk7Cisg
ICAgICAgICAgICA/IGNvbnN1bWVBbmdsZU9yUGVyY2VudChyYW5nZSwgY29udGV4dC5tb2RlLCBW
YWx1ZVJhbmdlQWxsLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpB
bGxvdykKKyAgICAgICAgICAgIDogY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgY29udGV4
dC5tb2RlLCBWYWx1ZVJhbmdlQWxsKTsKICAgICB9OwogCiAgICAgLy8gVGhlIGZpcnN0IGNvbG9y
IHN0b3AgY2Fubm90IGJlIGEgY29sb3IgaGludC4KICAgICBib29sIHByZXZpb3VzU3RvcFdhc0Nv
bG9ySGludCA9IHRydWU7CiAgICAgZG8gewotICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBz
dG9wIHsgY29uc3VtZUNvbG9yKHJhbmdlLCBtb2RlKSwgY29uc3VtZVN0b3BQb3NpdGlvbigpLCB7
IH0gfTsKKyAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcCB7IGNvbnN1bWVDb2xvcihy
YW5nZSwgY29udGV4dCksIGNvbnN1bWVTdG9wUG9zaXRpb24oKSwgeyB9IH07CiAgICAgICAgIGlm
ICghc3RvcC5jb2xvciAmJiAhc3RvcC5wb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMTU1MiwxMSArMTU3MSwxMSBAQCBzdGF0aWMgYm9vbCBjb25zdW1lR3JhZGllbnRD
b2xvclN0b3BzKENTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
YXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBl
YXRpbmcpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdy
YWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
IGNvbnRleHQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKIHsKICAgICBhdXRvIHJlc3Vs
dCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVk
UmFkaWFsR3JhZGllbnQpOwogCi0gICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZU9u
ZU9yVHdvVmFsdWVkUG9zaXRpb25Db29yZGluYXRlcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrOjpGb3JiaWQpOworICAgIGF1dG8gY2VudGVyQ29vcmRpbmF0ZSA9IGNvbnN1bWVP
bmVPclR3b1ZhbHVlZFBvc2l0aW9uQ29vcmRpbmF0ZXMoYXJncywgY29udGV4dC5tb2RlLCBVbml0
bGVzc1F1aXJrOjpGb3JiaWQpOwogICAgIGlmIChjZW50ZXJDb29yZGluYXRlICYmICFjb25zdW1l
Q29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApAQCAtMTU2NywxMCArMTU4NiwxMCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
RGVwcmVjYXRlCiAKICAgICAvLyBPciwgdHdvIGxlbmd0aHMgb3IgcGVyY2VudGFnZXMKICAgICBp
ZiAoIXNoYXBlICYmICFzaXplS2V5d29yZCkgewotICAgICAgICBhdXRvIGhvcml6b250YWxTaXpl
ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdl
Tm9uTmVnYXRpdmUpOworICAgICAgICBhdXRvIGhvcml6b250YWxTaXplID0gY29uc3VtZUxlbmd0
aE9yUGVyY2VudChhcmdzLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CiAg
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwogICAgICAgICBp
ZiAoaG9yaXpvbnRhbFNpemUpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNvbnN1bWVM
ZW5ndGhPclBlcmNlbnQoYXJncywgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZl
KTsKKyAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYXJn
cywgY29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwogICAgICAgICAgICAgaWYg
KCF2ZXJ0aWNhbFNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
ICAgICBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwpAQCAtMTU4MSw3ICsx
NjAwLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZQogICAgICAg
ICBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwogICAgIH0KIAotICAgIGlm
ICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCByZXN1bHQp
KQorICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0LCByZXN1
bHQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChjZW50ZXJDb29yZGluYXRl
KSB7CkBAIC0xNTk2LDcgKzE2MTUsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
RGVwcmVjYXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZT4gY29uc3VtZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1Bh
cnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQorc3Rh
dGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENTU0dyYWRpZW50
UmVwZWF0IHJlcGVhdGluZykKIHsKICAgICBSZWZQdHI8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4g
cmVzdWx0ID0gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUmFk
aWFsR3JhZGllbnQpOwogCkBAIC0xNjI0LDEzICsxNjQzLDEzIEBAIHN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVSYWRpYWxHcmEKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gY2VudGVyID0gY29uc3Vt
ZUxlbmd0aE9yUGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRp
dmUpOworICAgICAgICAgICAgYXV0byBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KGFy
Z3MsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgICAgIGlm
ICghY2VudGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGhvcml6
b250YWxTaXplKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAg
aG9yaXpvbnRhbFNpemUgPSBjZW50ZXI7Ci0gICAgICAgICAgICBjZW50ZXIgPSBjb25zdW1lTGVu
Z3RoT3JQZXJjZW50KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7
CisgICAgICAgICAgICBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KGFyZ3MsIGNvbnRl
eHQubW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgICAgIGlmIChjZW50ZXIp
IHsKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjZW50ZXI7CiAgICAgICAgICAgICAg
ICAgKytpOwpAQCAtMTY1OSw3ICsxNjc4LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZVJhZGlhbEdyYQogICAgIGlmIChhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlQXQpIHsK
ICAgICAgICAgYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICAKLSAg
ICAgICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMo
YXJncywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBQb3NpdGlvblN5bnRh
eDo6UG9zaXRpb24pOworICAgICAgICBhdXRvIGNlbnRlckNvb3JkaW5hdGUgPSBjb25zdW1lUG9z
aXRpb25Db29yZGluYXRlcyhhcmdzLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJp
ZCwgUG9zaXRpb25TeW50YXg6OlBvc2l0aW9uKTsKICAgICAgICAgaWYgKCFjZW50ZXJDb29yZGlu
YXRlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIApAQCAtMTY3Niw3ICsx
Njk1LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYQogCiAgICAg
aWYgKChzaGFwZSB8fCBzaXplS2V5d29yZCB8fCBob3Jpem9udGFsU2l6ZSB8fCBjZW50ZXJYIHx8
IGNlbnRlclkpICYmICFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMo
YXJncywgY3NzUGFyc2VyTW9kZSwgKnJlc3VsdCkpCisgICAgaWYgKCFjb25zdW1lR3JhZGllbnRD
b2xvclN0b3BzKGFyZ3MsIGNvbnRleHQsICpyZXN1bHQpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIHJlc3VsdC0+c2V0U2hhcGUoV1RGTW92ZShzaGFwZSkpOwpAQCAtMTY4NywxMiAr
MTcwNiwxMiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lUmFkaWFsR3JhCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVh
ckdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFy
c2VyTW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nLCBDU1NHcmFkaWVudFR5cGUgZ3Jh
ZGllbnRUeXBlKQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVhckdyYWRpZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRl
eHQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZywgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50
VHlwZSkKIHsKICAgICBSZWZQdHI8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4gcmVzdWx0ID0gQ1NT
TGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgZ3JhZGllbnRUeXBlKTsKIAog
ICAgIGJvb2wgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gYW5nbGUgPSBjb25zdW1lQW5nbGUoYXJncywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
azo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpOworICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gYW5nbGUgPSBjb25zdW1lQW5nbGUoYXJncywgY29udGV4dC5tb2RlLCBVbml0
bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdyk7CiAgICAgaWYgKGFu
Z2xlKQogICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOwog
ICAgIGVsc2UgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50IHx8
IGNvbnN1bWVJZGVudDxDU1NWYWx1ZVRvPihhcmdzKSkgewpAQCAtMTcxNSwxMiArMTczNCwxMiBA
QCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lTGluZWFyR3JhCiAKICAgICBpZiAoZXhw
ZWN0Q29tbWEgJiYgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhh
cmdzLCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0KSkKKyAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENv
bG9yU3RvcHMoYXJncywgY29udGV4dCwgKnJlc3VsdCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1
bWVDb25pY0dyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlckNvbnRl
eHQgY29udGV4dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQorc3RhdGljIFJlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUNvbmljR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywg
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0
aW5nKQogewogI2lmIEVOQUJMRShDU1NfQ09OSUNfR1JBRElFTlRTKQogICAgIFJlZlB0cjxDU1ND
b25pY0dyYWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRl
KHJlcGVhdGluZyk7CkBAIC0xNzU0LDcgKzE3NzMsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lQ29uaWNHcmFkCiAKICAgICBpZiAoZXhwZWN0Q29tbWEgJiYgIWNvbnN1bWVDb21t
YUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0Lm1vZGUsICpyZXN1
bHQpKQorICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0LCAq
cmVzdWx0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHJlc3VsdDsKICNl
bHNlCkBAIC0xNzY1LDE0ICsxNzg0LDE0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1
bWVDb25pY0dyYWQKICNlbmRpZgogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZU9y
Tm9uZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0
KQorUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKHJh
bmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJ
ZGVudChyYW5nZSk7CiAgICAgcmV0dXJuIGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCk7CiB9
CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDcm9zc0ZhZGUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgYXJncywgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBib29sIHByZWZpeGVkKQor
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNyb3NzRmFkZShDU1NQYXJzZXJUb2tlblJh
bmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBib29sIHByZWZpeGVk
KQogewogICAgIGF1dG8gZnJvbUltYWdlVmFsdWUgPSBjb25zdW1lSW1hZ2VPck5vbmUoYXJncywg
Y29udGV4dCk7CiAgICAgaWYgKCFmcm9tSW1hZ2VWYWx1ZSB8fCAhY29uc3VtZUNvbW1hSW5jbHVk
aW5nV2hpdGVzcGFjZShhcmdzKSkKQEAgLTE4NDgsMzAgKzE4NjcsMzAgQEAgc3RhdGljIFJlZlB0
cjxDU1NWYWx1ZT4gY29uc3VtZUN1c3RvbVBhaQogfQogI2VuZGlmCiAKLXN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUdlbmVyYXRlZEltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVr
KCkuZnVuY3Rpb25JZCgpOwogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5ID0gcmFu
Z2U7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdl
Q29weSk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiByZXN1bHQ7CiAgICAgaWYgKGlkID09IENTU1Zh
bHVlUmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVu
dChhcmdzLCBjb250ZXh0Lm1vZGUsIE5vblJlcGVhdGluZyk7CisgICAgICAgIHJlc3VsdCA9IGNv
bnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcpOwogICAgIGVs
c2UgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0aW5nUmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJl
c3VsdCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJlcGVhdGlu
Zyk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0
LCBSZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0TGluZWFyR3Jh
ZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250
ZXh0Lm1vZGUsIE5vblJlcGVhdGluZywgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCk7CisgICAg
ICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBl
YXRpbmcsIENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpOwogICAgIGVsc2UgaWYgKGlkID09IENT
U1ZhbHVlV2Via2l0UmVwZWF0aW5nTGluZWFyR3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNv
bnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJlcGVhdGluZywgQ1NTUHJl
Zml4ZWRMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFk
aWVudChhcmdzLCBjb250ZXh0LCBSZXBlYXRpbmcsIENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQp
OwogICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0aW5nTGluZWFyR3JhZGllbnQpCi0g
ICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUs
IFJlcGVhdGluZywgQ1NTTGluZWFyR3JhZGllbnQpOworICAgICAgICByZXN1bHQgPSBjb25zdW1l
TGluZWFyR3JhZGllbnQoYXJncywgY29udGV4dCwgUmVwZWF0aW5nLCBDU1NMaW5lYXJHcmFkaWVu
dCk7CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVMaW5lYXJHcmFkaWVudCkKLSAgICAgICAg
cmVzdWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgTm9uUmVw
ZWF0aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5l
YXJHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcsIENTU0xpbmVhckdyYWRpZW50
KTsKICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdEdyYWRpZW50KQotICAgICAgICBy
ZXN1bHQgPSBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSk7Cisg
ICAgICAgIHJlc3VsdCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoYXJncywgY29udGV4dCk7
CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRSYWRpYWxHcmFkaWVudCkKLSAgICAg
ICAgcmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0
Lm1vZGUsIE5vblJlcGVhdGluZyk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVEZXByZWNhdGVk
UmFkaWFsR3JhZGllbnQoYXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5nKTsKICAgICBlbHNlIGlm
IChpZCA9PSBDU1NWYWx1ZVdlYmtpdFJlcGVhdGluZ1JhZGlhbEdyYWRpZW50KQotICAgICAgICBy
ZXN1bHQgPSBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9k
ZSwgUmVwZWF0aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxH
cmFkaWVudChhcmdzLCBjb250ZXh0LCBSZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENT
U1ZhbHVlQ29uaWNHcmFkaWVudCkKICAgICAgICAgcmVzdWx0ID0gY29uc3VtZUNvbmljR3JhZGll
bnQoYXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5nKTsKICAgICBlbHNlIGlmIChpZCA9PSBDU1NW
YWx1ZVJlcGVhdGluZ0NvbmljR3JhZGllbnQpCkBAIC0yMDE3LDcgKzIwMzYsNyBAQCBzdGF0aWMg
UmVmUHRyPENTU0Z1bmN0aW9uVmFsdWU+IGNvbnN1bWVGCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBw
YXJzZWRWYWx1ZTsKIAogICAgIGlmIChmaWx0ZXJUeXBlID09IENTU1ZhbHVlRHJvcFNoYWRvdykK
LSAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KGFyZ3MsIGNvbnRleHQu
bW9kZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lU2luZ2xl
U2hhZG93KGFyZ3MsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CiAgICAgZWxzZSB7CiAgICAgICAg
IGlmIChhcmdzLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWU7CkBAIC0y
MDY0LDcgKzIwODMsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGaWx0ZXIoQ1NTUGFyc2Vy
CiAgICAgcmV0dXJuIGxpc3QucHRyKCk7CiB9CiAKLVJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29u
c3VtZVNpbmdsZVNoYWRvdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlLCBib29sIGFsbG93SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpCitSZWZQ
dHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIGJvb2wgYWxsb3dJbnNl
dCwgYm9vbCBhbGxvd1NwcmVhZCkKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0
eWxlOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7CkBAIC0yMDg5LDcgKzIx
MDgsNyBAQCBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYXV0byBtYXliZUNv
bG9yID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAgYXV0byBt
YXliZUNvbG9yID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgaWYgKG1h
eWJlQ29sb3IpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGp1c3QgcGFyc2VkIGEgY29sb3IgYnV0
IGFscmVhZHkgaGFkIG9uZSwgdGhlIGdpdmVuIHRva2VuIHJhbmdlIGlzIG5vdCBhIHZhbGlkIDxz
aGFkb3c+LgogICAgICAgICAgICAgaWYgKGNvbG9yKQpAQCAtMjEwMywyMyArMjEyMiwyMyBAQCBS
ZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgICAgICAgICAvLyBJ
ZiB3ZSd2ZSBhbHJlYWR5IHBhcnNlZCB0aGVzZSBsZW5ndGhzLCB0aGUgZ2l2ZW4gdmFsdWUgaXMg
aW52YWxpZCBhcyB0aGVyZSBjYW5ub3QgYmUgdHdvIGxlbmd0aHMgY29tcG9uZW50cyBpbiBhIHNp
bmdsZSA8c2hhZG93PiB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9Ci0gICAgICAgIGhvcml6b250YWxPZmZzZXQgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjc3NQ
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgaG9yaXpvbnRhbE9mZnNldCA9IGNv
bnN1bWVMZW5ndGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAg
IGlmICghaG9yaXpvbnRhbE9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB2ZXJ0aWNhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNzc1BhcnNlck1vZGUs
IFZhbHVlUmFuZ2VBbGwpOworICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgo
cmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAgIGlmICghdmVydGlj
YWxPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBjb25zdCBD
U1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgICAgIC8vIFRoZSBleHBs
aWNpdCBjaGVjayBmb3IgY2FsYygpIGlzIHVuZm9ydHVuYXRlLiBUaGlzIGlzIGVuc3VyaW5nIHRo
YXQgd2Ugb25seSBmYWlsIHBhcnNpbmcgaWYgdGhlcmUgaXMgYSBsZW5ndGgsIGJ1dCBpdCBmYWls
cyB0aGUgcmFuZ2UgY2hlY2suCiAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51bWJlclRva2VuIHx8ICh0b2tlbi50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbiAmJiBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKHRva2VuLmZ1bmN0
aW9uSWQoKSkpKSB7Ci0gICAgICAgICAgICBibHVyUmFkaXVzID0gY29uc3VtZUxlbmd0aChyYW5n
ZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKKyAgICAgICAgICAgIGJs
dXJSYWRpdXMgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VO
b25OZWdhdGl2ZSk7CiAgICAgICAgICAgICBpZiAoIWJsdXJSYWRpdXMpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYmx1clJhZGl1cyAm
JiBhbGxvd1NwcmVhZCkKLSAgICAgICAgICAgIHNwcmVhZERpc3RhbmNlID0gY29uc3VtZUxlbmd0
aChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgICAgICBzcHJl
YWREaXN0YW5jZSA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5n
ZUFsbCk7CiAgICAgfQogICAgIAogICAgIC8vIEluIG9yZGVyIGZvciB0aGlzIHRvIGJlIGEgdmFs
aWQgPHNoYWRvdz4sIGF0IGxlYXN0IHRoZXNlIGxlbmd0aHMgbXVzdCBiZSBwcmVzZW50LgpAQCAt
MjEyOCw3ICsyMTQ3LDcgQEAgUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hh
ZAogICAgIHJldHVybiBDU1NTaGFkb3dWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaG9yaXpvbnRhbE9m
ZnNldCksIFdURk1vdmUodmVydGljYWxPZmZzZXQpLCBXVEZNb3ZlKGJsdXJSYWRpdXMpLCBXVEZN
b3ZlKHNwcmVhZERpc3RhbmNlKSwgV1RGTW92ZShzdHlsZSksIFdURk1vdmUoY29sb3IpKTsKIH0K
IAotUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlckNvbnRleHQgY29udGV4dCwgT3B0aW9uU2V0PEFsbG93ZWRJbWFnZVR5cGU+
IGFsbG93ZWRJbWFnZVR5cGVzKQorUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIE9w
dGlvblNldDxBbGxvd2VkSW1hZ2VUeXBlPiBhbGxvd2VkSW1hZ2VUeXBlcykKIHsKICAgICBpZiAo
KHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pICYmIChhbGxvd2VkSW1hZ2VUeXBl
cy5jb250YWlucyhBbGxvd2VkSW1hZ2VUeXBlOjpSYXdTdHJpbmdBc1VSTCkpKSB7CiAgICAgICAg
IGF1dG8gdXJsU3RyaW5nVmlldyA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
dmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAyLDggKzEwMiw4IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVN0cmlu
ZygKIFN0cmluZ1ZpZXcgY29uc3VtZVVybEFzU3RyaW5nVmlldyhDU1NQYXJzZXJUb2tlblJhbmdl
Jik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVVcmwoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOwogCi1Db2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNv
bG9yKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFjY2VwdFF1aXJr
eUNvbG9ycyA9IGZhbHNlKTsKK0NvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKK1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMgPSBmYWxzZSk7CiAKIGVudW0gY2xh
c3MgUG9zaXRpb25TeW50YXggewogICAgIFBvc2l0aW9uLCAvLyA8cG9zaXRpb24+CkBAIC0xMjYs
OSArMTI2LDggQEAgZW51bSBjbGFzcyBBbGxvd2VkSW1hZ2VUeXBlIDogdWludDhfdCB7CiAgICAg
R2VuZXJhdGVkSW1hZ2UgPSAxIDw8IDMKIH07CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUlt
YWdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBPcHRpb25TZXQ8QWxs
b3dlZEltYWdlVHlwZT4gPSB7IEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0aW9uLCBBbGxvd2Vk
SW1hZ2VUeXBlOjpJbWFnZVNldCwgQWxsb3dlZEltYWdlVHlwZTo6R2VuZXJhdGVkSW1hZ2UgfSk7
Ci0KLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJDb250ZXh0KTsKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENT
U1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgT3B0aW9uU2V0PEFs
bG93ZWRJbWFnZVR5cGU+ID0geyBBbGxvd2VkSW1hZ2VUeXBlOjpVUkxGdW5jdGlvbiwgQWxsb3dl
ZEltYWdlVHlwZTo6SW1hZ2VTZXQsIEFsbG93ZWRJbWFnZVR5cGU6OkdlbmVyYXRlZEltYWdlIH0p
OworUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIAogZW51bSBjbGFzcyBBbGxvd2VkRmlsdGVy
RnVuY3Rpb25zIHsKICAgICBQaXhlbEZpbHRlcnMsCkBAIC0xMzYsNyArMTM1LDcgQEAgZW51bSBj
bGFzcyBBbGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsKIH07CiAKIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUZpbHRlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYs
IEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMpOwotUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1l
U2luZ2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFs
bG93SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpOworUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25z
dW1lU2luZ2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiwgYm9vbCBhbGxvd0luc2V0LCBib29sIGFsbG93U3ByZWFkKTsKIAogc3RydWN0IEZvbnRT
dHlsZVJhdyB7CiAgICAgQ1NTVmFsdWVJRCBzdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI3MjgzNykKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5
KQpAQCAtNjAwLDcgKzYwMCw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRl
bnRJblIKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBv
ZiB0aGUgdW5kZXJsaW5lIGNvbG9yIHRvIHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxw
aGEgYnkgMzglLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwg
YXBwZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xv
ciBjYW4gYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5saWdodG5l
c3MgPSAwLjVmOworICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5saWdodG5lc3MgPSA1MC4w
ZjsKICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEuYWxwaGEgKj0gMC4zOGY7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDb25z
aWRlciBrZWVwaW5nIGNvbG9yIGluIExDSEEgKGlmIHRoYXQgY2hhbmdlIGlzIG1hZGUpIG9yIGNv
bnZlcnRpbmcgYmFjayB0byB0aGUgaW5pdGlhbCB1bmRlcmx5aW5nIGNvbG9yIHR5cGUgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBjbGFtcGluZyBjb2xvcnMgb3V0c2lkZSBvZiBzUkdCLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNp
b24uY3BwCShyZXZpc2lvbiAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvckNvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw2IEBA
IHN0YXRpYyBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCBjYWxjdWxhdGUKICAgICBpZiAoaHVlID49
IDM2MC4wZikKICAgICAgICAgaHVlIC09IDM2MC4wZjsKIAotICAgIGh1ZSAvPSAzNjAuMGY7Ci0K
ICAgICByZXR1cm4geyBodWUsIG1pbiwgbWF4LCBjaHJvbWEgfTsKIH0KIApAQCAtNjksMTQgKzY3
LDE0IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0PiwKICAgICBhdXRv
IFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKICAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJv
bWFdID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsKIAotICAgIGZsb2F0IGxpZ2h0bmVzcyA9IDAu
NWYgKiAobWF4ICsgbWluKTsKKyAgICBmbG9hdCBsaWdodG5lc3MgPSAoMC41ZiAqIChtYXggKyBt
aW4pKSAqIDEwMC4wZjsKICAgICBmbG9hdCBzYXR1cmF0aW9uOwogICAgIGlmICghY2hyb21hKQog
ICAgICAgICBzYXR1cmF0aW9uID0gMDsKLSAgICBlbHNlIGlmIChsaWdodG5lc3MgPD0gMC41ZikK
LSAgICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEgLyAobWF4ICsgbWluKSk7CisgICAgZWxzZSBp
ZiAobGlnaHRuZXNzIDw9IDUwLjBmKQorICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAvICht
YXggKyBtaW4pKSAqIDEwMC4wZjsKICAgICBlbHNlCi0gICAgICAgIHNhdHVyYXRpb24gPSAoY2hy
b21hIC8gKDIuMGYgLSAobWF4ICsgbWluKSkpOworICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9t
YSAvICgyLjBmIC0gKG1heCArIG1pbikpKSAqIDEwMC4wZjsKIAogICAgIHJldHVybiB7IGh1ZSwg
c2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9OwogfQpAQCAtODYsMTEgKzg0LDI2IEBAIFNS
R0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAvLyBodHRwczovL2Ry
YWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IKICAgICBhdXRvIFtodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3I7CiAKLSAgICBpZiAoIXNhdHVyYXRp
b24pCi0gICAgICAgIHJldHVybiB7IGxpZ2h0bmVzcywgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGFs
cGhhIH07Ci0gICAgCi0gICAgZmxvYXQgdGVtcDIgPSBsaWdodG5lc3MgPD0gMC41ZiA/IGxpZ2h0
bmVzcyAqICgxLjBmICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGln
aHRuZXNzICogc2F0dXJhdGlvbjsKLSAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBsaWdodG5lc3Mg
LSB0ZW1wMjsKKyAgICBpZiAoIXNhdHVyYXRpb24pIHsKKyAgICAgICAgYXV0byBncmV5ID0gbGln
aHRuZXNzIC8gMTAwLjBmOworICAgICAgICByZXR1cm4geyBncmV5LCBncmV5LCBncmV5LCBhbHBo
YSB9OworICAgIH0KKworICAgIC8vIGh1ZVRvUkdCKCkgd2FudHMgaHVlIGluIHRoZSAwLTYgcmFu
Z2UuCisgICAgYXV0byBub3JtYWxpemVkSHVlID0gKGh1ZSAvIDM2MC4wZikgKiA2LjBmOworICAg
IGF1dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IGxpZ2h0bmVzcyAvIDEwMC4wZjsKKyAgICBhdXRv
IG5vcm1hbGl6ZWRTYXR1cmF0aW9uID0gc2F0dXJhdGlvbiAvIDEwMC4wZjsKKworICAgIGF1dG8g
aHVlRm9yUmVkID0gbm9ybWFsaXplZEh1ZSArIDIuMGY7CisgICAgYXV0byBodWVGb3JHcmVlbiA9
IG5vcm1hbGl6ZWRIdWU7CisgICAgYXV0byBodWVGb3JCbHVlID0gbm9ybWFsaXplZEh1ZSAtIDIu
MGY7CisgICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCisgICAgICAgIGh1ZUZvclJlZCAtPSA2LjBm
OworICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQorICAgICAgICBodWVGb3JCbHVlICs9
IDYuMGY7CisKKyAgICBmbG9hdCB0ZW1wMiA9IG5vcm1hbGl6ZWRMaWdodG5lc3MgPD0gMC41ZiA/
IG5vcm1hbGl6ZWRMaWdodG5lc3MgKiAoMS4wZiArIG5vcm1hbGl6ZWRTYXR1cmF0aW9uKSA6IG5v
cm1hbGl6ZWRMaWdodG5lc3MgKyBub3JtYWxpemVkU2F0dXJhdGlvbiAtIG5vcm1hbGl6ZWRMaWdo
dG5lc3MgKiBub3JtYWxpemVkU2F0dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBu
b3JtYWxpemVkTGlnaHRuZXNzIC0gdGVtcDI7CiAgICAgCiAgICAgLy8gSHVlIGlzIGluIHRoZSBy
YW5nZSAwLTYsIG90aGVyIGFyZ3MgaW4gMC0xLgogICAgIGF1dG8gaHVlVG9SR0IgPSBbXShmbG9h
dCB0ZW1wMSwgZmxvYXQgdGVtcDIsIGZsb2F0IGh1ZSkgewpAQCAtMTAzLDE3ICsxMTYsNiBAQCBT
UkdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0CiAgICAgICAgIHJldHVybiB0
ZW1wMTsKICAgICB9OwogCi0gICAgLy8gaHVlVG9SR0IoKSB3YW50cyBodWUgaW4gdGhlIDAtNiBy
YW5nZS4KLSAgICBodWUgKj0gNi4wZjsKLQotICAgIGF1dG8gaHVlRm9yUmVkID0gaHVlICsgMi4w
ZjsKLSAgICBhdXRvIGh1ZUZvckdyZWVuID0gaHVlOwotICAgIGF1dG8gaHVlRm9yQmx1ZSA9IGh1
ZSAtIDIuMGY7Ci0gICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCi0gICAgICAgIGh1ZUZvclJlZCAt
PSA2LjBmOwotICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQotICAgICAgICBodWVGb3JC
bHVlICs9IDYuMGY7Ci0KICAgICByZXR1cm4gewogICAgICAgICBodWVUb1JHQih0ZW1wMSwgdGVt
cDIsIGh1ZUZvclJlZCksCiAgICAgICAgIGh1ZVRvUkdCKHRlbXAxLCB0ZW1wMiwgaHVlRm9yR3Jl
ZW4pLApAQCAtMTI4LDggKzEzMCw4IEBAIEhXQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIV0JB
PGZsb2F0PiwKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQv
I3JnYi10by1od2IKICAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRl
SFNMSHVlKGNvbG9yKTsKLSAgICBhdXRvIHdoaXRlbmVzcyA9IG1pbjsKLSAgICBhdXRvIGJsYWNr
bmVzcyA9IDEuMGYgLSBtYXg7CisgICAgYXV0byB3aGl0ZW5lc3MgPSBtaW4gKiAxMDAuMGY7Cisg
ICAgYXV0byBibGFja25lc3MgPSAoMS4wZiAtIG1heCkgKiAxMDAuMGY7CiAgICAgCiAgICAgcmV0
dXJuIHsgaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgY29sb3IuYWxwaGEgfTsKIH0KQEAgLTEz
OSw4ICsxNDEsMjQgQEAgU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdAog
ICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHdiLXRvLXJnYgog
ICAgIGF1dG8gW2h1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGFscGhhXSA9IGNvbG9yOwogCi0g
ICAgaWYgKHdoaXRlbmVzcyArIGJsYWNrbmVzcyA9PSAxLjBmKQotICAgICAgICByZXR1cm4geyB3
aGl0ZW5lc3MsIHdoaXRlbmVzcywgd2hpdGVuZXNzLCBhbHBoYSB9OworICAgIGlmICh3aGl0ZW5l
c3MgKyBibGFja25lc3MgPT0gMTAwLjBmKSB7CisgICAgICAgIGF1dG8gZ3JleSA9IHdoaXRlbmVz
cyAvIDEwMC4wZjsKKyAgICAgICAgcmV0dXJuIHsgZ3JleSwgZ3JleSwgZ3JleSwgYWxwaGEgfTsK
KyAgICB9CisKKyAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgor
ICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IChodWUgLyAzNjAuMGYpICogNi4wZjsKKworICAgIGF1
dG8gaHVlRm9yUmVkID0gbm9ybWFsaXplZEh1ZSArIDIuMGY7CisgICAgYXV0byBodWVGb3JHcmVl
biA9IG5vcm1hbGl6ZWRIdWU7CisgICAgYXV0byBodWVGb3JCbHVlID0gbm9ybWFsaXplZEh1ZSAt
IDIuMGY7CisgICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCisgICAgICAgIGh1ZUZvclJlZCAtPSA2
LjBmOworICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQorICAgICAgICBodWVGb3JCbHVl
ICs9IDYuMGY7CisKKyAgICBhdXRvIG5vcm1hbGl6ZWRXaGl0ZW5lc3MgPSB3aGl0ZW5lc3MgLyAx
MDAuMGY7CisgICAgYXV0byBub3JtYWxpemVkQmxhY2tuZXNzID0gYmxhY2tuZXNzIC8gMTAwLjBm
OwogCiAgICAgLy8gVGhpcyBpcyB0aGUgaHVlVG9SR0IgZnVuY3Rpb24gaW4gY29udmVydENvbG9y
PFNSR0JBPGZsb2F0Pj4oY29uc3QgSFNMQSYpIHdpdGggdGVtcDEgPT0gMAogICAgIC8vIGFuZCB0
ZW1wMiA9PSAxIHN0cmVuZ3RoIHJlZHVjZWQgdGhyb3VnaCBpdC4KQEAgLTE1NCwyNSArMTcyLDE0
IEBAIFNSR0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAgICAgcmV0
dXJuIDAuMGY7CiAgICAgfTsKIAotICAgIGF1dG8gYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MgPSBb
Jl0oZmxvYXQgY29tcG9uZW50KSB7Ci0gICAgICAgIHJldHVybiAoY29tcG9uZW50ICogKDEuMGYg
LSBjb2xvci53aGl0ZW5lc3MgLSBjb2xvci5ibGFja25lc3MpKSArIGNvbG9yLndoaXRlbmVzczsK
KyAgICBhdXRvIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzID0gW10oZmxvYXQgY29tcG9uZW50LCBh
dXRvIHdoaXRlbmVzcywgYXV0byBibGFja25lc3MpIHsKKyAgICAgICAgcmV0dXJuIChjb21wb25l
bnQgKiAoMS4wZiAtIHdoaXRlbmVzcyAtIGJsYWNrbmVzcykpICsgd2hpdGVuZXNzOwogICAgIH07
CiAKLSAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgotICAgIGh1
ZSAqPSA2LjBmOwotCi0gICAgYXV0byBodWVGb3JSZWQgPSBodWUgKyAyLjBmOwotICAgIGF1dG8g
aHVlRm9yR3JlZW4gPSBodWU7Ci0gICAgYXV0byBodWVGb3JCbHVlID0gaHVlIC0gMi4wZjsKLSAg
ICBpZiAoaHVlRm9yUmVkID4gNi4wZikKLSAgICAgICAgaHVlRm9yUmVkIC09IDYuMGY7Ci0gICAg
ZWxzZSBpZiAoaHVlRm9yQmx1ZSA8IDAuMGYpCi0gICAgICAgIGh1ZUZvckJsdWUgKz0gNi4wZjsK
LQogICAgIHJldHVybiB7Ci0gICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdC
KGh1ZUZvclJlZCkpLAotICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQiho
dWVGb3JHcmVlbikpLAotICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQiho
dWVGb3JCbHVlKSksCisgICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1
ZUZvclJlZCksIG5vcm1hbGl6ZWRXaGl0ZW5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3MpLAorICAg
ICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JHcmVlbiksIG5vcm1h
bGl6ZWRXaGl0ZW5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3MpLAorICAgICAgICBhcHBseVdoaXRl
bmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JCbHVlKSwgbm9ybWFsaXplZFdoaXRlbmVzcywg
bm9ybWFsaXplZEJsYWNrbmVzcyksCiAgICAgICAgIGFscGhhCiAgICAgfTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAkocmV2aXNp
b24gMjcyODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2Rl
bHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0
IEV4dGVuZGVkUkdCTW9kZWw8ZmxvYXQKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8Zmxv
YXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5n
ZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKLSAgICAgICAgeyAwLCAxIH0sCi0gICAgICAgIHsgMCwg
MSB9LAotICAgICAgICB7IDAsIDEgfQorICAgICAgICB7IDAsIDM2MCB9LAorICAgICAgICB7IDAs
IDEwMCB9LAorICAgICAgICB7IDAsIDEwMCB9CiAgICAgfSB9OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEhX
Qk1vZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29t
cG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7Ci0gICAgICAgIHsgMCwgMSB9LAotICAg
ICAgICB7IDAsIDEgfSwKLSAgICAgICAgeyAwLCAxIH0KKyAgICAgICAgeyAwLCAzNjAgfSwKKyAg
ICAgICAgeyAwLCAxMDAgfSwKKyAgICAgICAgeyAwLCAxMDAgfQogICAgIH0gfTsKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNzI4MzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDIyLDcgKzE0MjIsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6ZGF0ZVBsYWNlaG9sZGVyVGV4
dENvCiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHVzaW5nIExDSEE8ZmxvYXQ+IHJhdGhlciB0aGFu
IEhTTEE8ZmxvYXQ+IGZvciBiZXR0ZXIgcGVyY2VwdHVhbCByZXN1bHRzIGFuZCB0byBhdm9pZCBj
bGFtcGluZyB0byBzUkdCIGdhbXV0LCB3aGljaCBpcyB3aGF0IEhTTEEgZG9lcy4KICAgICBhdXRv
IGhzbGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKICAgICBp
ZiAodGV4dENvbG9yLmx1bWluYW5jZSgpIDwgYmFja2dyb3VuZENvbG9yLmx1bWluYW5jZSgpKQot
ICAgICAgICBoc2xhLmxpZ2h0bmVzcyArPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0Fk
anVzdG1lbnRGYWN0b3IgKiAoMS4wZiAtIGhzbGEubGlnaHRuZXNzKTsKKyAgICAgICAgaHNsYS5s
aWdodG5lc3MgKz0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW50RmFjdG9y
ICogKDEwMC4wZiAtIGhzbGEubGlnaHRuZXNzKTsKICAgICBlbHNlCiAgICAgICAgIGhzbGEubGln
aHRuZXNzICo9IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVudEZhY3RvcjsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420258</attachid>
            <date>2021-02-14 16:03:30 -0800</date>
            <delta_ts>2021-02-14 16:15:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221881-20210214160329.patch</filename>
            <type>text/plain</type>
            <size>72382</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIxLTAyLTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVwYXJlIGZvciBhZGRpbmcgcmVs
YXRpdmUgY29sb3Igc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxODgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBleHBlcmltZW50YWwgcmVsYXRp
dmUgY29sb3Igc3VwcG9ydCBhIGxpdHRsZSBjbGVhbnVwCisgICAgICAgIGlzIGluIG9yZGVyLiBU
aGlzIGNoYW5nZToKKyAgICAgICAgCisgICAgICAgIC0gVGhyZWFkcyBhIENTU1BhcnNlckNvbnRl
eHQgdGhyb3VnaCB0aGUgY29sb3IgcGFyc2luZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBiZQorICAg
ICAgICAgIG5lZWRlZCB0byBjaGVjayBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdC4K
KyAgICAgICAgLSBEb2VzIGEgc21hbGwgY2xlYW51cCBvZiBDU1NQYXJzZXJDb250ZXh0LCBzb3J0
aW5nIGZlYXR1cmVzIGFuZCB1c2luZyB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICBsaXN0
IGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgLSBSZWZhY3RvcnMgc29tZSBvZiB0aGUgY29s
b3IgcGFyc2luZyBoZWxwZXJzIHRvIGV4dHJhY3QgbW9yZSBoZWxwZXJzLiBUaGVzZSBjbGFyaWZ5
CisgICAgICAgICAgdGhlIGNvZGUgYmV0dGVyIGFuZCB3aWxsIGJlIHNoYXJlZCBieSB0aGUgcmVs
YXRpdmUgcGFyc2Vycy4KKyAgICAgICAgLSBNb3ZlIG5vcm1hbGl6YXRpb24gb2YgY29tcG9uZW50
cyB0byBhZnRlciBwYXJzaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdvcmsKKyAgICAgICAgICBp
biB0aGUgY2FzZSBvZiBmYWlsdXJlIGFuZCBzZXBhcmF0ZSB0aGUgcGhhc2VzIGEgYml0IG1vcmUu
CisgICAgICAgIC0gUmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IFZhbHVlUmFuZ2VBbGwgcGFyYW1l
dGVycyB0aGF0IHdlcmUgYWxyZWFkeSB0aGUgZGVmYXVsdC4KKyAgICAgICAgLSBTd2l0Y2ggSFNM
QSBhbmQgSFdCQSB0byBzdG9wIHN0b3JpbmcgdGhlaXIgY29tcG9uZW50cyBpbiBhIDAtMSBub3Jt
YWxpemF0aW9uCisgICAgICAgICAgYW5kIGluc3RlYWQgdXNlIHZhbHVlcyB0aGF0IG1hdGNoIHRo
ZSBpbnB1dCwgMC0zNjAgZm9yIGh1ZSwgYW5kIDAtMTAwIGZvciB0aGUKKyAgICAgICAgICB0aGUg
cmVtYWluaW5nIHR3byBjb21wb25lbnRzLiBUaGlzIHNlZW1zIG1vcmUgbmF0dXJhbCwgYW5kIHdp
bGwgc2ltcGxpZnkKKyAgICAgICAgICBmdXR1cmUgY29sb3IgZnVuY3Rpb24gd29yayB0aGF0IGV4
cGVjdHMgdGhlIHZhbHVlcyBpbiB0aGlzIGZvcm0uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3Jr
ZXJTYWZlKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2hvdWxkRW5hYmxlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dEhhc2g6
Omhhc2gpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3VtZVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1l
Q2FyZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lT3V0bGluZUNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQYWludFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdW1lQmFja2dyb3VuZENvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6Y29uc3VtZUJvcmRlcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpub3JtYWxpemVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6
ZVdoaXRlbmVzc0JsYWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OnBhcnNlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTENIUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZv
clJHQlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkR3JhZGllbnRDb2xvclN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGluZWFyR3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29uaWNHcmFkaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbWFnZU9y
Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVDcm9zc0ZhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lRmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lU2luZ2xlU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VPcHRpb25hbEFscGhh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SW1hZ2UpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsY3VsYXRlSFNMSHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj46
OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhXQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRl
eHRDb2xvciBjb25zdCk6CisKIDIwMjEtMDItMTQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBNb2JpbGVTYWZhcmkgY3Jhc2hlcyBhdCBXZWJDb3Jl
OiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZG9FbnRlckZ1bGxzY3Jl
ZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9u
IDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIENvbG9yIENTU1BhcnNlcjo6cGFyc2VDb2xv
cldvcmtlclNhZmUoY28KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50
b2tlblJhbmdlKCkpOwogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdl
LCBIVE1MU3RhbmRhcmRNb2RlKTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdlLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkp
OwogfQogCiBDb2xvciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoU3RyaW5nVmlldyBzdHJp
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywzOSArNDcsNDYgQEAgQ1NT
UGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChDU1NQYQogewogfQogCi1DU1NQYXJzZXJD
b250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
VVJMJiBzaGVldEJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IGJhc2VVUkwo
c2hlZXRCYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogc2hlZXRCYXNlVVJM
KQotICAgICwgY2hhcnNldChjaGFyc2V0KQotICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01v
ZGUoKSA/IEhUTUxRdWlya3NNb2RlIDogSFRNTFN0YW5kYXJkTW9kZSkKLSAgICAsIGlzSFRNTERv
Y3VtZW50KGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKHNoZWV0QmFzZVVSTC5pc051bGwoKSB8fCBkb2N1bWVudC5zZWN1cml0eU9yaWdp
bigpLmNhblJlcXVlc3QoYmFzZVVSTCkpCi17Ci0gICAgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpOwotICAgIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3Ig
PSBkb2N1bWVudC5zZXR0aW5ncygpLnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVo
YXZpb3IoKTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHRleHRBdXRvc2l6aW5n
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0j
ZW5kaWYKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIGxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5sZWdhY3lP
dmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCgpOworc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxl
TGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7
CiAgICAgLy8gVGhlIGxlZ2FjeSAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2ggYmVo
YXZpb3IgbWF5IGhhdmUgYmVlbiBkaXNhYmxlZCB0aHJvdWdoIHRoZSB3ZWJzaXRlIHBvbGljeSwK
ICAgICAvLyBpbiB0aGF0IGNhc2Ugd2Ugd2FudCB0byBkaXNhYmxlIHRoZSBsZWdhY3kgYmVoYXZp
b3IgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBzZXR0aW5nIHNheXMuCiAgICAgaWYgKGF1dG8qIGxv
YWRlciA9IGRvY3VtZW50LmxvYWRlcigpKSB7CiAgICAgICAgIGlmIChsb2FkZXItPmxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3koKSA9PSBMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1Rv
dWNoUG9saWN5OjpEaXNhYmxlKQotICAgICAgICAgICAgbGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdU
b3VjaEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cisg
ICAgcmV0dXJuIGRvY3VtZW50LnNldHRpbmdzKCkubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQoKTsKK30KKyNlbmRpZgorCitDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250
ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBzaGVldEJhc2VVUkwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IGJhc2VVUkwgeyBzaGVldEJhc2VVUkwuaXNOdWxs
KCkgPyBkb2N1bWVudC5iYXNlVVJMKCkgOiBzaGVldEJhc2VVUkwgfQorICAgICwgY2hhcnNldCB7
IGNoYXJzZXQgfQorICAgICwgbW9kZSB7IGRvY3VtZW50LmluUXVpcmtzTW9kZSgpID8gSFRNTFF1
aXJrc01vZGUgOiBIVE1MU3RhbmRhcmRNb2RlIH0KKyAgICAsIGlzSFRNTERvY3VtZW50IHsgZG9j
dW1lbnQuaXNIVE1MRG9jdW1lbnQoKSB9CisgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgc2hlZXRCYXNlVVJMLmlzTnVsbCgpIHx8IGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuY2Fu
UmVxdWVzdChiYXNlVVJMKSB9CisgICAgLCB1c2VTeXN0ZW1BcHBlYXJhbmNlIHsgZG9jdW1lbnQu
cGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCkgOiBmYWxzZSB9
CisgICAgLCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBkb2N1bWVudC5zZXR0aW5ncygpLmFzcGVjdFJh
dGlvRW5hYmxlZCgpIH0KKyAgICAsIGNvbG9yRmlsdGVyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRp
bmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCkgfQorICAgICwgY29uc3RhbnRQcm9wZXJ0aWVzRW5h
YmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpIH0K
KyAgICAsIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuZGVm
ZXJyZWRDU1NQYXJzZXJFbmFibGVkKCkgfQorICAgICwgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpIH0KKyAgICAsIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7
IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3BlcnRpZXNFbmFi
bGVkKCkgfQorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgLCBsZWdh
Y3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCB7IHNob3VsZEVuYWJsZUxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2goZG9jdW1lbnQpIH0KICNlbmRpZgotICAgIHNwcmluZ1RpbWluZ0Z1
bmN0aW9uRW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuc3ByaW5nVGltaW5nRnVuY3Rpb25F
bmFibGVkKCk7Ci0gICAgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCA9IGRvY3VtZW50LnNldHRp
bmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpOwotICAgIGNvbG9yRmlsdGVyRW5hYmxl
ZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCk7CisgICAgLCBvdmVy
c2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5vdmVyc2Nyb2xsQmVo
YXZpb3JFbmFibGVkKCkgfQorICAgICwgc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQu
c2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkKCkgfQorICAgICwgc3By
aW5nVGltaW5nRnVuY3Rpb25FbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5zcHJpbmdUaW1p
bmdGdW5jdGlvbkVuYWJsZWQoKSB9CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICAs
IHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXpp
bmdFbmFibGVkKCkgfQorI2VuZGlmCisgICAgLCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0
aGFuZEJlaGF2aW9yIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6
ZVNob3J0aGFuZEJlaGF2aW9yKCkgfQogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0g
ICAgYXR0YWNobWVudEVuYWJsZWQgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCgpOworICAgICwgYXR0YWNobWVudEVuYWJs
ZWQgeyBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRF
bGVtZW50RW5hYmxlZCgpIH0KICNlbmRpZgotICAgIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCA9
IGRvY3VtZW50LnNldHRpbmdzKCkuZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKCk7Ci0gICAgc2Ny
b2xsQmVoYXZpb3JFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhT
Y3JvbGxpbmdFbmFibGVkKCk7Ci0gICAgb3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9IGRvY3Vt
ZW50LnNldHRpbmdzKCkub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCgpOwotICAgIHVzZVN5c3Rl
bUFwcGVhcmFuY2UgPSBkb2N1bWVudC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCktPnVzZVN5c3Rl
bUFwcGVhcmFuY2UoKSA6IGZhbHNlOwotICAgIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVz
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3Bl
cnRpZXNFbmFibGVkKCk7Ci0gICAgYXNwZWN0UmF0aW9FbmFibGVkID0gZG9jdW1lbnQuc2V0dGlu
Z3MoKS5hc3BlY3RSYXRpb0VuYWJsZWQoKTsKK3sKIH0KIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCkBAIC04Nywy
OCArOTQsMzEgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIAogICAg
IHJldHVybiBhLmJhc2VVUkwgPT0gYi5iYXNlVVJMCiAgICAgICAgICYmIGEuY2hhcnNldCA9PSBi
LmNoYXJzZXQKICAgICAgICAgJiYgYS5tb2RlID09IGIubW9kZQorICAgICAgICAmJiBhLmVuY2xv
c2luZ1J1bGVUeXBlID09IGIuZW5jbG9zaW5nUnVsZVR5cGUKICAgICAgICAgJiYgYS5pc0hUTUxE
b2N1bWVudCA9PSBiLmlzSFRNTERvY3VtZW50Ci0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykK
LSAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQKLSNlbmRpZgorICAgICAgICAmJiBhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPT0g
Yi5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luCisgICAgICAgICYmIGEuaXNDb250ZW50T3BhcXVl
ID09IGIuaXNDb250ZW50T3BhcXVlCisgICAgICAgICYmIGEudXNlU3lzdGVtQXBwZWFyYW5jZSA9
PSBiLnVzZVN5c3RlbUFwcGVhcmFuY2UKKyAgICAgICAgJiYgYS5hc3BlY3RSYXRpb0VuYWJsZWQg
PT0gYi5hc3BlY3RSYXRpb0VuYWJsZWQKKyAgICAgICAgJiYgYS5jb2xvckZpbHRlckVuYWJsZWQg
PT0gYi5jb2xvckZpbHRlckVuYWJsZWQKKyAgICAgICAgJiYgYS5jb25zdGFudFByb3BlcnRpZXNF
bmFibGVkID09IGIuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZAorICAgICAgICAmJiBhLmRlZmVy
cmVkQ1NTUGFyc2VyRW5hYmxlZCA9PSBiLmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZAorICAgICAg
ICAmJiBhLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSA9PSBiLmVuZm9yY2VzQ1NT
TUlNRVR5cGVJbk5vUXVpcmtzTW9kZQorICAgICAgICAmJiBhLmluZGl2aWR1YWxUcmFuc2Zvcm1Q
cm9wZXJ0aWVzRW5hYmxlZCA9PSBiLmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxl
ZAogI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCiAgICAgICAgICYmIGEubGVn
YWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaEVuYWJsZWQgPT0gYi5sZWdhY3lPdmVyZmxvd1Njcm9s
bGluZ1RvdWNoRW5hYmxlZAogI2VuZGlmCi0gICAgICAgICYmIGEuZW5mb3JjZXNDU1NNSU1FVHlw
ZUluTm9RdWlya3NNb2RlID09IGIuZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlCi0g
ICAgICAgICYmIGEudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9PSBi
LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IKKyAgICAgICAgJiYgYS5v
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkID09IGIub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZAor
ICAgICAgICAmJiBhLnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLnNjcm9sbEJlaGF2aW9yRW5h
YmxlZAogICAgICAgICAmJiBhLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9PSBiLnNwcmlu
Z1RpbWluZ0Z1bmN0aW9uRW5hYmxlZAotICAgICAgICAmJiBhLmNvbnN0YW50UHJvcGVydGllc0Vu
YWJsZWQgPT0gYi5jb25zdGFudFByb3BlcnRpZXNFbmFibGVkCi0gICAgICAgICYmIGEuY29sb3JG
aWx0ZXJFbmFibGVkID09IGIuY29sb3JGaWx0ZXJFbmFibGVkCisjaWYgRU5BQkxFKFRFWFRfQVVU
T1NJWklORykKKyAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0
b3NpemluZ0VuYWJsZWQKKyNlbmRpZgorICAgICAgICAmJiBhLnVzZUxlZ2FjeUJhY2tncm91bmRT
aXplU2hvcnRoYW5kQmVoYXZpb3IgPT0gYi51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFu
ZEJlaGF2aW9yCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICAgICAgJiYgYS5h
dHRhY2htZW50RW5hYmxlZCA9PSBiLmF0dGFjaG1lbnRFbmFibGVkCiAjZW5kaWYKLSAgICAgICAg
JiYgYS5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgPT0gYi5kZWZlcnJlZENTU1BhcnNlckVuYWJs
ZWQKLSAgICAgICAgJiYgYS5zY3JvbGxCZWhhdmlvckVuYWJsZWQgPT0gYi5zY3JvbGxCZWhhdmlv
ckVuYWJsZWQKLSAgICAgICAgJiYgYS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJs
ZWQgPT0gYi5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQKLSAgICAgICAgJiYg
YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID09IGIuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bgotICAgICAgICAmJiBhLnVzZVN5c3RlbUFwcGVhcmFuY2UgPT0gYi51c2VTeXN0ZW1BcHBlYXJh
bmNlCi0gICAgICAgICYmIGEuYXNwZWN0UmF0aW9FbmFibGVkID09IGIuYXNwZWN0UmF0aW9FbmFi
bGVkCi0gICAgICAgICYmIGEub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLm92ZXJzY3Jv
bGxCZWhhdmlvckVuYWJsZWQ7CisgICAgOwogfQogCiBVUkwgQ1NTUGFyc2VyQ29udGV4dDo6Y29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw3ICs0MSw2IEBAIGNsYXNzIERvY3VtZW50Owogc3RydWN0IENTU1BhcnNlckNvbnRl
eHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotCiAgICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKIApAQCAtNTAsMzYgKzQ5LDM3IEBAIHB1YmxpYzoKICAgICBDU1NQYXJzZXJNb2RlIG1v
ZGUgeyBIVE1MU3RhbmRhcmRNb2RlIH07CiAgICAgT3B0aW9uYWw8U3R5bGVSdWxlVHlwZT4gZW5j
bG9zaW5nUnVsZVR5cGU7CiAgICAgYm9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07Ci0jaWYg
RU5BQkxFKFRFWFRfQVVUT1NJWklORykKLSAgICBib29sIHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7
IGZhbHNlIH07Ci0jZW5kaWYKKworICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gc3VwcG9y
dCBnZXRNYXRjaGVkQ1NTUnVsZXMuCisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgZmFsc2UgfTsKKworICAgIGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKKyAgICBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAgLy8gU2V0dGluZ3MuCisg
ICAgYm9vbCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgY29sb3JGaWx0
ZXJFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIGNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQg
eyBmYWxzZSB9OworICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsK
KyAgICBib29sIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSB7IHRydWUgfTsKKyAg
ICBib29sIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNlIH07CiAj
aWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKICAgICBib29sIGxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgZW5m
b3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIHsgdHJ1ZSB9OwotICAgIGJvb2wgdXNlTGVn
YWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciB7IGZhbHNlIH07CisgICAgYm9vbCBv
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIHNjcm9sbEJlaGF2
aW9yRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBzcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJs
ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBjb2xvckZpbHRlckVuYWJsZWQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShU
RVhUX0FVVE9TSVpJTkcpCisgICAgYm9vbCB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgeyBmYWxzZSB9
OworI2VuZGlmCisgICAgYm9vbCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2
aW9yIHsgZmFsc2UgfTsKKworICAgIC8vIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuCiAjaWYgRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBib29sIGF0dGFjaG1lbnRFbmFibGVkIHsgZmFs
c2UgfTsKICNlbmRpZgotICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2Ug
fTsKLSAgICBib29sIHNjcm9sbEJlaGF2aW9yRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBp
bmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQgeyBmYWxzZSB9OwotCi0gICAgYm9v
bCBvdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKLSAgICAKLSAgICAvLyBUaGlz
IGlzIG9ubHkgbmVlZGVkIHRvIHN1cHBvcnQgZ2V0TWF0Y2hlZENTU1J1bGVzLgotICAgIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgYm9vbCB1c2VT
eXN0ZW1BcHBlYXJhbmNlIHsgZmFsc2UgfTsKIAogICAgIFVSTCBjb21wbGV0ZVVSTChjb25zdCBT
dHJpbmcmIHVybCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQ29udGVudE9wYXF1ZSB7IGZhbHNlIH07
Ci0KLSAgICBib29sIGFzcGVjdFJhdGlvRW5hYmxlZCB7IGZhbHNlIH07CiB9OwogCiBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKQEAgLTkwLDYgKzkwLDggQEAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgcwogc3RydWN0IENTU1BhcnNlckNvbnRleHRIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBrZXkpCiAgICAgeworICAgICAgICAvLyBGSVhN
RTogQ29udmVydCB0aGlzIHRvIHVzZSBXVEY6Okhhc2hlci4KKwogICAgICAgICB1bnNpZ25lZCBo
YXNoID0gMDsKICAgICAgICAgaWYgKCFrZXkuYmFzZVVSTC5pc051bGwoKSkKICAgICAgICAgICAg
IGhhc2ggXj0gV1RGOjpVUkxIYXNoOjpoYXNoKGtleS5iYXNlVVJMKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAy
NzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyNiwxNSArMTcyNiwxNSBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lWkluZGV4KENTCiAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdl
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNoYWRvdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBib29sIGlzQm94
U2hhZG93UHJvcGVydHkpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU2hhZG93KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
LCBib29sIGlzQm94U2hhZG93UHJvcGVydHkpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgp
ID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAK
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZG8gewotICAgICAgICBpZiAoUmVmUHRyPENT
U1NoYWRvd1ZhbHVlPiBzaGFkb3dWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3cocmFuZ2UsIGNz
c1BhcnNlck1vZGUsIGlzQm94U2hhZG93UHJvcGVydHksIGlzQm94U2hhZG93UHJvcGVydHkpKQot
ICAgICAgICAgICAgc2hhZG93VmFsdWVMaXN0LT5hcHBlbmQoKnNoYWRvd1ZhbHVlKTsKKyAgICAg
ICAgaWYgKGF1dG8gc2hhZG93VmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KHJhbmdlLCBjb250
ZXh0LCBpc0JveFNoYWRvd1Byb3BlcnR5LCBpc0JveFNoYWRvd1Byb3BlcnR5KSkKKyAgICAgICAg
ICAgIHNoYWRvd1ZhbHVlTGlzdC0+YXBwZW5kKHNoYWRvd1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IHdoaWxl
IChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CkBAIC0xODEzLDE5ICsx
ODEzLDE5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVUZXh0RW1waGEKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUNhcmV0Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVD
YXJldENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIHJldHVybiBjb25z
dW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBjb25zdW1lQ29sb3Io
cmFuZ2UsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0
bGluZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0bGluZUNvbG9yKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
KQogewogICAgIC8vIEFsbG93IHRoZSBzcGVjaWFsIGZvY3VzIGNvbG9yIGV2ZW4gaW4gSFRNTCBT
dGFuZGFyZCBwYXJzaW5nIG1vZGUuCiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFu
Z2UpOwotICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAg
IHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogfQogCiBzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGluZVdpZHRoKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MpCkBAIC0yMjI4LDcgKzIyMjgsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lCiAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGlvbkxvbmdoYW5kPENTU1ZhbHVlVG9w
LCBDU1NWYWx1ZUJvdHRvbT4ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOwogfQogCi1zdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lUGFpbnRTdHJva2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVQYWludFN0cm9rZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0g
Q1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKQEAgLTIy
MzgsNyArMjIzOCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8K
ICAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUp
OworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQp
OwogICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAg
ICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHVybC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTIyNDcs
NyArMjI0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8KICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gdXJsOwogICAgIH0KLSAgICByZXR1cm4gY29uc3VtZUNv
bG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yKHJhbmdl
LCBjb250ZXh0KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdseXBoT3Jp
ZW50YXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKQEAgLTMyNTgsNyArMzI1OCw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVCYWNrZ3JvdW4KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1NpemU6CiAgICAgICAgIHJldHVybiBjb25zdW1lQmFja2dyb3VuZFNpemUocHJvcGVydHks
IHJhbmdlLCBjb250ZXh0Lm1vZGUpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQubW9kZSk7Cisg
ICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH07CkBAIC00MjQxLDcgKzQyNDEsNyBAQCBSZWZQdHI8Q1NT
VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93
czoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGl2ZUludGVnZXIobV9yYW5nZSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3I6Ci0gICAgICAgIHJldHVybiBjb25z
dW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICByZXR1cm4gY29uc3Vt
ZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uU2tpcDoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVUZXh0RGVjb3JhdGlvblNraXAobV9y
YW5nZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aDoKQEAgLTQy
NjEsMTIgKzQyNjEsMTIgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFy
cwogICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZENvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlM
aWdodGluZ0NvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxlQ29sb3I6Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAg
ICByZXR1cm4gY29uc3VtZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNhcmV0Q29sb3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvcihtX3Jh
bmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvciht
X3JhbmdlLCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICByZXR1cm4gY29uc3VtZUNvbG9y
KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBpblF1aXJrc01vZGUoKSk7CisgICAgICAgIHJldHVy
biBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0LCBpblF1aXJrc01vZGUoKSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklubGluZVN0YXJ0V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlcklubGluZUVuZFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCbG9j
a1N0YXJ0V2lkdGg6CkBAIC00Mjc4LDcgKzQyNzgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1By
b3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOiB7
CiAgICAgICAgIGJvb2wgYWxsb3dRdWlya3lDb2xvcnMgPSBpblF1aXJrc01vZGUoKQogICAgICAg
ICAgICAgJiYgKGN1cnJlbnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkIHx8IGN1cnJl
bnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlCb3JkZXJDb2xvcik7Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIGFsbG93UXVpcmt5Q29sb3JzKTsK
KyAgICAgICAgcmV0dXJuIGNvbnN1bWVDb2xvcihtX3JhbmdlLCBtX2NvbnRleHQsIGFsbG93UXVp
cmt5Q29sb3JzKTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRo
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6CkBAIC00Mjk0LDcgKzQyOTQs
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NTMi4x
LCBiYWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKICAgICBjYXNlIENTU1Byb3BlcnR5Qm94
U2hhZG93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6Ci0gICAgICAgIHJl
dHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eUJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNo
YWRvdyk7CisgICAgICAgIHJldHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dCwg
cHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlXZWJraXRCb3hTaGFkb3cpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CiAjaWYgRU5B
QkxFKEZJTFRFUlNfTEVWRUxfMikKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXI6CkBAIC00MzQyLDcgKzQzNDIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5
UGFyc2VyOjpwYXJzCiAgICAgICAgIHJldHVybiBjb25zdW1lUm90YXRlKG1fcmFuZ2UsIG1fY29u
dGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3Ryb2tlOgotICAgICAgICByZXR1cm4gY29uc3VtZVBhaW50U3Ryb2tlKG1fcmFuZ2UsIG1f
Y29udGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQYWludFN0cm9rZShtX3Jhbmdl
LCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uVmVydGlj
YWw6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgogICAg
ICAgICByZXR1cm4gY29uc3VtZUdseXBoT3JpZW50YXRpb24obV9yYW5nZSwgbV9jb250ZXh0Lm1v
ZGUsIHByb3BlcnR5KTsKQEAgLTUwOTMsNyArNTA5Myw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJz
ZXI6OmNvbnN1bWVCb3JkZXIoUmUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVDb2xv
cihtX3JhbmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVD
b2xvcihtX3JhbmdlLCBtX2NvbnRleHQpOwogICAgICAgICAgICAgaWYgKGNvbG9yKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwzNCArNjkwLDc4IEBAIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVVybChDU1MKICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSh1cmwudG9TdHJpbmcoKSwgQ1NTVW5pdFR5cGU6OkNT
U19VUkkpOwogfQogCi1zdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgdmFs
dWUsIGJvb2wgaXNQZXJjZW50YWdlKQorc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU9w
dGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGlzUGVy
Y2VudGFnZSkKKyAgICBpZiAoIWNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2Up
KQorICAgICAgICByZXR1cm4gMS4wOworCisgICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBj
b25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0
dXJuIGNsYW1wVG88ZG91YmxlPigqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKKworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVI
dWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNv
bnRleHQpCit7CisgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcocmFuZ2UsIGNv
bnRleHQubW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9y
YmlkKSkKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhh
bmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVlKTsKKworICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1
bWVOdW1iZXJSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gKm51bWJlcjsKKworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBkb3VibGUgbm9ybWFsaXplSHVlKGRvdWJsZSBo
dWUpCit7CisgICAgcmV0dXJuIHN0ZDo6Zm1vZChzdGQ6OmZtb2QoaHVlLCAzNjAuMCkgKyAzNjAu
MCwgMzYwLjApOworfQorCitlbnVtIGNsYXNzIFJHQkNvbXBvbmVudFR5cGUgeworICAgIE51bWJl
ciwKKyAgICBQZXJjZW50YWdlCit9OworCitzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVu
dChkb3VibGUgdmFsdWUsIFJHQkNvbXBvbmVudFR5cGUgY29tcG9uZW50VHlwZSkKK3sKKyAgICBp
ZiAoY29tcG9uZW50VHlwZSA9PSBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlKQogICAgICAg
ICB2YWx1ZSA9IHZhbHVlIC8gMTAwLjAgKiAyNTUuMDsKIAogICAgIHJldHVybiBjb252ZXJ0UHJl
c2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKIH0KIAotc3RhdGljIENvbG9yIHBh
cnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3N0YXRpYyBDb2xv
ciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmKQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgp
ID09IENTU1ZhbHVlUmdiIHx8IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVS
Z2JhKTsKICAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0gICAgYm9v
bCBpc1BlcmNlbnRhZ2UgPSBmYWxzZTsKLSAgICBkb3VibGUgY29sb3JQYXJhbWV0ZXI7Ci0gICAg
aWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKLSAgICAgICAgY29sb3JQ
YXJhbWV0ZXIgPSAqbnVtYmVyOwotICAgIGVsc2UgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQ
ZXJjZW50UmF3KGFyZ3MpKSB7Ci0gICAgICAgIGNvbG9yUGFyYW1ldGVyID0gKnBlcmNlbnQ7Ci0g
ICAgICAgIGlzUGVyY2VudGFnZSA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiB7
IH07Ci0KICAgICBlbnVtIGNsYXNzIENvbG9yU3ludGF4IHsKICAgICAgICAgQ29tbWFzLAogICAg
ICAgICBXaGl0ZXNwYWNlU2xhc2gsCiAgICAgfTsKIAorICAgIHN0cnVjdCBJbml0aWFsQ29tcG9u
ZW50IHsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICBSR0JDb21wb25lbnRUeXBlIHR5
cGU7CisgICAgfTsKKworICAgIGF1dG8gY29uc3VtZUluaXRpYWxDb21wb25lbnQgPSBbXShhdXRv
IGFyZ3MpIC0+IE9wdGlvbmFsPEluaXRpYWxDb21wb25lbnQ+IHsKKyAgICAgICAgaWYgKGF1dG8g
bnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiB7IHsg
Km51bWJlciwgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0gfTsKKyAgICAgICAgaWYgKGF1dG8g
cGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQorICAgICAgICAgICAgcmV0dXJuIHsg
eyAqcGVyY2VudCwgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9IH07CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgfTsKKworICAgIGF1dG8gY29uc3VtZUNvbXBvbmVudCA9
IFtdKGF1dG8gYXJncywgYXV0byBjb21wb25lbnRUeXBlKSB7CisgICAgICAgIHN3aXRjaCAoY29t
cG9uZW50VHlwZSkgeworICAgICAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2U6
CisgICAgICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CisgICAgICAgIGNh
c2UgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVO
dW1iZXJSYXcoYXJncyk7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgQ29sb3JTeW50YXggc3lu
dGF4ID0gQ29sb3JTeW50YXg6OkNvbW1hczsKICAgICBhdXRvIGNvbnN1bWVTZXBhcmF0b3IgPSBb
Jl0gewogICAgICAgICBpZiAoc3ludGF4ID09IENvbG9yU3ludGF4OjpDb21tYXMpCkBAIC03MjYs
MjYgKzc3MCwyNSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH07CiAKLSAgICB1aW50OF90IGNvbG9yQXJyYXlbM107
Ci0gICAgY29sb3JBcnJheVswXSA9IGNsYW1wUkdCQ29tcG9uZW50KGNvbG9yUGFyYW1ldGVyLCBp
c1BlcmNlbnRhZ2UpOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAg
IGlmIChpID09IDEpCi0gICAgICAgICAgICBzeW50YXggPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdX
aGl0ZXNwYWNlKGFyZ3MpID8gQ29sb3JTeW50YXg6OkNvbW1hcyA6IENvbG9yU3ludGF4OjpXaGl0
ZXNwYWNlU2xhc2g7Ci0gICAgICAgIGVsc2UgaWYgKCFjb25zdW1lU2VwYXJhdG9yKCkpCi0gICAg
ICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gaW5pdGlhbENvbXBvbmVudCA9IGNvbnN1bWVJ
bml0aWFsQ29tcG9uZW50KGFyZ3MpOworICAgIGlmICghaW5pdGlhbENvbXBvbmVudCkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBpZiAoaXNQZXJjZW50YWdlKSB7Ci0gICAgICAgICAg
ICBhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKLSAgICAgICAgICAgIGlm
ICghcGVyY2VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgY29s
b3JBcnJheVtpXSA9IGNsYW1wUkdCQ29tcG9uZW50KCpwZXJjZW50LCB0cnVlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdz
KTsKLSAgICAgICAgICAgIGlmICghbnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgICAgICAgICBjb2xvckFycmF5W2ldID0gY2xhbXBSR0JDb21wb25lbnQoKm51bWJlciwg
ZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQorICAgIGF1dG8gY29tcG9uZW50VHlwZSA9IGluaXRp
YWxDb21wb25lbnQtPnR5cGU7CisgICAgYXV0byByZWQgPSBpbml0aWFsQ29tcG9uZW50LT52YWx1
ZTsKKworICAgIHN5bnRheCA9IGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykg
PyBDb2xvclN5bnRheDo6Q29tbWFzIDogQ29sb3JTeW50YXg6OldoaXRlc3BhY2VTbGFzaDsKKyAg
ICAKKyAgICBhdXRvIGdyZWVuID0gY29uc3VtZUNvbXBvbmVudChhcmdzLCBjb21wb25lbnRUeXBl
KTsKKyAgICBpZiAoIWdyZWVuKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKCFjb25z
dW1lU2VwYXJhdG9yKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGJsdWUgPSBj
b25zdW1lQ29tcG9uZW50KGFyZ3MsIGNvbXBvbmVudFR5cGUpOworICAgIGlmICghYmx1ZSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIEhpc3RvcmljYWxseSwgYWxwaGEgd2FzIG9ubHkg
cGFyc2VkIGZvciByZ2JhKCksIGJ1dCBjc3MtY29sb3ItNCBzcGVjaWZpZXMgdGhhdCByZ2JhKCkg
aXMgYSBzaW1wbGUgYWxpYXMgZm9yIHJnYigpLgogICAgIGF1dG8gY29uc3VtZUFscGhhU2VwYXJh
dG9yID0gWyZdIHsKQEAgLTc1NSw0OSArNzk4LDQ4IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBh
cmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAgcmV0dXJuIGNvbnN1bWVTbGFzaEluY2x1ZGluZ1do
aXRlc3BhY2UoYXJncyk7CiAgICAgfTsKIAotICAgIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQgPSAy
NTU7CisgICAgZG91YmxlIGFscGhhID0gMTsKICAgICBpZiAoY29uc3VtZUFscGhhU2VwYXJhdG9y
KCkpIHsKLSAgICAgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVk
QnkxMDBSYXcoYXJncyk7Ci0gICAgICAgIGlmICghYWxwaGEpCisgICAgICAgIGF1dG8gYWxwaGFD
b21wb25lbnQgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwor
ICAgICAgICBpZiAoIWFscGhhQ29tcG9uZW50KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgYWxwaGFDb21wb25lbnQgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KCphbHBo
YSk7CisgICAgICAgIGFscGhhID0gKmFscGhhQ29tcG9uZW50OwogICAgIH0KIAogICAgIGlmICgh
YXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIFNSR0JBPHVp
bnQ4X3Q+IHsgY29sb3JBcnJheVswXSwgY29sb3JBcnJheVsxXSwgY29sb3JBcnJheVsyXSwgYWxw
aGFDb21wb25lbnQgfTsKKyAgICByZXR1cm4gU1JHQkE8dWludDhfdD4geyBjbGFtcFJHQkNvbXBv
bmVudChyZWQsIGNvbXBvbmVudFR5cGUpLCBjbGFtcFJHQkNvbXBvbmVudCgqZ3JlZW4sIGNvbXBv
bmVudFR5cGUpLCBjbGFtcFJHQkNvbXBvbmVudCgqYmx1ZSwgY29tcG9uZW50VHlwZSksIGNvbnZl
cnRGbG9hdEFscGhhVG88dWludDhfdD4oYWxwaGEpIH07CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJz
ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVIc2wgfHwgcmFu
Z2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUhzbGEpOwogICAgIGF1dG8gYXJncyA9
IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKLSAgICBkb3VibGUgaHVlQW5nbGVJbkRlZ3JlZXM7
Ci0gICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcoYXJncywgY3NzUGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKLSAg
ICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3Jl
ZXMoYW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7Ci0gICAgZWxzZSBpZiAoYXV0byBudW1iZXIg
PSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9ICpu
dW1iZXI7Ci0gICAgZWxzZQorICAgIGF1dG8gaHVlID0gY29uc3VtZUh1ZShhcmdzLCBjb250ZXh0
KTsKKyAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGRvdWJsZSBjb2xv
ckFycmF5WzNdOwotICAgIGNvbG9yQXJyYXlbMF0gPSBmbW9kKGZtb2QoaHVlQW5nbGVJbkRlZ3Jl
ZXMsIDM2MC4wKSArIDM2MC4wLCAzNjAuMCkgLyAzNjAuMDsKLQogICAgIGJvb2wgcmVxdWlyZXND
b21tYXMgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7IGkrKykgewotICAgICAg
ICBpZiAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkgewotICAgICAgICAg
ICAgaWYgKGkgIT0gMSAmJiAhcmVxdWlyZXNDb21tYXMpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgICAgIHJlcXVpcmVzQ29tbWFzID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNl
IGlmIChyZXF1aXJlc0NvbW1hcyB8fCBhcmdzLmF0RW5kKCkgfHwgKCZhcmdzLnBlZWsoKSAtIDEp
LT50eXBlKCkgIT0gV2hpdGVzcGFjZVRva2VuKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7Ci0gICAgICAgIGlm
ICghcGVyY2VudCkKKyAgICBpZiAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdz
KSkKKyAgICAgICAgcmVxdWlyZXNDb21tYXMgPSB0cnVlOworICAgIGVsc2UgaWYgKGFyZ3MuYXRF
bmQoKSB8fCAoJmFyZ3MucGVlaygpIC0gMSktPnR5cGUoKSAhPSBXaGl0ZXNwYWNlVG9rZW4pCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHNhdHVyYXRpb24gPSBjb25zdW1lUGVyY2Vu
dFJhdyhhcmdzKTsKKyAgICBpZiAoIXNhdHVyYXRpb24pCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBpZiAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkgeworICAgICAg
ICBpZiAoIXJlcXVpcmVzQ29tbWFzKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAg
Y29sb3JBcnJheVtpXSA9IGNsYW1wVG88ZG91YmxlPigqcGVyY2VudCwgMC4wLCAxMDAuMCkgLyAx
MDAuMDsgLy8gTmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAuCi0gICAgfQorICAg
IH0gZWxzZSBpZiAocmVxdWlyZXNDb21tYXMgfHwgYXJncy5hdEVuZCgpIHx8ICgmYXJncy5wZWVr
KCkgLSAxKS0+dHlwZSgpICE9IFdoaXRlc3BhY2VUb2tlbikKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CisgICAgaWYg
KCFsaWdodG5lc3MpCisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBib29sIGNvbW1hQ29uc3Vt
ZWQgPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwogICAgIGJvb2wgc2xh
c2hDb25zdW1lZCA9IGNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CkBAIC04
MDksMTQ5ICs4NTEsMTMxIEBAIHN0YXRpYyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFy
c2UKICAgICAgICAgYXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnRE
aXZpZGVkQnkxMDBSYXcoYXJncyk7CiAgICAgICAgIGlmICghYWxwaGFQYXJhbWV0ZXIpCiAgICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBhbHBoYSA9IGNsYW1wVG88ZG91YmxlPigqYWxw
aGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKKyAgICAgICAgYWxwaGEgPSAqYWxwaGFQYXJhbWV0ZXI7
CiAgICAgfQogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICByZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihIU0xBPGZsb2F0PiB7IHN0
YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9y
QXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0
PGZsb2F0PihhbHBoYSkgfSk7CisgICAgYXV0byBub3JtYWxpemVkSHVlID0gbm9ybWFsaXplSHVl
KCpodWUpOworICAgIGF1dG8gbm9ybWFsaXplZFNhdHVyYXRpb24gPSBjbGFtcFRvPGRvdWJsZT4o
KnNhdHVyYXRpb24sIDAuMCwgMTAwLjApOworICAgIGF1dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9
IGNsYW1wVG88ZG91YmxlPigqbGlnaHRuZXNzLCAwLjAsIDEwMC4wKTsKKyAgICBhdXRvIG5vcm1h
bGl6ZWRBbHBoYSA9IGNsYW1wVG88ZG91YmxlPihhbHBoYSwgMC4wLCAxLjApOworCisgICAgcmV0
dXJuIGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oSFNMQTxmbG9hdD4geyBzdGF0aWNfY2Fz
dDxmbG9hdD4obm9ybWFsaXplZEh1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkU2F0
dXJhdGlvbiksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkTGlnaHRuZXNzKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRBbHBoYSkgfSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxm
bG9hdD4gcGFyc2VPcHRpb25hbEFscGhhKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorc3Ry
dWN0IFdoaXRlbmVzc0JsYWNrbmVzcyB7CisgICAgZG91YmxlIHdoaXRlbmVzczsKKyAgICBkb3Vi
bGUgYmxhY2tuZXNzOworfTsKK3N0YXRpYyBXaGl0ZW5lc3NCbGFja25lc3Mgbm9ybWFsaXplV2hp
dGVuZXNzQmxhY2tuZXNzKGRvdWJsZSB3aGl0ZW5lc3MsIGRvdWJsZSBibGFja25lc3MpCiB7Ci0g
ICAgaWYgKCFjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkKLSAgICAgICAg
cmV0dXJuIDEuMGY7CisgICAgV2hpdGVuZXNzQmxhY2tuZXNzIHJlc3VsdDsKIAotICAgIGlmIChh
dXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFJh
dyhyYW5nZSkpCi0gICAgICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PigqYWxwaGFQYXJhbWV0ZXIs
IDAuMCwgMS4wKTsKKyAgICAvLyAgIFZhbHVlcyBvdXRzaWRlIG9mIHRoZXNlIHJhbmdlcyBhcmUg
bm90IGludmFsaWQsIGJ1dCBhcmUgY2xhbXBlZCB0byB0aGUKKyAgICAvLyAgIHJhbmdlcyBkZWZp
bmVkIGhlcmUgYXQgY29tcHV0ZWQtdmFsdWUgdGltZS4KKyAgICByZXN1bHQud2hpdGVuZXNzID0g
Y2xhbXBUbzxkb3VibGU+KHdoaXRlbmVzcywgMCwgMTAwKTsKKyAgICByZXN1bHQuYmxhY2tuZXNz
ID0gY2xhbXBUbzxkb3VibGU+KGJsYWNrbmVzcywgMCwgMTAwKTsKIAotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgLy8gICBJZiB0aGUgc3VtIG9mIHRoZXNlIHR3byBhcmd1bWVudHMgaXMg
Z3JlYXRlciB0aGFuIDEwMCUsIHRoZW4gYXQKKyAgICAvLyAgIGNvbXB1dGVkLXZhbHVlIHRpbWUg
dGhleSBhcmUgZnVydGhlciBub3JtYWxpemVkIHRvIGFkZCB1cCB0byAxMDAlLCB3aXRoCisgICAg
Ly8gICB0aGUgc2FtZSByZWxhdGl2ZSByYXRpby4KKyAgICBpZiAoYXV0byBzdW0gPSByZXN1bHQu
d2hpdGVuZXNzICsgcmVzdWx0LmJsYWNrbmVzczsgc3VtID49IDEwMCkgeworICAgICAgICByZXN1
bHQud2hpdGVuZXNzICo9IDEwMC4wIC8gc3VtOworICAgICAgICByZXN1bHQuYmxhY2tuZXNzICo9
IDEwMC4wIC8gc3VtOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBD
b2xvciBwYXJzZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBDb2xvciBwYXJzZUhXQlBhcmFtZXRlcnMo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRl
eHQpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVI
d2IpOwogICAgIGF1dG8gYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKLSAgICBkb3Vi
bGUgaHVlQW5nbGVJbkRlZ3JlZXM7Ci0gICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVS
YXcoYXJncywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1pl
cm9RdWlyazo6Rm9yYmlkKSkKLSAgICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7Ci0gICAg
ZWxzZSBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQotICAgICAgICBo
dWVBbmdsZUluRGVncmVlcyA9ICpudW1iZXI7Ci0gICAgZWxzZQorICAgIGF1dG8gaHVlID0gY29u
c3VtZUh1ZShhcmdzLCBjb250ZXh0KTsKKyAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIGF1dG8gd2hpdGVuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncywgVmFsdWVS
YW5nZUFsbCk7CisgICAgYXV0byB3aGl0ZW5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsK
ICAgICBpZiAoIXdoaXRlbmVzcykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYmxh
Y2tuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgYXV0
byBibGFja25lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKICAgICBpZiAoIWJsYWNrbmVz
cykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYWxwaGEgPSBwYXJzZU9wdGlvbmFs
QWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhhKGFyZ3Mp
OwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoIWFyZ3Mu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIC8vIE5vcm1hbGl6ZSBodWUuCi0K
LSAgICBodWVBbmdsZUluRGVncmVlcyA9IHN0ZDo6Zm1vZChodWVBbmdsZUluRGVncmVlcywgMzYw
LjApOwotICAgIGlmIChodWVBbmdsZUluRGVncmVlcyA8IDAuMCkKLSAgICAgICAgaHVlQW5nbGVJ
bkRlZ3JlZXMgKz0gMzYwLjA7Ci0gICAgCi0gICAgLy8gQ29udmVydCBhbmdsZSB0byBub3JtYWxp
emVkIGZvcm0gZnJvbSAwIC0gMS4KLSAgICBhdXRvIG5vcm1hbGl6ZWRIdWUgPSBodWVBbmdsZUlu
RGVncmVlcyAvIDM2MC4wOwotCi0gICAgLy8gTm9ybWFsaXplIHdoaXRlbmVzcy9ibGFja25lc3Mu
Ci0KLSAgICAvLyAgIFZhbHVlcyBvdXRzaWRlIG9mIHRoZXNlIHJhbmdlcyBhcmUgbm90IGludmFs
aWQsIGJ1dCBhcmUgY2xhbXBlZCB0byB0aGUKLSAgICAvLyAgIHJhbmdlcyBkZWZpbmVkIGhlcmUg
YXQgY29tcHV0ZWQtdmFsdWUgdGltZS4KLSAgICBhdXRvIG5vbWFsaXplZFdoaXRlbmVzcyA9IGNs
YW1wVG88ZG91YmxlPigqd2hpdGVuZXNzLCAwLCAxMDApOwotICAgIGF1dG8gbm9tYWxpemVkQmxh
Y2tuZXNzID0gY2xhbXBUbzxkb3VibGU+KCpibGFja25lc3MsIDAsIDEwMCk7Ci0KLSAgICAvLyAg
IElmIHRoZSBzdW0gb2YgdGhlc2UgdHdvIGFyZ3VtZW50cyBpcyBncmVhdGVyIHRoYW4gMTAwJSwg
dGhlbiBhdAotICAgIC8vICAgY29tcHV0ZWQtdmFsdWUgdGltZSB0aGV5IGFyZSBmdXJ0aGVyIG5v
cm1hbGl6ZWQgdG8gYWRkIHVwIHRvIDEwMCUsIHdpdGgKLSAgICAvLyAgIHRoZSBzYW1lIHJlbGF0
aXZlIHJhdGlvLgotICAgIGlmIChhdXRvIHN1bSA9IG5vbWFsaXplZFdoaXRlbmVzcyArIG5vbWFs
aXplZEJsYWNrbmVzczsgc3VtID49IDEwMCkgewotICAgICAgICBub21hbGl6ZWRXaGl0ZW5lc3Mg
Kj0gMTAwLjAgLyBzdW07Ci0gICAgICAgIG5vbWFsaXplZEJsYWNrbmVzcyAqPSAxMDAuMCAvIHN1
bTsKLSAgICB9Ci0KLSAgICAvLyBDb252ZXJ0IHRvIG5vcm1hbGl6ZWQgZm9ybSBmcm9tIDAgLSAx
LgotICAgIG5vbWFsaXplZFdoaXRlbmVzcyAvPSAxMDAuMDsKLSAgICBub21hbGl6ZWRCbGFja25l
c3MgLz0gMTAwLjA7CisgICAgYXV0byBub3JtYWxpemVkSHVlID0gbm9ybWFsaXplSHVlKCpodWUp
OworICAgIGF1dG8gW25vcm1hbGl6ZWRXaGl0bmVzcywgbm9ybWFsaXplZEJsYWNrbmVzc10gPSBu
b3JtYWxpemVXaGl0ZW5lc3NCbGFja25lc3MoKndoaXRlbmVzcywgKmJsYWNrbmVzcyk7CiAKLSAg
ICByZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihIV0JBPGZsb2F0PiB7IHN0YXRp
Y19jYXN0PGZsb2F0Pihub3JtYWxpemVkSHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vbWFsaXpl
ZFdoaXRlbmVzcyksIHN0YXRpY19jYXN0PGZsb2F0Pihub21hbGl6ZWRCbGFja25lc3MpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9KTsKKyAgICByZXR1cm4gY29udmVydENvbG9yPFNSR0JB
PHVpbnQ4X3Q+PihIV0JBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkSHVl
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRXaGl0bmVzcyksIHN0YXRpY19jYXN0PGZs
b2F0Pihub3JtYWxpemVkQmxhY2tuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfSk7
CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCitzdGF0aWMgQ29sb3IgcGFyc2VMYWJQYXJhbWV0ZXJzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JikKIHsKICAgICBBU1NFUlQocmFu
Z2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxhYik7CiAgICAgYXV0byBhcmdzID0g
Y29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKIAotICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBl
cmNlbnRSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25z
dW1lUGVyY2VudFJhdyhhcmdzKTsKICAgICBpZiAoIWxpZ2h0bmVzcykKICAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJh
bmdlQWxsKTsKKyAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CiAgICAg
aWYgKCFhVmFsdWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGJWYWx1ZSA9IGNv
bnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgYXV0byBiVmFsdWUgPSBj
b25zdW1lTnVtYmVyUmF3KGFyZ3MpOwogICAgIGlmICghYlZhbHVlKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgYXV0byBhbHBoYSA9IHBhcnNlT3B0aW9uYWxBbHBoYShhcmdzKTsKKyAgICBh
dXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7CiAgICAgaWYgKCFhbHBoYSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4o
KmxpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqYVZhbHVlKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KCpiVmFsdWUpLCAqYWxwaGEgfTsKKyAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRpY19j
YXN0PGZsb2F0PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphVmFsdWUpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oKmJWYWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CiB9
CiAKLXN0YXRpYyBDb2xvciBwYXJzZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBDb2xvciBwYXJzZUxD
SFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkg
PT0gQ1NTVmFsdWVMY2gpOwogICAgIGF1dG8gYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7
CiAKLSAgICBhdXRvIGxpZ2h0bmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MsIFZhbHVlUmFu
Z2VBbGwpOworICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CiAg
ICAgaWYgKCFsaWdodG5lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGNocm9t
YVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKLSAgICBpZiAo
IWNocm9tYVZhbHVlKQorICAgIGF1dG8gY2hyb21hID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsK
KyAgICBpZiAoIWNocm9tYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGRvdWJsZSBodWVB
bmdsZUluRGVncmVlczsKLSAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJhdyhhcmdz
LCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJr
OjpGb3JiaWQpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9IENTU1ByaW1pdGl2ZVZhbHVl
Ojpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVlKTsKLSAgICBlbHNlIGlm
IChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCkpCi0g
ICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gKm51bWJlcjsKLSAgICBlbHNlCisgICAgYXV0byBo
dWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGlmICghaHVlKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSBmbW9kKGh1ZUFuZ2xlSW5EZWdy
ZWVzLCAzNjAuMCk7Ci0gICAgaWYgKGh1ZUFuZ2xlSW5EZWdyZWVzIDwgMC4wKQotICAgICAgICBo
dWVBbmdsZUluRGVncmVlcyArPSAzNjAuMDsKLQotICAgIGF1dG8gYWxwaGEgPSBwYXJzZU9wdGlv
bmFsQWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhhKGFy
Z3MpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoIWFy
Z3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBjb252ZXJ0Q29s
b3I8TGFiPGZsb2F0Pj4oTENIQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oKmxpZ2h0bmVz
cyksIHN0YXRpY19jYXN0PGZsb2F0PigqY2hyb21hVmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
aHVlQW5nbGVJbkRlZ3JlZXMpLCAqYWxwaGEgfSk7CisgICAgYXV0byBub3JtYWxpemVkSHVlID0g
bm9ybWFsaXplSHVlKCpodWUpOworCisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+
PihMQ0hBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KCpjaHJvbWEpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZEh1ZSksIHN0
YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xv
clR5cGU+Ci1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgYXJncykKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cGVzKENTU1BhcnNlclRva2VuUmFuZ2Um
IGFyZ3MpCiB7CiAgICAgQVNTRVJUKGFyZ3MucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVBOThSZ2Ig
fHwgYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZURpc3BsYXlQMyB8fCBhcmdzLnBlZWsoKS5p
ZCgpID09IENTU1ZhbHVlUHJvcGhvdG9SZ2IgfHwgYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1
ZVJlYzIwMjAgfHwgYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZVNSR0IpOwogICAgIGNvbnN1
bWVJZGVudFJhdyhhcmdzKTsKQEAgLTk2NCwxMSArOTg4LDExIEBAIHN0YXRpYyBDb2xvciBwYXJz
ZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXAKICAgICAgICAgY2hhbm5lbHNbaV0gPSAqdmFsdWU7CiAg
ICAgfQogCi0gICAgYXV0byBhbHBoYSA9IHBhcnNlT3B0aW9uYWxBbHBoYShhcmdzKTsKKyAgICBh
dXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7CiAgICAgaWYgKCFhbHBoYSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBDb2xvclR5cGUgeyBjbGFtcFRvPGZs
b2F0PihjaGFubmVsc1swXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1sxXSwg
MC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1syXSwgMC4wLCAxLjApLCAqYWxwaGEg
fTsKKyAgICByZXR1cm4gQ29sb3JUeXBlIHsgY2xhbXBUbzxmbG9hdD4oY2hhbm5lbHNbMF0sIDAu
MCwgMS4wKSwgY2xhbXBUbzxmbG9hdD4oY2hhbm5lbHNbMV0sIDAuMCwgMS4wKSwgY2xhbXBUbzxm
bG9hdD4oY2hhbm5lbHNbMl0sIDAuMCwgMS4wKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkg
fTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvckxhYlBhcmFtZXRlcnMo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncykKQEAgLTk3OCwyNyArMTAwMiwyNyBAQCBzdGF0aWMg
Q29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyCiAKICAgICBkb3VibGUgY2hhbm5lbHNb
M10gPSB7IDAsIDAsIDAgfTsKICAgICBbJl0gewotICAgICAgICBhdXRvIGxpZ2h0bmVzcyA9IGNv
bnN1bWVQZXJjZW50UmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRvIGxpZ2h0
bmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgICAgICBpZiAoIWxpZ2h0bmVzcykK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hhbm5lbHNbMF0gPSAqbGlnaHRuZXNzOwog
Ci0gICAgICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdl
QWxsKTsKKyAgICAgICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOwogICAg
ICAgICBpZiAoIWFWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hhbm5lbHNb
MV0gPSAqYVZhbHVlOwogCi0gICAgICAgIGF1dG8gYlZhbHVlID0gY29uc3VtZU51bWJlclJhdyhh
cmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byBiVmFsdWUgPSBjb25zdW1lTnVtYmVy
UmF3KGFyZ3MpOwogICAgICAgICBpZiAoIWJWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgY2hhbm5lbHNbMl0gPSAqYlZhbHVlOwogICAgIH0oKTsKIAotICAgIGF1dG8gYWxwaGEg
PSBwYXJzZU9wdGlvbmFsQWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRp
b25hbEFscGhhKGFyZ3MpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1swXSks
IHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFu
bmVsc1syXSksICphbHBoYSB9OworICAgIHJldHVybiBMYWI8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNoYW5uZWxzWzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkg
fTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcmFtZXRlcnMo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncykKQEAgLTEwMDgsMjcgKzEwMzIsMjcgQEAgc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcgogCiAgICAgZG91YmxlIGNoYW5uZWxz
WzNdID0geyAwLCAwLCAwIH07CiAgICAgWyZdIHsKLSAgICAgICAgYXV0byB4ID0gY29uc3VtZU51
bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byB4ID0gY29uc3VtZU51
bWJlclJhdyhhcmdzKTsKICAgICAgICAgaWYgKCF4KQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjaGFubmVsc1swXSA9ICp4OwogCi0gICAgICAgIGF1dG8geSA9IGNvbnN1bWVOdW1iZXJS
YXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8geSA9IGNvbnN1bWVOdW1iZXJS
YXcoYXJncyk7CiAgICAgICAgIGlmICgheSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y2hhbm5lbHNbMV0gPSAqeTsKIAotICAgICAgICBhdXRvIHogPSBjb25zdW1lTnVtYmVyUmF3KGFy
Z3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRvIHogPSBjb25zdW1lTnVtYmVyUmF3KGFy
Z3MpOwogICAgICAgICBpZiAoIXopCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoYW5u
ZWxzWzJdID0gKno7CiAgICAgfSgpOwogCi0gICAgYXV0byBhbHBoYSA9IHBhcnNlT3B0aW9uYWxB
bHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7
CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBYWVpB
PGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzBd
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNo
YW5uZWxzWzJdKSwgKmFscGhhIH07CisgICAgcmV0dXJuIFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6
OkQ1MD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMF0pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY2hhbm5lbHNbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMl0pLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oKmFscGhhKSB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0
aW9uUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTExMTEsNyArMTEz
NSw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcGFyc2VIZXgKICAgICByZXR1
cm4gKnJlc3VsdDsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdl
IGNvbG9yUmFuZ2UgPSByYW5nZTsKICAgICBDU1NWYWx1ZUlEIGZ1bmN0aW9uSWQgPSByYW5nZS5w
ZWVrKCkuZnVuY3Rpb25JZCgpOwpAQCAtMTExOSwyMCArMTE0MywyMCBAQCBzdGF0aWMgQ29sb3Ig
cGFyc2VDb2xvckZ1bmN0aW9uKENTU1BhcnNlCiAgICAgc3dpdGNoIChmdW5jdGlvbklkKSB7CiAg
ICAgY2FzZSBDU1NWYWx1ZVJnYjoKICAgICBjYXNlIENTU1ZhbHVlUmdiYToKLSAgICAgICAgY29s
b3IgPSBwYXJzZVJHQlBhcmFtZXRlcnMoY29sb3JSYW5nZSk7CisgICAgICAgIGNvbG9yID0gcGFy
c2VSR0JQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENTU1ZhbHVlSHNsOgogICAgIGNhc2UgQ1NTVmFsdWVIc2xhOgotICAgICAgICBjb2xv
ciA9IHBhcnNlSFNMUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAg
ICAgY29sb3IgPSBwYXJzZUhTTFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY29udGV4dCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVId2I6Ci0gICAgICAgIGNvbG9yID0gcGFyc2VI
V0JQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgICAgICBjb2xvciA9
IHBhcnNlSFdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDU1NWYWx1ZUxhYjoKLSAgICAgICAgY29sb3IgPSBwYXJzZUxhYlBhcmFtZXRl
cnMoY29sb3JSYW5nZSk7CisgICAgICAgIGNvbG9yID0gcGFyc2VMYWJQYXJhbWV0ZXJzKGNvbG9y
UmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlTGNoOgot
ICAgICAgICBjb2xvciA9IHBhcnNlTENIUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjc3NQYXJzZXJN
b2RlKTsKKyAgICAgICAgY29sb3IgPSBwYXJzZUxDSFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY29u
dGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVDb2xvcjoKICAgICAgICAg
Y29sb3IgPSBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbG9yUmFuZ2UpOwpAQCAtMTE0
NSw3ICsxMTY5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZQog
ICAgIHJldHVybiBjb2xvcjsKIH0KIAotQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorQ29s
b3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBDb2xvciByZXN1bHQ7CiAgICAg
YXV0byBrZXl3b3JkID0gcmFuZ2UucGVlaygpLmlkKCk7CkBAIC0xMTU0LDcgKzExNzgsNyBAQCBD
b2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRvCiAgICAgICAgIC8vICAgICAg
ICBGb3Igbm93LCB3ZSBkZXRlY3QgdGhlIHN5c3RlbSBjb2xvciwgYnV0IHRoZW4gaW50ZW50aW9u
YWxseSBmYWlsIHBhcnNpbmcuCiAgICAgICAgIGlmIChTdHlsZUNvbG9yOjppc1N5c3RlbUNvbG9y
KGtleXdvcmQpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgaWYgKCFpc1ZhbHVl
QWxsb3dlZEluTW9kZShrZXl3b3JkLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgaWYgKCFpc1Zh
bHVlQWxsb3dlZEluTW9kZShrZXl3b3JkLCBjb250ZXh0Lm1vZGUpKQogICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgcmVzdWx0ID0gU3R5bGVDb2xvcjo6Y29sb3JGcm9tS2V5d29yZChr
ZXl3b3JkLCB7IH0pOwogICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgp
OwpAQCAtMTE2Myw3ICsxMTg3LDcgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQ
YXJzZXJUbwogICAgIGlmIChhdXRvIHBhcnNlZENvbG9yID0gcGFyc2VIZXhDb2xvcihyYW5nZSwg
ZmFsc2UpKQogICAgICAgICByZXN1bHQgPSAqcGFyc2VkQ29sb3I7CiAgICAgZWxzZQotICAgICAg
ICByZXN1bHQgPSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAg
ICAgICByZXN1bHQgPSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNvbnRleHQpOwogCiAgICAg
aWYgKCFyYW5nZS5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTE3MSwxMSArMTE5
NSwxMSBAQCBDb2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRvCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3Io
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwg
Ym9vbCBhY2NlcHRRdWlya3lDb2xvcnMpCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMpCiB7CiAgICAgYXV0byBrZXl3b3Jk
ID0gcmFuZ2UucGVlaygpLmlkKCk7CiAgICAgaWYgKFN0eWxlQ29sb3I6OmlzQ29sb3JLZXl3b3Jk
KGtleXdvcmQpKSB7Ci0gICAgICAgIGlmICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUoa2V5d29yZCwg
Y3NzUGFyc2VyTW9kZSkpCisgICAgICAgIGlmICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUoa2V5d29y
ZCwgY29udGV4dC5tb2RlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICB9CkBAIC0xMTgzLDcgKzEyMDcsNyBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVDb2xvcihDCiAgICAgaWYgKGF1dG8gcGFy
c2VkQ29sb3IgPSBwYXJzZUhleENvbG9yKHJhbmdlLCBhY2NlcHRRdWlya3lDb2xvcnMpKQogICAg
ICAgICBjb2xvciA9ICpwYXJzZWRDb2xvcjsKICAgICBlbHNlIHsKLSAgICAgICAgY29sb3IgPSBw
YXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgICAgICBjb2xvciA9
IHBhcnNlQ29sb3JGdW5jdGlvbihyYW5nZSwgY29udGV4dCk7CiAgICAgICAgIGlmICghY29sb3Iu
aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMTQxMywx
NCArMTQzNywxNCBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lCiB9
CiAKIC8vIFVzZWQgdG8gcGFyc2UgY29sb3JzIGZvciAtd2Via2l0LWdyYWRpZW50KC4uLikuCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50
U3RvcENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFy
c2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVEZXByZWNh
dGVkR3JhZGllbnRTdG9wQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoYXJncy5wZWVrKCkuaWQoKSA9PSBD
U1NWYWx1ZUN1cnJlbnRjb2xvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IGNvbnN1bWVDb2xvcihhcmdzLCBjc3NQYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gY29uc3VtZUNv
bG9yKGFyZ3MsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgYm9vbCBjb25zdW1lRGVwcmVjYXRlZEdy
YWRpZW50Q29sb3JTdG9wKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NHcmFkaWVudENv
bG9yU3RvcCYgc3RvcCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIGJvb2wg
Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
IGNvbnRleHQpCiB7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklk
KCk7CiAgICAgaWYgKGlkICE9IENTU1ZhbHVlRnJvbSAmJiBpZCAhPSBDU1NWYWx1ZVRvICYmIGlk
ICE9IENTU1ZhbHVlQ29sb3JTdG9wKQpAQCAtMTQ0MiwxMSArMTQ2NiwxMSBAQCBzdGF0aWMgYm9v
bCBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sCiAgICAgfQogCiAgICAgc3RvcC5wb3NpdGlv
biA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocG9zaXRpb24sIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKTsKLSAgICBzdG9wLmNvbG9yID0gY29uc3VtZURlcHJlY2F0ZWRH
cmFkaWVudFN0b3BDb2xvcihhcmdzLCBjc3NQYXJzZXJNb2RlKTsKKyAgICBzdG9wLmNvbG9yID0g
Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcihhcmdzLCBjb250ZXh0KTsKICAgICBy
ZXR1cm4gc3RvcC5jb2xvciAmJiBhcmdzLmF0RW5kKCk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJn
cywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIFJlZlB0cjxDU1NHcmFkaWVudFZh
bHVlPiByZXN1bHQ7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IGFyZ3MuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKS5pZCgpOwpAQCAtMTQ5OSw3ICsxNTIzLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gY29uc3VtZURlcHJlY2F0ZQogCiAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcDsK
ICAgICB3aGlsZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkgewotICAg
ICAgICBpZiAoIWNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoYXJncywgc3RvcCwg
Y3NzUGFyc2VyTW9kZSkpCisgICAgICAgIGlmICghY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENv
bG9yU3RvcChhcmdzLCBzdG9wLCBjb250ZXh0KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICByZXN1bHQtPmFkZFN0b3AoV1RGTW92ZShzdG9wKSk7CiAgICAgfQpAQCAtMTUw
OCwyMCArMTUzMiwyMCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRl
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGJvb2wgY29uc3VtZUdyYWRpZW50Q29s
b3JTdG9wcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBtb2RlLCBD
U1NHcmFkaWVudFZhbHVlJiBncmFkaWVudCkKK3N0YXRpYyBib29sIGNvbnN1bWVHcmFkaWVudENv
bG9yU3RvcHMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGNvbnRleHQsIENTU0dyYWRpZW50VmFsdWUmIGdyYWRpZW50KQogewogICAgIGJvb2wgc3Vw
cG9ydHNDb2xvckhpbnRzID0gZ3JhZGllbnQuZ3JhZGllbnRUeXBlKCkgPT0gQ1NTTGluZWFyR3Jh
ZGllbnQgfHwgZ3JhZGllbnQuZ3JhZGllbnRUeXBlKCkgPT0gQ1NTUmFkaWFsR3JhZGllbnQgfHwg
Z3JhZGllbnQuZ3JhZGllbnRUeXBlKCkgPT0gQ1NTQ29uaWNHcmFkaWVudDsKICAgICAKICAgICBh
dXRvIGNvbnN1bWVTdG9wUG9zaXRpb24gPSBbJl0gewogICAgICAgICByZXR1cm4gZ3JhZGllbnQu
Z3JhZGllbnRUeXBlKCkgPT0gQ1NTQ29uaWNHcmFkaWVudAotICAgICAgICAgICAgPyBjb25zdW1l
QW5nbGVPclBlcmNlbnQocmFuZ2UsIG1vZGUsIFZhbHVlUmFuZ2VBbGwsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KQotICAgICAgICAgICAgOiBjb25zdW1l
TGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBtb2RlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgICAg
ID8gY29uc3VtZUFuZ2xlT3JQZXJjZW50KHJhbmdlLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VB
bGwsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KQorICAg
ICAgICAgICAgOiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBjb250ZXh0Lm1vZGUsIFZh
bHVlUmFuZ2VBbGwpOwogICAgIH07CiAKICAgICAvLyBUaGUgZmlyc3QgY29sb3Igc3RvcCBjYW5u
b3QgYmUgYSBjb2xvciBoaW50LgogICAgIGJvb2wgcHJldmlvdXNTdG9wV2FzQ29sb3JIaW50ID0g
dHJ1ZTsKICAgICBkbyB7Ci0gICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3AgeyBjb25z
dW1lQ29sb3IocmFuZ2UsIG1vZGUpLCBjb25zdW1lU3RvcFBvc2l0aW9uKCksIHsgfSB9OworICAg
ICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9wIHsgY29uc3VtZUNvbG9yKHJhbmdlLCBjb250
ZXh0KSwgY29uc3VtZVN0b3BQb3NpdGlvbigpLCB7IH0gfTsKICAgICAgICAgaWYgKCFzdG9wLmNv
bG9yICYmICFzdG9wLnBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0x
NTUyLDExICsxNTc2LDExIEBAIHN0YXRpYyBib29sIGNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMo
Q1MKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKK3N0
YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwg
Q1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQogewogICAgIGF1dG8gcmVzdWx0ID0gQ1NTUmFk
aWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUHJlZml4ZWRSYWRpYWxHcmFk
aWVudCk7CiAKLSAgICBhdXRvIGNlbnRlckNvb3JkaW5hdGUgPSBjb25zdW1lT25lT3JUd29WYWx1
ZWRQb3NpdGlvbkNvb3JkaW5hdGVzKGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCk7CisgICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZU9uZU9yVHdvVmFs
dWVkUG9zaXRpb25Db29yZGluYXRlcyhhcmdzLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCk7CiAgICAgaWYgKGNlbnRlckNvb3JkaW5hdGUgJiYgIWNvbnN1bWVDb21tYUluY2x1
ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xNTY3
LDEwICsxNTkxLDEwIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGUK
IAogICAgIC8vIE9yLCB0d28gbGVuZ3RocyBvciBwZXJjZW50YWdlcwogICAgIGlmICghc2hhcGUg
JiYgIXNpemVLZXl3b3JkKSB7Ci0gICAgICAgIGF1dG8gaG9yaXpvbnRhbFNpemUgPSBjb25zdW1l
TGVuZ3RoT3JQZXJjZW50KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2
ZSk7CisgICAgICAgIGF1dG8gaG9yaXpvbnRhbFNpemUgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50
KGFyZ3MsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2ZXJ0aWNhbFNpemU7CiAgICAgICAgIGlmIChob3Jpem9u
dGFsU2l6ZSkgewotICAgICAgICAgICAgdmVydGljYWxTaXplID0gY29uc3VtZUxlbmd0aE9yUGVy
Y2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOworICAgICAg
ICAgICAgdmVydGljYWxTaXplID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChhcmdzLCBjb250ZXh0
Lm1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CiAgICAgICAgICAgICBpZiAoIXZlcnRpY2Fs
U2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGNvbnN1
bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CkBAIC0xNTgxLDcgKzE2MDUsNyBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlCiAgICAgICAgIGNvbnN1bWVD
b21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CiAgICAgfQogCi0gICAgaWYgKCFjb25zdW1l
R3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIGNzc1BhcnNlck1vZGUsIHJlc3VsdCkpCisgICAgaWYg
KCFjb25zdW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIGNvbnRleHQsIHJlc3VsdCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGNlbnRlckNvb3JkaW5hdGUpIHsKQEAgLTE1
OTYsNyArMTYyMCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGUK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
UmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBj
c3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCitzdGF0aWMgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJn
cywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVw
ZWF0aW5nKQogewogICAgIFJlZlB0cjxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBDU1NSYWRpYWxHcmFkaWVu
dCk7CiAKQEAgLTE2MjQsMTMgKzE2NDgsMTMgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZVJhZGlhbEdyYQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CisgICAg
ICAgICAgICBhdXRvIGNlbnRlciA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYXJncywgY29udGV4
dC5tb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwogICAgICAgICAgICAgaWYgKCFjZW50ZXIp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFNpemUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBob3Jpem9udGFs
U2l6ZSA9IGNlbnRlcjsKLSAgICAgICAgICAgIGNlbnRlciA9IGNvbnN1bWVMZW5ndGhPclBlcmNl
bnQoYXJncywgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKKyAgICAgICAg
ICAgIGNlbnRlciA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYXJncywgY29udGV4dC5tb2RlLCBW
YWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwogICAgICAgICAgICAgaWYgKGNlbnRlcikgewogICAgICAg
ICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNlbnRlcjsKICAgICAgICAgICAgICAgICArK2k7CkBA
IC0xNjU5LDcgKzE2ODMsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lUmFkaWFs
R3JhCiAgICAgaWYgKGFyZ3MucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVBdCkgewogICAgICAgICBh
cmdzLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIAotICAgICAgICBhdXRv
IGNlbnRlckNvb3JkaW5hdGUgPSBjb25zdW1lUG9zaXRpb25Db29yZGluYXRlcyhhcmdzLCBjc3NQ
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFBvc2l0aW9uU3ludGF4OjpQb3NpdGlv
bik7CisgICAgICAgIGF1dG8gY2VudGVyQ29vcmRpbmF0ZSA9IGNvbnN1bWVQb3NpdGlvbkNvb3Jk
aW5hdGVzKGFyZ3MsIGNvbnRleHQubW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBQb3NpdGlv
blN5bnRheDo6UG9zaXRpb24pOwogICAgICAgICBpZiAoIWNlbnRlckNvb3JkaW5hdGUpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCkBAIC0xNjc2LDcgKzE3MDAsNyBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lUmFkaWFsR3JhCiAKICAgICBpZiAoKHNoYXBl
IHx8IHNpemVLZXl3b3JkIHx8IGhvcml6b250YWxTaXplIHx8IGNlbnRlclggfHwgY2VudGVyWSkg
JiYgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQ
YXJzZXJNb2RlLCAqcmVzdWx0KSkKKyAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMo
YXJncywgY29udGV4dCwgKnJlc3VsdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
cmVzdWx0LT5zZXRTaGFwZShXVEZNb3ZlKHNoYXBlKSk7CkBAIC0xNjg3LDEyICsxNzExLDEyIEBA
IHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVSYWRpYWxHcmEKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lTGluZWFyR3JhZGllbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBD
U1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcsIENTU0dyYWRpZW50VHlwZSBncmFkaWVudFR5cGUp
CitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lTGluZWFyR3JhZGllbnQoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgQ1NTR3Jh
ZGllbnRSZXBlYXQgcmVwZWF0aW5nLCBDU1NHcmFkaWVudFR5cGUgZ3JhZGllbnRUeXBlKQogewog
ICAgIFJlZlB0cjxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBDU1NMaW5lYXJHcmFk
aWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBncmFkaWVudFR5cGUpOwogCiAgICAgYm9vbCBl
eHBlY3RDb21tYSA9IHRydWU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbmdsZSA9
IGNvbnN1bWVBbmdsZShhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQs
IFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdyk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBhbmdsZSA9IGNvbnN1bWVBbmdsZShhcmdzLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KTsKICAgICBpZiAoYW5nbGUpCiAgICAg
ICAgIHJlc3VsdC0+c2V0QW5nbGUoYW5nbGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgZWxzZSBp
ZiAoZ3JhZGllbnRUeXBlID09IENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQgfHwgY29uc3VtZUlk
ZW50PENTU1ZhbHVlVG8+KGFyZ3MpKSB7CkBAIC0xNzE1LDEyICsxNzM5LDEyIEBAIHN0YXRpYyBS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVMaW5lYXJHcmEKIAogICAgIGlmIChleHBlY3RDb21tYSAm
JiAhY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKCFjb25zdW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIGNzc1Bh
cnNlck1vZGUsICpyZXN1bHQpKQorICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhh
cmdzLCBjb250ZXh0LCAqcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNvbmljR3Jh
ZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0
LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ29uaWNHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCiB7CiAj
aWYgRU5BQkxFKENTU19DT05JQ19HUkFESUVOVFMpCiAgICAgUmVmUHRyPENTU0NvbmljR3JhZGll
bnRWYWx1ZT4gcmVzdWx0ID0gQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5n
KTsKQEAgLTE3NTQsNyArMTc3OCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVD
b25pY0dyYWQKIAogICAgIGlmIChleHBlY3RDb21tYSAmJiAhY29uc3VtZUNvbW1hSW5jbHVkaW5n
V2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFjb25z
dW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIGNvbnRleHQubW9kZSwgKnJlc3VsdCkpCisgICAg
aWYgKCFjb25zdW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIGNvbnRleHQsICpyZXN1bHQpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcmVzdWx0OwogI2Vsc2UKQEAgLTE3
NjUsMTQgKzE3ODksMTQgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNvbmljR3Jh
ZAogI2VuZGlmCiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQpCitSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZU9yTm9uZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygp
LmlkKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdl
KTsKICAgICByZXR1cm4gY29uc3VtZUltYWdlKHJhbmdlLCBjb250ZXh0KTsKIH0KIAotc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNyb3NzRmFkZShDU1NQYXJzZXJUb2tlblJhbmdlJiBh
cmdzLCBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQsIGJvb2wgcHJlZml4ZWQpCitzdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lQ3Jvc3NGYWRlKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3Ms
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIGJvb2wgcHJlZml4ZWQpCiB7CiAgICAg
YXV0byBmcm9tSW1hZ2VWYWx1ZSA9IGNvbnN1bWVJbWFnZU9yTm9uZShhcmdzLCBjb250ZXh0KTsK
ICAgICBpZiAoIWZyb21JbWFnZVZhbHVlIHx8ICFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNw
YWNlKGFyZ3MpKQpAQCAtMTg0OCwzMCArMTg3MiwzMCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lQ3VzdG9tUGFpCiB9CiAjZW5kaWYKIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZUdlbmVyYXRlZEltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJz
ZXJDb250ZXh0IGNvbnRleHQpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lR2VuZXJh
dGVkSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGNvbnRleHQpCiB7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLnBlZWsoKS5mdW5jdGlv
bklkKCk7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZUNvcHkgPSByYW5nZTsKICAgICBD
U1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2VDb3B5KTsKICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHJlc3VsdDsKICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVSYWRpYWxH
cmFkaWVudCkKLSAgICAgICAgcmVzdWx0ID0gY29uc3VtZVJhZGlhbEdyYWRpZW50KGFyZ3MsIGNv
bnRleHQubW9kZSwgTm9uUmVwZWF0aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZVJhZGlh
bEdyYWRpZW50KGFyZ3MsIGNvbnRleHQsIE5vblJlcGVhdGluZyk7CiAgICAgZWxzZSBpZiAoaWQg
PT0gQ1NTVmFsdWVSZXBlYXRpbmdSYWRpYWxHcmFkaWVudCkKLSAgICAgICAgcmVzdWx0ID0gY29u
c3VtZVJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgUmVwZWF0aW5nKTsKKyAgICAg
ICAgcmVzdWx0ID0gY29uc3VtZVJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQsIFJlcGVhdGlu
Zyk7CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRMaW5lYXJHcmFkaWVudCkKLSAg
ICAgICAgcmVzdWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwg
Tm9uUmVwZWF0aW5nLCBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50KTsKKyAgICAgICAgcmVzdWx0
ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQsIE5vblJlcGVhdGluZywgQ1NT
UHJlZml4ZWRMaW5lYXJHcmFkaWVudCk7CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJr
aXRSZXBlYXRpbmdMaW5lYXJHcmFkaWVudCkKLSAgICAgICAgcmVzdWx0ID0gY29uc3VtZUxpbmVh
ckdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgUmVwZWF0aW5nLCBDU1NQcmVmaXhlZExpbmVh
ckdyYWRpZW50KTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3Ms
IGNvbnRleHQsIFJlcGVhdGluZywgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCk7CiAgICAgZWxz
ZSBpZiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXRpbmdMaW5lYXJHcmFkaWVudCkKLSAgICAgICAgcmVz
dWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgUmVwZWF0aW5n
LCBDU1NMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFk
aWVudChhcmdzLCBjb250ZXh0LCBSZXBlYXRpbmcsIENTU0xpbmVhckdyYWRpZW50KTsKICAgICBl
bHNlIGlmIChpZCA9PSBDU1NWYWx1ZUxpbmVhckdyYWRpZW50KQotICAgICAgICByZXN1bHQgPSBj
b25zdW1lTGluZWFyR3JhZGllbnQoYXJncywgY29udGV4dC5tb2RlLCBOb25SZXBlYXRpbmcsIENT
U0xpbmVhckdyYWRpZW50KTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50
KGFyZ3MsIGNvbnRleHQsIE5vblJlcGVhdGluZywgQ1NTTGluZWFyR3JhZGllbnQpOwogICAgIGVs
c2UgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0R3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNv
bnN1bWVEZXByZWNhdGVkR3JhZGllbnQoYXJncywgY29udGV4dC5tb2RlKTsKKyAgICAgICAgcmVz
dWx0ID0gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChhcmdzLCBjb250ZXh0KTsKICAgICBlbHNl
IGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFJhZGlhbEdyYWRpZW50KQotICAgICAgICByZXN1bHQg
PSBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgTm9u
UmVwZWF0aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFk
aWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENT
U1ZhbHVlV2Via2l0UmVwZWF0aW5nUmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNv
bnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoYXJncywgY29udGV4dC5tb2RlLCBSZXBlYXRp
bmcpOworICAgICAgICByZXN1bHQgPSBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KGFy
Z3MsIGNvbnRleHQsIFJlcGVhdGluZyk7CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDb25p
Y0dyYWRpZW50KQogICAgICAgICByZXN1bHQgPSBjb25zdW1lQ29uaWNHcmFkaWVudChhcmdzLCBj
b250ZXh0LCBOb25SZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0
aW5nQ29uaWNHcmFkaWVudCkKQEAgLTIwMTcsNyArMjA0MSw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NT
RnVuY3Rpb25WYWx1ZT4gY29uc3VtZUYKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVl
OwogCiAgICAgaWYgKGZpbHRlclR5cGUgPT0gQ1NTVmFsdWVEcm9wU2hhZG93KQotICAgICAgICBw
YXJzZWRWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3coYXJncywgY29udGV4dC5tb2RlLCBmYWxz
ZSwgZmFsc2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3coYXJn
cywgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKGFyZ3Mu
YXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJWYWx1ZTsKQEAgLTIwNjQsNyArMjA4
OCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZpbHRlcihDU1NQYXJzZXIKICAgICByZXR1
cm4gbGlzdC5wdHIoKTsKIH0KIAotUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xl
U2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIGJvb2wgYWxsb3dJbnNldCwgYm9vbCBhbGxvd1NwcmVhZCkKK1JlZlB0cjxDU1NTaGFk
b3dWYWx1ZT4gY29uc3VtZVNpbmdsZVNoYWRvdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBhbGxvd0luc2V0LCBib29sIGFs
bG93U3ByZWFkKQogewogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3R5bGU7CiAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcjsKQEAgLTIwODksNyArMjExMyw3IEBAIFJl
ZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNpbmdsZVNoYWQKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBhdXRvIG1heWJlQ29sb3IgPSBjb25z
dW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgICAgICBhdXRvIG1heWJlQ29sb3Ig
PSBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBpZiAobWF5YmVDb2xvcikg
ewogICAgICAgICAgICAgLy8gSWYgd2UganVzdCBwYXJzZWQgYSBjb2xvciBidXQgYWxyZWFkeSBo
YWQgb25lLCB0aGUgZ2l2ZW4gdG9rZW4gcmFuZ2UgaXMgbm90IGEgdmFsaWQgPHNoYWRvdz4uCiAg
ICAgICAgICAgICBpZiAoY29sb3IpCkBAIC0yMTAzLDIzICsyMTI3LDIzIEBAIFJlZlB0cjxDU1NT
aGFkb3dWYWx1ZT4gY29uc3VtZVNpbmdsZVNoYWQKICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGFs
cmVhZHkgcGFyc2VkIHRoZXNlIGxlbmd0aHMsIHRoZSBnaXZlbiB2YWx1ZSBpcyBpbnZhbGlkIGFz
IHRoZXJlIGNhbm5vdCBiZSB0d28gbGVuZ3RocyBjb21wb25lbnRzIGluIGEgc2luZ2xlIDxzaGFk
b3c+IHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAg
ICAgaG9yaXpvbnRhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNzc1BhcnNlck1vZGUs
IFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBob3Jpem9udGFsT2Zmc2V0ID0gY29uc3VtZUxlbmd0
aChyYW5nZSwgY29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCFob3Jp
em9udGFsT2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHZlcnRp
Y2FsT2Zmc2V0ID0gY29uc3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZUFsbCk7CisgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gY29uc3VtZUxlbmd0aChyYW5nZSwgY29u
dGV4dC5tb2RlLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCF2ZXJ0aWNhbE9mZnNldCkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGNvbnN0IENTU1BhcnNlclRv
a2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICAgICAgLy8gVGhlIGV4cGxpY2l0IGNoZWNr
IGZvciBjYWxjKCkgaXMgdW5mb3J0dW5hdGUuIFRoaXMgaXMgZW5zdXJpbmcgdGhhdCB3ZSBvbmx5
IGZhaWwgcGFyc2luZyBpZiB0aGVyZSBpcyBhIGxlbmd0aCwgYnV0IGl0IGZhaWxzIHRoZSByYW5n
ZSBjaGVjay4KICAgICAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbiB8fCB0
b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRv
a2VuICYmIENTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24odG9rZW4uZnVuY3Rpb25JZCgpKSkp
IHsKLSAgICAgICAgICAgIGJsdXJSYWRpdXMgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjc3NQYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOworICAgICAgICAgICAgYmx1clJhZGl1cyA9
IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZl
KTsKICAgICAgICAgICAgIGlmICghYmx1clJhZGl1cykKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChibHVyUmFkaXVzICYmIGFsbG93U3By
ZWFkKQotICAgICAgICAgICAgc3ByZWFkRGlzdGFuY2UgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBj
c3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgICAgIHNwcmVhZERpc3RhbmNl
ID0gY29uc3VtZUxlbmd0aChyYW5nZSwgY29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlQWxsKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gSW4gb3JkZXIgZm9yIHRoaXMgdG8gYmUgYSB2YWxpZCA8c2hhZG93
PiwgYXQgbGVhc3QgdGhlc2UgbGVuZ3RocyBtdXN0IGJlIHByZXNlbnQuCkBAIC0yMTI4LDcgKzIx
NTIsNyBAQCBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgcmV0
dXJuIENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUoV1RGTW92ZShob3Jpem9udGFsT2Zmc2V0KSwgV1RG
TW92ZSh2ZXJ0aWNhbE9mZnNldCksIFdURk1vdmUoYmx1clJhZGl1cyksIFdURk1vdmUoc3ByZWFk
RGlzdGFuY2UpLCBXVEZNb3ZlKHN0eWxlKSwgV1RGTW92ZShjb2xvcikpOwogfQogCi1SZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyQ29udGV4dCBjb250ZXh0LCBPcHRpb25TZXQ8QWxsb3dlZEltYWdlVHlwZT4gYWxsb3dlZElt
YWdlVHlwZXMpCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgT3B0aW9uU2V0PEFs
bG93ZWRJbWFnZVR5cGU+IGFsbG93ZWRJbWFnZVR5cGVzKQogewogICAgIGlmICgocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikgJiYgKGFsbG93ZWRJbWFnZVR5cGVzLmNvbnRhaW5z
KEFsbG93ZWRJbWFnZVR5cGU6OlJhd1N0cmluZ0FzVVJMKSkpIHsKICAgICAgICAgYXV0byB1cmxT
dHJpbmdWaWV3ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VySGVscGVycy5oCShyZXZpc2lvbiAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOCAr
MTAyLDggQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lU3RyaW5nKAogU3RyaW5n
VmlldyBjb25zdW1lVXJsQXNTdHJpbmdWaWV3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVVybChDU1NQYXJzZXJUb2tlblJhbmdlJik7CiAK
LUNvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1Bh
cnNlck1vZGUpOwotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3IoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzID0g
ZmFsc2UpOworQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdl
JiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
LCBib29sIGFjY2VwdFF1aXJreUNvbG9ycyA9IGZhbHNlKTsKIAogZW51bSBjbGFzcyBQb3NpdGlv
blN5bnRheCB7CiAgICAgUG9zaXRpb24sIC8vIDxwb3NpdGlvbj4KQEAgLTEyNiw5ICsxMjYsOCBA
QCBlbnVtIGNsYXNzIEFsbG93ZWRJbWFnZVR5cGUgOiB1aW50OF90IHsKICAgICBHZW5lcmF0ZWRJ
bWFnZSA9IDEgPDwgMwogfTsKIAotUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlckNvbnRleHQsIE9wdGlvblNldDxBbGxvd2VkSW1hZ2VU
eXBlPiA9IHsgQWxsb3dlZEltYWdlVHlwZTo6VVJMRnVuY3Rpb24sIEFsbG93ZWRJbWFnZVR5cGU6
OkltYWdlU2V0LCBBbGxvd2VkSW1hZ2VUeXBlOjpHZW5lcmF0ZWRJbWFnZSB9KTsKLQotUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1Bh
cnNlckNvbnRleHQpOworUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBPcHRpb25TZXQ8QWxsb3dlZEltYWdl
VHlwZT4gPSB7IEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1hZ2VUeXBl
OjpJbWFnZVNldCwgQWxsb3dlZEltYWdlVHlwZTo6R2VuZXJhdGVkSW1hZ2UgfSk7CitSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZU9yTm9uZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYpOwogCiBlbnVtIGNsYXNzIEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMg
ewogICAgIFBpeGVsRmlsdGVycywKQEAgLTEzNiw3ICsxMzUsNyBAQCBlbnVtIGNsYXNzIEFsbG93
ZWRGaWx0ZXJGdW5jdGlvbnMgewogfTsKIAogUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmlsdGVy
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQWxsb3dlZEZp
bHRlckZ1bmN0aW9ucyk7Ci1SZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFk
b3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIGJvb2wgYWxsb3dJbnNldCwg
Ym9vbCBhbGxvd1NwcmVhZCk7CitSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVT
aGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBib29s
IGFsbG93SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpOwogCiBzdHJ1Y3QgRm9udFN0eWxlUmF3IHsK
ICAgICBDU1NWYWx1ZUlEIHN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMjcyODM3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDAs
NyArNjAwLDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUgogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRuZXNzIG9mIHRoZSB1bmRl
cmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRoZSBhbHBoYSBieSAzOCUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Igd2lsbCBhcHBlYXIgb24g
bGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25lIGNvbG9yIGNhbiBiZSBz
cGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmxpZ2h0bmVzcyA9IDAuNWY7
CisgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmxpZ2h0bmVzcyA9IDUwLjBmOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaHNsYS5hbHBoYSAqPSAwLjM4ZjsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGtlZXBp
bmcgY29sb3IgaW4gTENIQSAoaWYgdGhhdCBjaGFuZ2UgaXMgbWFkZSkgb3IgY29udmVydGluZyBi
YWNrIHRvIHRoZSBpbml0aWFsIHVuZGVybHlpbmcgY29sb3IgdHlwZSB0byBhdm9pZCB1bm5lY2Vz
c2FyaWx5IGNsYW1waW5nIGNvbG9ycyBvdXRzaWRlIG9mIHNSR0IuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJl
dmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
Q29udmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDYgQEAgc3RhdGljIEhT
TEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1bGF0ZQogICAgIGlmIChodWUgPj0gMzYwLjBmKQog
ICAgICAgICBodWUgLT0gMzYwLjBmOwogCi0gICAgaHVlIC89IDM2MC4wZjsKLQogICAgIHJldHVy
biB7IGh1ZSwgbWluLCBtYXgsIGNocm9tYSB9OwogfQogCkBAIC02OSwxNCArNjcsMTQgQEAgSFNM
QTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+LAogICAgIGF1dG8gW3IsIGcsIGIs
IGFscGhhXSA9IGNvbG9yOwogICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNocm9tYV0gPSBjYWxj
dWxhdGVIU0xIdWUoY29sb3IpOwogCi0gICAgZmxvYXQgbGlnaHRuZXNzID0gMC41ZiAqIChtYXgg
KyBtaW4pOworICAgIGZsb2F0IGxpZ2h0bmVzcyA9ICgwLjVmICogKG1heCArIG1pbikpICogMTAw
LjBmOwogICAgIGZsb2F0IHNhdHVyYXRpb247CiAgICAgaWYgKCFjaHJvbWEpCiAgICAgICAgIHNh
dHVyYXRpb24gPSAwOwotICAgIGVsc2UgaWYgKGxpZ2h0bmVzcyA8PSAwLjVmKQotICAgICAgICBz
YXR1cmF0aW9uID0gKGNocm9tYSAvIChtYXggKyBtaW4pKTsKKyAgICBlbHNlIGlmIChsaWdodG5l
c3MgPD0gNTAuMGYpCisgICAgICAgIHNhdHVyYXRpb24gPSAoY2hyb21hIC8gKG1heCArIG1pbikp
ICogMTAwLjBmOwogICAgIGVsc2UKLSAgICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEgLyAoMi4w
ZiAtIChtYXggKyBtaW4pKSk7CisgICAgICAgIHNhdHVyYXRpb24gPSAoY2hyb21hIC8gKDIuMGYg
LSAobWF4ICsgbWluKSkpICogMTAwLjBmOwogCiAgICAgcmV0dXJuIHsgaHVlLCBzYXR1cmF0aW9u
LCBsaWdodG5lc3MsIGFscGhhIH07CiB9CkBAIC04NiwxMSArODQsMjYgQEAgU1JHQkE8ZmxvYXQ+
IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdAogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dn
Lm9yZy9jc3MtY29sb3ItNC8jaHNsLXRvLXJnYgogICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwg
bGlnaHRuZXNzLCBhbHBoYV0gPSBjb2xvcjsKIAotICAgIGlmICghc2F0dXJhdGlvbikKLSAgICAg
ICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGxpZ2h0bmVzcywgYWxwaGEgfTsKLSAg
ICAKLSAgICBmbG9hdCB0ZW1wMiA9IGxpZ2h0bmVzcyA8PSAwLjVmID8gbGlnaHRuZXNzICogKDEu
MGYgKyBzYXR1cmF0aW9uKSA6IGxpZ2h0bmVzcyArIHNhdHVyYXRpb24gLSBsaWdodG5lc3MgKiBz
YXR1cmF0aW9uOwotICAgIGZsb2F0IHRlbXAxID0gMi4wZiAqIGxpZ2h0bmVzcyAtIHRlbXAyOwor
ICAgIGlmICghc2F0dXJhdGlvbikgeworICAgICAgICBhdXRvIGdyZXkgPSBsaWdodG5lc3MgLyAx
MDAuMGY7CisgICAgICAgIHJldHVybiB7IGdyZXksIGdyZXksIGdyZXksIGFscGhhIH07CisgICAg
fQorCisgICAgLy8gaHVlVG9SR0IoKSB3YW50cyBodWUgaW4gdGhlIDAtNiByYW5nZS4KKyAgICBh
dXRvIG5vcm1hbGl6ZWRIdWUgPSAoaHVlIC8gMzYwLjBmKSAqIDYuMGY7CisgICAgYXV0byBub3Jt
YWxpemVkTGlnaHRuZXNzID0gbGlnaHRuZXNzIC8gMTAwLjBmOworICAgIGF1dG8gbm9ybWFsaXpl
ZFNhdHVyYXRpb24gPSBzYXR1cmF0aW9uIC8gMTAwLjBmOworCisgICAgYXV0byBodWVGb3JSZWQg
PSBub3JtYWxpemVkSHVlICsgMi4wZjsKKyAgICBhdXRvIGh1ZUZvckdyZWVuID0gbm9ybWFsaXpl
ZEh1ZTsKKyAgICBhdXRvIGh1ZUZvckJsdWUgPSBub3JtYWxpemVkSHVlIC0gMi4wZjsKKyAgICBp
ZiAoaHVlRm9yUmVkID4gNi4wZikKKyAgICAgICAgaHVlRm9yUmVkIC09IDYuMGY7CisgICAgZWxz
ZSBpZiAoaHVlRm9yQmx1ZSA8IDAuMGYpCisgICAgICAgIGh1ZUZvckJsdWUgKz0gNi4wZjsKKwor
ICAgIGZsb2F0IHRlbXAyID0gbm9ybWFsaXplZExpZ2h0bmVzcyA8PSAwLjVmID8gbm9ybWFsaXpl
ZExpZ2h0bmVzcyAqICgxLjBmICsgbm9ybWFsaXplZFNhdHVyYXRpb24pIDogbm9ybWFsaXplZExp
Z2h0bmVzcyArIG5vcm1hbGl6ZWRTYXR1cmF0aW9uIC0gbm9ybWFsaXplZExpZ2h0bmVzcyAqIG5v
cm1hbGl6ZWRTYXR1cmF0aW9uOworICAgIGZsb2F0IHRlbXAxID0gMi4wZiAqIG5vcm1hbGl6ZWRM
aWdodG5lc3MgLSB0ZW1wMjsKICAgICAKICAgICAvLyBIdWUgaXMgaW4gdGhlIHJhbmdlIDAtNiwg
b3RoZXIgYXJncyBpbiAwLTEuCiAgICAgYXV0byBodWVUb1JHQiA9IFtdKGZsb2F0IHRlbXAxLCBm
bG9hdCB0ZW1wMiwgZmxvYXQgaHVlKSB7CkBAIC0xMDMsMTcgKzExNiw2IEBAIFNSR0JBPGZsb2F0
PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAgICAgcmV0dXJuIHRlbXAxOwogICAg
IH07CiAKLSAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgotICAg
IGh1ZSAqPSA2LjBmOwotCi0gICAgYXV0byBodWVGb3JSZWQgPSBodWUgKyAyLjBmOwotICAgIGF1
dG8gaHVlRm9yR3JlZW4gPSBodWU7Ci0gICAgYXV0byBodWVGb3JCbHVlID0gaHVlIC0gMi4wZjsK
LSAgICBpZiAoaHVlRm9yUmVkID4gNi4wZikKLSAgICAgICAgaHVlRm9yUmVkIC09IDYuMGY7Ci0g
ICAgZWxzZSBpZiAoaHVlRm9yQmx1ZSA8IDAuMGYpCi0gICAgICAgIGh1ZUZvckJsdWUgKz0gNi4w
ZjsKLQogICAgIHJldHVybiB7CiAgICAgICAgIGh1ZVRvUkdCKHRlbXAxLCB0ZW1wMiwgaHVlRm9y
UmVkKSwKICAgICAgICAgaHVlVG9SR0IodGVtcDEsIHRlbXAyLCBodWVGb3JHcmVlbiksCkBAIC0x
MjgsOCArMTMwLDggQEAgSFdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhXQkE8ZmxvYXQ+LAog
ewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jcmdiLXRvLWh3
YgogICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNocm9tYV0gPSBjYWxjdWxhdGVIU0xIdWUoY29s
b3IpOwotICAgIGF1dG8gd2hpdGVuZXNzID0gbWluOwotICAgIGF1dG8gYmxhY2tuZXNzID0gMS4w
ZiAtIG1heDsKKyAgICBhdXRvIHdoaXRlbmVzcyA9IG1pbiAqIDEwMC4wZjsKKyAgICBhdXRvIGJs
YWNrbmVzcyA9ICgxLjBmIC0gbWF4KSAqIDEwMC4wZjsKICAgICAKICAgICByZXR1cm4geyBodWUs
IHdoaXRlbmVzcywgYmxhY2tuZXNzLCBjb2xvci5hbHBoYSB9OwogfQpAQCAtMTM5LDggKzE0MSwy
NCBAQCBTUkdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0CiAgICAgLy8gaHR0
cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNod2ItdG8tcmdiCiAgICAgYXV0byBb
aHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGFdID0gY29sb3I7CiAKLSAgICBpZiAod2hp
dGVuZXNzICsgYmxhY2tuZXNzID09IDEuMGYpCi0gICAgICAgIHJldHVybiB7IHdoaXRlbmVzcywg
d2hpdGVuZXNzLCB3aGl0ZW5lc3MsIGFscGhhIH07CisgICAgaWYgKHdoaXRlbmVzcyArIGJsYWNr
bmVzcyA9PSAxMDAuMGYpIHsKKyAgICAgICAgYXV0byBncmV5ID0gd2hpdGVuZXNzIC8gMTAwLjBm
OworICAgICAgICByZXR1cm4geyBncmV5LCBncmV5LCBncmV5LCBhbHBoYSB9OworICAgIH0KKwor
ICAgIC8vIGh1ZVRvUkdCKCkgd2FudHMgaHVlIGluIHRoZSAwLTYgcmFuZ2UuCisgICAgYXV0byBu
b3JtYWxpemVkSHVlID0gKGh1ZSAvIDM2MC4wZikgKiA2LjBmOworCisgICAgYXV0byBodWVGb3JS
ZWQgPSBub3JtYWxpemVkSHVlICsgMi4wZjsKKyAgICBhdXRvIGh1ZUZvckdyZWVuID0gbm9ybWFs
aXplZEh1ZTsKKyAgICBhdXRvIGh1ZUZvckJsdWUgPSBub3JtYWxpemVkSHVlIC0gMi4wZjsKKyAg
ICBpZiAoaHVlRm9yUmVkID4gNi4wZikKKyAgICAgICAgaHVlRm9yUmVkIC09IDYuMGY7CisgICAg
ZWxzZSBpZiAoaHVlRm9yQmx1ZSA8IDAuMGYpCisgICAgICAgIGh1ZUZvckJsdWUgKz0gNi4wZjsK
KworICAgIGF1dG8gbm9ybWFsaXplZFdoaXRlbmVzcyA9IHdoaXRlbmVzcyAvIDEwMC4wZjsKKyAg
ICBhdXRvIG5vcm1hbGl6ZWRCbGFja25lc3MgPSBibGFja25lc3MgLyAxMDAuMGY7CiAKICAgICAv
LyBUaGlzIGlzIHRoZSBodWVUb1JHQiBmdW5jdGlvbiBpbiBjb252ZXJ0Q29sb3I8U1JHQkE8Zmxv
YXQ+Pihjb25zdCBIU0xBJikgd2l0aCB0ZW1wMSA9PSAwCiAgICAgLy8gYW5kIHRlbXAyID09IDEg
c3RyZW5ndGggcmVkdWNlZCB0aHJvdWdoIGl0LgpAQCAtMTU0LDI1ICsxNzIsMTQgQEAgU1JHQkE8
ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdAogICAgICAgICByZXR1cm4gMC4wZjsK
ICAgICB9OwogCi0gICAgYXV0byBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyA9IFsmXShmbG9hdCBj
b21wb25lbnQpIHsKLSAgICAgICAgcmV0dXJuIChjb21wb25lbnQgKiAoMS4wZiAtIGNvbG9yLndo
aXRlbmVzcyAtIGNvbG9yLmJsYWNrbmVzcykpICsgY29sb3Iud2hpdGVuZXNzOworICAgIGF1dG8g
YXBwbHlXaGl0ZW5lc3NCbGFja25lc3MgPSBbXShmbG9hdCBjb21wb25lbnQsIGF1dG8gd2hpdGVu
ZXNzLCBhdXRvIGJsYWNrbmVzcykgeworICAgICAgICByZXR1cm4gKGNvbXBvbmVudCAqICgxLjBm
IC0gd2hpdGVuZXNzIC0gYmxhY2tuZXNzKSkgKyB3aGl0ZW5lc3M7CiAgICAgfTsKIAotICAgIC8v
IGh1ZVRvUkdCKCkgd2FudHMgaHVlIGluIHRoZSAwLTYgcmFuZ2UuCi0gICAgaHVlICo9IDYuMGY7
Ci0KLSAgICBhdXRvIGh1ZUZvclJlZCA9IGh1ZSArIDIuMGY7Ci0gICAgYXV0byBodWVGb3JHcmVl
biA9IGh1ZTsKLSAgICBhdXRvIGh1ZUZvckJsdWUgPSBodWUgLSAyLjBmOwotICAgIGlmIChodWVG
b3JSZWQgPiA2LjBmKQotICAgICAgICBodWVGb3JSZWQgLT0gNi4wZjsKLSAgICBlbHNlIGlmICho
dWVGb3JCbHVlIDwgMC4wZikKLSAgICAgICAgaHVlRm9yQmx1ZSArPSA2LjBmOwotCiAgICAgcmV0
dXJuIHsKLSAgICAgICAgYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MoaHVlVG9SR0IoaHVlRm9yUmVk
KSksCi0gICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZvckdyZWVu
KSksCi0gICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZvckJsdWUp
KSwKKyAgICAgICAgYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MoaHVlVG9SR0IoaHVlRm9yUmVkKSwg
bm9ybWFsaXplZFdoaXRlbmVzcywgbm9ybWFsaXplZEJsYWNrbmVzcyksCisgICAgICAgIGFwcGx5
V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZvckdyZWVuKSwgbm9ybWFsaXplZFdoaXRl
bmVzcywgbm9ybWFsaXplZEJsYWNrbmVzcyksCisgICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tu
ZXNzKGh1ZVRvUkdCKGh1ZUZvckJsdWUpLCBub3JtYWxpemVkV2hpdGVuZXNzLCBub3JtYWxpemVk
QmxhY2tuZXNzKSwKICAgICAgICAgYWxwaGEKICAgICB9OwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1vZGVscy5oCShyZXZpc2lvbiAyNzI4Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1vZGVscy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NywxOCArNjcsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRXh0ZW5kZWRS
R0JNb2RlbDxmbG9hdAogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4gewogICAg
IHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0Piwg
Mz4gcmFuZ2VzIHsgewotICAgICAgICB7IDAsIDEgfSwKLSAgICAgICAgeyAwLCAxIH0sCi0gICAg
ICAgIHsgMCwgMSB9CisgICAgICAgIHsgMCwgMzYwIH0sCisgICAgICAgIHsgMCwgMTAwIH0sCisg
ICAgICAgIHsgMCwgMTAwIH0KICAgICB9IH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW52ZXJ0aWJsZSA9IGZhbHNlOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFdCTW9kZWw8Zmxv
YXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5n
ZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKLSAgICAgICAgeyAwLCAxIH0sCi0gICAgICAgIHsgMCwg
MSB9LAotICAgICAgICB7IDAsIDEgfQorICAgICAgICB7IDAsIDM2MCB9LAorICAgICAgICB7IDAs
IDEwMCB9LAorICAgICAgICB7IDAsIDEwMCB9CiAgICAgfSB9OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjIsNyAr
MTQyMiw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpkYXRlUGxhY2Vob2xkZXJUZXh0Q28KICAgICAv
LyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENIQTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNMQTxmbG9h
dD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJlc3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1waW5nIHRv
IHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQgSFNMQSBkb2VzLgogICAgIGF1dG8gaHNsYSA9IHRl
eHRDb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwogICAgIGlmICh0ZXh0Q29s
b3IubHVtaW5hbmNlKCkgPCBiYWNrZ3JvdW5kQ29sb3IubHVtaW5hbmNlKCkpCi0gICAgICAgIGhz
bGEubGlnaHRuZXNzICs9IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVudEZh
Y3RvciAqICgxLjBmIC0gaHNsYS5saWdodG5lc3MpOworICAgICAgICBoc2xhLmxpZ2h0bmVzcyAr
PSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1lbnRGYWN0b3IgKiAoMTAwLjBm
IC0gaHNsYS5saWdodG5lc3MpOwogICAgIGVsc2UKICAgICAgICAgaHNsYS5saWdodG5lc3MgKj0g
ZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW50RmFjdG9yOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420260</attachid>
            <date>2021-02-14 16:15:14 -0800</date>
            <delta_ts>2021-02-14 16:27:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221881-20210214161513.patch</filename>
            <type>text/plain</type>
            <size>73072</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIxLTAyLTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVwYXJlIGZvciBhZGRpbmcgcmVs
YXRpdmUgY29sb3Igc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxODgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBleHBlcmltZW50YWwgcmVsYXRp
dmUgY29sb3Igc3VwcG9ydCBhIGxpdHRsZSBjbGVhbnVwCisgICAgICAgIGlzIGluIG9yZGVyLiBU
aGlzIGNoYW5nZToKKyAgICAgICAgCisgICAgICAgIC0gVGhyZWFkcyBhIENTU1BhcnNlckNvbnRl
eHQgdGhyb3VnaCB0aGUgY29sb3IgcGFyc2luZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBiZQorICAg
ICAgICAgIG5lZWRlZCB0byBjaGVjayBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdC4K
KyAgICAgICAgLSBEb2VzIGEgc21hbGwgY2xlYW51cCBvZiBDU1NQYXJzZXJDb250ZXh0LCBzb3J0
aW5nIGZlYXR1cmVzIGFuZCB1c2luZyB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICBsaXN0
IGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgLSBSZWZhY3RvcnMgc29tZSBvZiB0aGUgY29s
b3IgcGFyc2luZyBoZWxwZXJzIHRvIGV4dHJhY3QgbW9yZSBoZWxwZXJzLiBUaGVzZSBjbGFyaWZ5
CisgICAgICAgICAgdGhlIGNvZGUgYmV0dGVyIGFuZCB3aWxsIGJlIHNoYXJlZCBieSB0aGUgcmVs
YXRpdmUgcGFyc2Vycy4KKyAgICAgICAgLSBNb3ZlIG5vcm1hbGl6YXRpb24gb2YgY29tcG9uZW50
cyB0byBhZnRlciBwYXJzaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdvcmsKKyAgICAgICAgICBp
biB0aGUgY2FzZSBvZiBmYWlsdXJlIGFuZCBzZXBhcmF0ZSB0aGUgcGhhc2VzIGEgYml0IG1vcmUu
CisgICAgICAgIC0gUmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IFZhbHVlUmFuZ2VBbGwgcGFyYW1l
dGVycyB0aGF0IHdlcmUgYWxyZWFkeSB0aGUgZGVmYXVsdC4KKyAgICAgICAgLSBTd2l0Y2ggSFNM
QSBhbmQgSFdCQSB0byBzdG9wIHN0b3JpbmcgdGhlaXIgY29tcG9uZW50cyBpbiBhIDAtMSBub3Jt
YWxpemF0aW9uCisgICAgICAgICAgYW5kIGluc3RlYWQgdXNlIHZhbHVlcyB0aGF0IG1hdGNoIHRo
ZSBpbnB1dCwgMC0zNjAgZm9yIGh1ZSwgYW5kIDAtMTAwIGZvciB0aGUKKyAgICAgICAgICB0aGUg
cmVtYWluaW5nIHR3byBjb21wb25lbnRzLiBUaGlzIHNlZW1zIG1vcmUgbmF0dXJhbCwgYW5kIHdp
bGwgc2ltcGxpZnkKKyAgICAgICAgICBmdXR1cmUgY29sb3IgZnVuY3Rpb24gd29yayB0aGF0IGV4
cGVjdHMgdGhlIHZhbHVlcyBpbiB0aGlzIGZvcm0uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3Jr
ZXJTYWZlKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2hvdWxkRW5hYmxlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dEhhc2g6
Omhhc2gpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3VtZVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1l
Q2FyZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lT3V0bGluZUNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQYWludFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdW1lQmFja2dyb3VuZENvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6Y29uc3VtZUJvcmRlcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpub3JtYWxpemVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6
ZVdoaXRlbmVzc0JsYWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OnBhcnNlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTENIUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZv
clJHQlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkR3JhZGllbnRDb2xvclN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGluZWFyR3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29uaWNHcmFkaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbWFnZU9y
Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVDcm9zc0ZhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lRmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lU2luZ2xlU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VPcHRpb25hbEFscGhh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SW1hZ2UpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsY3VsYXRlSFNMSHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj46
OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhXQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRl
eHRDb2xvciBjb25zdCk6CisKIDIwMjEtMDItMTQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBNb2JpbGVTYWZhcmkgY3Jhc2hlcyBhdCBXZWJDb3Jl
OiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZG9FbnRlckZ1bGxzY3Jl
ZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9u
IDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIENvbG9yIENTU1BhcnNlcjo6cGFyc2VDb2xv
cldvcmtlclNhZmUoY28KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50
b2tlblJhbmdlKCkpOwogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdl
LCBIVE1MU3RhbmRhcmRNb2RlKTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdlLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkp
OwogfQogCiBDb2xvciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoU3RyaW5nVmlldyBzdHJp
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywzOSArNDcsNDYgQEAgQ1NT
UGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChDU1NQYQogewogfQogCi1DU1NQYXJzZXJD
b250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
VVJMJiBzaGVldEJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IGJhc2VVUkwo
c2hlZXRCYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogc2hlZXRCYXNlVVJM
KQotICAgICwgY2hhcnNldChjaGFyc2V0KQotICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01v
ZGUoKSA/IEhUTUxRdWlya3NNb2RlIDogSFRNTFN0YW5kYXJkTW9kZSkKLSAgICAsIGlzSFRNTERv
Y3VtZW50KGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKHNoZWV0QmFzZVVSTC5pc051bGwoKSB8fCBkb2N1bWVudC5zZWN1cml0eU9yaWdp
bigpLmNhblJlcXVlc3QoYmFzZVVSTCkpCi17Ci0gICAgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpOwotICAgIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3Ig
PSBkb2N1bWVudC5zZXR0aW5ncygpLnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVo
YXZpb3IoKTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHRleHRBdXRvc2l6aW5n
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0j
ZW5kaWYKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIGxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5sZWdhY3lP
dmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCgpOworc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxl
TGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7
CiAgICAgLy8gVGhlIGxlZ2FjeSAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2ggYmVo
YXZpb3IgbWF5IGhhdmUgYmVlbiBkaXNhYmxlZCB0aHJvdWdoIHRoZSB3ZWJzaXRlIHBvbGljeSwK
ICAgICAvLyBpbiB0aGF0IGNhc2Ugd2Ugd2FudCB0byBkaXNhYmxlIHRoZSBsZWdhY3kgYmVoYXZp
b3IgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBzZXR0aW5nIHNheXMuCiAgICAgaWYgKGF1dG8qIGxv
YWRlciA9IGRvY3VtZW50LmxvYWRlcigpKSB7CiAgICAgICAgIGlmIChsb2FkZXItPmxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3koKSA9PSBMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1Rv
dWNoUG9saWN5OjpEaXNhYmxlKQotICAgICAgICAgICAgbGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdU
b3VjaEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cisg
ICAgcmV0dXJuIGRvY3VtZW50LnNldHRpbmdzKCkubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQoKTsKK30KKyNlbmRpZgorCitDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250
ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBzaGVldEJhc2VVUkwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IGJhc2VVUkwgeyBzaGVldEJhc2VVUkwuaXNOdWxs
KCkgPyBkb2N1bWVudC5iYXNlVVJMKCkgOiBzaGVldEJhc2VVUkwgfQorICAgICwgY2hhcnNldCB7
IGNoYXJzZXQgfQorICAgICwgbW9kZSB7IGRvY3VtZW50LmluUXVpcmtzTW9kZSgpID8gSFRNTFF1
aXJrc01vZGUgOiBIVE1MU3RhbmRhcmRNb2RlIH0KKyAgICAsIGlzSFRNTERvY3VtZW50IHsgZG9j
dW1lbnQuaXNIVE1MRG9jdW1lbnQoKSB9CisgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgc2hlZXRCYXNlVVJMLmlzTnVsbCgpIHx8IGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuY2Fu
UmVxdWVzdChiYXNlVVJMKSB9CisgICAgLCB1c2VTeXN0ZW1BcHBlYXJhbmNlIHsgZG9jdW1lbnQu
cGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCkgOiBmYWxzZSB9
CisgICAgLCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBkb2N1bWVudC5zZXR0aW5ncygpLmFzcGVjdFJh
dGlvRW5hYmxlZCgpIH0KKyAgICAsIGNvbG9yRmlsdGVyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRp
bmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCkgfQorICAgICwgY29uc3RhbnRQcm9wZXJ0aWVzRW5h
YmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpIH0K
KyAgICAsIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuZGVm
ZXJyZWRDU1NQYXJzZXJFbmFibGVkKCkgfQorICAgICwgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpIH0KKyAgICAsIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7
IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3BlcnRpZXNFbmFi
bGVkKCkgfQorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgLCBsZWdh
Y3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCB7IHNob3VsZEVuYWJsZUxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2goZG9jdW1lbnQpIH0KICNlbmRpZgotICAgIHNwcmluZ1RpbWluZ0Z1
bmN0aW9uRW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuc3ByaW5nVGltaW5nRnVuY3Rpb25F
bmFibGVkKCk7Ci0gICAgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCA9IGRvY3VtZW50LnNldHRp
bmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpOwotICAgIGNvbG9yRmlsdGVyRW5hYmxl
ZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCk7CisgICAgLCBvdmVy
c2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5vdmVyc2Nyb2xsQmVo
YXZpb3JFbmFibGVkKCkgfQorICAgICwgc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQu
c2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkKCkgfQorICAgICwgc3By
aW5nVGltaW5nRnVuY3Rpb25FbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5zcHJpbmdUaW1p
bmdGdW5jdGlvbkVuYWJsZWQoKSB9CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICAs
IHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXpp
bmdFbmFibGVkKCkgfQorI2VuZGlmCisgICAgLCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0
aGFuZEJlaGF2aW9yIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6
ZVNob3J0aGFuZEJlaGF2aW9yKCkgfQogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0g
ICAgYXR0YWNobWVudEVuYWJsZWQgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCgpOworICAgICwgYXR0YWNobWVudEVuYWJs
ZWQgeyBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRF
bGVtZW50RW5hYmxlZCgpIH0KICNlbmRpZgotICAgIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCA9
IGRvY3VtZW50LnNldHRpbmdzKCkuZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKCk7Ci0gICAgc2Ny
b2xsQmVoYXZpb3JFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhT
Y3JvbGxpbmdFbmFibGVkKCk7Ci0gICAgb3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9IGRvY3Vt
ZW50LnNldHRpbmdzKCkub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCgpOwotICAgIHVzZVN5c3Rl
bUFwcGVhcmFuY2UgPSBkb2N1bWVudC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCktPnVzZVN5c3Rl
bUFwcGVhcmFuY2UoKSA6IGZhbHNlOwotICAgIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVz
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3Bl
cnRpZXNFbmFibGVkKCk7Ci0gICAgYXNwZWN0UmF0aW9FbmFibGVkID0gZG9jdW1lbnQuc2V0dGlu
Z3MoKS5hc3BlY3RSYXRpb0VuYWJsZWQoKTsKK3sKIH0KIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCkBAIC04Nywy
OCArOTQsMzEgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIAogICAg
IHJldHVybiBhLmJhc2VVUkwgPT0gYi5iYXNlVVJMCiAgICAgICAgICYmIGEuY2hhcnNldCA9PSBi
LmNoYXJzZXQKICAgICAgICAgJiYgYS5tb2RlID09IGIubW9kZQorICAgICAgICAmJiBhLmVuY2xv
c2luZ1J1bGVUeXBlID09IGIuZW5jbG9zaW5nUnVsZVR5cGUKICAgICAgICAgJiYgYS5pc0hUTUxE
b2N1bWVudCA9PSBiLmlzSFRNTERvY3VtZW50Ci0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykK
LSAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQKLSNlbmRpZgorICAgICAgICAmJiBhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPT0g
Yi5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luCisgICAgICAgICYmIGEuaXNDb250ZW50T3BhcXVl
ID09IGIuaXNDb250ZW50T3BhcXVlCisgICAgICAgICYmIGEudXNlU3lzdGVtQXBwZWFyYW5jZSA9
PSBiLnVzZVN5c3RlbUFwcGVhcmFuY2UKKyAgICAgICAgJiYgYS5hc3BlY3RSYXRpb0VuYWJsZWQg
PT0gYi5hc3BlY3RSYXRpb0VuYWJsZWQKKyAgICAgICAgJiYgYS5jb2xvckZpbHRlckVuYWJsZWQg
PT0gYi5jb2xvckZpbHRlckVuYWJsZWQKKyAgICAgICAgJiYgYS5jb25zdGFudFByb3BlcnRpZXNF
bmFibGVkID09IGIuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZAorICAgICAgICAmJiBhLmRlZmVy
cmVkQ1NTUGFyc2VyRW5hYmxlZCA9PSBiLmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZAorICAgICAg
ICAmJiBhLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSA9PSBiLmVuZm9yY2VzQ1NT
TUlNRVR5cGVJbk5vUXVpcmtzTW9kZQorICAgICAgICAmJiBhLmluZGl2aWR1YWxUcmFuc2Zvcm1Q
cm9wZXJ0aWVzRW5hYmxlZCA9PSBiLmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxl
ZAogI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCiAgICAgICAgICYmIGEubGVn
YWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaEVuYWJsZWQgPT0gYi5sZWdhY3lPdmVyZmxvd1Njcm9s
bGluZ1RvdWNoRW5hYmxlZAogI2VuZGlmCi0gICAgICAgICYmIGEuZW5mb3JjZXNDU1NNSU1FVHlw
ZUluTm9RdWlya3NNb2RlID09IGIuZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlCi0g
ICAgICAgICYmIGEudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9PSBi
LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IKKyAgICAgICAgJiYgYS5v
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkID09IGIub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZAor
ICAgICAgICAmJiBhLnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLnNjcm9sbEJlaGF2aW9yRW5h
YmxlZAogICAgICAgICAmJiBhLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9PSBiLnNwcmlu
Z1RpbWluZ0Z1bmN0aW9uRW5hYmxlZAotICAgICAgICAmJiBhLmNvbnN0YW50UHJvcGVydGllc0Vu
YWJsZWQgPT0gYi5jb25zdGFudFByb3BlcnRpZXNFbmFibGVkCi0gICAgICAgICYmIGEuY29sb3JG
aWx0ZXJFbmFibGVkID09IGIuY29sb3JGaWx0ZXJFbmFibGVkCisjaWYgRU5BQkxFKFRFWFRfQVVU
T1NJWklORykKKyAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0
b3NpemluZ0VuYWJsZWQKKyNlbmRpZgorICAgICAgICAmJiBhLnVzZUxlZ2FjeUJhY2tncm91bmRT
aXplU2hvcnRoYW5kQmVoYXZpb3IgPT0gYi51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFu
ZEJlaGF2aW9yCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICAgICAgJiYgYS5h
dHRhY2htZW50RW5hYmxlZCA9PSBiLmF0dGFjaG1lbnRFbmFibGVkCiAjZW5kaWYKLSAgICAgICAg
JiYgYS5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgPT0gYi5kZWZlcnJlZENTU1BhcnNlckVuYWJs
ZWQKLSAgICAgICAgJiYgYS5zY3JvbGxCZWhhdmlvckVuYWJsZWQgPT0gYi5zY3JvbGxCZWhhdmlv
ckVuYWJsZWQKLSAgICAgICAgJiYgYS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJs
ZWQgPT0gYi5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQKLSAgICAgICAgJiYg
YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID09IGIuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bgotICAgICAgICAmJiBhLnVzZVN5c3RlbUFwcGVhcmFuY2UgPT0gYi51c2VTeXN0ZW1BcHBlYXJh
bmNlCi0gICAgICAgICYmIGEuYXNwZWN0UmF0aW9FbmFibGVkID09IGIuYXNwZWN0UmF0aW9FbmFi
bGVkCi0gICAgICAgICYmIGEub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLm92ZXJzY3Jv
bGxCZWhhdmlvckVuYWJsZWQ7CisgICAgOwogfQogCiBVUkwgQ1NTUGFyc2VyQ29udGV4dDo6Y29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw3ICs0MSw2IEBAIGNsYXNzIERvY3VtZW50Owogc3RydWN0IENTU1BhcnNlckNvbnRl
eHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotCiAgICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKIApAQCAtNTAsMzYgKzQ5LDM3IEBAIHB1YmxpYzoKICAgICBDU1NQYXJzZXJNb2RlIG1v
ZGUgeyBIVE1MU3RhbmRhcmRNb2RlIH07CiAgICAgT3B0aW9uYWw8U3R5bGVSdWxlVHlwZT4gZW5j
bG9zaW5nUnVsZVR5cGU7CiAgICAgYm9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07Ci0jaWYg
RU5BQkxFKFRFWFRfQVVUT1NJWklORykKLSAgICBib29sIHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7
IGZhbHNlIH07Ci0jZW5kaWYKKworICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gc3VwcG9y
dCBnZXRNYXRjaGVkQ1NTUnVsZXMuCisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgZmFsc2UgfTsKKworICAgIGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKKyAgICBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAgLy8gU2V0dGluZ3MuCisg
ICAgYm9vbCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgY29sb3JGaWx0
ZXJFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIGNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQg
eyBmYWxzZSB9OworICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsK
KyAgICBib29sIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSB7IHRydWUgfTsKKyAg
ICBib29sIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNlIH07CiAj
aWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKICAgICBib29sIGxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgZW5m
b3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIHsgdHJ1ZSB9OwotICAgIGJvb2wgdXNlTGVn
YWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciB7IGZhbHNlIH07CisgICAgYm9vbCBv
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIHNjcm9sbEJlaGF2
aW9yRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBzcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJs
ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBjb2xvckZpbHRlckVuYWJsZWQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShU
RVhUX0FVVE9TSVpJTkcpCisgICAgYm9vbCB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgeyBmYWxzZSB9
OworI2VuZGlmCisgICAgYm9vbCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2
aW9yIHsgZmFsc2UgfTsKKworICAgIC8vIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuCiAjaWYgRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBib29sIGF0dGFjaG1lbnRFbmFibGVkIHsgZmFs
c2UgfTsKICNlbmRpZgotICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2Ug
fTsKLSAgICBib29sIHNjcm9sbEJlaGF2aW9yRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBp
bmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQgeyBmYWxzZSB9OwotCi0gICAgYm9v
bCBvdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKLSAgICAKLSAgICAvLyBUaGlz
IGlzIG9ubHkgbmVlZGVkIHRvIHN1cHBvcnQgZ2V0TWF0Y2hlZENTU1J1bGVzLgotICAgIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgYm9vbCB1c2VT
eXN0ZW1BcHBlYXJhbmNlIHsgZmFsc2UgfTsKIAogICAgIFVSTCBjb21wbGV0ZVVSTChjb25zdCBT
dHJpbmcmIHVybCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQ29udGVudE9wYXF1ZSB7IGZhbHNlIH07
Ci0KLSAgICBib29sIGFzcGVjdFJhdGlvRW5hYmxlZCB7IGZhbHNlIH07CiB9OwogCiBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKQEAgLTkwLDYgKzkwLDggQEAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgcwogc3RydWN0IENTU1BhcnNlckNvbnRleHRIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBrZXkpCiAgICAgeworICAgICAgICAvLyBGSVhN
RTogQ29udmVydCB0aGlzIHRvIHVzZSBXVEY6Okhhc2hlci4KKwogICAgICAgICB1bnNpZ25lZCBo
YXNoID0gMDsKICAgICAgICAgaWYgKCFrZXkuYmFzZVVSTC5pc051bGwoKSkKICAgICAgICAgICAg
IGhhc2ggXj0gV1RGOjpVUkxIYXNoOjpoYXNoKGtleS5iYXNlVVJMKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAy
NzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyNiwxNSArMTcyNiwxNSBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lWkluZGV4KENTCiAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdl
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNoYWRvdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBib29sIGlzQm94
U2hhZG93UHJvcGVydHkpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU2hhZG93KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
LCBib29sIGlzQm94U2hhZG93UHJvcGVydHkpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgp
ID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAK
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZG8gewotICAgICAgICBpZiAoUmVmUHRyPENT
U1NoYWRvd1ZhbHVlPiBzaGFkb3dWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3cocmFuZ2UsIGNz
c1BhcnNlck1vZGUsIGlzQm94U2hhZG93UHJvcGVydHksIGlzQm94U2hhZG93UHJvcGVydHkpKQot
ICAgICAgICAgICAgc2hhZG93VmFsdWVMaXN0LT5hcHBlbmQoKnNoYWRvd1ZhbHVlKTsKKyAgICAg
ICAgaWYgKGF1dG8gc2hhZG93VmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KHJhbmdlLCBjb250
ZXh0LCBpc0JveFNoYWRvd1Byb3BlcnR5LCBpc0JveFNoYWRvd1Byb3BlcnR5KSkKKyAgICAgICAg
ICAgIHNoYWRvd1ZhbHVlTGlzdC0+YXBwZW5kKHNoYWRvd1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IHdoaWxl
IChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CkBAIC0xODEzLDE5ICsx
ODEzLDE5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVUZXh0RW1waGEKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUNhcmV0Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVD
YXJldENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIHJldHVybiBjb25z
dW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBjb25zdW1lQ29sb3Io
cmFuZ2UsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0
bGluZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0bGluZUNvbG9yKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
KQogewogICAgIC8vIEFsbG93IHRoZSBzcGVjaWFsIGZvY3VzIGNvbG9yIGV2ZW4gaW4gSFRNTCBT
dGFuZGFyZCBwYXJzaW5nIG1vZGUuCiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFu
Z2UpOwotICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAg
IHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogfQogCiBzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGluZVdpZHRoKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MpCkBAIC0yMjI4LDcgKzIyMjgsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lCiAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGlvbkxvbmdoYW5kPENTU1ZhbHVlVG9w
LCBDU1NWYWx1ZUJvdHRvbT4ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOwogfQogCi1zdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lUGFpbnRTdHJva2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVQYWludFN0cm9rZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0g
Q1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKQEAgLTIy
MzgsNyArMjIzOCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8K
ICAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUp
OworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQp
OwogICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAg
ICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHVybC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTIyNDcs
NyArMjI0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8KICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gdXJsOwogICAgIH0KLSAgICByZXR1cm4gY29uc3VtZUNv
bG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yKHJhbmdl
LCBjb250ZXh0KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdseXBoT3Jp
ZW50YXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKQEAgLTMyNTgsNyArMzI1OCw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVCYWNrZ3JvdW4KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1NpemU6CiAgICAgICAgIHJldHVybiBjb25zdW1lQmFja2dyb3VuZFNpemUocHJvcGVydHks
IHJhbmdlLCBjb250ZXh0Lm1vZGUpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQubW9kZSk7Cisg
ICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH07CkBAIC00MjQxLDcgKzQyNDEsNyBAQCBSZWZQdHI8Q1NT
VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93
czoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGl2ZUludGVnZXIobV9yYW5nZSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3I6Ci0gICAgICAgIHJldHVybiBjb25z
dW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICByZXR1cm4gY29uc3Vt
ZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uU2tpcDoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVUZXh0RGVjb3JhdGlvblNraXAobV9y
YW5nZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aDoKQEAgLTQy
NjEsMTIgKzQyNjEsMTIgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFy
cwogICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZENvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlM
aWdodGluZ0NvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxlQ29sb3I6Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAg
ICByZXR1cm4gY29uc3VtZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNhcmV0Q29sb3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvcihtX3Jh
bmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvciht
X3JhbmdlLCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICByZXR1cm4gY29uc3VtZUNvbG9y
KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBpblF1aXJrc01vZGUoKSk7CisgICAgICAgIHJldHVy
biBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0LCBpblF1aXJrc01vZGUoKSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklubGluZVN0YXJ0V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlcklubGluZUVuZFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCbG9j
a1N0YXJ0V2lkdGg6CkBAIC00Mjc4LDcgKzQyNzgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1By
b3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOiB7
CiAgICAgICAgIGJvb2wgYWxsb3dRdWlya3lDb2xvcnMgPSBpblF1aXJrc01vZGUoKQogICAgICAg
ICAgICAgJiYgKGN1cnJlbnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkIHx8IGN1cnJl
bnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlCb3JkZXJDb2xvcik7Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIGFsbG93UXVpcmt5Q29sb3JzKTsK
KyAgICAgICAgcmV0dXJuIGNvbnN1bWVDb2xvcihtX3JhbmdlLCBtX2NvbnRleHQsIGFsbG93UXVp
cmt5Q29sb3JzKTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRo
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6CkBAIC00Mjk0LDcgKzQyOTQs
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NTMi4x
LCBiYWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKICAgICBjYXNlIENTU1Byb3BlcnR5Qm94
U2hhZG93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6Ci0gICAgICAgIHJl
dHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eUJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNo
YWRvdyk7CisgICAgICAgIHJldHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dCwg
cHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlXZWJraXRCb3hTaGFkb3cpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CiAjaWYgRU5B
QkxFKEZJTFRFUlNfTEVWRUxfMikKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXI6CkBAIC00MzQyLDcgKzQzNDIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5
UGFyc2VyOjpwYXJzCiAgICAgICAgIHJldHVybiBjb25zdW1lUm90YXRlKG1fcmFuZ2UsIG1fY29u
dGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3Ryb2tlOgotICAgICAgICByZXR1cm4gY29uc3VtZVBhaW50U3Ryb2tlKG1fcmFuZ2UsIG1f
Y29udGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQYWludFN0cm9rZShtX3Jhbmdl
LCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uVmVydGlj
YWw6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgogICAg
ICAgICByZXR1cm4gY29uc3VtZUdseXBoT3JpZW50YXRpb24obV9yYW5nZSwgbV9jb250ZXh0Lm1v
ZGUsIHByb3BlcnR5KTsKQEAgLTUwOTMsNyArNTA5Myw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJz
ZXI6OmNvbnN1bWVCb3JkZXIoUmUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVDb2xv
cihtX3JhbmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVD
b2xvcihtX3JhbmdlLCBtX2NvbnRleHQpOwogICAgICAgICAgICAgaWYgKGNvbG9yKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwyNjggKzY5MCwyNzkgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVXJsKENTUwogICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHVybC50b1N0cmluZygpLCBDU1NVbml0VHlwZTo6
Q1NTX1VSSSk7CiB9CiAKLXN0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSB2
YWx1ZSwgYm9vbCBpc1BlcmNlbnRhZ2UpCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1l
T3B0aW9uYWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoaXNQ
ZXJjZW50YWdlKQorICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5n
ZSkpCisgICAgICAgIHJldHVybiAxLjA7CisKKyAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9
IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcocmFuZ2UpKQorICAgICAgICBy
ZXR1cm4gY2xhbXBUbzxkb3VibGU+KCphbHBoYVBhcmFtZXRlciwgMC4wLCAxLjApOworCisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZUh1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
Y29udGV4dCkKK3sKKyAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwg
Y29udGV4dC5tb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpG
b3JiaWQpKQorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVz
KGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOworCisgICAgaWYgKGF1dG8gbnVtYmVyID0gY29u
c3VtZU51bWJlclJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiAqbnVtYmVyOworCisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIGRvdWJsZSBub3JtYWxpemVIdWUoZG91Ymxl
IGh1ZSkKK3sKKyAgICByZXR1cm4gc3RkOjpmbW9kKHN0ZDo6Zm1vZChodWUsIDM2MC4wKSArIDM2
MC4wLCAzNjAuMCk7Cit9CisKK2VudW0gY2xhc3MgUkdCQ29tcG9uZW50VHlwZSB7CisgICAgTnVt
YmVyLAorICAgIFBlcmNlbnRhZ2UKK307CisKK3N0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9u
ZW50KGRvdWJsZSB2YWx1ZSwgUkdCQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlKQoreworICAg
IGlmIChjb21wb25lbnRUeXBlID09IFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2UpCiAgICAg
ICAgIHZhbHVlID0gdmFsdWUgLyAxMDAuMCAqIDI1NS4wOwogCiAgICAgcmV0dXJuIGNvbnZlcnRQ
cmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOwogfQogCi1zdGF0aWMgQ29sb3Ig
cGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorZW51bSBjbGFz
cyBSR0JPckhTTFNlcGFyYXRvclN5bnRheCB7CisgICAgQ29tbWFzLAorICAgIFdoaXRlc3BhY2VT
bGFzaCwKK307CisKK3N0YXRpYyBib29sIGNvbnN1bWVSR0JPckhTTFNlcGFyYXRvcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzLCBSR0JPckhTTFNlcGFyYXRvclN5bnRheCBzeW50YXgpCit7Cisg
ICAgaWYgKHN5bnRheCA9PSBSR0JPckhTTFNlcGFyYXRvclN5bnRheDo6Q29tbWFzKQorICAgICAg
ICByZXR1cm4gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY29uc3VtZVJHQk9ySFNMQWxwaGFTZXBhcmF0b3Io
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgUkdCT3JIU0xTZXBhcmF0b3JTeW50YXggc3ludGF4
KQoreworICAgIGlmIChzeW50YXggPT0gUkdCT3JIU0xTZXBhcmF0b3JTeW50YXg6OkNvbW1hcykK
KyAgICAgICAgcmV0dXJuIGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Cisg
ICAgCisgICAgcmV0dXJuIGNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Cit9
CisKK3N0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKQogewogICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlUmdiIHx8IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklk
KCkgPT0gQ1NTVmFsdWVSZ2JhKTsKICAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFu
Z2UpOwogCi0gICAgYm9vbCBpc1BlcmNlbnRhZ2UgPSBmYWxzZTsKLSAgICBkb3VibGUgY29sb3JQ
YXJhbWV0ZXI7Ci0gICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkK
LSAgICAgICAgY29sb3JQYXJhbWV0ZXIgPSAqbnVtYmVyOwotICAgIGVsc2UgaWYgKGF1dG8gcGVy
Y2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKSB7Ci0gICAgICAgIGNvbG9yUGFyYW1ldGVy
ID0gKnBlcmNlbnQ7Ci0gICAgICAgIGlzUGVyY2VudGFnZSA9IHRydWU7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHJldHVybiB7IH07CisgICAgc3RydWN0IEluaXRpYWxDb21wb25lbnQgeworICAgICAg
ICBkb3VibGUgdmFsdWU7CisgICAgICAgIFJHQkNvbXBvbmVudFR5cGUgdHlwZTsKKyAgICB9Owog
Ci0gICAgZW51bSBjbGFzcyBDb2xvclN5bnRheCB7Ci0gICAgICAgIENvbW1hcywKLSAgICAgICAg
V2hpdGVzcGFjZVNsYXNoLAorICAgIGF1dG8gY29uc3VtZUluaXRpYWxDb21wb25lbnQgPSBbXShh
dXRvIGFyZ3MpIC0+IE9wdGlvbmFsPEluaXRpYWxDb21wb25lbnQ+IHsKKyAgICAgICAgaWYgKGF1
dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiB7
IHsgKm51bWJlciwgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0gfTsKKyAgICAgICAgaWYgKGF1
dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQorICAgICAgICAgICAgcmV0dXJu
IHsgeyAqcGVyY2VudCwgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9IH07CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfTsKIAotICAgIENvbG9yU3ludGF4IHN5bnRheCA9
IENvbG9yU3ludGF4OjpDb21tYXM7Ci0gICAgYXV0byBjb25zdW1lU2VwYXJhdG9yID0gWyZdIHsK
LSAgICAgICAgaWYgKHN5bnRheCA9PSBDb2xvclN5bnRheDo6Q29tbWFzKQotICAgICAgICAgICAg
cmV0dXJuIGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvIGNvbnN1bWVDb21wb25lbnQgPSBbXShhdXRv
IGFyZ3MsIGF1dG8gY29tcG9uZW50VHlwZSkgeworICAgICAgICBzd2l0Y2ggKGNvbXBvbmVudFR5
cGUpIHsKKyAgICAgICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlOgorICAgICAg
ICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOworICAgICAgICBjYXNlIFJHQkNv
bXBvbmVudFR5cGU6Ok51bWJlcjoKKyAgICAgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3
KGFyZ3MpOworICAgICAgICB9CiAgICAgfTsKIAotICAgIHVpbnQ4X3QgY29sb3JBcnJheVszXTsK
LSAgICBjb2xvckFycmF5WzBdID0gY2xhbXBSR0JDb21wb25lbnQoY29sb3JQYXJhbWV0ZXIsIGlz
UGVyY2VudGFnZSk7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCAzOyBpKyspIHsKLSAgICAgICAg
aWYgKGkgPT0gMSkKLSAgICAgICAgICAgIHN5bnRheCA9IGNvbnN1bWVDb21tYUluY2x1ZGluZ1do
aXRlc3BhY2UoYXJncykgPyBDb2xvclN5bnRheDo6Q29tbWFzIDogQ29sb3JTeW50YXg6OldoaXRl
c3BhY2VTbGFzaDsKLSAgICAgICAgZWxzZSBpZiAoIWNvbnN1bWVTZXBhcmF0b3IoKSkKLSAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byBpbml0aWFsQ29tcG9uZW50ID0gY29uc3VtZUlu
aXRpYWxDb21wb25lbnQoYXJncyk7CisgICAgaWYgKCFpbml0aWFsQ29tcG9uZW50KQorICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgICAgIGlmIChpc1BlcmNlbnRhZ2UpIHsKLSAgICAgICAgICAg
IGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwotICAgICAgICAgICAgaWYg
KCFwZXJjZW50KQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICBjb2xv
ckFycmF5W2ldID0gY2xhbXBSR0JDb21wb25lbnQoKnBlcmNlbnQsIHRydWUpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3Mp
OwotICAgICAgICAgICAgaWYgKCFudW1iZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgICAgIGNvbG9yQXJyYXlbaV0gPSBjbGFtcFJHQkNvbXBvbmVudCgqbnVtYmVyLCBm
YWxzZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYXV0byBjb21wb25lbnRUeXBlID0gaW5pdGlh
bENvbXBvbmVudC0+dHlwZTsKKyAgICBhdXRvIHJlZCA9IGluaXRpYWxDb21wb25lbnQtPnZhbHVl
OwogCi0gICAgLy8gSGlzdG9yaWNhbGx5LCBhbHBoYSB3YXMgb25seSBwYXJzZWQgZm9yIHJnYmEo
KSwgYnV0IGNzcy1jb2xvci00IHNwZWNpZmllcyB0aGF0IHJnYmEoKSBpcyBhIHNpbXBsZSBhbGlh
cyBmb3IgcmdiKCkuCi0gICAgYXV0byBjb25zdW1lQWxwaGFTZXBhcmF0b3IgPSBbJl0gewotICAg
ICAgICBpZiAoc3ludGF4ID09IENvbG9yU3ludGF4OjpDb21tYXMpCi0gICAgICAgICAgICByZXR1
cm4gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiBjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwotICAgIH07
CisgICAgYXV0byBzeW50YXggPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3Mp
ID8gUkdCT3JIU0xTZXBhcmF0b3JTeW50YXg6OkNvbW1hcyA6IFJHQk9ySFNMU2VwYXJhdG9yU3lu
dGF4OjpXaGl0ZXNwYWNlU2xhc2g7CisgICAgCisgICAgYXV0byBncmVlbiA9IGNvbnN1bWVDb21w
b25lbnQoYXJncywgY29tcG9uZW50VHlwZSk7CisgICAgaWYgKCFncmVlbikKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIGlmICghY29uc3VtZVJHQk9ySFNMU2VwYXJhdG9yKGFyZ3MsIHN5bnRh
eCkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICB1aW50OF90IGFscGhhQ29tcG9uZW50ID0g
MjU1OwotICAgIGlmIChjb25zdW1lQWxwaGFTZXBhcmF0b3IoKSkgewotICAgICAgICBhdXRvIGFs
cGhhID0gY29uc3VtZU51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhhcmdzKTsKLSAgICAg
ICAgaWYgKCFhbHBoYSkKKyAgICBhdXRvIGJsdWUgPSBjb25zdW1lQ29tcG9uZW50KGFyZ3MsIGNv
bXBvbmVudFR5cGUpOworICAgIGlmICghYmx1ZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IGRvdWJsZSBhbHBoYSA9IDE7CisgICAgaWYgKGNvbnN1bWVSR0JPckhTTEFscGhhU2VwYXJhdG9y
KGFyZ3MsIHN5bnRheCkpIHsKKyAgICAgICAgYXV0byBhbHBoYUNvbXBvbmVudCA9IGNvbnN1bWVO
dW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAgICAgIGlmICghYWxwaGFD
b21wb25lbnQpCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBhbHBoYUNvbXBvbmVu
dCA9IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oKmFscGhhKTsKKyAgICAgICAgYWxwaGEg
PSAqYWxwaGFDb21wb25lbnQ7CiAgICAgfQogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gU1JHQkE8dWludDhfdD4geyBjb2xvckFycmF5
WzBdLCBjb2xvckFycmF5WzFdLCBjb2xvckFycmF5WzJdLCBhbHBoYUNvbXBvbmVudCB9OworICAg
IHJldHVybiBTUkdCQTx1aW50OF90PiB7IGNsYW1wUkdCQ29tcG9uZW50KHJlZCwgY29tcG9uZW50
VHlwZSksIGNsYW1wUkdCQ29tcG9uZW50KCpncmVlbiwgY29tcG9uZW50VHlwZSksIGNsYW1wUkdC
Q29tcG9uZW50KCpibHVlLCBjb21wb25lbnRUeXBlKSwgY29udmVydEZsb2F0QWxwaGFUbzx1aW50
OF90PihhbHBoYSkgfTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3Rh
dGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVl
aygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUhzbCB8fCByYW5nZS5wZWVrKCkuZnVuY3Rpb25J
ZCgpID09IENTU1ZhbHVlSHNsYSk7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJh
bmdlKTsKIAotICAgIGRvdWJsZSBodWVBbmdsZUluRGVncmVlczsKLSAgICBpZiAoYXV0byBhbmds
ZSA9IGNvbnN1bWVBbmdsZVJhdyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpG
b3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQotICAgICAgICBodWVBbmdsZUluRGVn
cmVlcyA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5n
bGUtPnZhbHVlKTsKLSAgICBlbHNlIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXco
YXJncykpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gKm51bWJlcjsKLSAgICBlbHNlCisg
ICAgYXV0byBodWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGlmICghaHVlKQog
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZG91YmxlIGNvbG9yQXJyYXlbM107Ci0gICAgY29s
b3JBcnJheVswXSA9IGZtb2QoZm1vZChodWVBbmdsZUluRGVncmVlcywgMzYwLjApICsgMzYwLjAs
IDM2MC4wKSAvIDM2MC4wOworICAgIGF1dG8gc3ludGF4ID0gY29uc3VtZUNvbW1hSW5jbHVkaW5n
V2hpdGVzcGFjZShhcmdzKSA/IFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4OjpDb21tYXMgOiBSR0JP
ckhTTFNlcGFyYXRvclN5bnRheDo6V2hpdGVzcGFjZVNsYXNoOwogCi0gICAgYm9vbCByZXF1aXJl
c0NvbW1hcyA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7Ci0gICAg
ICAgIGlmIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKSB7Ci0gICAgICAg
ICAgICBpZiAoaSAhPSAxICYmICFyZXF1aXJlc0NvbW1hcykKLSAgICAgICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICAgICAgcmVxdWlyZXNDb21tYXMgPSB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKHJlcXVpcmVzQ29tbWFzIHx8IGFyZ3MuYXRFbmQoKSB8fCAoJmFyZ3MucGVlaygpIC0g
MSktPnR5cGUoKSAhPSBXaGl0ZXNwYWNlVG9rZW4pCi0gICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICBhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKLSAgICAgICAg
aWYgKCFwZXJjZW50KQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgY29sb3JBcnJh
eVtpXSA9IGNsYW1wVG88ZG91YmxlPigqcGVyY2VudCwgMC4wLCAxMDAuMCkgLyAxMDAuMDsgLy8g
TmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAuCi0gICAgfQorICAgIGF1dG8gc2F0
dXJhdGlvbiA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOworICAgIGlmICghc2F0dXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGJvb2wgY29tbWFDb25zdW1lZCA9IGNvbnN1bWVD
b21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgYm9vbCBzbGFzaENvbnN1bWVkID0g
Y29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKLSAgICBpZiAoKGNvbW1hQ29u
c3VtZWQgJiYgIXJlcXVpcmVzQ29tbWFzKSB8fCAoc2xhc2hDb25zdW1lZCAmJiByZXF1aXJlc0Nv
bW1hcykpCisgICAgaWYgKCFjb25zdW1lUkdCT3JIU0xTZXBhcmF0b3IoYXJncywgc3ludGF4KSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNl
bnRSYXcoYXJncyk7CisgICAgaWYgKCFsaWdodG5lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICBkb3VibGUgYWxwaGEgPSAxLjA7Ci0gICAgaWYgKGNvbW1hQ29uc3VtZWQgfHwgc2xhc2hD
b25zdW1lZCkgeworICAgIGlmIChjb25zdW1lUkdCT3JIU0xBbHBoYVNlcGFyYXRvcihhcmdzLCBz
eW50YXgpKSB7CiAgICAgICAgIGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyT3JQ
ZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwogICAgICAgICBpZiAoIWFscGhhUGFyYW1ldGVy
KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgYWxwaGEgPSBjbGFtcFRvPGRvdWJs
ZT4oKmFscGhhUGFyYW1ldGVyLCAwLjAsIDEuMCk7CisgICAgICAgIGFscGhhID0gKmFscGhhUGFy
YW1ldGVyOwogICAgIH0KIAogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oSFNMQTxmbG9h
dD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOworICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1h
bGl6ZUh1ZSgqaHVlKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRTYXR1cmF0aW9uID0gY2xhbXBUbzxk
b3VibGU+KCpzYXR1cmF0aW9uLCAwLjAsIDEwMC4wKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRMaWdo
dG5lc3MgPSBjbGFtcFRvPGRvdWJsZT4oKmxpZ2h0bmVzcywgMC4wLCAxMDAuMCk7CisgICAgYXV0
byBub3JtYWxpemVkQWxwaGEgPSBjbGFtcFRvPGRvdWJsZT4oYWxwaGEsIDAuMCwgMS4wKTsKKwor
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KEhTTEE8ZmxvYXQ+IHsgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFs
aXplZFNhdHVyYXRpb24pLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZExpZ2h0bmVzcyks
IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkQWxwaGEpIH0pOwogfQogCi1zdGF0aWMgT3B0
aW9uYWw8ZmxvYXQ+IHBhcnNlT3B0aW9uYWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKK3N0cnVjdCBXaGl0ZW5lc3NCbGFja25lc3MgeworICAgIGRvdWJsZSB3aGl0ZW5lc3M7Cisg
ICAgZG91YmxlIGJsYWNrbmVzczsKK307CitzdGF0aWMgV2hpdGVuZXNzQmxhY2tuZXNzIG5vcm1h
bGl6ZVdoaXRlbmVzc0JsYWNrbmVzcyhkb3VibGUgd2hpdGVuZXNzLCBkb3VibGUgYmxhY2tuZXNz
KQogewotICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpCi0g
ICAgICAgIHJldHVybiAxLjBmOworICAgIFdoaXRlbmVzc0JsYWNrbmVzcyByZXN1bHQ7CiAKLSAg
ICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVk
QnkxMDBSYXcocmFuZ2UpKQotICAgICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oKmFscGhhUGFy
YW1ldGVyLCAwLjAsIDEuMCk7CisgICAgLy8gICBWYWx1ZXMgb3V0c2lkZSBvZiB0aGVzZSByYW5n
ZXMgYXJlIG5vdCBpbnZhbGlkLCBidXQgYXJlIGNsYW1wZWQgdG8gdGhlCisgICAgLy8gICByYW5n
ZXMgZGVmaW5lZCBoZXJlIGF0IGNvbXB1dGVkLXZhbHVlIHRpbWUuCisgICAgcmVzdWx0LndoaXRl
bmVzcyA9IGNsYW1wVG88ZG91YmxlPih3aGl0ZW5lc3MsIDAsIDEwMCk7CisgICAgcmVzdWx0LmJs
YWNrbmVzcyA9IGNsYW1wVG88ZG91YmxlPihibGFja25lc3MsIDAsIDEwMCk7CiAKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIC8vICAgSWYgdGhlIHN1bSBvZiB0aGVzZSB0d28gYXJndW1l
bnRzIGlzIGdyZWF0ZXIgdGhhbiAxMDAlLCB0aGVuIGF0CisgICAgLy8gICBjb21wdXRlZC12YWx1
ZSB0aW1lIHRoZXkgYXJlIGZ1cnRoZXIgbm9ybWFsaXplZCB0byBhZGQgdXAgdG8gMTAwJSwgd2l0
aAorICAgIC8vICAgdGhlIHNhbWUgcmVsYXRpdmUgcmF0aW8uCisgICAgaWYgKGF1dG8gc3VtID0g
cmVzdWx0LndoaXRlbmVzcyArIHJlc3VsdC5ibGFja25lc3M7IHN1bSA+PSAxMDApIHsKKyAgICAg
ICAgcmVzdWx0LndoaXRlbmVzcyAqPSAxMDAuMCAvIHN1bTsKKyAgICAgICAgcmVzdWx0LmJsYWNr
bmVzcyAqPSAxMDAuMCAvIHN1bTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dGF0aWMgQ29sb3IgcGFyc2VIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCitzdGF0aWMgQ29sb3IgcGFyc2VIV0JQYXJh
bWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBjb250ZXh0KQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENT
U1ZhbHVlSHdiKTsKICAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0g
ICAgZG91YmxlIGh1ZUFuZ2xlSW5EZWdyZWVzOwotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3Vt
ZUFuZ2xlUmF3KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUp
OwotICAgIGVsc2UgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKLSAg
ICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSAqbnVtYmVyOwotICAgIGVsc2UKKyAgICBhdXRvIGh1
ZSA9IGNvbnN1bWVIdWUoYXJncywgY29udGV4dCk7CisgICAgaWYgKCFodWUpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBhdXRvIHdoaXRlbmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3Ms
IFZhbHVlUmFuZ2VBbGwpOworICAgIGF1dG8gd2hpdGVuZXNzID0gY29uc3VtZVBlcmNlbnRSYXco
YXJncyk7CiAgICAgaWYgKCF3aGl0ZW5lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIGJsYWNrbmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwor
ICAgIGF1dG8gYmxhY2tuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CiAgICAgaWYgKCFi
bGFja25lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VP
cHRpb25hbEFscGhhKGFyZ3MpOworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBo
YShhcmdzKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYg
KCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAvLyBOb3JtYWxpemUg
aHVlLgotCi0gICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSBzdGQ6OmZtb2QoaHVlQW5nbGVJbkRlZ3Jl
ZXMsIDM2MC4wKTsKLSAgICBpZiAoaHVlQW5nbGVJbkRlZ3JlZXMgPCAwLjApCi0gICAgICAgIGh1
ZUFuZ2xlSW5EZWdyZWVzICs9IDM2MC4wOwotICAgIAotICAgIC8vIENvbnZlcnQgYW5nbGUgdG8g
bm9ybWFsaXplZCBmb3JtIGZyb20gMCAtIDEuCi0gICAgYXV0byBub3JtYWxpemVkSHVlID0gaHVl
QW5nbGVJbkRlZ3JlZXMgLyAzNjAuMDsKLQotICAgIC8vIE5vcm1hbGl6ZSB3aGl0ZW5lc3MvYmxh
Y2tuZXNzLgotCi0gICAgLy8gICBWYWx1ZXMgb3V0c2lkZSBvZiB0aGVzZSByYW5nZXMgYXJlIG5v
dCBpbnZhbGlkLCBidXQgYXJlIGNsYW1wZWQgdG8gdGhlCi0gICAgLy8gICByYW5nZXMgZGVmaW5l
ZCBoZXJlIGF0IGNvbXB1dGVkLXZhbHVlIHRpbWUuCi0gICAgYXV0byBub21hbGl6ZWRXaGl0ZW5l
c3MgPSBjbGFtcFRvPGRvdWJsZT4oKndoaXRlbmVzcywgMCwgMTAwKTsKLSAgICBhdXRvIG5vbWFs
aXplZEJsYWNrbmVzcyA9IGNsYW1wVG88ZG91YmxlPigqYmxhY2tuZXNzLCAwLCAxMDApOwotCi0g
ICAgLy8gICBJZiB0aGUgc3VtIG9mIHRoZXNlIHR3byBhcmd1bWVudHMgaXMgZ3JlYXRlciB0aGFu
IDEwMCUsIHRoZW4gYXQKLSAgICAvLyAgIGNvbXB1dGVkLXZhbHVlIHRpbWUgdGhleSBhcmUgZnVy
dGhlciBub3JtYWxpemVkIHRvIGFkZCB1cCB0byAxMDAlLCB3aXRoCi0gICAgLy8gICB0aGUgc2Ft
ZSByZWxhdGl2ZSByYXRpby4KLSAgICBpZiAoYXV0byBzdW0gPSBub21hbGl6ZWRXaGl0ZW5lc3Mg
KyBub21hbGl6ZWRCbGFja25lc3M7IHN1bSA+PSAxMDApIHsKLSAgICAgICAgbm9tYWxpemVkV2hp
dGVuZXNzICo9IDEwMC4wIC8gc3VtOwotICAgICAgICBub21hbGl6ZWRCbGFja25lc3MgKj0gMTAw
LjAgLyBzdW07Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCB0byBub3JtYWxpemVkIGZvcm0gZnJv
bSAwIC0gMS4KLSAgICBub21hbGl6ZWRXaGl0ZW5lc3MgLz0gMTAwLjA7Ci0gICAgbm9tYWxpemVk
QmxhY2tuZXNzIC89IDEwMC4wOworICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1hbGl6ZUh1
ZSgqaHVlKTsKKyAgICBhdXRvIFtub3JtYWxpemVkV2hpdG5lc3MsIG5vcm1hbGl6ZWRCbGFja25l
c3NdID0gbm9ybWFsaXplV2hpdGVuZXNzQmxhY2tuZXNzKCp3aGl0ZW5lc3MsICpibGFja25lc3Mp
OwogCi0gICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oSFdCQTxmbG9hdD4g
eyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZEh1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihu
b21hbGl6ZWRXaGl0ZW5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9tYWxpemVkQmxhY2tuZXNz
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xv
cjxTUkdCQTx1aW50OF90Pj4oSFdCQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFs
aXplZEh1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkV2hpdG5lc3MpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4obm9ybWFsaXplZEJsYWNrbmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxw
aGEpIH0pOwogfQogCi1zdGF0aWMgQ29sb3IgcGFyc2VMYWJQYXJhbWV0ZXJzKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQorc3RhdGljIENvbG9yIHBhcnNlTGFiUGFyYW1ldGVycyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpCiB7CiAgICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVMYWIpOwogICAgIGF1dG8g
YXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKLSAgICBhdXRvIGxpZ2h0bmVzcyA9IGNv
bnN1bWVQZXJjZW50UmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgIGF1dG8gbGlnaHRuZXNz
ID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CiAgICAgaWYgKCFsaWdodG5lc3MpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywg
VmFsdWVSYW5nZUFsbCk7CisgICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3Mp
OwogICAgIGlmICghYVZhbHVlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBiVmFs
dWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgIGF1dG8gYlZh
bHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKICAgICBpZiAoIWJWYWx1ZSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYWxwaGEgPSBwYXJzZU9wdGlvbmFsQWxwaGEoYXJncyk7
CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhhKGFyZ3MpOwogICAgIGlmICgh
YWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBMYWI8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KCpsaWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFWYWx1ZSksIHN0YXRpY19j
YXN0PGZsb2F0PigqYlZhbHVlKSwgKmFscGhhIH07CisgICAgcmV0dXJuIExhYjxmbG9hdD4geyBz
dGF0aWNfY2FzdDxmbG9hdD4oKmxpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqYVZhbHVl
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpiVmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhh
KSB9OwogfQogCi1zdGF0aWMgQ29sb3IgcGFyc2VMQ0hQYXJhbWV0ZXJzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCitzdGF0aWMgQ29sb3Ig
cGFyc2VMQ0hQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rp
b25JZCgpID09IENTU1ZhbHVlTGNoKTsKICAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24o
cmFuZ2UpOwogCi0gICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBW
YWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIGxpZ2h0bmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFy
Z3MpOwogICAgIGlmICghbGlnaHRuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0
byBjaHJvbWFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7Ci0g
ICAgaWYgKCFjaHJvbWFWYWx1ZSkKKyAgICBhdXRvIGNocm9tYSA9IGNvbnN1bWVOdW1iZXJSYXco
YXJncyk7CisgICAgaWYgKCFjaHJvbWEpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBkb3Vi
bGUgaHVlQW5nbGVJbkRlZ3JlZXM7Ci0gICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVS
YXcoYXJncywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1pl
cm9RdWlyazo6Rm9yYmlkKSkKLSAgICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7Ci0gICAg
ZWxzZSBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VB
bGwpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9ICpudW1iZXI7Ci0gICAgZWxzZQorICAg
IGF1dG8gaHVlID0gY29uc3VtZUh1ZShhcmdzLCBjb250ZXh0KTsKKyAgICBpZiAoIWh1ZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gZm1vZChodWVBbmds
ZUluRGVncmVlcywgMzYwLjApOwotICAgIGlmIChodWVBbmdsZUluRGVncmVlcyA8IDAuMCkKLSAg
ICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgKz0gMzYwLjA7Ci0KLSAgICBhdXRvIGFscGhhID0gcGFy
c2VPcHRpb25hbEFscGhhKGFyZ3MpOworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxB
bHBoYShhcmdzKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
aWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gY29u
dmVydENvbG9yPExhYjxmbG9hdD4+KExDSEE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCps
aWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmNocm9tYVZhbHVlKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGh1ZUFuZ2xlSW5EZWdyZWVzKSwgKmFscGhhIH0pOworICAgIGF1dG8gbm9ybWFsaXpl
ZEh1ZSA9IG5vcm1hbGl6ZUh1ZSgqaHVlKTsKKworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFi
PGZsb2F0Pj4oTENIQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oKmxpZ2h0bmVzcyksIHN0
YXRpY19jYXN0PGZsb2F0PigqY2hyb21hKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRI
dWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPgotc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cGVz
KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyhDU1NQYXJzZXJUb2tl
blJhbmdlJiBhcmdzKQogewogICAgIEFTU0VSVChhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVl
QTk4UmdiIHx8IGFyZ3MucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVEaXNwbGF5UDMgfHwgYXJncy5w
ZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZVByb3Bob3RvUmdiIHx8IGFyZ3MucGVlaygpLmlkKCkgPT0g
Q1NTVmFsdWVSZWMyMDIwIHx8IGFyZ3MucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVTUkdCKTsKICAg
ICBjb25zdW1lSWRlbnRSYXcoYXJncyk7CkBAIC05NjQsMTEgKzk3NSwxMSBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwCiAgICAgICAgIGNoYW5uZWxzW2ldID0gKnZh
bHVlOwogICAgIH0KIAotICAgIGF1dG8gYWxwaGEgPSBwYXJzZU9wdGlvbmFsQWxwaGEoYXJncyk7
CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhhKGFyZ3MpOwogICAgIGlmICgh
YWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gQ29sb3JUeXBlIHsgY2xh
bXBUbzxmbG9hdD4oY2hhbm5lbHNbMF0sIDAuMCwgMS4wKSwgY2xhbXBUbzxmbG9hdD4oY2hhbm5l
bHNbMV0sIDAuMCwgMS4wKSwgY2xhbXBUbzxmbG9hdD4oY2hhbm5lbHNbMl0sIDAuMCwgMS4wKSwg
KmFscGhhIH07CisgICAgcmV0dXJuIENvbG9yVHlwZSB7IGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxz
WzBdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzFdLCAwLjAsIDEuMCksIGNs
YW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzJdLCAwLjAsIDEuMCksIHN0YXRpY19jYXN0PGZsb2F0Pigq
YWxwaGEpIH07CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JMYWJQYXJh
bWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MpCkBAIC05NzgsMjcgKzk4OSwyNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyCiAKICAgICBkb3VibGUgY2hh
bm5lbHNbM10gPSB7IDAsIDAsIDAgfTsKICAgICBbJl0gewotICAgICAgICBhdXRvIGxpZ2h0bmVz
cyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRv
IGxpZ2h0bmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgICAgICBpZiAoIWxpZ2h0
bmVzcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hhbm5lbHNbMF0gPSAqbGlnaHRu
ZXNzOwogCi0gICAgICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1
ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3Mp
OwogICAgICAgICBpZiAoIWFWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hh
bm5lbHNbMV0gPSAqYVZhbHVlOwogCi0gICAgICAgIGF1dG8gYlZhbHVlID0gY29uc3VtZU51bWJl
clJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byBiVmFsdWUgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MpOwogICAgICAgICBpZiAoIWJWYWx1ZSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgY2hhbm5lbHNbMl0gPSAqYlZhbHVlOwogICAgIH0oKTsKIAotICAgIGF1dG8g
YWxwaGEgPSBwYXJzZU9wdGlvbmFsQWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1
bWVPcHRpb25hbEFscGhhKGFyZ3MpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVs
c1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZsb2F0
PihjaGFubmVsc1syXSksICphbHBoYSB9OworICAgIHJldHVybiBMYWI8ZmxvYXQ+IHsgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzFd
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCph
bHBoYSkgfTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcmFt
ZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncykKQEAgLTEwMDgsMjcgKzEwMTksMjcgQEAg
c3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcgogCiAgICAgZG91YmxlIGNo
YW5uZWxzWzNdID0geyAwLCAwLCAwIH07CiAgICAgWyZdIHsKLSAgICAgICAgYXV0byB4ID0gY29u
c3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byB4ID0gY29u
c3VtZU51bWJlclJhdyhhcmdzKTsKICAgICAgICAgaWYgKCF4KQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjaGFubmVsc1swXSA9ICp4OwogCi0gICAgICAgIGF1dG8geSA9IGNvbnN1bWVO
dW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8geSA9IGNvbnN1bWVO
dW1iZXJSYXcoYXJncyk7CiAgICAgICAgIGlmICgheSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgY2hhbm5lbHNbMV0gPSAqeTsKIAotICAgICAgICBhdXRvIHogPSBjb25zdW1lTnVtYmVy
UmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRvIHogPSBjb25zdW1lTnVtYmVy
UmF3KGFyZ3MpOwogICAgICAgICBpZiAoIXopCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNoYW5uZWxzWzJdID0gKno7CiAgICAgfSgpOwogCi0gICAgYXV0byBhbHBoYSA9IHBhcnNlT3B0
aW9uYWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGEo
YXJncyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVy
biBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50OjpENTA+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5u
ZWxzWzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGNoYW5uZWxzWzJdKSwgKmFscGhhIH07CisgICAgcmV0dXJuIFhZWkE8ZmxvYXQsIFdoaXRl
UG9pbnQ6OkQ1MD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMF0pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oY2hhbm5lbHNbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMl0pLCBz
dGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xv
ckZ1bmN0aW9uUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTExMTEs
NyArMTEyMiw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcGFyc2VIZXgKICAg
ICByZXR1cm4gKnJlc3VsdDsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQor
c3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBDU1NQYXJzZXJUb2tl
blJhbmdlIGNvbG9yUmFuZ2UgPSByYW5nZTsKICAgICBDU1NWYWx1ZUlEIGZ1bmN0aW9uSWQgPSBy
YW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpOwpAQCAtMTExOSwyMCArMTEzMCwyMCBAQCBzdGF0aWMg
Q29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uKENTU1BhcnNlCiAgICAgc3dpdGNoIChmdW5jdGlvbklk
KSB7CiAgICAgY2FzZSBDU1NWYWx1ZVJnYjoKICAgICBjYXNlIENTU1ZhbHVlUmdiYToKLSAgICAg
ICAgY29sb3IgPSBwYXJzZVJHQlBhcmFtZXRlcnMoY29sb3JSYW5nZSk7CisgICAgICAgIGNvbG9y
ID0gcGFyc2VSR0JQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENTU1ZhbHVlSHNsOgogICAgIGNhc2UgQ1NTVmFsdWVIc2xhOgotICAgICAg
ICBjb2xvciA9IHBhcnNlSFNMUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjc3NQYXJzZXJNb2RlKTsK
KyAgICAgICAgY29sb3IgPSBwYXJzZUhTTFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY29udGV4dCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVId2I6Ci0gICAgICAgIGNvbG9yID0g
cGFyc2VIV0JQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgICAgICBj
b2xvciA9IHBhcnNlSFdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjb250ZXh0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDU1NWYWx1ZUxhYjoKLSAgICAgICAgY29sb3IgPSBwYXJzZUxhYlBh
cmFtZXRlcnMoY29sb3JSYW5nZSk7CisgICAgICAgIGNvbG9yID0gcGFyc2VMYWJQYXJhbWV0ZXJz
KGNvbG9yUmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVl
TGNoOgotICAgICAgICBjb2xvciA9IHBhcnNlTENIUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjc3NQ
YXJzZXJNb2RlKTsKKyAgICAgICAgY29sb3IgPSBwYXJzZUxDSFBhcmFtZXRlcnMoY29sb3JSYW5n
ZSwgY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVDb2xvcjoKICAg
ICAgICAgY29sb3IgPSBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbG9yUmFuZ2UpOwpA
QCAtMTE0NSw3ICsxMTU2LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQ
YXJzZQogICAgIHJldHVybiBjb2xvcjsKIH0KIAotQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2Fm
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2Rl
KQorQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBDb2xvciByZXN1bHQ7
CiAgICAgYXV0byBrZXl3b3JkID0gcmFuZ2UucGVlaygpLmlkKCk7CkBAIC0xMTU0LDcgKzExNjUs
NyBAQCBDb2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRvCiAgICAgICAgIC8v
ICAgICAgICBGb3Igbm93LCB3ZSBkZXRlY3QgdGhlIHN5c3RlbSBjb2xvciwgYnV0IHRoZW4gaW50
ZW50aW9uYWxseSBmYWlsIHBhcnNpbmcuCiAgICAgICAgIGlmIChTdHlsZUNvbG9yOjppc1N5c3Rl
bUNvbG9yKGtleXdvcmQpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgaWYgKCFp
c1ZhbHVlQWxsb3dlZEluTW9kZShrZXl3b3JkLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgaWYg
KCFpc1ZhbHVlQWxsb3dlZEluTW9kZShrZXl3b3JkLCBjb250ZXh0Lm1vZGUpKQogICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgcmVzdWx0ID0gU3R5bGVDb2xvcjo6Y29sb3JGcm9tS2V5
d29yZChrZXl3b3JkLCB7IH0pOwogICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOwpAQCAtMTE2Myw3ICsxMTc0LDcgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2Fm
ZShDU1NQYXJzZXJUbwogICAgIGlmIChhdXRvIHBhcnNlZENvbG9yID0gcGFyc2VIZXhDb2xvcihy
YW5nZSwgZmFsc2UpKQogICAgICAgICByZXN1bHQgPSAqcGFyc2VkQ29sb3I7CiAgICAgZWxzZQot
ICAgICAgICByZXN1bHQgPSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNzc1BhcnNlck1vZGUp
OworICAgICAgICByZXN1bHQgPSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNvbnRleHQpOwog
CiAgICAgaWYgKCFyYW5nZS5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTE3MSwx
MSArMTE4MiwxMSBAQCBDb2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRvCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMpCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMpCiB7CiAgICAgYXV0byBr
ZXl3b3JkID0gcmFuZ2UucGVlaygpLmlkKCk7CiAgICAgaWYgKFN0eWxlQ29sb3I6OmlzQ29sb3JL
ZXl3b3JkKGtleXdvcmQpKSB7Ci0gICAgICAgIGlmICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUoa2V5
d29yZCwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAgIGlmICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUo
a2V5d29yZCwgY29udGV4dC5tb2RlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICB9CkBAIC0xMTgzLDcgKzExOTQs
NyBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVDb2xvcihDCiAgICAgaWYgKGF1
dG8gcGFyc2VkQ29sb3IgPSBwYXJzZUhleENvbG9yKHJhbmdlLCBhY2NlcHRRdWlya3lDb2xvcnMp
KQogICAgICAgICBjb2xvciA9ICpwYXJzZWRDb2xvcjsKICAgICBlbHNlIHsKLSAgICAgICAgY29s
b3IgPSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgICAgICBj
b2xvciA9IHBhcnNlQ29sb3JGdW5jdGlvbihyYW5nZSwgY29udGV4dCk7CiAgICAgICAgIGlmICgh
Y29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAt
MTQxMywxNCArMTQyNCwxNCBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lCiB9CiAKIC8vIFVzZWQgdG8gcGFyc2UgY29sb3JzIGZvciAtd2Via2l0LWdyYWRpZW50KC4u
LikuCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdy
YWRpZW50U3RvcENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVE
ZXByZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoYXJncy5wZWVrKCkuaWQo
KSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGNvbnN1bWVDb2xvcihhcmdzLCBjc3NQYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gY29u
c3VtZUNvbG9yKGFyZ3MsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgYm9vbCBjb25zdW1lRGVwcmVj
YXRlZEdyYWRpZW50Q29sb3JTdG9wKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NHcmFk
aWVudENvbG9yU3RvcCYgc3RvcCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGlj
IGJvb2wgY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLnBlZWsoKS5mdW5j
dGlvbklkKCk7CiAgICAgaWYgKGlkICE9IENTU1ZhbHVlRnJvbSAmJiBpZCAhPSBDU1NWYWx1ZVRv
ICYmIGlkICE9IENTU1ZhbHVlQ29sb3JTdG9wKQpAQCAtMTQ0MiwxMSArMTQ1MywxMSBAQCBzdGF0
aWMgYm9vbCBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sCiAgICAgfQogCiAgICAgc3RvcC5w
b3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocG9zaXRpb24s
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLSAgICBzdG9wLmNvbG9yID0gY29uc3VtZURlcHJl
Y2F0ZWRHcmFkaWVudFN0b3BDb2xvcihhcmdzLCBjc3NQYXJzZXJNb2RlKTsKKyAgICBzdG9wLmNv
bG9yID0gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcihhcmdzLCBjb250ZXh0KTsK
ICAgICByZXR1cm4gc3RvcC5jb2xvciAmJiBhcmdzLmF0RW5kKCk7CiB9CiAKLXN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdz
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIFJlZlB0cjxDU1NHcmFk
aWVudFZhbHVlPiByZXN1bHQ7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IGFyZ3MuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKS5pZCgpOwpAQCAtMTQ5OSw3ICsxNTEwLDcgQEAgc3RhdGljIFJlZlB0
cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZQogCiAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Ag
c3RvcDsKICAgICB3aGlsZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkg
ewotICAgICAgICBpZiAoIWNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoYXJncywg
c3RvcCwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAgIGlmICghY29uc3VtZURlcHJlY2F0ZWRHcmFk
aWVudENvbG9yU3RvcChhcmdzLCBzdG9wLCBjb250ZXh0KSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICByZXN1bHQtPmFkZFN0b3AoV1RGTW92ZShzdG9wKSk7CiAgICAgfQpA
QCAtMTUwOCwyMCArMTUxOSwyMCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVw
cmVjYXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGJvb2wgY29uc3VtZUdyYWRp
ZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBt
b2RlLCBDU1NHcmFkaWVudFZhbHVlJiBncmFkaWVudCkKK3N0YXRpYyBib29sIGNvbnN1bWVHcmFk
aWVudENvbG9yU3RvcHMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmIGNvbnRleHQsIENTU0dyYWRpZW50VmFsdWUmIGdyYWRpZW50KQogewogICAgIGJv
b2wgc3VwcG9ydHNDb2xvckhpbnRzID0gZ3JhZGllbnQuZ3JhZGllbnRUeXBlKCkgPT0gQ1NTTGlu
ZWFyR3JhZGllbnQgfHwgZ3JhZGllbnQuZ3JhZGllbnRUeXBlKCkgPT0gQ1NTUmFkaWFsR3JhZGll
bnQgfHwgZ3JhZGllbnQuZ3JhZGllbnRUeXBlKCkgPT0gQ1NTQ29uaWNHcmFkaWVudDsKICAgICAK
ICAgICBhdXRvIGNvbnN1bWVTdG9wUG9zaXRpb24gPSBbJl0gewogICAgICAgICByZXR1cm4gZ3Jh
ZGllbnQuZ3JhZGllbnRUeXBlKCkgPT0gQ1NTQ29uaWNHcmFkaWVudAotICAgICAgICAgICAgPyBj
b25zdW1lQW5nbGVPclBlcmNlbnQocmFuZ2UsIG1vZGUsIFZhbHVlUmFuZ2VBbGwsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KQotICAgICAgICAgICAgOiBj
b25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBtb2RlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAg
ICAgICAgID8gY29uc3VtZUFuZ2xlT3JQZXJjZW50KHJhbmdlLCBjb250ZXh0Lm1vZGUsIFZhbHVl
UmFuZ2VBbGwsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93
KQorICAgICAgICAgICAgOiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBjb250ZXh0Lm1v
ZGUsIFZhbHVlUmFuZ2VBbGwpOwogICAgIH07CiAKICAgICAvLyBUaGUgZmlyc3QgY29sb3Igc3Rv
cCBjYW5ub3QgYmUgYSBjb2xvciBoaW50LgogICAgIGJvb2wgcHJldmlvdXNTdG9wV2FzQ29sb3JI
aW50ID0gdHJ1ZTsKICAgICBkbyB7Ci0gICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3Ag
eyBjb25zdW1lQ29sb3IocmFuZ2UsIG1vZGUpLCBjb25zdW1lU3RvcFBvc2l0aW9uKCksIHsgfSB9
OworICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9wIHsgY29uc3VtZUNvbG9yKHJhbmdl
LCBjb250ZXh0KSwgY29uc3VtZVN0b3BQb3NpdGlvbigpLCB7IH0gfTsKICAgICAgICAgaWYgKCFz
dG9wLmNvbG9yICYmICFzdG9wLnBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0xNTUyLDExICsxNTYzLDExIEBAIHN0YXRpYyBib29sIGNvbnN1bWVHcmFkaWVudENvbG9y
U3RvcHMoQ1MKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdz
LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGlu
ZykKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGll
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29u
dGV4dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQogewogICAgIGF1dG8gcmVzdWx0ID0g
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUHJlZml4ZWRSYWRp
YWxHcmFkaWVudCk7CiAKLSAgICBhdXRvIGNlbnRlckNvb3JkaW5hdGUgPSBjb25zdW1lT25lT3JU
d29WYWx1ZWRQb3NpdGlvbkNvb3JkaW5hdGVzKGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCk7CisgICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZU9uZU9y
VHdvVmFsdWVkUG9zaXRpb25Db29yZGluYXRlcyhhcmdzLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCk7CiAgICAgaWYgKGNlbnRlckNvb3JkaW5hdGUgJiYgIWNvbnN1bWVDb21t
YUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBA
IC0xNTY3LDEwICsxNTc4LDEwIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXBy
ZWNhdGUKIAogICAgIC8vIE9yLCB0d28gbGVuZ3RocyBvciBwZXJjZW50YWdlcwogICAgIGlmICgh
c2hhcGUgJiYgIXNpemVLZXl3b3JkKSB7Ci0gICAgICAgIGF1dG8gaG9yaXpvbnRhbFNpemUgPSBj
b25zdW1lTGVuZ3RoT3JQZXJjZW50KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25O
ZWdhdGl2ZSk7CisgICAgICAgIGF1dG8gaG9yaXpvbnRhbFNpemUgPSBjb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2ZXJ0aWNhbFNpemU7CiAgICAgICAgIGlmICho
b3Jpem9udGFsU2l6ZSkgewotICAgICAgICAgICAgdmVydGljYWxTaXplID0gY29uc3VtZUxlbmd0
aE9yUGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwor
ICAgICAgICAgICAgdmVydGljYWxTaXplID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChhcmdzLCBj
b250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CiAgICAgICAgICAgICBpZiAoIXZl
cnRpY2FsU2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAg
IGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CkBAIC0xNTgxLDcgKzE1OTIs
NyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlCiAgICAgICAgIGNv
bnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CiAgICAgfQogCi0gICAgaWYgKCFj
b25zdW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIGNzc1BhcnNlck1vZGUsIHJlc3VsdCkpCisg
ICAgaWYgKCFjb25zdW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIGNvbnRleHQsIHJlc3VsdCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGNlbnRlckNvb3JkaW5hdGUpIHsK
QEAgLTE1OTYsNyArMTYwNyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXBy
ZWNhdGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCitzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgYXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgQ1NTR3JhZGllbnRSZXBl
YXQgcmVwZWF0aW5nKQogewogICAgIFJlZlB0cjxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPiByZXN1
bHQgPSBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBDU1NSYWRpYWxH
cmFkaWVudCk7CiAKQEAgLTE2MjQsMTMgKzE2MzUsMTMgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZT4gY29uc3VtZVJhZGlhbEdyYQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byBjZW50ZXIgPSBjb25zdW1lTGVu
Z3RoT3JQZXJjZW50KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7
CisgICAgICAgICAgICBhdXRvIGNlbnRlciA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYXJncywg
Y29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwogICAgICAgICAgICAgaWYgKCFj
ZW50ZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoaG9yaXpvbnRh
bFNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBob3Jp
em9udGFsU2l6ZSA9IGNlbnRlcjsKLSAgICAgICAgICAgIGNlbnRlciA9IGNvbnN1bWVMZW5ndGhP
clBlcmNlbnQoYXJncywgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKKyAg
ICAgICAgICAgIGNlbnRlciA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYXJncywgY29udGV4dC5t
b2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwogICAgICAgICAgICAgaWYgKGNlbnRlcikgewog
ICAgICAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNlbnRlcjsKICAgICAgICAgICAgICAgICAr
K2k7CkBAIC0xNjU5LDcgKzE2NzAsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
UmFkaWFsR3JhCiAgICAgaWYgKGFyZ3MucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVBdCkgewogICAg
ICAgICBhcmdzLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIAotICAgICAg
ICBhdXRvIGNlbnRlckNvb3JkaW5hdGUgPSBjb25zdW1lUG9zaXRpb25Db29yZGluYXRlcyhhcmdz
LCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFBvc2l0aW9uU3ludGF4OjpQ
b3NpdGlvbik7CisgICAgICAgIGF1dG8gY2VudGVyQ29vcmRpbmF0ZSA9IGNvbnN1bWVQb3NpdGlv
bkNvb3JkaW5hdGVzKGFyZ3MsIGNvbnRleHQubW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBQ
b3NpdGlvblN5bnRheDo6UG9zaXRpb24pOwogICAgICAgICBpZiAoIWNlbnRlckNvb3JkaW5hdGUp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCkBAIC0xNjc2LDcgKzE2ODcs
NyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lUmFkaWFsR3JhCiAKICAgICBpZiAo
KHNoYXBlIHx8IHNpemVLZXl3b3JkIHx8IGhvcml6b250YWxTaXplIHx8IGNlbnRlclggfHwgY2Vu
dGVyWSkgJiYgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdz
LCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0KSkKKyAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9y
U3RvcHMoYXJncywgY29udGV4dCwgKnJlc3VsdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgcmVzdWx0LT5zZXRTaGFwZShXVEZNb3ZlKHNoYXBlKSk7CkBAIC0xNjg3LDEyICsxNjk4
LDEyIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVSYWRpYWxHcmEKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lTGluZWFyR3Jh
ZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcsIENTU0dyYWRpZW50VHlwZSBncmFkaWVu
dFR5cGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lTGluZWFyR3JhZGllbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwg
Q1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nLCBDU1NHcmFkaWVudFR5cGUgZ3JhZGllbnRUeXBl
KQogewogICAgIFJlZlB0cjxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBDU1NMaW5l
YXJHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBncmFkaWVudFR5cGUpOwogCiAgICAg
Ym9vbCBleHBlY3RDb21tYSA9IHRydWU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBh
bmdsZSA9IGNvbnN1bWVBbmdsZShhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpG
b3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdyk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBhbmdsZSA9IGNvbnN1bWVBbmdsZShhcmdzLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KTsKICAgICBpZiAoYW5nbGUp
CiAgICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoYW5nbGUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
ZWxzZSBpZiAoZ3JhZGllbnRUeXBlID09IENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQgfHwgY29u
c3VtZUlkZW50PENTU1ZhbHVlVG8+KGFyZ3MpKSB7CkBAIC0xNzE1LDEyICsxNzI2LDEyIEBAIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVMaW5lYXJHcmEKIAogICAgIGlmIChleHBlY3RD
b21tYSAmJiAhY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFjb25zdW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3Ms
IGNzc1BhcnNlck1vZGUsICpyZXN1bHQpKQorICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JT
dG9wcyhhcmdzLCBjb250ZXh0LCAqcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNv
bmljR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2VyQ29udGV4dCBj
b250ZXh0LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCitzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lQ29uaWNHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcp
CiB7CiAjaWYgRU5BQkxFKENTU19DT05JQ19HUkFESUVOVFMpCiAgICAgUmVmUHRyPENTU0Nvbmlj
R3JhZGllbnRWYWx1ZT4gcmVzdWx0ID0gQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVw
ZWF0aW5nKTsKQEAgLTE3NTQsNyArMTc2NSw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVDb25pY0dyYWQKIAogICAgIGlmIChleHBlY3RDb21tYSAmJiAhY29uc3VtZUNvbW1hSW5j
bHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYg
KCFjb25zdW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIGNvbnRleHQubW9kZSwgKnJlc3VsdCkp
CisgICAgaWYgKCFjb25zdW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3MsIGNvbnRleHQsICpyZXN1
bHQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gcmVzdWx0OwogI2Vsc2UK
QEAgLTE3NjUsMTQgKzE3NzYsMTQgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNv
bmljR3JhZAogI2VuZGlmCiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25l
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQpCitS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZU9yTm9uZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAocmFuZ2Uu
cGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50
KHJhbmdlKTsKICAgICByZXR1cm4gY29uc3VtZUltYWdlKHJhbmdlLCBjb250ZXh0KTsKIH0KIAot
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNyb3NzRmFkZShDU1NQYXJzZXJUb2tlblJh
bmdlJiBhcmdzLCBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQsIGJvb2wgcHJlZml4ZWQpCitzdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3Jvc3NGYWRlKENTU1BhcnNlclRva2VuUmFuZ2Um
IGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIGJvb2wgcHJlZml4ZWQpCiB7
CiAgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IGNvbnN1bWVJbWFnZU9yTm9uZShhcmdzLCBjb250
ZXh0KTsKICAgICBpZiAoIWZyb21JbWFnZVZhbHVlIHx8ICFjb25zdW1lQ29tbWFJbmNsdWRpbmdX
aGl0ZXNwYWNlKGFyZ3MpKQpAQCAtMTg0OCwzMCArMTg1OSwzMCBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lQ3VzdG9tUGFpCiB9CiAjZW5kaWYKIAotc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gY29uc3VtZUdlbmVyYXRlZEltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJDb250ZXh0IGNvbnRleHQpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
R2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLnBlZWsoKS5m
dW5jdGlvbklkKCk7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZUNvcHkgPSByYW5nZTsK
ICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2VDb3B5
KTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc3VsdDsKICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVS
YWRpYWxHcmFkaWVudCkKLSAgICAgICAgcmVzdWx0ID0gY29uc3VtZVJhZGlhbEdyYWRpZW50KGFy
Z3MsIGNvbnRleHQubW9kZSwgTm9uUmVwZWF0aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3Vt
ZVJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQsIE5vblJlcGVhdGluZyk7CiAgICAgZWxzZSBp
ZiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXRpbmdSYWRpYWxHcmFkaWVudCkKLSAgICAgICAgcmVzdWx0
ID0gY29uc3VtZVJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgUmVwZWF0aW5nKTsK
KyAgICAgICAgcmVzdWx0ID0gY29uc3VtZVJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQsIFJl
cGVhdGluZyk7CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRMaW5lYXJHcmFkaWVu
dCkKLSAgICAgICAgcmVzdWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQu
bW9kZSwgTm9uUmVwZWF0aW5nLCBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50KTsKKyAgICAgICAg
cmVzdWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQsIE5vblJlcGVhdGlu
ZywgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCk7CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFs
dWVXZWJraXRSZXBlYXRpbmdMaW5lYXJHcmFkaWVudCkKLSAgICAgICAgcmVzdWx0ID0gY29uc3Vt
ZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgUmVwZWF0aW5nLCBDU1NQcmVmaXhl
ZExpbmVhckdyYWRpZW50KTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50
KGFyZ3MsIGNvbnRleHQsIFJlcGVhdGluZywgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCk7CiAg
ICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXRpbmdMaW5lYXJHcmFkaWVudCkKLSAgICAg
ICAgcmVzdWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgUmVw
ZWF0aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5l
YXJHcmFkaWVudChhcmdzLCBjb250ZXh0LCBSZXBlYXRpbmcsIENTU0xpbmVhckdyYWRpZW50KTsK
ICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUxpbmVhckdyYWRpZW50KQotICAgICAgICByZXN1
bHQgPSBjb25zdW1lTGluZWFyR3JhZGllbnQoYXJncywgY29udGV4dC5tb2RlLCBOb25SZXBlYXRp
bmcsIENTU0xpbmVhckdyYWRpZW50KTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZUxpbmVhckdy
YWRpZW50KGFyZ3MsIGNvbnRleHQsIE5vblJlcGVhdGluZywgQ1NTTGluZWFyR3JhZGllbnQpOwog
ICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0R3JhZGllbnQpCi0gICAgICAgIHJlc3Vs
dCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoYXJncywgY29udGV4dC5tb2RlKTsKKyAgICAg
ICAgcmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChhcmdzLCBjb250ZXh0KTsKICAg
ICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFJhZGlhbEdyYWRpZW50KQotICAgICAgICBy
ZXN1bHQgPSBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9k
ZSwgTm9uUmVwZWF0aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRp
YWxHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlk
ID09IENTU1ZhbHVlV2Via2l0UmVwZWF0aW5nUmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJlc3Vs
dCA9IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoYXJncywgY29udGV4dC5tb2RlLCBS
ZXBlYXRpbmcpOworICAgICAgICByZXN1bHQgPSBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRp
ZW50KGFyZ3MsIGNvbnRleHQsIFJlcGVhdGluZyk7CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFs
dWVDb25pY0dyYWRpZW50KQogICAgICAgICByZXN1bHQgPSBjb25zdW1lQ29uaWNHcmFkaWVudChh
cmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVl
UmVwZWF0aW5nQ29uaWNHcmFkaWVudCkKQEAgLTIwMTcsNyArMjAyOCw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTRnVuY3Rpb25WYWx1ZT4gY29uc3VtZUYKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNl
ZFZhbHVlOwogCiAgICAgaWYgKGZpbHRlclR5cGUgPT0gQ1NTVmFsdWVEcm9wU2hhZG93KQotICAg
ICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3coYXJncywgY29udGV4dC5tb2Rl
LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFk
b3coYXJncywgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYg
KGFyZ3MuYXRFbmQoKSkKICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJWYWx1ZTsKQEAgLTIwNjQs
NyArMjA3NSw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZpbHRlcihDU1NQYXJzZXIKICAg
ICByZXR1cm4gbGlzdC5wdHIoKTsKIH0KIAotUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1l
U2luZ2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNz
c1BhcnNlck1vZGUsIGJvb2wgYWxsb3dJbnNldCwgYm9vbCBhbGxvd1NwcmVhZCkKK1JlZlB0cjxD
U1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNpbmdsZVNoYWRvdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBhbGxvd0luc2V0LCBi
b29sIGFsbG93U3ByZWFkKQogewogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3R5bGU7
CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcjsKQEAgLTIwODksNyArMjEwMCw3
IEBAIFJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNpbmdsZVNoYWQKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBhdXRvIG1heWJlQ29sb3Ig
PSBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgICAgICBhdXRvIG1heWJl
Q29sb3IgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBpZiAobWF5YmVD
b2xvcikgewogICAgICAgICAgICAgLy8gSWYgd2UganVzdCBwYXJzZWQgYSBjb2xvciBidXQgYWxy
ZWFkeSBoYWQgb25lLCB0aGUgZ2l2ZW4gdG9rZW4gcmFuZ2UgaXMgbm90IGEgdmFsaWQgPHNoYWRv
dz4uCiAgICAgICAgICAgICBpZiAoY29sb3IpCkBAIC0yMTAzLDIzICsyMTE0LDIzIEBAIFJlZlB0
cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNpbmdsZVNoYWQKICAgICAgICAgICAgIC8vIElmIHdl
J3ZlIGFscmVhZHkgcGFyc2VkIHRoZXNlIGxlbmd0aHMsIHRoZSBnaXZlbiB2YWx1ZSBpcyBpbnZh
bGlkIGFzIHRoZXJlIGNhbm5vdCBiZSB0d28gbGVuZ3RocyBjb21wb25lbnRzIGluIGEgc2luZ2xl
IDxzaGFkb3c+IHZhbHVlLgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0K
LSAgICAgICAgaG9yaXpvbnRhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNzc1BhcnNl
ck1vZGUsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBob3Jpem9udGFsT2Zmc2V0ID0gY29uc3Vt
ZUxlbmd0aChyYW5nZSwgY29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYg
KCFob3Jpem9udGFsT2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IHZlcnRpY2FsT2Zmc2V0ID0gY29uc3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFs
dWVSYW5nZUFsbCk7CisgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gY29uc3VtZUxlbmd0aChyYW5n
ZSwgY29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlQWxsKTsKICAgICAgICAgaWYgKCF2ZXJ0aWNhbE9m
ZnNldCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGNvbnN0IENTU1Bh
cnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICAgICAgLy8gVGhlIGV4cGxpY2l0
IGNoZWNrIGZvciBjYWxjKCkgaXMgdW5mb3J0dW5hdGUuIFRoaXMgaXMgZW5zdXJpbmcgdGhhdCB3
ZSBvbmx5IGZhaWwgcGFyc2luZyBpZiB0aGVyZSBpcyBhIGxlbmd0aCwgYnV0IGl0IGZhaWxzIHRo
ZSByYW5nZSBjaGVjay4KICAgICAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tl
biB8fCB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgKHRva2VuLnR5cGUoKSA9PSBGdW5j
dGlvblRva2VuICYmIENTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24odG9rZW4uZnVuY3Rpb25J
ZCgpKSkpIHsKLSAgICAgICAgICAgIGJsdXJSYWRpdXMgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBj
c3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOworICAgICAgICAgICAgYmx1clJh
ZGl1cyA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZU5vbk5l
Z2F0aXZlKTsKICAgICAgICAgICAgIGlmICghYmx1clJhZGl1cykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChibHVyUmFkaXVzICYmIGFs
bG93U3ByZWFkKQotICAgICAgICAgICAgc3ByZWFkRGlzdGFuY2UgPSBjb25zdW1lTGVuZ3RoKHJh
bmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgICAgIHNwcmVhZERp
c3RhbmNlID0gY29uc3VtZUxlbmd0aChyYW5nZSwgY29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlQWxs
KTsKICAgICB9CiAgICAgCiAgICAgLy8gSW4gb3JkZXIgZm9yIHRoaXMgdG8gYmUgYSB2YWxpZCA8
c2hhZG93PiwgYXQgbGVhc3QgdGhlc2UgbGVuZ3RocyBtdXN0IGJlIHByZXNlbnQuCkBAIC0yMTI4
LDcgKzIxMzksNyBAQCBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAg
ICAgcmV0dXJuIENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUoV1RGTW92ZShob3Jpem9udGFsT2Zmc2V0
KSwgV1RGTW92ZSh2ZXJ0aWNhbE9mZnNldCksIFdURk1vdmUoYmx1clJhZGl1cyksIFdURk1vdmUo
c3ByZWFkRGlzdGFuY2UpLCBXVEZNb3ZlKHN0eWxlKSwgV1RGTW92ZShjb2xvcikpOwogfQogCi1S
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBPcHRpb25TZXQ8QWxsb3dlZEltYWdlVHlwZT4gYWxs
b3dlZEltYWdlVHlwZXMpCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgT3B0aW9u
U2V0PEFsbG93ZWRJbWFnZVR5cGU+IGFsbG93ZWRJbWFnZVR5cGVzKQogewogICAgIGlmICgocmFu
Z2UucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikgJiYgKGFsbG93ZWRJbWFnZVR5cGVzLmNv
bnRhaW5zKEFsbG93ZWRJbWFnZVR5cGU6OlJhd1N0cmluZ0FzVVJMKSkpIHsKICAgICAgICAgYXV0
byB1cmxTdHJpbmdWaWV3ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1
ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5oCShyZXZpc2lvbiAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDIsOCArMTAyLDggQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lU3RyaW5nKAog
U3RyaW5nVmlldyBjb25zdW1lVXJsQXNTdHJpbmdWaWV3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsK
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVVybChDU1NQYXJzZXJUb2tlblJhbmdl
Jik7CiAKLUNvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IENTU1BhcnNlck1vZGUpOwotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3Io
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIGJvb2wgYWNjZXB0UXVpcmt5Q29s
b3JzID0gZmFsc2UpOworQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUb2tl
blJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOworUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmLCBib29sIGFjY2VwdFF1aXJreUNvbG9ycyA9IGZhbHNlKTsKIAogZW51bSBjbGFzcyBQ
b3NpdGlvblN5bnRheCB7CiAgICAgUG9zaXRpb24sIC8vIDxwb3NpdGlvbj4KQEAgLTEyNiw5ICsx
MjYsOCBAQCBlbnVtIGNsYXNzIEFsbG93ZWRJbWFnZVR5cGUgOiB1aW50OF90IHsKICAgICBHZW5l
cmF0ZWRJbWFnZSA9IDEgPDwgMwogfTsKIAotUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2Uo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlckNvbnRleHQsIE9wdGlvblNldDxBbGxvd2Vk
SW1hZ2VUeXBlPiA9IHsgQWxsb3dlZEltYWdlVHlwZTo6VVJMRnVuY3Rpb24sIEFsbG93ZWRJbWFn
ZVR5cGU6OkltYWdlU2V0LCBBbGxvd2VkSW1hZ2VUeXBlOjpHZW5lcmF0ZWRJbWFnZSB9KTsKLQot
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IENTU1BhcnNlckNvbnRleHQpOworUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBPcHRpb25TZXQ8QWxsb3dl
ZEltYWdlVHlwZT4gPSB7IEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1h
Z2VUeXBlOjpJbWFnZVNldCwgQWxsb3dlZEltYWdlVHlwZTo6R2VuZXJhdGVkSW1hZ2UgfSk7CitS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZU9yTm9uZShDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwogCiBlbnVtIGNsYXNzIEFsbG93ZWRGaWx0ZXJGdW5j
dGlvbnMgewogICAgIFBpeGVsRmlsdGVycywKQEAgLTEzNiw3ICsxMzUsNyBAQCBlbnVtIGNsYXNz
IEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMgewogfTsKIAogUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
RmlsdGVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQWxs
b3dlZEZpbHRlckZ1bmN0aW9ucyk7Ci1SZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5n
bGVTaGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIGJvb2wgYWxsb3dJ
bnNldCwgYm9vbCBhbGxvd1NwcmVhZCk7CitSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVT
aW5nbGVTaGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
LCBib29sIGFsbG93SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpOwogCiBzdHJ1Y3QgRm9udFN0eWxl
UmF3IHsKICAgICBDU1NWYWx1ZUlEIHN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMjcyODM3KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02MDAsNyArNjAwLDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudElu
UgogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRuZXNzIG9mIHRo
ZSB1bmRlcmxpbmUgY29sb3IgdG8gdGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRoZSBhbHBoYSBi
eSAzOCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Igd2lsbCBhcHBl
YXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25lIGNvbG9yIGNh
biBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmxpZ2h0bmVzcyA9
IDAuNWY7CisgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmxpZ2h0bmVzcyA9IDUwLjBmOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5hbHBoYSAqPSAwLjM4ZjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVy
IGtlZXBpbmcgY29sb3IgaW4gTENIQSAoaWYgdGhhdCBjaGFuZ2UgaXMgbWFkZSkgb3IgY29udmVy
dGluZyBiYWNrIHRvIHRoZSBpbml0aWFsIHVuZGVybHlpbmcgY29sb3IgdHlwZSB0byBhdm9pZCB1
bm5lY2Vzc2FyaWx5IGNsYW1waW5nIGNvbG9ycyBvdXRzaWRlIG9mIHNSR0IuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5j
cHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQ29udmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDYgQEAgc3Rh
dGljIEhTTEh1ZUNhbGN1bGF0aW9uUmVzdWx0IGNhbGN1bGF0ZQogICAgIGlmIChodWUgPj0gMzYw
LjBmKQogICAgICAgICBodWUgLT0gMzYwLjBmOwogCi0gICAgaHVlIC89IDM2MC4wZjsKLQogICAg
IHJldHVybiB7IGh1ZSwgbWluLCBtYXgsIGNocm9tYSB9OwogfQogCkBAIC02OSwxNCArNjcsMTQg
QEAgSFNMQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhTTEE8ZmxvYXQ+LAogICAgIGF1dG8gW3Is
IGcsIGIsIGFscGhhXSA9IGNvbG9yOwogICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNocm9tYV0g
PSBjYWxjdWxhdGVIU0xIdWUoY29sb3IpOwogCi0gICAgZmxvYXQgbGlnaHRuZXNzID0gMC41ZiAq
IChtYXggKyBtaW4pOworICAgIGZsb2F0IGxpZ2h0bmVzcyA9ICgwLjVmICogKG1heCArIG1pbikp
ICogMTAwLjBmOwogICAgIGZsb2F0IHNhdHVyYXRpb247CiAgICAgaWYgKCFjaHJvbWEpCiAgICAg
ICAgIHNhdHVyYXRpb24gPSAwOwotICAgIGVsc2UgaWYgKGxpZ2h0bmVzcyA8PSAwLjVmKQotICAg
ICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAvIChtYXggKyBtaW4pKTsKKyAgICBlbHNlIGlmIChs
aWdodG5lc3MgPD0gNTAuMGYpCisgICAgICAgIHNhdHVyYXRpb24gPSAoY2hyb21hIC8gKG1heCAr
IG1pbikpICogMTAwLjBmOwogICAgIGVsc2UKLSAgICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEg
LyAoMi4wZiAtIChtYXggKyBtaW4pKSk7CisgICAgICAgIHNhdHVyYXRpb24gPSAoY2hyb21hIC8g
KDIuMGYgLSAobWF4ICsgbWluKSkpICogMTAwLjBmOwogCiAgICAgcmV0dXJuIHsgaHVlLCBzYXR1
cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH07CiB9CkBAIC04NiwxMSArODQsMjYgQEAgU1JHQkE8
ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdAogICAgIC8vIGh0dHBzOi8vZHJhZnRz
LmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHNsLXRvLXJnYgogICAgIGF1dG8gW2h1ZSwgc2F0dXJh
dGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBjb2xvcjsKIAotICAgIGlmICghc2F0dXJhdGlvbikK
LSAgICAgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGxpZ2h0bmVzcywgYWxwaGEg
fTsKLSAgICAKLSAgICBmbG9hdCB0ZW1wMiA9IGxpZ2h0bmVzcyA8PSAwLjVmID8gbGlnaHRuZXNz
ICogKDEuMGYgKyBzYXR1cmF0aW9uKSA6IGxpZ2h0bmVzcyArIHNhdHVyYXRpb24gLSBsaWdodG5l
c3MgKiBzYXR1cmF0aW9uOwotICAgIGZsb2F0IHRlbXAxID0gMi4wZiAqIGxpZ2h0bmVzcyAtIHRl
bXAyOworICAgIGlmICghc2F0dXJhdGlvbikgeworICAgICAgICBhdXRvIGdyZXkgPSBsaWdodG5l
c3MgLyAxMDAuMGY7CisgICAgICAgIHJldHVybiB7IGdyZXksIGdyZXksIGdyZXksIGFscGhhIH07
CisgICAgfQorCisgICAgLy8gaHVlVG9SR0IoKSB3YW50cyBodWUgaW4gdGhlIDAtNiByYW5nZS4K
KyAgICBhdXRvIG5vcm1hbGl6ZWRIdWUgPSAoaHVlIC8gMzYwLjBmKSAqIDYuMGY7CisgICAgYXV0
byBub3JtYWxpemVkTGlnaHRuZXNzID0gbGlnaHRuZXNzIC8gMTAwLjBmOworICAgIGF1dG8gbm9y
bWFsaXplZFNhdHVyYXRpb24gPSBzYXR1cmF0aW9uIC8gMTAwLjBmOworCisgICAgYXV0byBodWVG
b3JSZWQgPSBub3JtYWxpemVkSHVlICsgMi4wZjsKKyAgICBhdXRvIGh1ZUZvckdyZWVuID0gbm9y
bWFsaXplZEh1ZTsKKyAgICBhdXRvIGh1ZUZvckJsdWUgPSBub3JtYWxpemVkSHVlIC0gMi4wZjsK
KyAgICBpZiAoaHVlRm9yUmVkID4gNi4wZikKKyAgICAgICAgaHVlRm9yUmVkIC09IDYuMGY7Cisg
ICAgZWxzZSBpZiAoaHVlRm9yQmx1ZSA8IDAuMGYpCisgICAgICAgIGh1ZUZvckJsdWUgKz0gNi4w
ZjsKKworICAgIGZsb2F0IHRlbXAyID0gbm9ybWFsaXplZExpZ2h0bmVzcyA8PSAwLjVmID8gbm9y
bWFsaXplZExpZ2h0bmVzcyAqICgxLjBmICsgbm9ybWFsaXplZFNhdHVyYXRpb24pIDogbm9ybWFs
aXplZExpZ2h0bmVzcyArIG5vcm1hbGl6ZWRTYXR1cmF0aW9uIC0gbm9ybWFsaXplZExpZ2h0bmVz
cyAqIG5vcm1hbGl6ZWRTYXR1cmF0aW9uOworICAgIGZsb2F0IHRlbXAxID0gMi4wZiAqIG5vcm1h
bGl6ZWRMaWdodG5lc3MgLSB0ZW1wMjsKICAgICAKICAgICAvLyBIdWUgaXMgaW4gdGhlIHJhbmdl
IDAtNiwgb3RoZXIgYXJncyBpbiAwLTEuCiAgICAgYXV0byBodWVUb1JHQiA9IFtdKGZsb2F0IHRl
bXAxLCBmbG9hdCB0ZW1wMiwgZmxvYXQgaHVlKSB7CkBAIC0xMDMsMTcgKzExNiw2IEBAIFNSR0JB
PGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAgICAgcmV0dXJuIHRlbXAx
OwogICAgIH07CiAKLSAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdl
LgotICAgIGh1ZSAqPSA2LjBmOwotCi0gICAgYXV0byBodWVGb3JSZWQgPSBodWUgKyAyLjBmOwot
ICAgIGF1dG8gaHVlRm9yR3JlZW4gPSBodWU7Ci0gICAgYXV0byBodWVGb3JCbHVlID0gaHVlIC0g
Mi4wZjsKLSAgICBpZiAoaHVlRm9yUmVkID4gNi4wZikKLSAgICAgICAgaHVlRm9yUmVkIC09IDYu
MGY7Ci0gICAgZWxzZSBpZiAoaHVlRm9yQmx1ZSA8IDAuMGYpCi0gICAgICAgIGh1ZUZvckJsdWUg
Kz0gNi4wZjsKLQogICAgIHJldHVybiB7CiAgICAgICAgIGh1ZVRvUkdCKHRlbXAxLCB0ZW1wMiwg
aHVlRm9yUmVkKSwKICAgICAgICAgaHVlVG9SR0IodGVtcDEsIHRlbXAyLCBodWVGb3JHcmVlbiks
CkBAIC0xMjgsOCArMTMwLDggQEAgSFdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPEhXQkE8Zmxv
YXQ+LAogewogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jcmdi
LXRvLWh3YgogICAgIGF1dG8gW2h1ZSwgbWluLCBtYXgsIGNocm9tYV0gPSBjYWxjdWxhdGVIU0xI
dWUoY29sb3IpOwotICAgIGF1dG8gd2hpdGVuZXNzID0gbWluOwotICAgIGF1dG8gYmxhY2tuZXNz
ID0gMS4wZiAtIG1heDsKKyAgICBhdXRvIHdoaXRlbmVzcyA9IG1pbiAqIDEwMC4wZjsKKyAgICBh
dXRvIGJsYWNrbmVzcyA9ICgxLjBmIC0gbWF4KSAqIDEwMC4wZjsKICAgICAKICAgICByZXR1cm4g
eyBodWUsIHdoaXRlbmVzcywgYmxhY2tuZXNzLCBjb2xvci5hbHBoYSB9OwogfQpAQCAtMTM5LDgg
KzE0MSwyNCBAQCBTUkdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0CiAgICAg
Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNod2ItdG8tcmdiCiAgICAg
YXV0byBbaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgYWxwaGFdID0gY29sb3I7CiAKLSAgICBp
ZiAod2hpdGVuZXNzICsgYmxhY2tuZXNzID09IDEuMGYpCi0gICAgICAgIHJldHVybiB7IHdoaXRl
bmVzcywgd2hpdGVuZXNzLCB3aGl0ZW5lc3MsIGFscGhhIH07CisgICAgaWYgKHdoaXRlbmVzcyAr
IGJsYWNrbmVzcyA9PSAxMDAuMGYpIHsKKyAgICAgICAgYXV0byBncmV5ID0gd2hpdGVuZXNzIC8g
MTAwLjBmOworICAgICAgICByZXR1cm4geyBncmV5LCBncmV5LCBncmV5LCBhbHBoYSB9OworICAg
IH0KKworICAgIC8vIGh1ZVRvUkdCKCkgd2FudHMgaHVlIGluIHRoZSAwLTYgcmFuZ2UuCisgICAg
YXV0byBub3JtYWxpemVkSHVlID0gKGh1ZSAvIDM2MC4wZikgKiA2LjBmOworCisgICAgYXV0byBo
dWVGb3JSZWQgPSBub3JtYWxpemVkSHVlICsgMi4wZjsKKyAgICBhdXRvIGh1ZUZvckdyZWVuID0g
bm9ybWFsaXplZEh1ZTsKKyAgICBhdXRvIGh1ZUZvckJsdWUgPSBub3JtYWxpemVkSHVlIC0gMi4w
ZjsKKyAgICBpZiAoaHVlRm9yUmVkID4gNi4wZikKKyAgICAgICAgaHVlRm9yUmVkIC09IDYuMGY7
CisgICAgZWxzZSBpZiAoaHVlRm9yQmx1ZSA8IDAuMGYpCisgICAgICAgIGh1ZUZvckJsdWUgKz0g
Ni4wZjsKKworICAgIGF1dG8gbm9ybWFsaXplZFdoaXRlbmVzcyA9IHdoaXRlbmVzcyAvIDEwMC4w
ZjsKKyAgICBhdXRvIG5vcm1hbGl6ZWRCbGFja25lc3MgPSBibGFja25lc3MgLyAxMDAuMGY7CiAK
ICAgICAvLyBUaGlzIGlzIHRoZSBodWVUb1JHQiBmdW5jdGlvbiBpbiBjb252ZXJ0Q29sb3I8U1JH
QkE8ZmxvYXQ+Pihjb25zdCBIU0xBJikgd2l0aCB0ZW1wMSA9PSAwCiAgICAgLy8gYW5kIHRlbXAy
ID09IDEgc3RyZW5ndGggcmVkdWNlZCB0aHJvdWdoIGl0LgpAQCAtMTU0LDI1ICsxNzIsMTQgQEAg
U1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdAogICAgICAgICByZXR1cm4g
MC4wZjsKICAgICB9OwogCi0gICAgYXV0byBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyA9IFsmXShm
bG9hdCBjb21wb25lbnQpIHsKLSAgICAgICAgcmV0dXJuIChjb21wb25lbnQgKiAoMS4wZiAtIGNv
bG9yLndoaXRlbmVzcyAtIGNvbG9yLmJsYWNrbmVzcykpICsgY29sb3Iud2hpdGVuZXNzOworICAg
IGF1dG8gYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MgPSBbXShmbG9hdCBjb21wb25lbnQsIGF1dG8g
d2hpdGVuZXNzLCBhdXRvIGJsYWNrbmVzcykgeworICAgICAgICByZXR1cm4gKGNvbXBvbmVudCAq
ICgxLjBmIC0gd2hpdGVuZXNzIC0gYmxhY2tuZXNzKSkgKyB3aGl0ZW5lc3M7CiAgICAgfTsKIAot
ICAgIC8vIGh1ZVRvUkdCKCkgd2FudHMgaHVlIGluIHRoZSAwLTYgcmFuZ2UuCi0gICAgaHVlICo9
IDYuMGY7Ci0KLSAgICBhdXRvIGh1ZUZvclJlZCA9IGh1ZSArIDIuMGY7Ci0gICAgYXV0byBodWVG
b3JHcmVlbiA9IGh1ZTsKLSAgICBhdXRvIGh1ZUZvckJsdWUgPSBodWUgLSAyLjBmOwotICAgIGlm
IChodWVGb3JSZWQgPiA2LjBmKQotICAgICAgICBodWVGb3JSZWQgLT0gNi4wZjsKLSAgICBlbHNl
IGlmIChodWVGb3JCbHVlIDwgMC4wZikKLSAgICAgICAgaHVlRm9yQmx1ZSArPSA2LjBmOwotCiAg
ICAgcmV0dXJuIHsKLSAgICAgICAgYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MoaHVlVG9SR0IoaHVl
Rm9yUmVkKSksCi0gICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZv
ckdyZWVuKSksCi0gICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZv
ckJsdWUpKSwKKyAgICAgICAgYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MoaHVlVG9SR0IoaHVlRm9y
UmVkKSwgbm9ybWFsaXplZFdoaXRlbmVzcywgbm9ybWFsaXplZEJsYWNrbmVzcyksCisgICAgICAg
IGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZvckdyZWVuKSwgbm9ybWFsaXpl
ZFdoaXRlbmVzcywgbm9ybWFsaXplZEJsYWNrbmVzcyksCisgICAgICAgIGFwcGx5V2hpdGVuZXNz
QmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZvckJsdWUpLCBub3JtYWxpemVkV2hpdGVuZXNzLCBub3Jt
YWxpemVkQmxhY2tuZXNzKSwKICAgICAgICAgYWxwaGEKICAgICB9OwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1vZGVscy5oCShyZXZpc2lvbiAy
NzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1vZGVscy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxOCArNjcsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRXh0
ZW5kZWRSR0JNb2RlbDxmbG9hdAogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4g
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZs
b2F0PiwgMz4gcmFuZ2VzIHsgewotICAgICAgICB7IDAsIDEgfSwKLSAgICAgICAgeyAwLCAxIH0s
Ci0gICAgICAgIHsgMCwgMSB9CisgICAgICAgIHsgMCwgMzYwIH0sCisgICAgICAgIHsgMCwgMTAw
IH0sCisgICAgICAgIHsgMCwgMTAwIH0KICAgICB9IH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFdCTW9k
ZWw8ZmxvYXQ+IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25l
bnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKLSAgICAgICAgeyAwLCAxIH0sCi0gICAgICAg
IHsgMCwgMSB9LAotICAgICAgICB7IDAsIDEgfQorICAgICAgICB7IDAsIDM2MCB9LAorICAgICAg
ICB7IDAsIDEwMCB9LAorICAgICAgICB7IDAsIDEwMCB9CiAgICAgfSB9OwogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MjIsNyArMTQyMiw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpkYXRlUGxhY2Vob2xkZXJUZXh0Q28K
ICAgICAvLyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgTENIQTxmbG9hdD4gcmF0aGVyIHRoYW4gSFNM
QTxmbG9hdD4gZm9yIGJldHRlciBwZXJjZXB0dWFsIHJlc3VsdHMgYW5kIHRvIGF2b2lkIGNsYW1w
aW5nIHRvIHNSR0IgZ2FtdXQsIHdoaWNoIGlzIHdoYXQgSFNMQSBkb2VzLgogICAgIGF1dG8gaHNs
YSA9IHRleHRDb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwogICAgIGlmICh0
ZXh0Q29sb3IubHVtaW5hbmNlKCkgPCBiYWNrZ3JvdW5kQ29sb3IubHVtaW5hbmNlKCkpCi0gICAg
ICAgIGhzbGEubGlnaHRuZXNzICs9IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0
bWVudEZhY3RvciAqICgxLjBmIC0gaHNsYS5saWdodG5lc3MpOworICAgICAgICBoc2xhLmxpZ2h0
bmVzcyArPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1lbnRGYWN0b3IgKiAo
MTAwLjBmIC0gaHNsYS5saWdodG5lc3MpOwogICAgIGVsc2UKICAgICAgICAgaHNsYS5saWdodG5l
c3MgKj0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW50RmFjdG9yOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420261</attachid>
            <date>2021-02-14 16:27:24 -0800</date>
            <delta_ts>2021-02-14 19:04:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221881-20210214162723.patch</filename>
            <type>text/plain</type>
            <size>73470</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIxLTAyLTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVwYXJlIGZvciBhZGRpbmcgcmVs
YXRpdmUgY29sb3Igc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxODgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBleHBlcmltZW50YWwgcmVsYXRp
dmUgY29sb3Igc3VwcG9ydCBhIGxpdHRsZSBjbGVhbnVwCisgICAgICAgIGlzIGluIG9yZGVyLiBU
aGlzIGNoYW5nZToKKyAgICAgICAgCisgICAgICAgIC0gVGhyZWFkcyBhIENTU1BhcnNlckNvbnRl
eHQgdGhyb3VnaCB0aGUgY29sb3IgcGFyc2luZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBiZQorICAg
ICAgICAgIG5lZWRlZCB0byBjaGVjayBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdC4K
KyAgICAgICAgLSBEb2VzIGEgc21hbGwgY2xlYW51cCBvZiBDU1NQYXJzZXJDb250ZXh0LCBzb3J0
aW5nIGZlYXR1cmVzIGFuZCB1c2luZyB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICBsaXN0
IGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgLSBSZWZhY3RvcnMgc29tZSBvZiB0aGUgY29s
b3IgcGFyc2luZyBoZWxwZXJzIHRvIGV4dHJhY3QgbW9yZSBoZWxwZXJzLiBUaGVzZSBjbGFyaWZ5
CisgICAgICAgICAgdGhlIGNvZGUgYmV0dGVyIGFuZCB3aWxsIGJlIHNoYXJlZCBieSB0aGUgcmVs
YXRpdmUgcGFyc2Vycy4KKyAgICAgICAgLSBNb3ZlIG5vcm1hbGl6YXRpb24gb2YgY29tcG9uZW50
cyB0byBhZnRlciBwYXJzaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdvcmsKKyAgICAgICAgICBp
biB0aGUgY2FzZSBvZiBmYWlsdXJlIGFuZCBzZXBhcmF0ZSB0aGUgcGhhc2VzIGEgYml0IG1vcmUu
CisgICAgICAgIC0gUmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IFZhbHVlUmFuZ2VBbGwgcGFyYW1l
dGVycyB0aGF0IHdlcmUgYWxyZWFkeSB0aGUgZGVmYXVsdC4KKyAgICAgICAgLSBTd2l0Y2ggSFNM
QSBhbmQgSFdCQSB0byBzdG9wIHN0b3JpbmcgdGhlaXIgY29tcG9uZW50cyBpbiBhIDAtMSBub3Jt
YWxpemF0aW9uCisgICAgICAgICAgYW5kIGluc3RlYWQgdXNlIHZhbHVlcyB0aGF0IG1hdGNoIHRo
ZSBpbnB1dCwgMC0zNjAgZm9yIGh1ZSwgYW5kIDAtMTAwIGZvciB0aGUKKyAgICAgICAgICB0aGUg
cmVtYWluaW5nIHR3byBjb21wb25lbnRzLiBUaGlzIHNlZW1zIG1vcmUgbmF0dXJhbCwgYW5kIHdp
bGwgc2ltcGxpZnkKKyAgICAgICAgICBmdXR1cmUgY29sb3IgZnVuY3Rpb24gd29yayB0aGF0IGV4
cGVjdHMgdGhlIHZhbHVlcyBpbiB0aGlzIGZvcm0uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3Jr
ZXJTYWZlKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2hvdWxkRW5hYmxlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dEhhc2g6
Omhhc2gpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3VtZVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1l
Q2FyZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lT3V0bGluZUNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQYWludFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdW1lQmFja2dyb3VuZENvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6Y29uc3VtZUJvcmRlcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpub3JtYWxpemVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6
ZVdoaXRlbmVzc0JsYWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OnBhcnNlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTENIUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZv
clJHQlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkR3JhZGllbnRDb2xvclN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGluZWFyR3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29uaWNHcmFkaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbWFnZU9y
Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVDcm9zc0ZhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lRmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lU2luZ2xlU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VPcHRpb25hbEFscGhh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SW1hZ2UpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsY3VsYXRlSFNMSHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj46
OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhXQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRl
eHRDb2xvciBjb25zdCk6CisKIDIwMjEtMDItMTQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBNb2JpbGVTYWZhcmkgY3Jhc2hlcyBhdCBXZWJDb3Jl
OiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZG9FbnRlckZ1bGxzY3Jl
ZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9u
IDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIENvbG9yIENTU1BhcnNlcjo6cGFyc2VDb2xv
cldvcmtlclNhZmUoY28KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50
b2tlblJhbmdlKCkpOwogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdl
LCBIVE1MU3RhbmRhcmRNb2RlKTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdlLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkp
OwogfQogCiBDb2xvciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoU3RyaW5nVmlldyBzdHJp
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywzOSArNDcsNDYgQEAgQ1NT
UGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChDU1NQYQogewogfQogCi1DU1NQYXJzZXJD
b250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
VVJMJiBzaGVldEJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IGJhc2VVUkwo
c2hlZXRCYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogc2hlZXRCYXNlVVJM
KQotICAgICwgY2hhcnNldChjaGFyc2V0KQotICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01v
ZGUoKSA/IEhUTUxRdWlya3NNb2RlIDogSFRNTFN0YW5kYXJkTW9kZSkKLSAgICAsIGlzSFRNTERv
Y3VtZW50KGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKHNoZWV0QmFzZVVSTC5pc051bGwoKSB8fCBkb2N1bWVudC5zZWN1cml0eU9yaWdp
bigpLmNhblJlcXVlc3QoYmFzZVVSTCkpCi17Ci0gICAgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpOwotICAgIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3Ig
PSBkb2N1bWVudC5zZXR0aW5ncygpLnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVo
YXZpb3IoKTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHRleHRBdXRvc2l6aW5n
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0j
ZW5kaWYKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIGxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5sZWdhY3lP
dmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCgpOworc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxl
TGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7
CiAgICAgLy8gVGhlIGxlZ2FjeSAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2ggYmVo
YXZpb3IgbWF5IGhhdmUgYmVlbiBkaXNhYmxlZCB0aHJvdWdoIHRoZSB3ZWJzaXRlIHBvbGljeSwK
ICAgICAvLyBpbiB0aGF0IGNhc2Ugd2Ugd2FudCB0byBkaXNhYmxlIHRoZSBsZWdhY3kgYmVoYXZp
b3IgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBzZXR0aW5nIHNheXMuCiAgICAgaWYgKGF1dG8qIGxv
YWRlciA9IGRvY3VtZW50LmxvYWRlcigpKSB7CiAgICAgICAgIGlmIChsb2FkZXItPmxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3koKSA9PSBMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1Rv
dWNoUG9saWN5OjpEaXNhYmxlKQotICAgICAgICAgICAgbGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdU
b3VjaEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cisg
ICAgcmV0dXJuIGRvY3VtZW50LnNldHRpbmdzKCkubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQoKTsKK30KKyNlbmRpZgorCitDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250
ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBzaGVldEJhc2VVUkwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IGJhc2VVUkwgeyBzaGVldEJhc2VVUkwuaXNOdWxs
KCkgPyBkb2N1bWVudC5iYXNlVVJMKCkgOiBzaGVldEJhc2VVUkwgfQorICAgICwgY2hhcnNldCB7
IGNoYXJzZXQgfQorICAgICwgbW9kZSB7IGRvY3VtZW50LmluUXVpcmtzTW9kZSgpID8gSFRNTFF1
aXJrc01vZGUgOiBIVE1MU3RhbmRhcmRNb2RlIH0KKyAgICAsIGlzSFRNTERvY3VtZW50IHsgZG9j
dW1lbnQuaXNIVE1MRG9jdW1lbnQoKSB9CisgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgc2hlZXRCYXNlVVJMLmlzTnVsbCgpIHx8IGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuY2Fu
UmVxdWVzdChiYXNlVVJMKSB9CisgICAgLCB1c2VTeXN0ZW1BcHBlYXJhbmNlIHsgZG9jdW1lbnQu
cGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCkgOiBmYWxzZSB9
CisgICAgLCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBkb2N1bWVudC5zZXR0aW5ncygpLmFzcGVjdFJh
dGlvRW5hYmxlZCgpIH0KKyAgICAsIGNvbG9yRmlsdGVyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRp
bmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCkgfQorICAgICwgY29uc3RhbnRQcm9wZXJ0aWVzRW5h
YmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpIH0K
KyAgICAsIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuZGVm
ZXJyZWRDU1NQYXJzZXJFbmFibGVkKCkgfQorICAgICwgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpIH0KKyAgICAsIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7
IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3BlcnRpZXNFbmFi
bGVkKCkgfQorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgLCBsZWdh
Y3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCB7IHNob3VsZEVuYWJsZUxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2goZG9jdW1lbnQpIH0KICNlbmRpZgotICAgIHNwcmluZ1RpbWluZ0Z1
bmN0aW9uRW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuc3ByaW5nVGltaW5nRnVuY3Rpb25F
bmFibGVkKCk7Ci0gICAgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCA9IGRvY3VtZW50LnNldHRp
bmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpOwotICAgIGNvbG9yRmlsdGVyRW5hYmxl
ZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCk7CisgICAgLCBvdmVy
c2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5vdmVyc2Nyb2xsQmVo
YXZpb3JFbmFibGVkKCkgfQorICAgICwgc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQu
c2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkKCkgfQorICAgICwgc3By
aW5nVGltaW5nRnVuY3Rpb25FbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5zcHJpbmdUaW1p
bmdGdW5jdGlvbkVuYWJsZWQoKSB9CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICAs
IHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXpp
bmdFbmFibGVkKCkgfQorI2VuZGlmCisgICAgLCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0
aGFuZEJlaGF2aW9yIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6
ZVNob3J0aGFuZEJlaGF2aW9yKCkgfQogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0g
ICAgYXR0YWNobWVudEVuYWJsZWQgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCgpOworICAgICwgYXR0YWNobWVudEVuYWJs
ZWQgeyBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRF
bGVtZW50RW5hYmxlZCgpIH0KICNlbmRpZgotICAgIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCA9
IGRvY3VtZW50LnNldHRpbmdzKCkuZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKCk7Ci0gICAgc2Ny
b2xsQmVoYXZpb3JFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhT
Y3JvbGxpbmdFbmFibGVkKCk7Ci0gICAgb3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9IGRvY3Vt
ZW50LnNldHRpbmdzKCkub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCgpOwotICAgIHVzZVN5c3Rl
bUFwcGVhcmFuY2UgPSBkb2N1bWVudC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCktPnVzZVN5c3Rl
bUFwcGVhcmFuY2UoKSA6IGZhbHNlOwotICAgIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVz
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3Bl
cnRpZXNFbmFibGVkKCk7Ci0gICAgYXNwZWN0UmF0aW9FbmFibGVkID0gZG9jdW1lbnQuc2V0dGlu
Z3MoKS5hc3BlY3RSYXRpb0VuYWJsZWQoKTsKK3sKIH0KIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCkBAIC04Nywy
OCArOTQsMzEgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIAogICAg
IHJldHVybiBhLmJhc2VVUkwgPT0gYi5iYXNlVVJMCiAgICAgICAgICYmIGEuY2hhcnNldCA9PSBi
LmNoYXJzZXQKICAgICAgICAgJiYgYS5tb2RlID09IGIubW9kZQorICAgICAgICAmJiBhLmVuY2xv
c2luZ1J1bGVUeXBlID09IGIuZW5jbG9zaW5nUnVsZVR5cGUKICAgICAgICAgJiYgYS5pc0hUTUxE
b2N1bWVudCA9PSBiLmlzSFRNTERvY3VtZW50Ci0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykK
LSAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQKLSNlbmRpZgorICAgICAgICAmJiBhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPT0g
Yi5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luCisgICAgICAgICYmIGEuaXNDb250ZW50T3BhcXVl
ID09IGIuaXNDb250ZW50T3BhcXVlCisgICAgICAgICYmIGEudXNlU3lzdGVtQXBwZWFyYW5jZSA9
PSBiLnVzZVN5c3RlbUFwcGVhcmFuY2UKKyAgICAgICAgJiYgYS5hc3BlY3RSYXRpb0VuYWJsZWQg
PT0gYi5hc3BlY3RSYXRpb0VuYWJsZWQKKyAgICAgICAgJiYgYS5jb2xvckZpbHRlckVuYWJsZWQg
PT0gYi5jb2xvckZpbHRlckVuYWJsZWQKKyAgICAgICAgJiYgYS5jb25zdGFudFByb3BlcnRpZXNF
bmFibGVkID09IGIuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZAorICAgICAgICAmJiBhLmRlZmVy
cmVkQ1NTUGFyc2VyRW5hYmxlZCA9PSBiLmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZAorICAgICAg
ICAmJiBhLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSA9PSBiLmVuZm9yY2VzQ1NT
TUlNRVR5cGVJbk5vUXVpcmtzTW9kZQorICAgICAgICAmJiBhLmluZGl2aWR1YWxUcmFuc2Zvcm1Q
cm9wZXJ0aWVzRW5hYmxlZCA9PSBiLmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxl
ZAogI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCiAgICAgICAgICYmIGEubGVn
YWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaEVuYWJsZWQgPT0gYi5sZWdhY3lPdmVyZmxvd1Njcm9s
bGluZ1RvdWNoRW5hYmxlZAogI2VuZGlmCi0gICAgICAgICYmIGEuZW5mb3JjZXNDU1NNSU1FVHlw
ZUluTm9RdWlya3NNb2RlID09IGIuZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlCi0g
ICAgICAgICYmIGEudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9PSBi
LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IKKyAgICAgICAgJiYgYS5v
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkID09IGIub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZAor
ICAgICAgICAmJiBhLnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLnNjcm9sbEJlaGF2aW9yRW5h
YmxlZAogICAgICAgICAmJiBhLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9PSBiLnNwcmlu
Z1RpbWluZ0Z1bmN0aW9uRW5hYmxlZAotICAgICAgICAmJiBhLmNvbnN0YW50UHJvcGVydGllc0Vu
YWJsZWQgPT0gYi5jb25zdGFudFByb3BlcnRpZXNFbmFibGVkCi0gICAgICAgICYmIGEuY29sb3JG
aWx0ZXJFbmFibGVkID09IGIuY29sb3JGaWx0ZXJFbmFibGVkCisjaWYgRU5BQkxFKFRFWFRfQVVU
T1NJWklORykKKyAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0
b3NpemluZ0VuYWJsZWQKKyNlbmRpZgorICAgICAgICAmJiBhLnVzZUxlZ2FjeUJhY2tncm91bmRT
aXplU2hvcnRoYW5kQmVoYXZpb3IgPT0gYi51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFu
ZEJlaGF2aW9yCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICAgICAgJiYgYS5h
dHRhY2htZW50RW5hYmxlZCA9PSBiLmF0dGFjaG1lbnRFbmFibGVkCiAjZW5kaWYKLSAgICAgICAg
JiYgYS5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgPT0gYi5kZWZlcnJlZENTU1BhcnNlckVuYWJs
ZWQKLSAgICAgICAgJiYgYS5zY3JvbGxCZWhhdmlvckVuYWJsZWQgPT0gYi5zY3JvbGxCZWhhdmlv
ckVuYWJsZWQKLSAgICAgICAgJiYgYS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJs
ZWQgPT0gYi5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQKLSAgICAgICAgJiYg
YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID09IGIuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bgotICAgICAgICAmJiBhLnVzZVN5c3RlbUFwcGVhcmFuY2UgPT0gYi51c2VTeXN0ZW1BcHBlYXJh
bmNlCi0gICAgICAgICYmIGEuYXNwZWN0UmF0aW9FbmFibGVkID09IGIuYXNwZWN0UmF0aW9FbmFi
bGVkCi0gICAgICAgICYmIGEub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLm92ZXJzY3Jv
bGxCZWhhdmlvckVuYWJsZWQ7CisgICAgOwogfQogCiBVUkwgQ1NTUGFyc2VyQ29udGV4dDo6Y29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw3ICs0MSw2IEBAIGNsYXNzIERvY3VtZW50Owogc3RydWN0IENTU1BhcnNlckNvbnRl
eHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotCiAgICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKIApAQCAtNTAsMzYgKzQ5LDM3IEBAIHB1YmxpYzoKICAgICBDU1NQYXJzZXJNb2RlIG1v
ZGUgeyBIVE1MU3RhbmRhcmRNb2RlIH07CiAgICAgT3B0aW9uYWw8U3R5bGVSdWxlVHlwZT4gZW5j
bG9zaW5nUnVsZVR5cGU7CiAgICAgYm9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07Ci0jaWYg
RU5BQkxFKFRFWFRfQVVUT1NJWklORykKLSAgICBib29sIHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7
IGZhbHNlIH07Ci0jZW5kaWYKKworICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gc3VwcG9y
dCBnZXRNYXRjaGVkQ1NTUnVsZXMuCisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgZmFsc2UgfTsKKworICAgIGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKKyAgICBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAgLy8gU2V0dGluZ3MuCisg
ICAgYm9vbCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgY29sb3JGaWx0
ZXJFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIGNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQg
eyBmYWxzZSB9OworICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsK
KyAgICBib29sIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSB7IHRydWUgfTsKKyAg
ICBib29sIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNlIH07CiAj
aWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKICAgICBib29sIGxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgZW5m
b3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIHsgdHJ1ZSB9OwotICAgIGJvb2wgdXNlTGVn
YWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciB7IGZhbHNlIH07CisgICAgYm9vbCBv
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIHNjcm9sbEJlaGF2
aW9yRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBzcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJs
ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBjb2xvckZpbHRlckVuYWJsZWQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShU
RVhUX0FVVE9TSVpJTkcpCisgICAgYm9vbCB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgeyBmYWxzZSB9
OworI2VuZGlmCisgICAgYm9vbCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2
aW9yIHsgZmFsc2UgfTsKKworICAgIC8vIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuCiAjaWYgRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBib29sIGF0dGFjaG1lbnRFbmFibGVkIHsgZmFs
c2UgfTsKICNlbmRpZgotICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2Ug
fTsKLSAgICBib29sIHNjcm9sbEJlaGF2aW9yRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBp
bmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQgeyBmYWxzZSB9OwotCi0gICAgYm9v
bCBvdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKLSAgICAKLSAgICAvLyBUaGlz
IGlzIG9ubHkgbmVlZGVkIHRvIHN1cHBvcnQgZ2V0TWF0Y2hlZENTU1J1bGVzLgotICAgIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgYm9vbCB1c2VT
eXN0ZW1BcHBlYXJhbmNlIHsgZmFsc2UgfTsKIAogICAgIFVSTCBjb21wbGV0ZVVSTChjb25zdCBT
dHJpbmcmIHVybCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQ29udGVudE9wYXF1ZSB7IGZhbHNlIH07
Ci0KLSAgICBib29sIGFzcGVjdFJhdGlvRW5hYmxlZCB7IGZhbHNlIH07CiB9OwogCiBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKQEAgLTkwLDYgKzkwLDggQEAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgcwogc3RydWN0IENTU1BhcnNlckNvbnRleHRIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBrZXkpCiAgICAgeworICAgICAgICAvLyBGSVhN
RTogQ29udmVydCB0aGlzIHRvIHVzZSBXVEY6Okhhc2hlci4KKwogICAgICAgICB1bnNpZ25lZCBo
YXNoID0gMDsKICAgICAgICAgaWYgKCFrZXkuYmFzZVVSTC5pc051bGwoKSkKICAgICAgICAgICAg
IGhhc2ggXj0gV1RGOjpVUkxIYXNoOjpoYXNoKGtleS5iYXNlVVJMKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAy
NzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyNiwxNSArMTcyNiwxNSBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lWkluZGV4KENTCiAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdl
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNoYWRvdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBib29sIGlzQm94
U2hhZG93UHJvcGVydHkpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU2hhZG93KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
LCBib29sIGlzQm94U2hhZG93UHJvcGVydHkpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgp
ID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAK
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZG8gewotICAgICAgICBpZiAoUmVmUHRyPENT
U1NoYWRvd1ZhbHVlPiBzaGFkb3dWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3cocmFuZ2UsIGNz
c1BhcnNlck1vZGUsIGlzQm94U2hhZG93UHJvcGVydHksIGlzQm94U2hhZG93UHJvcGVydHkpKQot
ICAgICAgICAgICAgc2hhZG93VmFsdWVMaXN0LT5hcHBlbmQoKnNoYWRvd1ZhbHVlKTsKKyAgICAg
ICAgaWYgKGF1dG8gc2hhZG93VmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KHJhbmdlLCBjb250
ZXh0LCBpc0JveFNoYWRvd1Byb3BlcnR5LCBpc0JveFNoYWRvd1Byb3BlcnR5KSkKKyAgICAgICAg
ICAgIHNoYWRvd1ZhbHVlTGlzdC0+YXBwZW5kKHNoYWRvd1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IHdoaWxl
IChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CkBAIC0xODEzLDE5ICsx
ODEzLDE5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVUZXh0RW1waGEKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUNhcmV0Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVD
YXJldENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIHJldHVybiBjb25z
dW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBjb25zdW1lQ29sb3Io
cmFuZ2UsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0
bGluZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0bGluZUNvbG9yKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
KQogewogICAgIC8vIEFsbG93IHRoZSBzcGVjaWFsIGZvY3VzIGNvbG9yIGV2ZW4gaW4gSFRNTCBT
dGFuZGFyZCBwYXJzaW5nIG1vZGUuCiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFu
Z2UpOwotICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAg
IHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogfQogCiBzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGluZVdpZHRoKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MpCkBAIC0yMjI4LDcgKzIyMjgsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lCiAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGlvbkxvbmdoYW5kPENTU1ZhbHVlVG9w
LCBDU1NWYWx1ZUJvdHRvbT4ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOwogfQogCi1zdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lUGFpbnRTdHJva2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVQYWludFN0cm9rZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0g
Q1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKQEAgLTIy
MzgsNyArMjIzOCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8K
ICAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUp
OworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQp
OwogICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAg
ICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHVybC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTIyNDcs
NyArMjI0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8KICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gdXJsOwogICAgIH0KLSAgICByZXR1cm4gY29uc3VtZUNv
bG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yKHJhbmdl
LCBjb250ZXh0KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdseXBoT3Jp
ZW50YXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKQEAgLTMyNTgsNyArMzI1OCw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVCYWNrZ3JvdW4KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1NpemU6CiAgICAgICAgIHJldHVybiBjb25zdW1lQmFja2dyb3VuZFNpemUocHJvcGVydHks
IHJhbmdlLCBjb250ZXh0Lm1vZGUpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQubW9kZSk7Cisg
ICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH07CkBAIC00MjQxLDcgKzQyNDEsNyBAQCBSZWZQdHI8Q1NT
VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93
czoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGl2ZUludGVnZXIobV9yYW5nZSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3I6Ci0gICAgICAgIHJldHVybiBjb25z
dW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICByZXR1cm4gY29uc3Vt
ZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uU2tpcDoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVUZXh0RGVjb3JhdGlvblNraXAobV9y
YW5nZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aDoKQEAgLTQy
NjEsMTIgKzQyNjEsMTIgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFy
cwogICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZENvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlM
aWdodGluZ0NvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxlQ29sb3I6Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAg
ICByZXR1cm4gY29uc3VtZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNhcmV0Q29sb3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvcihtX3Jh
bmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvciht
X3JhbmdlLCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICByZXR1cm4gY29uc3VtZUNvbG9y
KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBpblF1aXJrc01vZGUoKSk7CisgICAgICAgIHJldHVy
biBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0LCBpblF1aXJrc01vZGUoKSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklubGluZVN0YXJ0V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlcklubGluZUVuZFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCbG9j
a1N0YXJ0V2lkdGg6CkBAIC00Mjc4LDcgKzQyNzgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1By
b3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOiB7
CiAgICAgICAgIGJvb2wgYWxsb3dRdWlya3lDb2xvcnMgPSBpblF1aXJrc01vZGUoKQogICAgICAg
ICAgICAgJiYgKGN1cnJlbnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkIHx8IGN1cnJl
bnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlCb3JkZXJDb2xvcik7Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIGFsbG93UXVpcmt5Q29sb3JzKTsK
KyAgICAgICAgcmV0dXJuIGNvbnN1bWVDb2xvcihtX3JhbmdlLCBtX2NvbnRleHQsIGFsbG93UXVp
cmt5Q29sb3JzKTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRo
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6CkBAIC00Mjk0LDcgKzQyOTQs
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NTMi4x
LCBiYWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKICAgICBjYXNlIENTU1Byb3BlcnR5Qm94
U2hhZG93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6Ci0gICAgICAgIHJl
dHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eUJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNo
YWRvdyk7CisgICAgICAgIHJldHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dCwg
cHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlXZWJraXRCb3hTaGFkb3cpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CiAjaWYgRU5B
QkxFKEZJTFRFUlNfTEVWRUxfMikKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXI6CkBAIC00MzQyLDcgKzQzNDIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5
UGFyc2VyOjpwYXJzCiAgICAgICAgIHJldHVybiBjb25zdW1lUm90YXRlKG1fcmFuZ2UsIG1fY29u
dGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3Ryb2tlOgotICAgICAgICByZXR1cm4gY29uc3VtZVBhaW50U3Ryb2tlKG1fcmFuZ2UsIG1f
Y29udGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQYWludFN0cm9rZShtX3Jhbmdl
LCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uVmVydGlj
YWw6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgogICAg
ICAgICByZXR1cm4gY29uc3VtZUdseXBoT3JpZW50YXRpb24obV9yYW5nZSwgbV9jb250ZXh0Lm1v
ZGUsIHByb3BlcnR5KTsKQEAgLTUwOTMsNyArNTA5Myw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJz
ZXI6OmNvbnN1bWVCb3JkZXIoUmUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVDb2xv
cihtX3JhbmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVD
b2xvcihtX3JhbmdlLCBtX2NvbnRleHQpOwogICAgICAgICAgICAgaWYgKGNvbG9yKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwyNjggKzY5MCwyODYgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVXJsKENTUwogICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHVybC50b1N0cmluZygpLCBDU1NVbml0VHlwZTo6
Q1NTX1VSSSk7CiB9CiAKLXN0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSB2
YWx1ZSwgYm9vbCBpc1BlcmNlbnRhZ2UpCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1l
T3B0aW9uYWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoaXNQ
ZXJjZW50YWdlKQorICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5n
ZSkpCisgICAgICAgIHJldHVybiAxLjA7CisKKyAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9
IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcocmFuZ2UpKQorICAgICAgICBy
ZXR1cm4gY2xhbXBUbzxkb3VibGU+KCphbHBoYVBhcmFtZXRlciwgMC4wLCAxLjApOworCisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZUh1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
Y29udGV4dCkKK3sKKyAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwg
Y29udGV4dC5tb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpG
b3JiaWQpKQorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVz
KGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOworCisgICAgaWYgKGF1dG8gbnVtYmVyID0gY29u
c3VtZU51bWJlclJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiAqbnVtYmVyOworCisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIGRvdWJsZSBub3JtYWxpemVIdWUoZG91Ymxl
IGh1ZSkKK3sKKyAgICByZXR1cm4gc3RkOjpmbW9kKHN0ZDo6Zm1vZChodWUsIDM2MC4wKSArIDM2
MC4wLCAzNjAuMCk7Cit9CisKK2VudW0gY2xhc3MgUkdCQ29tcG9uZW50VHlwZSB7CisgICAgTnVt
YmVyLAorICAgIFBlcmNlbnRhZ2UKK307CisKK3N0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9u
ZW50KGRvdWJsZSB2YWx1ZSwgUkdCQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlKQoreworICAg
IGlmIChjb21wb25lbnRUeXBlID09IFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2UpCiAgICAg
ICAgIHZhbHVlID0gdmFsdWUgLyAxMDAuMCAqIDI1NS4wOwogCiAgICAgcmV0dXJuIGNvbnZlcnRQ
cmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOwogfQogCi1zdGF0aWMgQ29sb3Ig
cGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorZW51bSBjbGFz
cyBSR0JPckhTTFNlcGFyYXRvclN5bnRheCB7CisgICAgQ29tbWFzLAorICAgIFdoaXRlc3BhY2VT
bGFzaAorfTsKKworc3RhdGljIGJvb2wgY29uc3VtZVJHQk9ySFNMU2VwYXJhdG9yKENTU1BhcnNl
clRva2VuUmFuZ2UmIGFyZ3MsIFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4IHN5bnRheCkKK3sKKyAg
ICBpZiAoc3ludGF4ID09IFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4OjpDb21tYXMpCisgICAgICAg
IHJldHVybiBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjb25zdW1lUkdCT3JIU0xBbHBoYVNlcGFyYXRvcihD
U1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBSR0JPckhTTFNlcGFyYXRvclN5bnRheCBzeW50YXgp
Cit7CisgICAgaWYgKHN5bnRheCA9PSBSR0JPckhTTFNlcGFyYXRvclN5bnRheDo6Q29tbWFzKQor
ICAgICAgICByZXR1cm4gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKKyAg
ICByZXR1cm4gY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKK30KKworc3Rh
dGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVJHQk9ySFNMT3B0aW9uYWxBbHBoYShDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzLCBSR0JPckhTTFNlcGFyYXRvclN5bnRheCBzeW50YXgpCit7Cisg
ICAgaWYgKCFjb25zdW1lUkdCT3JIU0xBbHBoYVNlcGFyYXRvcihhcmdzLCBzeW50YXgpKQorICAg
ICAgICByZXR1cm4gMS4wOworCisgICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1l
TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpKQorICAgICAgICByZXR1cm4gKmFs
cGhhUGFyYW1ldGVyOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIENv
bG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklk
KCkgPT0gQ1NTVmFsdWVSZ2IgfHwgcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1
ZVJnYmEpOwogICAgIGF1dG8gYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKLSAgICBi
b29sIGlzUGVyY2VudGFnZSA9IGZhbHNlOwotICAgIGRvdWJsZSBjb2xvclBhcmFtZXRlcjsKLSAg
ICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQotICAgICAgICBjb2xv
clBhcmFtZXRlciA9ICpudW1iZXI7Ci0gICAgZWxzZSBpZiAoYXV0byBwZXJjZW50ID0gY29uc3Vt
ZVBlcmNlbnRSYXcoYXJncykpIHsKLSAgICAgICAgY29sb3JQYXJhbWV0ZXIgPSAqcGVyY2VudDsK
LSAgICAgICAgaXNQZXJjZW50YWdlID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBzdHJ1Y3QgSW5pdGlhbENvbXBvbmVudCB7CisgICAgICAgIGRvdWJsZSB2YWx1
ZTsKKyAgICAgICAgUkdCQ29tcG9uZW50VHlwZSB0eXBlOworICAgIH07CiAKLSAgICBlbnVtIGNs
YXNzIENvbG9yU3ludGF4IHsKLSAgICAgICAgQ29tbWFzLAotICAgICAgICBXaGl0ZXNwYWNlU2xh
c2gsCisgICAgYXV0byBjb25zdW1lSW5pdGlhbENvbXBvbmVudCA9IFtdKGF1dG8gYXJncykgLT4g
T3B0aW9uYWw8SW5pdGlhbENvbXBvbmVudD4geworICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBj
b25zdW1lTnVtYmVyUmF3KGFyZ3MpKQorICAgICAgICAgICAgcmV0dXJuIHsgeyAqbnVtYmVyLCBS
R0JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSB9OworICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0g
Y29uc3VtZVBlcmNlbnRSYXcoYXJncykpCisgICAgICAgICAgICByZXR1cm4geyB7ICpwZXJjZW50
LCBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlIH0gfTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9OwogCi0gICAgQ29sb3JTeW50YXggc3ludGF4ID0gQ29sb3JTeW50YXg6
OkNvbW1hczsKLSAgICBhdXRvIGNvbnN1bWVTZXBhcmF0b3IgPSBbJl0gewotICAgICAgICBpZiAo
c3ludGF4ID09IENvbG9yU3ludGF4OjpDb21tYXMpCi0gICAgICAgICAgICByZXR1cm4gY29uc3Vt
ZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVy
biB0cnVlOworICAgIGF1dG8gY29uc3VtZUNvbXBvbmVudCA9IFtdKGF1dG8gYXJncywgYXV0byBj
b21wb25lbnRUeXBlKSB7CisgICAgICAgIHN3aXRjaCAoY29tcG9uZW50VHlwZSkgeworICAgICAg
ICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2U6CisgICAgICAgICAgICByZXR1cm4g
Y29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CisgICAgICAgIGNhc2UgUkdCQ29tcG9uZW50VHlwZTo6
TnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CisgICAg
ICAgIH0KICAgICB9OwogCi0gICAgdWludDhfdCBjb2xvckFycmF5WzNdOwotICAgIGNvbG9yQXJy
YXlbMF0gPSBjbGFtcFJHQkNvbXBvbmVudChjb2xvclBhcmFtZXRlciwgaXNQZXJjZW50YWdlKTsK
LSAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7IGkrKykgewotICAgICAgICBpZiAoaSA9PSAxKQot
ICAgICAgICAgICAgc3ludGF4ID0gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdz
KSA/IENvbG9yU3ludGF4OjpDb21tYXMgOiBDb2xvclN5bnRheDo6V2hpdGVzcGFjZVNsYXNoOwot
ICAgICAgICBlbHNlIGlmICghY29uc3VtZVNlcGFyYXRvcigpKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBhdXRvIGluaXRpYWxDb21wb25lbnQgPSBjb25zdW1lSW5pdGlhbENvbXBvbmVu
dChhcmdzKTsKKyAgICBpZiAoIWluaXRpYWxDb21wb25lbnQpCisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICAgICAgaWYgKGlzUGVyY2VudGFnZSkgewotICAgICAgICAgICAgYXV0byBwZXJjZW50
ID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7Ci0gICAgICAgICAgICBpZiAoIXBlcmNlbnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIGNvbG9yQXJyYXlbaV0gPSBj
bGFtcFJHQkNvbXBvbmVudCgqcGVyY2VudCwgdHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7Ci0gICAgICAgICAg
ICBpZiAoIW51bWJlcikKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAg
Y29sb3JBcnJheVtpXSA9IGNsYW1wUkdCQ29tcG9uZW50KCpudW1iZXIsIGZhbHNlKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBhdXRvIGNvbXBvbmVudFR5cGUgPSBpbml0aWFsQ29tcG9uZW50LT50
eXBlOworICAgIGF1dG8gcmVkID0gaW5pdGlhbENvbXBvbmVudC0+dmFsdWU7CiAKLSAgICAvLyBI
aXN0b3JpY2FsbHksIGFscGhhIHdhcyBvbmx5IHBhcnNlZCBmb3IgcmdiYSgpLCBidXQgY3NzLWNv
bG9yLTQgc3BlY2lmaWVzIHRoYXQgcmdiYSgpIGlzIGEgc2ltcGxlIGFsaWFzIGZvciByZ2IoKS4K
LSAgICBhdXRvIGNvbnN1bWVBbHBoYVNlcGFyYXRvciA9IFsmXSB7Ci0gICAgICAgIGlmIChzeW50
YXggPT0gQ29sb3JTeW50YXg6OkNvbW1hcykKLSAgICAgICAgICAgIHJldHVybiBjb25zdW1lQ29t
bWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNv
bnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgfTsKKyAgICBhdXRvIHN5
bnRheCA9IGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykgPyBSR0JPckhTTFNl
cGFyYXRvclN5bnRheDo6Q29tbWFzIDogUkdCT3JIU0xTZXBhcmF0b3JTeW50YXg6OldoaXRlc3Bh
Y2VTbGFzaDsKKyAgICAKKyAgICBhdXRvIGdyZWVuID0gY29uc3VtZUNvbXBvbmVudChhcmdzLCBj
b21wb25lbnRUeXBlKTsKKyAgICBpZiAoIWdyZWVuKQorICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgdWludDhfdCBhbHBoYUNvbXBvbmVudCA9IDI1NTsKLSAgICBpZiAoY29uc3VtZUFscGhhU2Vw
YXJhdG9yKCkpIHsKLSAgICAgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnRE
aXZpZGVkQnkxMDBSYXcoYXJncyk7Ci0gICAgICAgIGlmICghYWxwaGEpCi0gICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRGbG9hdEFscGhhVG88
dWludDhfdD4oKmFscGhhKTsKLSAgICB9CisgICAgaWYgKCFjb25zdW1lUkdCT3JIU0xTZXBhcmF0
b3IoYXJncywgc3ludGF4KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gYmx1ZSA9
IGNvbnN1bWVDb21wb25lbnQoYXJncywgY29tcG9uZW50VHlwZSk7CisgICAgaWYgKCFibHVlKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVSR0JPckhTTE9w
dGlvbmFsQWxwaGEoYXJncywgc3ludGF4KTsKKyAgICBpZiAoIWFscGhhKQorICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICByZXR1cm4gU1JHQkE8dWludDhfdD4geyBjb2xvckFycmF5WzBdLCBjb2xvckFycmF5WzFd
LCBjb2xvckFycmF5WzJdLCBhbHBoYUNvbXBvbmVudCB9OworICAgIGF1dG8gbm9ybWFsaXplZFJl
ZCA9IGNsYW1wUkdCQ29tcG9uZW50KHJlZCwgY29tcG9uZW50VHlwZSk7CisgICAgYXV0byBub3Jt
YWxpemVkR3JlZW4gPSBjbGFtcFJHQkNvbXBvbmVudCgqZ3JlZW4sIGNvbXBvbmVudFR5cGUpOwor
ICAgIGF1dG8gbm9ybWFsaXplZEJsdWUgPSBjbGFtcFJHQkNvbXBvbmVudCgqYmx1ZSwgY29tcG9u
ZW50VHlwZSk7CisgICAgYXV0byBub3JtYWxpemVkQWxwaGEgPSBjb252ZXJ0RmxvYXRBbHBoYVRv
PHVpbnQ4X3Q+KCphbHBoYSk7CisKKyAgICByZXR1cm4gU1JHQkE8dWludDhfdD4geyBub3JtYWxp
emVkUmVkLCBub3JtYWxpemVkR3JlZW4sIG5vcm1hbGl6ZWRCbHVlLCBub3JtYWxpemVkQWxwaGEg
fTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIENvbG9yIHBh
cnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0aW9u
SWQoKSA9PSBDU1NWYWx1ZUhzbCB8fCByYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1Zh
bHVlSHNsYSk7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKIAotICAg
IGRvdWJsZSBodWVBbmdsZUluRGVncmVlczsKLSAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVB
bmdsZVJhdyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRs
ZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVlKTsK
LSAgICBlbHNlIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncykpCi0gICAg
ICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gKm51bWJlcjsKLSAgICBlbHNlCisgICAgYXV0byBodWUg
PSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGlmICghaHVlKQogICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgZG91YmxlIGNvbG9yQXJyYXlbM107Ci0gICAgY29sb3JBcnJheVswXSA9
IGZtb2QoZm1vZChodWVBbmdsZUluRGVncmVlcywgMzYwLjApICsgMzYwLjAsIDM2MC4wKSAvIDM2
MC4wOworICAgIGF1dG8gc3ludGF4ID0gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShh
cmdzKSA/IFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4OjpDb21tYXMgOiBSR0JPckhTTFNlcGFyYXRv
clN5bnRheDo6V2hpdGVzcGFjZVNsYXNoOwogCi0gICAgYm9vbCByZXF1aXJlc0NvbW1hcyA9IGZh
bHNlOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgIGlmIChjb25z
dW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKSB7Ci0gICAgICAgICAgICBpZiAoaSAh
PSAxICYmICFyZXF1aXJlc0NvbW1hcykKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICAgICAgcmVxdWlyZXNDb21tYXMgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKHJlcXVp
cmVzQ29tbWFzIHx8IGFyZ3MuYXRFbmQoKSB8fCAoJmFyZ3MucGVlaygpIC0gMSktPnR5cGUoKSAh
PSBXaGl0ZXNwYWNlVG9rZW4pCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBhdXRv
IHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKLSAgICAgICAgaWYgKCFwZXJjZW50
KQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgY29sb3JBcnJheVtpXSA9IGNsYW1w
VG88ZG91YmxlPigqcGVyY2VudCwgMC4wLCAxMDAuMCkgLyAxMDAuMDsgLy8gTmVlZHMgdG8gYmUg
dmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAuCi0gICAgfQorICAgIGF1dG8gc2F0dXJhdGlvbiA9IGNv
bnN1bWVQZXJjZW50UmF3KGFyZ3MpOworICAgIGlmICghc2F0dXJhdGlvbikKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGJvb2wgY29tbWFDb25zdW1lZCA9IGNvbnN1bWVDb21tYUluY2x1ZGlu
Z1doaXRlc3BhY2UoYXJncyk7Ci0gICAgYm9vbCBzbGFzaENvbnN1bWVkID0gY29uc3VtZVNsYXNo
SW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKLSAgICBpZiAoKGNvbW1hQ29uc3VtZWQgJiYgIXJl
cXVpcmVzQ29tbWFzKSB8fCAoc2xhc2hDb25zdW1lZCAmJiByZXF1aXJlc0NvbW1hcykpCisgICAg
aWYgKCFjb25zdW1lUkdCT3JIU0xTZXBhcmF0b3IoYXJncywgc3ludGF4KSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGRvdWJsZSBhbHBoYSA9IDEuMDsKLSAgICBpZiAoY29tbWFDb25zdW1l
ZCB8fCBzbGFzaENvbnN1bWVkKSB7Ci0gICAgICAgIGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25z
dW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOwotICAgICAgICBpZiAoIWFs
cGhhUGFyYW1ldGVyKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgYWxwaGEgPSBj
bGFtcFRvPGRvdWJsZT4oKmFscGhhUGFyYW1ldGVyLCAwLjAsIDEuMCk7Ci0gICAgfQorICAgIGF1
dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CisgICAgaWYgKCFsaWdodG5l
c3MpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZVJHQk9y
SFNMT3B0aW9uYWxBbHBoYShhcmdzLCBzeW50YXgpOworICAgIGlmICghYWxwaGEpCisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KEhTTEE8ZmxvYXQ+
IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRIdWUgPSBub3JtYWxp
emVIdWUoKmh1ZSk7CisgICAgYXV0byBub3JtYWxpemVkU2F0dXJhdGlvbiA9IGNsYW1wVG88ZG91
YmxlPigqc2F0dXJhdGlvbiwgMC4wLCAxMDAuMCk7CisgICAgYXV0byBub3JtYWxpemVkTGlnaHRu
ZXNzID0gY2xhbXBUbzxkb3VibGU+KCpsaWdodG5lc3MsIDAuMCwgMTAwLjApOworICAgIGF1dG8g
bm9ybWFsaXplZEFscGhhID0gY2xhbXBUbzxkb3VibGU+KCphbHBoYSwgMC4wLCAxLjApOworCisg
ICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oSFNMQTxmbG9hdD4geyBzdGF0
aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZEh1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxp
emVkU2F0dXJhdGlvbiksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkTGlnaHRuZXNzKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRBbHBoYSkgfSk7CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDxmbG9hdD4gcGFyc2VPcHRpb25hbEFscGhhKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
KQorc3RydWN0IFdoaXRlbmVzc0JsYWNrbmVzcyB7CisgICAgZG91YmxlIHdoaXRlbmVzczsKKyAg
ICBkb3VibGUgYmxhY2tuZXNzOworfTsKK3N0YXRpYyBXaGl0ZW5lc3NCbGFja25lc3Mgbm9ybWFs
aXplV2hpdGVuZXNzQmxhY2tuZXNzKGRvdWJsZSB3aGl0ZW5lc3MsIGRvdWJsZSBibGFja25lc3Mp
CiB7Ci0gICAgaWYgKCFjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkKLSAg
ICAgICAgcmV0dXJuIDEuMGY7CisgICAgV2hpdGVuZXNzQmxhY2tuZXNzIHJlc3VsdDsKIAotICAg
IGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlck9yUGVyY2VudERpdmlkZWRC
eTEwMFJhdyhyYW5nZSkpCi0gICAgICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PigqYWxwaGFQYXJh
bWV0ZXIsIDAuMCwgMS4wKTsKKyAgICAvLyAgIFZhbHVlcyBvdXRzaWRlIG9mIHRoZXNlIHJhbmdl
cyBhcmUgbm90IGludmFsaWQsIGJ1dCBhcmUgY2xhbXBlZCB0byB0aGUKKyAgICAvLyAgIHJhbmdl
cyBkZWZpbmVkIGhlcmUgYXQgY29tcHV0ZWQtdmFsdWUgdGltZS4KKyAgICByZXN1bHQud2hpdGVu
ZXNzID0gY2xhbXBUbzxkb3VibGU+KHdoaXRlbmVzcywgMCwgMTAwKTsKKyAgICByZXN1bHQuYmxh
Y2tuZXNzID0gY2xhbXBUbzxkb3VibGU+KGJsYWNrbmVzcywgMCwgMTAwKTsKIAotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgLy8gICBJZiB0aGUgc3VtIG9mIHRoZXNlIHR3byBhcmd1bWVu
dHMgaXMgZ3JlYXRlciB0aGFuIDEwMCUsIHRoZW4gYXQKKyAgICAvLyAgIGNvbXB1dGVkLXZhbHVl
IHRpbWUgdGhleSBhcmUgZnVydGhlciBub3JtYWxpemVkIHRvIGFkZCB1cCB0byAxMDAlLCB3aXRo
CisgICAgLy8gICB0aGUgc2FtZSByZWxhdGl2ZSByYXRpby4KKyAgICBpZiAoYXV0byBzdW0gPSBy
ZXN1bHQud2hpdGVuZXNzICsgcmVzdWx0LmJsYWNrbmVzczsgc3VtID49IDEwMCkgeworICAgICAg
ICByZXN1bHQud2hpdGVuZXNzICo9IDEwMC4wIC8gc3VtOworICAgICAgICByZXN1bHQuYmxhY2tu
ZXNzICo9IDEwMC4wIC8gc3VtOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBDb2xvciBwYXJzZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBDb2xvciBwYXJzZUhXQlBhcmFt
ZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
IGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NT
VmFsdWVId2IpOwogICAgIGF1dG8gYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKLSAg
ICBkb3VibGUgaHVlQW5nbGVJbkRlZ3JlZXM7Ci0gICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1l
QW5nbGVSYXcoYXJncywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0
bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKLSAgICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7
Ci0gICAgZWxzZSBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQotICAg
ICAgICBodWVBbmdsZUluRGVncmVlcyA9ICpudW1iZXI7Ci0gICAgZWxzZQorICAgIGF1dG8gaHVl
ID0gY29uc3VtZUh1ZShhcmdzLCBjb250ZXh0KTsKKyAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGF1dG8gd2hpdGVuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncywg
VmFsdWVSYW5nZUFsbCk7CisgICAgYXV0byB3aGl0ZW5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhh
cmdzKTsKICAgICBpZiAoIXdoaXRlbmVzcykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1
dG8gYmxhY2tuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7Cisg
ICAgYXV0byBibGFja25lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKICAgICBpZiAoIWJs
YWNrbmVzcykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYWxwaGEgPSBwYXJzZU9w
dGlvbmFsQWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhh
KGFyZ3MpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBpZiAo
IWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIC8vIE5vcm1hbGl6ZSBo
dWUuCi0KLSAgICBodWVBbmdsZUluRGVncmVlcyA9IHN0ZDo6Zm1vZChodWVBbmdsZUluRGVncmVl
cywgMzYwLjApOwotICAgIGlmIChodWVBbmdsZUluRGVncmVlcyA8IDAuMCkKLSAgICAgICAgaHVl
QW5nbGVJbkRlZ3JlZXMgKz0gMzYwLjA7Ci0gICAgCi0gICAgLy8gQ29udmVydCBhbmdsZSB0byBu
b3JtYWxpemVkIGZvcm0gZnJvbSAwIC0gMS4KLSAgICBhdXRvIG5vcm1hbGl6ZWRIdWUgPSBodWVB
bmdsZUluRGVncmVlcyAvIDM2MC4wOwotCi0gICAgLy8gTm9ybWFsaXplIHdoaXRlbmVzcy9ibGFj
a25lc3MuCisgICAgYXV0byBub3JtYWxpemVkSHVlID0gbm9ybWFsaXplSHVlKCpodWUpOworICAg
IGF1dG8gW25vcm1hbGl6ZWRXaGl0bmVzcywgbm9ybWFsaXplZEJsYWNrbmVzc10gPSBub3JtYWxp
emVXaGl0ZW5lc3NCbGFja25lc3MoKndoaXRlbmVzcywgKmJsYWNrbmVzcyk7CiAKLSAgICAvLyAg
IFZhbHVlcyBvdXRzaWRlIG9mIHRoZXNlIHJhbmdlcyBhcmUgbm90IGludmFsaWQsIGJ1dCBhcmUg
Y2xhbXBlZCB0byB0aGUKLSAgICAvLyAgIHJhbmdlcyBkZWZpbmVkIGhlcmUgYXQgY29tcHV0ZWQt
dmFsdWUgdGltZS4KLSAgICBhdXRvIG5vbWFsaXplZFdoaXRlbmVzcyA9IGNsYW1wVG88ZG91Ymxl
Pigqd2hpdGVuZXNzLCAwLCAxMDApOwotICAgIGF1dG8gbm9tYWxpemVkQmxhY2tuZXNzID0gY2xh
bXBUbzxkb3VibGU+KCpibGFja25lc3MsIDAsIDEwMCk7Ci0KLSAgICAvLyAgIElmIHRoZSBzdW0g
b2YgdGhlc2UgdHdvIGFyZ3VtZW50cyBpcyBncmVhdGVyIHRoYW4gMTAwJSwgdGhlbiBhdAotICAg
IC8vICAgY29tcHV0ZWQtdmFsdWUgdGltZSB0aGV5IGFyZSBmdXJ0aGVyIG5vcm1hbGl6ZWQgdG8g
YWRkIHVwIHRvIDEwMCUsIHdpdGgKLSAgICAvLyAgIHRoZSBzYW1lIHJlbGF0aXZlIHJhdGlvLgot
ICAgIGlmIChhdXRvIHN1bSA9IG5vbWFsaXplZFdoaXRlbmVzcyArIG5vbWFsaXplZEJsYWNrbmVz
czsgc3VtID49IDEwMCkgewotICAgICAgICBub21hbGl6ZWRXaGl0ZW5lc3MgKj0gMTAwLjAgLyBz
dW07Ci0gICAgICAgIG5vbWFsaXplZEJsYWNrbmVzcyAqPSAxMDAuMCAvIHN1bTsKLSAgICB9Ci0K
LSAgICAvLyBDb252ZXJ0IHRvIG5vcm1hbGl6ZWQgZm9ybSBmcm9tIDAgLSAxLgotICAgIG5vbWFs
aXplZFdoaXRlbmVzcyAvPSAxMDAuMDsKLSAgICBub21hbGl6ZWRCbGFja25lc3MgLz0gMTAwLjA7
Ci0KLSAgICByZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihIV0JBPGZsb2F0PiB7
IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkSHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5v
bWFsaXplZFdoaXRlbmVzcyksIHN0YXRpY19jYXN0PGZsb2F0Pihub21hbGl6ZWRCbGFja25lc3Mp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9KTsKKyAgICByZXR1cm4gY29udmVydENvbG9y
PFNSR0JBPHVpbnQ4X3Q+PihIV0JBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxp
emVkSHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRXaGl0bmVzcyksIHN0YXRpY19j
YXN0PGZsb2F0Pihub3JtYWxpemVkQmxhY2tuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBo
YSkgfSk7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCitzdGF0aWMgQ29sb3IgcGFyc2VMYWJQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JikKIHsKICAgICBBU1NF
UlQocmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxhYik7CiAgICAgYXV0byBh
cmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKIAotICAgIGF1dG8gbGlnaHRuZXNzID0gY29u
c3VtZVBlcmNlbnRSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgYXV0byBsaWdodG5lc3Mg
PSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKICAgICBpZiAoIWxpZ2h0bmVzcykKICAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBW
YWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7
CiAgICAgaWYgKCFhVmFsdWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGJWYWx1
ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgYXV0byBiVmFs
dWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOwogICAgIGlmICghYlZhbHVlKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYXV0byBhbHBoYSA9IHBhcnNlT3B0aW9uYWxBbHBoYShhcmdzKTsK
KyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7CiAgICAgaWYgKCFh
bHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2FzdDxm
bG9hdD4oKmxpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqYVZhbHVlKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KCpiVmFsdWUpLCAqYWxwaGEgfTsKKyAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0
YXRpY19jYXN0PGZsb2F0PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphVmFsdWUp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oKmJWYWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEp
IH07CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBDb2xvciBw
YXJzZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1Bh
cnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlv
bklkKCkgPT0gQ1NTVmFsdWVMY2gpOwogICAgIGF1dG8gYXJncyA9IGNvbnN1bWVGdW5jdGlvbihy
YW5nZSk7CiAKLSAgICBhdXRvIGxpZ2h0bmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MsIFZh
bHVlUmFuZ2VBbGwpOworICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJn
cyk7CiAgICAgaWYgKCFsaWdodG5lc3MpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRv
IGNocm9tYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKLSAg
ICBpZiAoIWNocm9tYVZhbHVlKQorICAgIGF1dG8gY2hyb21hID0gY29uc3VtZU51bWJlclJhdyhh
cmdzKTsKKyAgICBpZiAoIWNocm9tYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGRvdWJs
ZSBodWVBbmdsZUluRGVncmVlczsKLSAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJh
dyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVy
b1F1aXJrOjpGb3JiaWQpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVlKTsKLSAgICBl
bHNlIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFs
bCkpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gKm51bWJlcjsKLSAgICBlbHNlCisgICAg
YXV0byBodWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGlmICghaHVlKQogICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSBmbW9kKGh1ZUFuZ2xl
SW5EZWdyZWVzLCAzNjAuMCk7Ci0gICAgaWYgKGh1ZUFuZ2xlSW5EZWdyZWVzIDwgMC4wKQotICAg
ICAgICBodWVBbmdsZUluRGVncmVlcyArPSAzNjAuMDsKLQotICAgIGF1dG8gYWxwaGEgPSBwYXJz
ZU9wdGlvbmFsQWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFs
cGhhKGFyZ3MpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBp
ZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBjb252
ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oTENIQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oKmxp
Z2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqY2hyb21hVmFsdWUpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oaHVlQW5nbGVJbkRlZ3JlZXMpLCAqYWxwaGEgfSk7CisgICAgYXV0byBub3JtYWxpemVk
SHVlID0gbm9ybWFsaXplSHVlKCpodWUpOworCisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMYWI8
ZmxvYXQ+PihMQ0hBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0PigqbGlnaHRuZXNzKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KCpjaHJvbWEpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZEh1
ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGU+Ci1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncykKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
c3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cGVzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIGFyZ3MpCiB7CiAgICAgQVNTRVJUKGFyZ3MucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVB
OThSZ2IgfHwgYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZURpc3BsYXlQMyB8fCBhcmdzLnBl
ZWsoKS5pZCgpID09IENTU1ZhbHVlUHJvcGhvdG9SZ2IgfHwgYXJncy5wZWVrKCkuaWQoKSA9PSBD
U1NWYWx1ZVJlYzIwMjAgfHwgYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZVNSR0IpOwogICAg
IGNvbnN1bWVJZGVudFJhdyhhcmdzKTsKQEAgLTk2NCwxMSArOTgyLDExIEBAIHN0YXRpYyBDb2xv
ciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXAKICAgICAgICAgY2hhbm5lbHNbaV0gPSAqdmFs
dWU7CiAgICAgfQogCi0gICAgYXV0byBhbHBoYSA9IHBhcnNlT3B0aW9uYWxBbHBoYShhcmdzKTsK
KyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7CiAgICAgaWYgKCFh
bHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBDb2xvclR5cGUgeyBjbGFt
cFRvPGZsb2F0PihjaGFubmVsc1swXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVs
c1sxXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1syXSwgMC4wLCAxLjApLCAq
YWxwaGEgfTsKKyAgICByZXR1cm4gQ29sb3JUeXBlIHsgY2xhbXBUbzxmbG9hdD4oY2hhbm5lbHNb
MF0sIDAuMCwgMS4wKSwgY2xhbXBUbzxmbG9hdD4oY2hhbm5lbHNbMV0sIDAuMCwgMS4wKSwgY2xh
bXBUbzxmbG9hdD4oY2hhbm5lbHNbMl0sIDAuMCwgMS4wKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCph
bHBoYSkgfTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvckxhYlBhcmFt
ZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncykKQEAgLTk3OCwyNyArOTk2LDI3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JMYWJQYXIKIAogICAgIGRvdWJsZSBjaGFu
bmVsc1szXSA9IHsgMCwgMCwgMCB9OwogICAgIFsmXSB7Ci0gICAgICAgIGF1dG8gbGlnaHRuZXNz
ID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8g
bGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CiAgICAgICAgIGlmICghbGlnaHRu
ZXNzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGFubmVsc1swXSA9ICpsaWdodG5l
c3M7CiAKLSAgICAgICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVl
UmFuZ2VBbGwpOworICAgICAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7
CiAgICAgICAgIGlmICghYVZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGFu
bmVsc1sxXSA9ICphVmFsdWU7CiAKLSAgICAgICAgYXV0byBiVmFsdWUgPSBjb25zdW1lTnVtYmVy
UmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRvIGJWYWx1ZSA9IGNvbnN1bWVO
dW1iZXJSYXcoYXJncyk7CiAgICAgICAgIGlmICghYlZhbHVlKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjaGFubmVsc1syXSA9ICpiVmFsdWU7CiAgICAgfSgpOwogCi0gICAgYXV0byBh
bHBoYSA9IHBhcnNlT3B0aW9uYWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3Vt
ZU9wdGlvbmFsQWxwaGEoYXJncyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBMYWI8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxz
WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNoYW5uZWxzWzJdKSwgKmFscGhhIH07CisgICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNf
Y2FzdDxmbG9hdD4oY2hhbm5lbHNbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMV0p
LCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFs
cGhhKSB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yWFlaUGFyYW1l
dGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQpAQCAtMTAwOCwyNyArMTAyNiwyNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yWFlaUGFyCiAKICAgICBkb3VibGUgY2hh
bm5lbHNbM10gPSB7IDAsIDAsIDAgfTsKICAgICBbJl0gewotICAgICAgICBhdXRvIHggPSBjb25z
dW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRvIHggPSBjb25z
dW1lTnVtYmVyUmF3KGFyZ3MpOwogICAgICAgICBpZiAoIXgpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGNoYW5uZWxzWzBdID0gKng7CiAKLSAgICAgICAgYXV0byB5ID0gY29uc3VtZU51
bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byB5ID0gY29uc3VtZU51
bWJlclJhdyhhcmdzKTsKICAgICAgICAgaWYgKCF5KQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjaGFubmVsc1sxXSA9ICp5OwogCi0gICAgICAgIGF1dG8geiA9IGNvbnN1bWVOdW1iZXJS
YXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8geiA9IGNvbnN1bWVOdW1iZXJS
YXcoYXJncyk7CiAgICAgICAgIGlmICgheikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y2hhbm5lbHNbMl0gPSAqejsKICAgICB9KCk7CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VPcHRp
b25hbEFscGhhKGFyZ3MpOworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYShh
cmdzKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJu
IFhZWkE8ZmxvYXQsIFdoaXRlUG9pbnQ6OkQ1MD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5l
bHNbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMV0pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY2hhbm5lbHNbMl0pLCAqYWxwaGEgfTsKKyAgICByZXR1cm4gWFlaQTxmbG9hdCwgV2hpdGVQ
b2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1swXSksIHN0YXRpY19jYXN0
PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1syXSksIHN0
YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
RnVuY3Rpb25QYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtMTExMSw3
ICsxMTI5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleAogICAg
IHJldHVybiAqcmVzdWx0OwogfQogCi1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCitz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIENTU1BhcnNlclRva2Vu
UmFuZ2UgY29sb3JSYW5nZSA9IHJhbmdlOwogICAgIENTU1ZhbHVlSUQgZnVuY3Rpb25JZCA9IHJh
bmdlLnBlZWsoKS5mdW5jdGlvbklkKCk7CkBAIC0xMTE5LDIwICsxMTM3LDIwIEBAIHN0YXRpYyBD
b2xvciBwYXJzZUNvbG9yRnVuY3Rpb24oQ1NTUGFyc2UKICAgICBzd2l0Y2ggKGZ1bmN0aW9uSWQp
IHsKICAgICBjYXNlIENTU1ZhbHVlUmdiOgogICAgIGNhc2UgQ1NTVmFsdWVSZ2JhOgotICAgICAg
ICBjb2xvciA9IHBhcnNlUkdCUGFyYW1ldGVycyhjb2xvclJhbmdlKTsKKyAgICAgICAgY29sb3Ig
PSBwYXJzZVJHQlBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY29udGV4dCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ1NTVmFsdWVIc2w6CiAgICAgY2FzZSBDU1NWYWx1ZUhzbGE6Ci0gICAgICAg
IGNvbG9yID0gcGFyc2VIU0xQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNzc1BhcnNlck1vZGUpOwor
ICAgICAgICBjb2xvciA9IHBhcnNlSFNMUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjb250ZXh0KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NWYWx1ZUh3YjoKLSAgICAgICAgY29sb3IgPSBw
YXJzZUhXQlBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY3NzUGFyc2VyTW9kZSk7CisgICAgICAgIGNv
bG9yID0gcGFyc2VIV0JQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENTU1ZhbHVlTGFiOgotICAgICAgICBjb2xvciA9IHBhcnNlTGFiUGFy
YW1ldGVycyhjb2xvclJhbmdlKTsKKyAgICAgICAgY29sb3IgPSBwYXJzZUxhYlBhcmFtZXRlcnMo
Y29sb3JSYW5nZSwgY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVM
Y2g6Ci0gICAgICAgIGNvbG9yID0gcGFyc2VMQ0hQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNzc1Bh
cnNlck1vZGUpOworICAgICAgICBjb2xvciA9IHBhcnNlTENIUGFyYW1ldGVycyhjb2xvclJhbmdl
LCBjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NWYWx1ZUNvbG9yOgogICAg
ICAgICBjb2xvciA9IHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoY29sb3JSYW5nZSk7CkBA
IC0xMTQ1LDcgKzExNjMsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uKENTU1Bh
cnNlCiAgICAgcmV0dXJuIGNvbG9yOwogfQogCi1Db2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZl
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUp
CitDb2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIENvbG9yIHJlc3VsdDsK
ICAgICBhdXRvIGtleXdvcmQgPSByYW5nZS5wZWVrKCkuaWQoKTsKQEAgLTExNTQsNyArMTE3Miw3
IEBAIENvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG8KICAgICAgICAgLy8g
ICAgICAgIEZvciBub3csIHdlIGRldGVjdCB0aGUgc3lzdGVtIGNvbG9yLCBidXQgdGhlbiBpbnRl
bnRpb25hbGx5IGZhaWwgcGFyc2luZy4KICAgICAgICAgaWYgKFN0eWxlQ29sb3I6OmlzU3lzdGVt
Q29sb3Ioa2V5d29yZCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBpZiAoIWlz
VmFsdWVBbGxvd2VkSW5Nb2RlKGtleXdvcmQsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICBpZiAo
IWlzVmFsdWVBbGxvd2VkSW5Nb2RlKGtleXdvcmQsIGNvbnRleHQubW9kZSkpCiAgICAgICAgICAg
ICByZXR1cm4geyB9OwogICAgICAgICByZXN1bHQgPSBTdHlsZUNvbG9yOjpjb2xvckZyb21LZXl3
b3JkKGtleXdvcmQsIHsgfSk7CiAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCk7CkBAIC0xMTYzLDcgKzExODEsNyBAQCBDb2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZl
KENTU1BhcnNlclRvCiAgICAgaWYgKGF1dG8gcGFyc2VkQ29sb3IgPSBwYXJzZUhleENvbG9yKHJh
bmdlLCBmYWxzZSkpCiAgICAgICAgIHJlc3VsdCA9ICpwYXJzZWRDb2xvcjsKICAgICBlbHNlCi0g
ICAgICAgIHJlc3VsdCA9IHBhcnNlQ29sb3JGdW5jdGlvbihyYW5nZSwgY3NzUGFyc2VyTW9kZSk7
CisgICAgICAgIHJlc3VsdCA9IHBhcnNlQ29sb3JGdW5jdGlvbihyYW5nZSwgY29udGV4dCk7CiAK
ICAgICBpZiAoIXJhbmdlLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0xMTcxLDEx
ICsxMTg5LDExIEBAIENvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG8KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVD
b2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlLCBib29sIGFjY2VwdFF1aXJreUNvbG9ycykKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0LCBib29sIGFjY2VwdFF1aXJreUNvbG9ycykKIHsKICAgICBhdXRvIGtl
eXdvcmQgPSByYW5nZS5wZWVrKCkuaWQoKTsKICAgICBpZiAoU3R5bGVDb2xvcjo6aXNDb2xvcktl
eXdvcmQoa2V5d29yZCkpIHsKLSAgICAgICAgaWYgKCFpc1ZhbHVlQWxsb3dlZEluTW9kZShrZXl3
b3JkLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgaWYgKCFpc1ZhbHVlQWxsb3dlZEluTW9kZShr
ZXl3b3JkLCBjb250ZXh0Lm1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwogICAgIH0KQEAgLTExODMsNyArMTIwMSw3
IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNvbG9yKEMKICAgICBpZiAoYXV0
byBwYXJzZWRDb2xvciA9IHBhcnNlSGV4Q29sb3IocmFuZ2UsIGFjY2VwdFF1aXJreUNvbG9ycykp
CiAgICAgICAgIGNvbG9yID0gKnBhcnNlZENvbG9yOwogICAgIGVsc2UgewotICAgICAgICBjb2xv
ciA9IHBhcnNlQ29sb3JGdW5jdGlvbihyYW5nZSwgY3NzUGFyc2VyTW9kZSk7CisgICAgICAgIGNv
bG9yID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgaWYgKCFj
b2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0x
NDEzLDE0ICsxNDMxLDE0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWUKIH0KIAogLy8gVXNlZCB0byBwYXJzZSBjb2xvcnMgZm9yIC13ZWJraXQtZ3JhZGllbnQoLi4u
KS4KLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkR3Jh
ZGllbnRTdG9wQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBj
c3NQYXJzZXJNb2RlKQorc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZURl
cHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChhcmdzLnBlZWsoKS5pZCgp
ID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gY29uc3VtZUNvbG9yKGFyZ3MsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBjb25z
dW1lQ29sb3IoYXJncywgY29udGV4dCk7CiB9CiAKLXN0YXRpYyBib29sIGNvbnN1bWVEZXByZWNh
dGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0dyYWRp
ZW50Q29sb3JTdG9wJiBzdG9wLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCitzdGF0aWMg
Ym9vbCBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NHcmFkaWVudENvbG9yU3RvcCYgc3RvcCwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYgY29udGV4dCkKIHsKICAgICBDU1NWYWx1ZUlEIGlkID0gcmFuZ2UucGVlaygpLmZ1bmN0
aW9uSWQoKTsKICAgICBpZiAoaWQgIT0gQ1NTVmFsdWVGcm9tICYmIGlkICE9IENTU1ZhbHVlVG8g
JiYgaWQgIT0gQ1NTVmFsdWVDb2xvclN0b3ApCkBAIC0xNDQyLDExICsxNDYwLDExIEBAIHN0YXRp
YyBib29sIGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2wKICAgICB9CiAKICAgICBzdG9wLnBv
c2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwb3NpdGlvbiwg
Q1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIHN0b3AuY29sb3IgPSBjb25zdW1lRGVwcmVj
YXRlZEdyYWRpZW50U3RvcENvbG9yKGFyZ3MsIGNzc1BhcnNlck1vZGUpOworICAgIHN0b3AuY29s
b3IgPSBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50U3RvcENvbG9yKGFyZ3MsIGNvbnRleHQpOwog
ICAgIHJldHVybiBzdG9wLmNvbG9yICYmIGFyZ3MuYXRFbmQoKTsKIH0KIAotc3RhdGljIFJlZlB0
cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdl
JiBhcmdzLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3Ms
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgUmVmUHRyPENTU0dyYWRp
ZW50VmFsdWU+IHJlc3VsdDsKICAgICBDU1NWYWx1ZUlEIGlkID0gYXJncy5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpLmlkKCk7CkBAIC0xNDk5LDcgKzE1MTcsNyBAQCBzdGF0aWMgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlCiAKICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBz
dG9wOwogICAgIHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKSB7
Ci0gICAgICAgIGlmICghY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcChhcmdzLCBz
dG9wLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgaWYgKCFjb25zdW1lRGVwcmVjYXRlZEdyYWRp
ZW50Q29sb3JTdG9wKGFyZ3MsIHN0b3AsIGNvbnRleHQpKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIHJlc3VsdC0+YWRkU3RvcChXVEZNb3ZlKHN0b3ApKTsKICAgICB9CkBA
IC0xNTA4LDIwICsxNTI2LDIwIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXBy
ZWNhdGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9vbCBjb25zdW1lR3JhZGll
bnRDb2xvclN0b3BzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIG1v
ZGUsIENTU0dyYWRpZW50VmFsdWUmIGdyYWRpZW50KQorc3RhdGljIGJvb2wgY29uc3VtZUdyYWRp
ZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCwgQ1NTR3JhZGllbnRWYWx1ZSYgZ3JhZGllbnQpCiB7CiAgICAgYm9v
bCBzdXBwb3J0c0NvbG9ySGludHMgPSBncmFkaWVudC5ncmFkaWVudFR5cGUoKSA9PSBDU1NMaW5l
YXJHcmFkaWVudCB8fCBncmFkaWVudC5ncmFkaWVudFR5cGUoKSA9PSBDU1NSYWRpYWxHcmFkaWVu
dCB8fCBncmFkaWVudC5ncmFkaWVudFR5cGUoKSA9PSBDU1NDb25pY0dyYWRpZW50OwogICAgIAog
ICAgIGF1dG8gY29uc3VtZVN0b3BQb3NpdGlvbiA9IFsmXSB7CiAgICAgICAgIHJldHVybiBncmFk
aWVudC5ncmFkaWVudFR5cGUoKSA9PSBDU1NDb25pY0dyYWRpZW50Ci0gICAgICAgICAgICA/IGNv
bnN1bWVBbmdsZU9yUGVyY2VudChyYW5nZSwgbW9kZSwgVmFsdWVSYW5nZUFsbCwgVW5pdGxlc3NR
dWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpCi0gICAgICAgICAgICA6IGNv
bnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIG1vZGUsIFZhbHVlUmFuZ2VBbGwpOworICAgICAg
ICAgICAgPyBjb25zdW1lQW5nbGVPclBlcmNlbnQocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVS
YW5nZUFsbCwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cp
CisgICAgICAgICAgICA6IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIGNvbnRleHQubW9k
ZSwgVmFsdWVSYW5nZUFsbCk7CiAgICAgfTsKIAogICAgIC8vIFRoZSBmaXJzdCBjb2xvciBzdG9w
IGNhbm5vdCBiZSBhIGNvbG9yIGhpbnQuCiAgICAgYm9vbCBwcmV2aW91c1N0b3BXYXNDb2xvckhp
bnQgPSB0cnVlOwogICAgIGRvIHsKLSAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcCB7
IGNvbnN1bWVDb2xvcihyYW5nZSwgbW9kZSksIGNvbnN1bWVTdG9wUG9zaXRpb24oKSwgeyB9IH07
CisgICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3AgeyBjb25zdW1lQ29sb3IocmFuZ2Us
IGNvbnRleHQpLCBjb25zdW1lU3RvcFBvc2l0aW9uKCksIHsgfSB9OwogICAgICAgICBpZiAoIXN0
b3AuY29sb3IgJiYgIXN0b3AucG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTE1NTIsMTEgKzE1NzAsMTEgQEAgc3RhdGljIGJvb2wgY29uc3VtZUdyYWRpZW50Q29sb3JT
dG9wcyhDUwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3Ms
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5n
KQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250
ZXh0LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCiB7CiAgICAgYXV0byByZXN1bHQgPSBD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBDU1NQcmVmaXhlZFJhZGlh
bEdyYWRpZW50KTsKIAotICAgIGF1dG8gY2VudGVyQ29vcmRpbmF0ZSA9IGNvbnN1bWVPbmVPclR3
b1ZhbHVlZFBvc2l0aW9uQ29vcmRpbmF0ZXMoYXJncywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyazo6Rm9yYmlkKTsKKyAgICBhdXRvIGNlbnRlckNvb3JkaW5hdGUgPSBjb25zdW1lT25lT3JU
d29WYWx1ZWRQb3NpdGlvbkNvb3JkaW5hdGVzKGFyZ3MsIGNvbnRleHQubW9kZSwgVW5pdGxlc3NR
dWlyazo6Rm9yYmlkKTsKICAgICBpZiAoY2VudGVyQ29vcmRpbmF0ZSAmJiAhY29uc3VtZUNvbW1h
SW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTE1NjcsMTAgKzE1ODUsMTAgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJl
Y2F0ZQogCiAgICAgLy8gT3IsIHR3byBsZW5ndGhzIG9yIHBlcmNlbnRhZ2VzCiAgICAgaWYgKCFz
aGFwZSAmJiAhc2l6ZUtleXdvcmQpIHsKLSAgICAgICAgYXV0byBob3Jpem9udGFsU2l6ZSA9IGNv
bnN1bWVMZW5ndGhPclBlcmNlbnQoYXJncywgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5l
Z2F0aXZlKTsKKyAgICAgICAgYXV0byBob3Jpem9udGFsU2l6ZSA9IGNvbnN1bWVMZW5ndGhPclBl
cmNlbnQoYXJncywgY29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwogICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZlcnRpY2FsU2l6ZTsKICAgICAgICAgaWYgKGhv
cml6b250YWxTaXplKSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjb25zdW1lTGVuZ3Ro
T3JQZXJjZW50KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7Cisg
ICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KGFyZ3MsIGNv
bnRleHQubW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgICAgIGlmICghdmVy
dGljYWxTaXplKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAg
Y29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKQEAgLTE1ODEsNyArMTU5OSw3
IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGUKICAgICAgICAgY29u
c3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKICAgICB9CiAKLSAgICBpZiAoIWNv
bnN1bWVHcmFkaWVudENvbG9yU3RvcHMoYXJncywgY3NzUGFyc2VyTW9kZSwgcmVzdWx0KSkKKyAg
ICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoYXJncywgY29udGV4dCwgcmVzdWx0KSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoY2VudGVyQ29vcmRpbmF0ZSkgewpA
QCAtMTU5Niw3ICsxNjE0LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJl
Y2F0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKK3N0YXRpYyBS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdl
JiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBDU1NHcmFkaWVudFJlcGVh
dCByZXBlYXRpbmcpCiB7CiAgICAgUmVmUHRyPENTU1JhZGlhbEdyYWRpZW50VmFsdWU+IHJlc3Vs
dCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1JhZGlhbEdy
YWRpZW50KTsKIApAQCAtMTYyNCwxMyArMTY0MiwxMyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lUmFkaWFsR3JhCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIGNlbnRlciA9IGNvbnN1bWVMZW5n
dGhPclBlcmNlbnQoYXJncywgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsK
KyAgICAgICAgICAgIGF1dG8gY2VudGVyID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChhcmdzLCBj
b250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CiAgICAgICAgICAgICBpZiAoIWNl
bnRlcikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChob3Jpem9udGFs
U2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGhvcml6
b250YWxTaXplID0gY2VudGVyOwotICAgICAgICAgICAgY2VudGVyID0gY29uc3VtZUxlbmd0aE9y
UGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOworICAg
ICAgICAgICAgY2VudGVyID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChhcmdzLCBjb250ZXh0Lm1v
ZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CiAgICAgICAgICAgICBpZiAoY2VudGVyKSB7CiAg
ICAgICAgICAgICAgICAgdmVydGljYWxTaXplID0gY2VudGVyOwogICAgICAgICAgICAgICAgICsr
aTsKQEAgLTE2NTksNyArMTY3Nyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVS
YWRpYWxHcmEKICAgICBpZiAoYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUF0KSB7CiAgICAg
ICAgIGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgCi0gICAgICAg
IGF1dG8gY2VudGVyQ29vcmRpbmF0ZSA9IGNvbnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKGFyZ3Ms
IGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgUG9zaXRpb25TeW50YXg6OlBv
c2l0aW9uKTsKKyAgICAgICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZVBvc2l0aW9u
Q29vcmRpbmF0ZXMoYXJncywgY29udGV4dC5tb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFBv
c2l0aW9uU3ludGF4OjpQb3NpdGlvbik7CiAgICAgICAgIGlmICghY2VudGVyQ29vcmRpbmF0ZSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKQEAgLTE2NzYsNyArMTY5NCw3
IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVSYWRpYWxHcmEKIAogICAgIGlmICgo
c2hhcGUgfHwgc2l6ZUtleXdvcmQgfHwgaG9yaXpvbnRhbFNpemUgfHwgY2VudGVyWCB8fCBjZW50
ZXJZKSAmJiAhY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFjb25zdW1lR3JhZGllbnRDb2xvclN0b3BzKGFyZ3Ms
IGNzc1BhcnNlck1vZGUsICpyZXN1bHQpKQorICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JT
dG9wcyhhcmdzLCBjb250ZXh0LCAqcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICByZXN1bHQtPnNldFNoYXBlKFdURk1vdmUoc2hhcGUpKTsKQEAgLTE2ODcsMTIgKzE3MDUs
MTIgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYQogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVMaW5lYXJHcmFk
aWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1v
ZGUsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZywgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50
VHlwZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVMaW5lYXJHcmFkaWVudChDU1NQ
YXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBD
U1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcsIENTU0dyYWRpZW50VHlwZSBncmFkaWVudFR5cGUp
CiB7CiAgICAgUmVmUHRyPENTU0xpbmVhckdyYWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU0xpbmVh
ckdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIGdyYWRpZW50VHlwZSk7CiAKICAgICBi
b29sIGV4cGVjdENvbW1hID0gdHJ1ZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFu
Z2xlID0gY29uc3VtZUFuZ2xlKGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZv
cmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGFuZ2xlID0gY29uc3VtZUFuZ2xlKGFyZ3MsIGNvbnRleHQubW9kZSwgVW5pdGxlc3NR
dWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpOwogICAgIGlmIChhbmdsZSkK
ICAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShhbmdsZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICBl
bHNlIGlmIChncmFkaWVudFR5cGUgPT0gQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCB8fCBjb25z
dW1lSWRlbnQ8Q1NTVmFsdWVUbz4oYXJncykpIHsKQEAgLTE3MTUsMTIgKzE3MzMsMTIgQEAgc3Rh
dGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVhckdyYQogCiAgICAgaWYgKGV4cGVjdENv
bW1hICYmICFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoYXJncywg
Y3NzUGFyc2VyTW9kZSwgKnJlc3VsdCkpCisgICAgaWYgKCFjb25zdW1lR3JhZGllbnRDb2xvclN0
b3BzKGFyZ3MsIGNvbnRleHQsICpyZXN1bHQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ29u
aWNHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZXJDb250ZXh0IGNv
bnRleHQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKK3N0YXRpYyBSZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVDb25pY0dyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykK
IHsKICNpZiBFTkFCTEUoQ1NTX0NPTklDX0dSQURJRU5UUykKICAgICBSZWZQdHI8Q1NTQ29uaWNH
cmFkaWVudFZhbHVlPiByZXN1bHQgPSBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBl
YXRpbmcpOwpAQCAtMTc1NCw3ICsxNzcyLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUNvbmljR3JhZAogCiAgICAgaWYgKGV4cGVjdENvbW1hICYmICFjb25zdW1lQ29tbWFJbmNs
dWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAo
IWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoYXJncywgY29udGV4dC5tb2RlLCAqcmVzdWx0KSkK
KyAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoYXJncywgY29udGV4dCwgKnJlc3Vs
dCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiByZXN1bHQ7CiAjZWxzZQpA
QCAtMTc2NSwxNCArMTc4MywxNCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ29u
aWNHcmFkCiAjZW5kaWYKIH0KIAotUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlckNvbnRleHQgY29udGV4dCkKK1Jl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChyYW5nZS5w
ZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQo
cmFuZ2UpOwogICAgIHJldHVybiBjb25zdW1lSW1hZ2UocmFuZ2UsIGNvbnRleHQpOwogfQogCi1z
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3Jvc3NGYWRlKENTU1BhcnNlclRva2VuUmFu
Z2UmIGFyZ3MsIENTU1BhcnNlckNvbnRleHQgY29udGV4dCwgYm9vbCBwcmVmaXhlZCkKK3N0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDcm9zc0ZhZGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
YXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgYm9vbCBwcmVmaXhlZCkKIHsK
ICAgICBhdXRvIGZyb21JbWFnZVZhbHVlID0gY29uc3VtZUltYWdlT3JOb25lKGFyZ3MsIGNvbnRl
eHQpOwogICAgIGlmICghZnJvbUltYWdlVmFsdWUgfHwgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1do
aXRlc3BhY2UoYXJncykpCkBAIC0xODQ4LDMwICsxODY2LDMwIEBAIHN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVDdXN0b21QYWkKIH0KICNlbmRpZgogCi1zdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lR2VuZXJhdGVkSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1BhcnNlckNvbnRleHQgY29udGV4dCkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVH
ZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCkKIHsKICAgICBDU1NWYWx1ZUlEIGlkID0gcmFuZ2UucGVlaygpLmZ1
bmN0aW9uSWQoKTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlQ29weSA9IHJhbmdlOwog
ICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZUNvcHkp
OwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzdWx0OwogICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJh
ZGlhbEdyYWRpZW50KQotICAgICAgICByZXN1bHQgPSBjb25zdW1lUmFkaWFsR3JhZGllbnQoYXJn
cywgY29udGV4dC5tb2RlLCBOb25SZXBlYXRpbmcpOworICAgICAgICByZXN1bHQgPSBjb25zdW1l
UmFkaWFsR3JhZGllbnQoYXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5nKTsKICAgICBlbHNlIGlm
IChpZCA9PSBDU1NWYWx1ZVJlcGVhdGluZ1JhZGlhbEdyYWRpZW50KQotICAgICAgICByZXN1bHQg
PSBjb25zdW1lUmFkaWFsR3JhZGllbnQoYXJncywgY29udGV4dC5tb2RlLCBSZXBlYXRpbmcpOwor
ICAgICAgICByZXN1bHQgPSBjb25zdW1lUmFkaWFsR3JhZGllbnQoYXJncywgY29udGV4dCwgUmVw
ZWF0aW5nKTsKICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdExpbmVhckdyYWRpZW50
KQotICAgICAgICByZXN1bHQgPSBjb25zdW1lTGluZWFyR3JhZGllbnQoYXJncywgY29udGV4dC5t
b2RlLCBOb25SZXBlYXRpbmcsIENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpOworICAgICAgICBy
ZXN1bHQgPSBjb25zdW1lTGluZWFyR3JhZGllbnQoYXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5n
LCBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50KTsKICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1
ZVdlYmtpdFJlcGVhdGluZ0xpbmVhckdyYWRpZW50KQotICAgICAgICByZXN1bHQgPSBjb25zdW1l
TGluZWFyR3JhZGllbnQoYXJncywgY29udGV4dC5tb2RlLCBSZXBlYXRpbmcsIENTU1ByZWZpeGVk
TGluZWFyR3JhZGllbnQpOworICAgICAgICByZXN1bHQgPSBjb25zdW1lTGluZWFyR3JhZGllbnQo
YXJncywgY29udGV4dCwgUmVwZWF0aW5nLCBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50KTsKICAg
ICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdGluZ0xpbmVhckdyYWRpZW50KQotICAgICAg
ICByZXN1bHQgPSBjb25zdW1lTGluZWFyR3JhZGllbnQoYXJncywgY29udGV4dC5tb2RlLCBSZXBl
YXRpbmcsIENTU0xpbmVhckdyYWRpZW50KTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZUxpbmVh
ckdyYWRpZW50KGFyZ3MsIGNvbnRleHQsIFJlcGVhdGluZywgQ1NTTGluZWFyR3JhZGllbnQpOwog
ICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlTGluZWFyR3JhZGllbnQpCi0gICAgICAgIHJlc3Vs
dCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIE5vblJlcGVhdGlu
ZywgQ1NTTGluZWFyR3JhZGllbnQpOworICAgICAgICByZXN1bHQgPSBjb25zdW1lTGluZWFyR3Jh
ZGllbnQoYXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7CiAg
ICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRHcmFkaWVudCkKLSAgICAgICAgcmVzdWx0
ID0gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUpOworICAgICAg
ICByZXN1bHQgPSBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KGFyZ3MsIGNvbnRleHQpOwogICAg
IGVsc2UgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0UmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJl
c3VsdCA9IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoYXJncywgY29udGV4dC5tb2Rl
LCBOb25SZXBlYXRpbmcpOworICAgICAgICByZXN1bHQgPSBjb25zdW1lRGVwcmVjYXRlZFJhZGlh
bEdyYWRpZW50KGFyZ3MsIGNvbnRleHQsIE5vblJlcGVhdGluZyk7CiAgICAgZWxzZSBpZiAoaWQg
PT0gQ1NTVmFsdWVXZWJraXRSZXBlYXRpbmdSYWRpYWxHcmFkaWVudCkKLSAgICAgICAgcmVzdWx0
ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJl
cGVhdGluZyk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGll
bnQoYXJncywgY29udGV4dCwgUmVwZWF0aW5nKTsKICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1
ZUNvbmljR3JhZGllbnQpCiAgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVDb25pY0dyYWRpZW50KGFy
Z3MsIGNvbnRleHQsIE5vblJlcGVhdGluZyk7CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVS
ZXBlYXRpbmdDb25pY0dyYWRpZW50KQpAQCAtMjAxNyw3ICsyMDM1LDcgQEAgc3RhdGljIFJlZlB0
cjxDU1NGdW5jdGlvblZhbHVlPiBjb25zdW1lRgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2Vk
VmFsdWU7CiAKICAgICBpZiAoZmlsdGVyVHlwZSA9PSBDU1NWYWx1ZURyb3BTaGFkb3cpCi0gICAg
ICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZVNpbmdsZVNoYWRvdyhhcmdzLCBjb250ZXh0Lm1vZGUs
IGZhbHNlLCBmYWxzZSk7CisgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZVNpbmdsZVNoYWRv
dyhhcmdzLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOwogICAgIGVsc2UgewogICAgICAgICBpZiAo
YXJncy5hdEVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZpbHRlclZhbHVlOwpAQCAtMjA2NCw3
ICsyMDgyLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmlsdGVyKENTU1BhcnNlcgogICAg
IHJldHVybiBsaXN0LnB0cigpOwogfQogCi1SZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVT
aW5nbGVTaGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSwgYm9vbCBhbGxvd0luc2V0LCBib29sIGFsbG93U3ByZWFkKQorUmVmUHRyPENT
U1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBib29sIGFsbG93SW5zZXQsIGJv
b2wgYWxsb3dTcHJlYWQpCiB7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZTsK
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbG9yOwpAQCAtMjA4OSw3ICsyMTA3LDcg
QEAgUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZAogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGF1dG8gbWF5YmVDb2xvciA9
IGNvbnN1bWVDb2xvcihyYW5nZSwgY3NzUGFyc2VyTW9kZSk7CisgICAgICAgIGF1dG8gbWF5YmVD
b2xvciA9IGNvbnN1bWVDb2xvcihyYW5nZSwgY29udGV4dCk7CiAgICAgICAgIGlmIChtYXliZUNv
bG9yKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBqdXN0IHBhcnNlZCBhIGNvbG9yIGJ1dCBhbHJl
YWR5IGhhZCBvbmUsIHRoZSBnaXZlbiB0b2tlbiByYW5nZSBpcyBub3QgYSB2YWxpZCA8c2hhZG93
Pi4KICAgICAgICAgICAgIGlmIChjb2xvcikKQEAgLTIxMDMsMjMgKzIxMjEsMjMgQEAgUmVmUHRy
PENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZAogICAgICAgICAgICAgLy8gSWYgd2Un
dmUgYWxyZWFkeSBwYXJzZWQgdGhlc2UgbGVuZ3RocywgdGhlIGdpdmVuIHZhbHVlIGlzIGludmFs
aWQgYXMgdGhlcmUgY2Fubm90IGJlIHR3byBsZW5ndGhzIGNvbXBvbmVudHMgaW4gYSBzaW5nbGUg
PHNoYWRvdz4gdmFsdWUuCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQot
ICAgICAgICBob3Jpem9udGFsT2Zmc2V0ID0gY29uc3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2Vy
TW9kZSwgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGhvcml6b250YWxPZmZzZXQgPSBjb25zdW1l
TGVuZ3RoKHJhbmdlLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VBbGwpOwogICAgICAgICBpZiAo
IWhvcml6b250YWxPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
dmVydGljYWxPZmZzZXQgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1
ZVJhbmdlQWxsKTsKKyAgICAgICAgdmVydGljYWxPZmZzZXQgPSBjb25zdW1lTGVuZ3RoKHJhbmdl
LCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VBbGwpOwogICAgICAgICBpZiAoIXZlcnRpY2FsT2Zm
c2V0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgICAgICAvLyBUaGUgZXhwbGljaXQg
Y2hlY2sgZm9yIGNhbGMoKSBpcyB1bmZvcnR1bmF0ZS4gVGhpcyBpcyBlbnN1cmluZyB0aGF0IHdl
IG9ubHkgZmFpbCBwYXJzaW5nIGlmIHRoZXJlIGlzIGEgbGVuZ3RoLCBidXQgaXQgZmFpbHMgdGhl
IHJhbmdlIGNoZWNrLgogICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2Vu
IHx8IHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbiB8fCAodG9rZW4udHlwZSgpID09IEZ1bmN0
aW9uVG9rZW4gJiYgQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbih0b2tlbi5mdW5jdGlvbklk
KCkpKSkgewotICAgICAgICAgICAgYmx1clJhZGl1cyA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNz
c1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CisgICAgICAgICAgICBibHVyUmFk
aXVzID0gY29uc3VtZUxlbmd0aChyYW5nZSwgY29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlTm9uTmVn
YXRpdmUpOwogICAgICAgICAgICAgaWYgKCFibHVyUmFkaXVzKQogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJsdXJSYWRpdXMgJiYgYWxs
b3dTcHJlYWQpCi0gICAgICAgICAgICBzcHJlYWREaXN0YW5jZSA9IGNvbnN1bWVMZW5ndGgocmFu
Z2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICAgICAgc3ByZWFkRGlz
dGFuY2UgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VBbGwp
OwogICAgIH0KICAgICAKICAgICAvLyBJbiBvcmRlciBmb3IgdGhpcyB0byBiZSBhIHZhbGlkIDxz
aGFkb3c+LCBhdCBsZWFzdCB0aGVzZSBsZW5ndGhzIG11c3QgYmUgcHJlc2VudC4KQEAgLTIxMjgs
NyArMjE0Niw3IEBAIFJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNpbmdsZVNoYWQKICAg
ICByZXR1cm4gQ1NTU2hhZG93VmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGhvcml6b250YWxPZmZzZXQp
LCBXVEZNb3ZlKHZlcnRpY2FsT2Zmc2V0KSwgV1RGTW92ZShibHVyUmFkaXVzKSwgV1RGTW92ZShz
cHJlYWREaXN0YW5jZSksIFdURk1vdmUoc3R5bGUpLCBXVEZNb3ZlKGNvbG9yKSk7CiB9CiAKLVJl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJDb250ZXh0IGNvbnRleHQsIE9wdGlvblNldDxBbGxvd2VkSW1hZ2VUeXBlPiBhbGxv
d2VkSW1hZ2VUeXBlcykKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBPcHRpb25T
ZXQ8QWxsb3dlZEltYWdlVHlwZT4gYWxsb3dlZEltYWdlVHlwZXMpCiB7CiAgICAgaWYgKChyYW5n
ZS5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2VuKSAmJiAoYWxsb3dlZEltYWdlVHlwZXMuY29u
dGFpbnMoQWxsb3dlZEltYWdlVHlwZTo6UmF3U3RyaW5nQXNVUkwpKSkgewogICAgICAgICBhdXRv
IHVybFN0cmluZ1ZpZXcgPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmgJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
Miw4ICsxMDIsOCBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVTdHJpbmcoCiBT
dHJpbmdWaWV3IGNvbnN1bWVVcmxBc1N0cmluZ1ZpZXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwog
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVXJsKENTU1BhcnNlclRva2VuUmFuZ2Um
KTsKIAotQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Q1NTUGFyc2VyTW9kZSk7Ci1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVDb2xvcihD
U1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgYm9vbCBhY2NlcHRRdWlya3lDb2xv
cnMgPSBmYWxzZSk7CitDb2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzID0gZmFsc2UpOwogCiBlbnVtIGNsYXNzIFBv
c2l0aW9uU3ludGF4IHsKICAgICBQb3NpdGlvbiwgLy8gPHBvc2l0aW9uPgpAQCAtMTI2LDkgKzEy
Niw4IEBAIGVudW0gY2xhc3MgQWxsb3dlZEltYWdlVHlwZSA6IHVpbnQ4X3QgewogICAgIEdlbmVy
YXRlZEltYWdlID0gMSA8PCAzCiB9OwogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShD
U1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyQ29udGV4dCwgT3B0aW9uU2V0PEFsbG93ZWRJ
bWFnZVR5cGU+ID0geyBBbGxvd2VkSW1hZ2VUeXBlOjpVUkxGdW5jdGlvbiwgQWxsb3dlZEltYWdl
VHlwZTo6SW1hZ2VTZXQsIEFsbG93ZWRJbWFnZVR5cGU6OkdlbmVyYXRlZEltYWdlIH0pOwotCi1S
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZU9yTm9uZShDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Q1NTUGFyc2VyQ29udGV4dCk7CitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIE9wdGlvblNldDxBbGxvd2Vk
SW1hZ2VUeXBlPiA9IHsgQWxsb3dlZEltYWdlVHlwZTo6VVJMRnVuY3Rpb24sIEFsbG93ZWRJbWFn
ZVR5cGU6OkltYWdlU2V0LCBBbGxvd2VkSW1hZ2VUeXBlOjpHZW5lcmF0ZWRJbWFnZSB9KTsKK1Jl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1BhcnNlclRva2VuUmFuZ2UmLCBj
b25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CiAKIGVudW0gY2xhc3MgQWxsb3dlZEZpbHRlckZ1bmN0
aW9ucyB7CiAgICAgUGl4ZWxGaWx0ZXJzLApAQCAtMTM2LDcgKzEzNSw3IEBAIGVudW0gY2xhc3Mg
QWxsb3dlZEZpbHRlckZ1bmN0aW9ucyB7CiB9OwogCiBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVG
aWx0ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBBbGxv
d2VkRmlsdGVyRnVuY3Rpb25zKTsKLVJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNpbmds
ZVNoYWRvdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgYm9vbCBhbGxvd0lu
c2V0LCBib29sIGFsbG93U3ByZWFkKTsKK1JlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNp
bmdsZVNoYWRvdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYs
IGJvb2wgYWxsb3dJbnNldCwgYm9vbCBhbGxvd1NwcmVhZCk7CiAKIHN0cnVjdCBGb250U3R5bGVS
YXcgewogICAgIENTU1ZhbHVlSUQgc3R5bGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNzI4MzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAg
LTYwMCw3ICs2MDAsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5S
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhl
IHVuZGVybGluZSBjb2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5
IDM4JSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVh
ciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2Fu
IGJlIHNwZWNpZmllZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEubGlnaHRuZXNzID0g
MC41ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEubGlnaHRuZXNzID0gNTAuMGY7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmFscGhhICo9IDAuMzhmOwogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIg
a2VlcGluZyBjb2xvciBpbiBMQ0hBIChpZiB0aGF0IGNoYW5nZSBpcyBtYWRlKSBvciBjb252ZXJ0
aW5nIGJhY2sgdG8gdGhlIGluaXRpYWwgdW5kZXJseWluZyBjb2xvciB0eXBlIHRvIGF2b2lkIHVu
bmVjZXNzYXJpbHkgY2xhbXBpbmcgY29sb3JzIG91dHNpZGUgb2Ygc1JHQi4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNw
cAkocmV2aXNpb24gMjcyODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgsNiBAQCBzdGF0
aWMgSFNMSHVlQ2FsY3VsYXRpb25SZXN1bHQgY2FsY3VsYXRlCiAgICAgaWYgKGh1ZSA+PSAzNjAu
MGYpCiAgICAgICAgIGh1ZSAtPSAzNjAuMGY7CiAKLSAgICBodWUgLz0gMzYwLjBmOwotCiAgICAg
cmV0dXJuIHsgaHVlLCBtaW4sIG1heCwgY2hyb21hIH07CiB9CiAKQEAgLTY5LDE0ICs2NywxNCBA
QCBIU0xBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248SFNMQTxmbG9hdD4sCiAgICAgYXV0byBbciwg
ZywgYiwgYWxwaGFdID0gY29sb3I7CiAgICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9
IGNhbGN1bGF0ZUhTTEh1ZShjb2xvcik7CiAKLSAgICBmbG9hdCBsaWdodG5lc3MgPSAwLjVmICog
KG1heCArIG1pbik7CisgICAgZmxvYXQgbGlnaHRuZXNzID0gKDAuNWYgKiAobWF4ICsgbWluKSkg
KiAxMDAuMGY7CiAgICAgZmxvYXQgc2F0dXJhdGlvbjsKICAgICBpZiAoIWNocm9tYSkKICAgICAg
ICAgc2F0dXJhdGlvbiA9IDA7Ci0gICAgZWxzZSBpZiAobGlnaHRuZXNzIDw9IDAuNWYpCi0gICAg
ICAgIHNhdHVyYXRpb24gPSAoY2hyb21hIC8gKG1heCArIG1pbikpOworICAgIGVsc2UgaWYgKGxp
Z2h0bmVzcyA8PSA1MC4wZikKKyAgICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEgLyAobWF4ICsg
bWluKSkgKiAxMDAuMGY7CiAgICAgZWxzZQotICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAv
ICgyLjBmIC0gKG1heCArIG1pbikpKTsKKyAgICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEgLyAo
Mi4wZiAtIChtYXggKyBtaW4pKSkgKiAxMDAuMGY7CiAKICAgICByZXR1cm4geyBodWUsIHNhdHVy
YXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfTsKIH0KQEAgLTg2LDExICs4NCwyNiBAQCBTUkdCQTxm
bG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiCiAgICAgYXV0byBbaHVlLCBzYXR1cmF0
aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IGNvbG9yOwogCi0gICAgaWYgKCFzYXR1cmF0aW9uKQot
ICAgICAgICByZXR1cm4geyBsaWdodG5lc3MsIGxpZ2h0bmVzcywgbGlnaHRuZXNzLCBhbHBoYSB9
OwotICAgIAotICAgIGZsb2F0IHRlbXAyID0gbGlnaHRuZXNzIDw9IDAuNWYgPyBsaWdodG5lc3Mg
KiAoMS4wZiArIHNhdHVyYXRpb24pIDogbGlnaHRuZXNzICsgc2F0dXJhdGlvbiAtIGxpZ2h0bmVz
cyAqIHNhdHVyYXRpb247Ci0gICAgZmxvYXQgdGVtcDEgPSAyLjBmICogbGlnaHRuZXNzIC0gdGVt
cDI7CisgICAgaWYgKCFzYXR1cmF0aW9uKSB7CisgICAgICAgIGF1dG8gZ3JleSA9IGxpZ2h0bmVz
cyAvIDEwMC4wZjsKKyAgICAgICAgcmV0dXJuIHsgZ3JleSwgZ3JleSwgZ3JleSwgYWxwaGEgfTsK
KyAgICB9CisKKyAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgor
ICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IChodWUgLyAzNjAuMGYpICogNi4wZjsKKyAgICBhdXRv
IG5vcm1hbGl6ZWRMaWdodG5lc3MgPSBsaWdodG5lc3MgLyAxMDAuMGY7CisgICAgYXV0byBub3Jt
YWxpemVkU2F0dXJhdGlvbiA9IHNhdHVyYXRpb24gLyAxMDAuMGY7CisKKyAgICBhdXRvIGh1ZUZv
clJlZCA9IG5vcm1hbGl6ZWRIdWUgKyAyLjBmOworICAgIGF1dG8gaHVlRm9yR3JlZW4gPSBub3Jt
YWxpemVkSHVlOworICAgIGF1dG8gaHVlRm9yQmx1ZSA9IG5vcm1hbGl6ZWRIdWUgLSAyLjBmOwor
ICAgIGlmIChodWVGb3JSZWQgPiA2LjBmKQorICAgICAgICBodWVGb3JSZWQgLT0gNi4wZjsKKyAg
ICBlbHNlIGlmIChodWVGb3JCbHVlIDwgMC4wZikKKyAgICAgICAgaHVlRm9yQmx1ZSArPSA2LjBm
OworCisgICAgZmxvYXQgdGVtcDIgPSBub3JtYWxpemVkTGlnaHRuZXNzIDw9IDAuNWYgPyBub3Jt
YWxpemVkTGlnaHRuZXNzICogKDEuMGYgKyBub3JtYWxpemVkU2F0dXJhdGlvbikgOiBub3JtYWxp
emVkTGlnaHRuZXNzICsgbm9ybWFsaXplZFNhdHVyYXRpb24gLSBub3JtYWxpemVkTGlnaHRuZXNz
ICogbm9ybWFsaXplZFNhdHVyYXRpb247CisgICAgZmxvYXQgdGVtcDEgPSAyLjBmICogbm9ybWFs
aXplZExpZ2h0bmVzcyAtIHRlbXAyOwogICAgIAogICAgIC8vIEh1ZSBpcyBpbiB0aGUgcmFuZ2Ug
MC02LCBvdGhlciBhcmdzIGluIDAtMS4KICAgICBhdXRvIGh1ZVRvUkdCID0gW10oZmxvYXQgdGVt
cDEsIGZsb2F0IHRlbXAyLCBmbG9hdCBodWUpIHsKQEAgLTEwMywxNyArMTE2LDYgQEAgU1JHQkE8
ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdAogICAgICAgICByZXR1cm4gdGVtcDE7
CiAgICAgfTsKIAotICAgIC8vIGh1ZVRvUkdCKCkgd2FudHMgaHVlIGluIHRoZSAwLTYgcmFuZ2Uu
Ci0gICAgaHVlICo9IDYuMGY7Ci0KLSAgICBhdXRvIGh1ZUZvclJlZCA9IGh1ZSArIDIuMGY7Ci0g
ICAgYXV0byBodWVGb3JHcmVlbiA9IGh1ZTsKLSAgICBhdXRvIGh1ZUZvckJsdWUgPSBodWUgLSAy
LjBmOwotICAgIGlmIChodWVGb3JSZWQgPiA2LjBmKQotICAgICAgICBodWVGb3JSZWQgLT0gNi4w
ZjsKLSAgICBlbHNlIGlmIChodWVGb3JCbHVlIDwgMC4wZikKLSAgICAgICAgaHVlRm9yQmx1ZSAr
PSA2LjBmOwotCiAgICAgcmV0dXJuIHsKICAgICAgICAgaHVlVG9SR0IodGVtcDEsIHRlbXAyLCBo
dWVGb3JSZWQpLAogICAgICAgICBodWVUb1JHQih0ZW1wMSwgdGVtcDIsIGh1ZUZvckdyZWVuKSwK
QEAgLTEyOCw4ICsxMzAsOCBAQCBIV0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248SFdCQTxmbG9h
dD4sCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNyZ2It
dG8taHdiCiAgICAgYXV0byBbaHVlLCBtaW4sIG1heCwgY2hyb21hXSA9IGNhbGN1bGF0ZUhTTEh1
ZShjb2xvcik7Ci0gICAgYXV0byB3aGl0ZW5lc3MgPSBtaW47Ci0gICAgYXV0byBibGFja25lc3Mg
PSAxLjBmIC0gbWF4OworICAgIGF1dG8gd2hpdGVuZXNzID0gbWluICogMTAwLjBmOworICAgIGF1
dG8gYmxhY2tuZXNzID0gKDEuMGYgLSBtYXgpICogMTAwLjBmOwogICAgIAogICAgIHJldHVybiB7
IGh1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGNvbG9yLmFscGhhIH07CiB9CkBAIC0xMzksOCAr
MTQxLDI0IEBAIFNSR0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2h3Yi10by1yZ2IKICAgICBh
dXRvIFtodWUsIHdoaXRlbmVzcywgYmxhY2tuZXNzLCBhbHBoYV0gPSBjb2xvcjsKIAotICAgIGlm
ICh3aGl0ZW5lc3MgKyBibGFja25lc3MgPT0gMS4wZikKLSAgICAgICAgcmV0dXJuIHsgd2hpdGVu
ZXNzLCB3aGl0ZW5lc3MsIHdoaXRlbmVzcywgYWxwaGEgfTsKKyAgICBpZiAod2hpdGVuZXNzICsg
YmxhY2tuZXNzID09IDEwMC4wZikgeworICAgICAgICBhdXRvIGdyZXkgPSB3aGl0ZW5lc3MgLyAx
MDAuMGY7CisgICAgICAgIHJldHVybiB7IGdyZXksIGdyZXksIGdyZXksIGFscGhhIH07CisgICAg
fQorCisgICAgLy8gaHVlVG9SR0IoKSB3YW50cyBodWUgaW4gdGhlIDAtNiByYW5nZS4KKyAgICBh
dXRvIG5vcm1hbGl6ZWRIdWUgPSAoaHVlIC8gMzYwLjBmKSAqIDYuMGY7CisKKyAgICBhdXRvIGh1
ZUZvclJlZCA9IG5vcm1hbGl6ZWRIdWUgKyAyLjBmOworICAgIGF1dG8gaHVlRm9yR3JlZW4gPSBu
b3JtYWxpemVkSHVlOworICAgIGF1dG8gaHVlRm9yQmx1ZSA9IG5vcm1hbGl6ZWRIdWUgLSAyLjBm
OworICAgIGlmIChodWVGb3JSZWQgPiA2LjBmKQorICAgICAgICBodWVGb3JSZWQgLT0gNi4wZjsK
KyAgICBlbHNlIGlmIChodWVGb3JCbHVlIDwgMC4wZikKKyAgICAgICAgaHVlRm9yQmx1ZSArPSA2
LjBmOworCisgICAgYXV0byBub3JtYWxpemVkV2hpdGVuZXNzID0gd2hpdGVuZXNzIC8gMTAwLjBm
OworICAgIGF1dG8gbm9ybWFsaXplZEJsYWNrbmVzcyA9IGJsYWNrbmVzcyAvIDEwMC4wZjsKIAog
ICAgIC8vIFRoaXMgaXMgdGhlIGh1ZVRvUkdCIGZ1bmN0aW9uIGluIGNvbnZlcnRDb2xvcjxTUkdC
QTxmbG9hdD4+KGNvbnN0IEhTTEEmKSB3aXRoIHRlbXAxID09IDAKICAgICAvLyBhbmQgdGVtcDIg
PT0gMSBzdHJlbmd0aCByZWR1Y2VkIHRocm91Z2ggaXQuCkBAIC0xNTQsMjUgKzE3MiwxNCBAQCBT
UkdCQTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0CiAgICAgICAgIHJldHVybiAw
LjBmOwogICAgIH07CiAKLSAgICBhdXRvIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzID0gWyZdKGZs
b2F0IGNvbXBvbmVudCkgewotICAgICAgICByZXR1cm4gKGNvbXBvbmVudCAqICgxLjBmIC0gY29s
b3Iud2hpdGVuZXNzIC0gY29sb3IuYmxhY2tuZXNzKSkgKyBjb2xvci53aGl0ZW5lc3M7CisgICAg
YXV0byBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyA9IFtdKGZsb2F0IGNvbXBvbmVudCwgYXV0byB3
aGl0ZW5lc3MsIGF1dG8gYmxhY2tuZXNzKSB7CisgICAgICAgIHJldHVybiAoY29tcG9uZW50ICog
KDEuMGYgLSB3aGl0ZW5lc3MgLSBibGFja25lc3MpKSArIHdoaXRlbmVzczsKICAgICB9OwogCi0g
ICAgLy8gaHVlVG9SR0IoKSB3YW50cyBodWUgaW4gdGhlIDAtNiByYW5nZS4KLSAgICBodWUgKj0g
Ni4wZjsKLQotICAgIGF1dG8gaHVlRm9yUmVkID0gaHVlICsgMi4wZjsKLSAgICBhdXRvIGh1ZUZv
ckdyZWVuID0gaHVlOwotICAgIGF1dG8gaHVlRm9yQmx1ZSA9IGh1ZSAtIDIuMGY7Ci0gICAgaWYg
KGh1ZUZvclJlZCA+IDYuMGYpCi0gICAgICAgIGh1ZUZvclJlZCAtPSA2LjBmOwotICAgIGVsc2Ug
aWYgKGh1ZUZvckJsdWUgPCAwLjBmKQotICAgICAgICBodWVGb3JCbHVlICs9IDYuMGY7Ci0KICAg
ICByZXR1cm4gewotICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVG
b3JSZWQpKSwKLSAgICAgICAgYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MoaHVlVG9SR0IoaHVlRm9y
R3JlZW4pKSwKLSAgICAgICAgYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MoaHVlVG9SR0IoaHVlRm9y
Qmx1ZSkpLAorICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JS
ZWQpLCBub3JtYWxpemVkV2hpdGVuZXNzLCBub3JtYWxpemVkQmxhY2tuZXNzKSwKKyAgICAgICAg
YXBwbHlXaGl0ZW5lc3NCbGFja25lc3MoaHVlVG9SR0IoaHVlRm9yR3JlZW4pLCBub3JtYWxpemVk
V2hpdGVuZXNzLCBub3JtYWxpemVkQmxhY2tuZXNzKSwKKyAgICAgICAgYXBwbHlXaGl0ZW5lc3NC
bGFja25lc3MoaHVlVG9SR0IoaHVlRm9yQmx1ZSksIG5vcm1hbGl6ZWRXaGl0ZW5lc3MsIG5vcm1h
bGl6ZWRCbGFja25lc3MpLAogICAgICAgICBhbHBoYQogICAgIH07CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1vZGVscy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgJKHJldmlzaW9uIDI3
MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDE4ICs2NywxOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFeHRl
bmRlZFJHQk1vZGVsPGZsb2F0CiAKIHRlbXBsYXRlPD4gc3RydWN0IEhTTE1vZGVsPGZsb2F0PiB7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8Zmxv
YXQ+LCAzPiByYW5nZXMgeyB7Ci0gICAgICAgIHsgMCwgMSB9LAotICAgICAgICB7IDAsIDEgfSwK
LSAgICAgICAgeyAwLCAxIH0KKyAgICAgICAgeyAwLCAzNjAgfSwKKyAgICAgICAgeyAwLCAxMDAg
fSwKKyAgICAgICAgeyAwLCAxMDAgfQogICAgIH0gfTsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBIV0JNb2Rl
bDxmbG9hdD4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVu
dFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsgewotICAgICAgICB7IDAsIDEgfSwKLSAgICAgICAg
eyAwLCAxIH0sCi0gICAgICAgIHsgMCwgMSB9CisgICAgICAgIHsgMCwgMzYwIH0sCisgICAgICAg
IHsgMCwgMTAwIH0sCisgICAgICAgIHsgMCwgMTAwIH0KICAgICB9IH07CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMjcyODM3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQy
Miw3ICsxNDIyLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRDbwog
ICAgIC8vIEZJWE1FOiBDb25zaWRlciB1c2luZyBMQ0hBPGZsb2F0PiByYXRoZXIgdGhhbiBIU0xB
PGZsb2F0PiBmb3IgYmV0dGVyIHBlcmNlcHR1YWwgcmVzdWx0cyBhbmQgdG8gYXZvaWQgY2xhbXBp
bmcgdG8gc1JHQiBnYW11dCwgd2hpY2ggaXMgd2hhdCBIU0xBIGRvZXMuCiAgICAgYXV0byBoc2xh
ID0gdGV4dENvbG9yLnRvQ29sb3JUeXBlTG9zc3k8SFNMQTxmbG9hdD4+KCk7CiAgICAgaWYgKHRl
eHRDb2xvci5sdW1pbmFuY2UoKSA8IGJhY2tncm91bmRDb2xvci5sdW1pbmFuY2UoKSkKLSAgICAg
ICAgaHNsYS5saWdodG5lc3MgKz0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3Rt
ZW50RmFjdG9yICogKDEuMGYgLSBoc2xhLmxpZ2h0bmVzcyk7CisgICAgICAgIGhzbGEubGlnaHRu
ZXNzICs9IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVudEZhY3RvciAqICgx
MDAuMGYgLSBoc2xhLmxpZ2h0bmVzcyk7CiAgICAgZWxzZQogICAgICAgICBoc2xhLmxpZ2h0bmVz
cyAqPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1lbnRGYWN0b3I7CiAK
</data>
<flag name="commit-queue"
          id="438719"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420265</attachid>
            <date>2021-02-14 19:04:01 -0800</date>
            <delta_ts>2021-02-14 20:11:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221881-20210214162723.patch</filename>
            <type>text/plain</type>
            <size>73472</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIxLTAyLTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVwYXJlIGZvciBhZGRpbmcgcmVs
YXRpdmUgY29sb3Igc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxODgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBleHBlcmltZW50YWwgcmVsYXRp
dmUgY29sb3Igc3VwcG9ydCBhIGxpdHRsZSBjbGVhbnVwCisgICAgICAgIGlzIGluIG9yZGVyLiBU
aGlzIGNoYW5nZToKKyAgICAgICAgCisgICAgICAgIC0gVGhyZWFkcyBhIENTU1BhcnNlckNvbnRl
eHQgdGhyb3VnaCB0aGUgY29sb3IgcGFyc2luZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBiZQorICAg
ICAgICAgIG5lZWRlZCB0byBjaGVjayBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdC4K
KyAgICAgICAgLSBEb2VzIGEgc21hbGwgY2xlYW51cCBvZiBDU1NQYXJzZXJDb250ZXh0LCBzb3J0
aW5nIGZlYXR1cmVzIGFuZCB1c2luZyB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICBsaXN0
IGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgLSBSZWZhY3RvcnMgc29tZSBvZiB0aGUgY29s
b3IgcGFyc2luZyBoZWxwZXJzIHRvIGV4dHJhY3QgbW9yZSBoZWxwZXJzLiBUaGVzZSBjbGFyaWZ5
CisgICAgICAgICAgdGhlIGNvZGUgYmV0dGVyIGFuZCB3aWxsIGJlIHNoYXJlZCBieSB0aGUgcmVs
YXRpdmUgcGFyc2Vycy4KKyAgICAgICAgLSBNb3ZlIG5vcm1hbGl6YXRpb24gb2YgY29tcG9uZW50
cyB0byBhZnRlciBwYXJzaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdvcmsKKyAgICAgICAgICBp
biB0aGUgY2FzZSBvZiBmYWlsdXJlIGFuZCBzZXBhcmF0ZSB0aGUgcGhhc2VzIGEgYml0IG1vcmUu
CisgICAgICAgIC0gUmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IFZhbHVlUmFuZ2VBbGwgcGFyYW1l
dGVycyB0aGF0IHdlcmUgYWxyZWFkeSB0aGUgZGVmYXVsdC4KKyAgICAgICAgLSBTd2l0Y2ggSFNM
QSBhbmQgSFdCQSB0byBzdG9wIHN0b3JpbmcgdGhlaXIgY29tcG9uZW50cyBpbiBhIDAtMSBub3Jt
YWxpemF0aW9uCisgICAgICAgICAgYW5kIGluc3RlYWQgdXNlIHZhbHVlcyB0aGF0IG1hdGNoIHRo
ZSBpbnB1dCwgMC0zNjAgZm9yIGh1ZSwgYW5kIDAtMTAwIGZvciB0aGUKKyAgICAgICAgICB0aGUg
cmVtYWluaW5nIHR3byBjb21wb25lbnRzLiBUaGlzIHNlZW1zIG1vcmUgbmF0dXJhbCwgYW5kIHdp
bGwgc2ltcGxpZnkKKyAgICAgICAgICBmdXR1cmUgY29sb3IgZnVuY3Rpb24gd29yayB0aGF0IGV4
cGVjdHMgdGhlIHZhbHVlcyBpbiB0aGlzIGZvcm0uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3Jr
ZXJTYWZlKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2hvdWxkRW5hYmxlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dEhhc2g6
Omhhc2gpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3VtZVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1l
Q2FyZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lT3V0bGluZUNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQYWludFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdW1lQmFja2dyb3VuZENvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6Y29uc3VtZUJvcmRlcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpub3JtYWxpemVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6
ZVdoaXRlbmVzc0JsYWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OnBhcnNlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTENIUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZv
clJHQlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkR3JhZGllbnRDb2xvclN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGluZWFyR3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29uaWNHcmFkaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbWFnZU9y
Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVDcm9zc0ZhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lRmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lU2luZ2xlU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VPcHRpb25hbEFscGhh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SW1hZ2UpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsY3VsYXRlSFNMSHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj46
OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhXQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRl
eHRDb2xvciBjb25zdCk6CisKIDIwMjEtMDItMTQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBNb2JpbGVTYWZhcmkgY3Jhc2hlcyBhdCBXZWJDb3Jl
OiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZG9FbnRlckZ1bGxzY3Jl
ZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9u
IDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIENvbG9yIENTU1BhcnNlcjo6cGFyc2VDb2xv
cldvcmtlclNhZmUoY28KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50
b2tlblJhbmdlKCkpOwogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdl
LCBIVE1MU3RhbmRhcmRNb2RlKTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdlLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkp
OwogfQogCiBDb2xvciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoU3RyaW5nVmlldyBzdHJp
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywzOSArNDcsNDYgQEAgQ1NT
UGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChDU1NQYQogewogfQogCi1DU1NQYXJzZXJD
b250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
VVJMJiBzaGVldEJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IGJhc2VVUkwo
c2hlZXRCYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogc2hlZXRCYXNlVVJM
KQotICAgICwgY2hhcnNldChjaGFyc2V0KQotICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01v
ZGUoKSA/IEhUTUxRdWlya3NNb2RlIDogSFRNTFN0YW5kYXJkTW9kZSkKLSAgICAsIGlzSFRNTERv
Y3VtZW50KGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKHNoZWV0QmFzZVVSTC5pc051bGwoKSB8fCBkb2N1bWVudC5zZWN1cml0eU9yaWdp
bigpLmNhblJlcXVlc3QoYmFzZVVSTCkpCi17Ci0gICAgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpOwotICAgIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3Ig
PSBkb2N1bWVudC5zZXR0aW5ncygpLnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVo
YXZpb3IoKTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHRleHRBdXRvc2l6aW5n
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0j
ZW5kaWYKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIGxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5sZWdhY3lP
dmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCgpOworc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxl
TGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7
CiAgICAgLy8gVGhlIGxlZ2FjeSAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2ggYmVo
YXZpb3IgbWF5IGhhdmUgYmVlbiBkaXNhYmxlZCB0aHJvdWdoIHRoZSB3ZWJzaXRlIHBvbGljeSwK
ICAgICAvLyBpbiB0aGF0IGNhc2Ugd2Ugd2FudCB0byBkaXNhYmxlIHRoZSBsZWdhY3kgYmVoYXZp
b3IgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBzZXR0aW5nIHNheXMuCiAgICAgaWYgKGF1dG8qIGxv
YWRlciA9IGRvY3VtZW50LmxvYWRlcigpKSB7CiAgICAgICAgIGlmIChsb2FkZXItPmxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3koKSA9PSBMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1Rv
dWNoUG9saWN5OjpEaXNhYmxlKQotICAgICAgICAgICAgbGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdU
b3VjaEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cisg
ICAgcmV0dXJuIGRvY3VtZW50LnNldHRpbmdzKCkubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQoKTsKK30KKyNlbmRpZgorCitDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250
ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBzaGVldEJhc2VVUkwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IGJhc2VVUkwgeyBzaGVldEJhc2VVUkwuaXNOdWxs
KCkgPyBkb2N1bWVudC5iYXNlVVJMKCkgOiBzaGVldEJhc2VVUkwgfQorICAgICwgY2hhcnNldCB7
IGNoYXJzZXQgfQorICAgICwgbW9kZSB7IGRvY3VtZW50LmluUXVpcmtzTW9kZSgpID8gSFRNTFF1
aXJrc01vZGUgOiBIVE1MU3RhbmRhcmRNb2RlIH0KKyAgICAsIGlzSFRNTERvY3VtZW50IHsgZG9j
dW1lbnQuaXNIVE1MRG9jdW1lbnQoKSB9CisgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgc2hlZXRCYXNlVVJMLmlzTnVsbCgpIHx8IGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuY2Fu
UmVxdWVzdChiYXNlVVJMKSB9CisgICAgLCB1c2VTeXN0ZW1BcHBlYXJhbmNlIHsgZG9jdW1lbnQu
cGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCkgOiBmYWxzZSB9
CisgICAgLCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBkb2N1bWVudC5zZXR0aW5ncygpLmFzcGVjdFJh
dGlvRW5hYmxlZCgpIH0KKyAgICAsIGNvbG9yRmlsdGVyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRp
bmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCkgfQorICAgICwgY29uc3RhbnRQcm9wZXJ0aWVzRW5h
YmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpIH0K
KyAgICAsIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuZGVm
ZXJyZWRDU1NQYXJzZXJFbmFibGVkKCkgfQorICAgICwgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpIH0KKyAgICAsIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7
IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3BlcnRpZXNFbmFi
bGVkKCkgfQorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgLCBsZWdh
Y3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCB7IHNob3VsZEVuYWJsZUxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2goZG9jdW1lbnQpIH0KICNlbmRpZgotICAgIHNwcmluZ1RpbWluZ0Z1
bmN0aW9uRW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuc3ByaW5nVGltaW5nRnVuY3Rpb25F
bmFibGVkKCk7Ci0gICAgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCA9IGRvY3VtZW50LnNldHRp
bmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpOwotICAgIGNvbG9yRmlsdGVyRW5hYmxl
ZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCk7CisgICAgLCBvdmVy
c2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5vdmVyc2Nyb2xsQmVo
YXZpb3JFbmFibGVkKCkgfQorICAgICwgc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQu
c2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkKCkgfQorICAgICwgc3By
aW5nVGltaW5nRnVuY3Rpb25FbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5zcHJpbmdUaW1p
bmdGdW5jdGlvbkVuYWJsZWQoKSB9CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICAs
IHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXpp
bmdFbmFibGVkKCkgfQorI2VuZGlmCisgICAgLCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0
aGFuZEJlaGF2aW9yIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6
ZVNob3J0aGFuZEJlaGF2aW9yKCkgfQogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0g
ICAgYXR0YWNobWVudEVuYWJsZWQgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCgpOworICAgICwgYXR0YWNobWVudEVuYWJs
ZWQgeyBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRF
bGVtZW50RW5hYmxlZCgpIH0KICNlbmRpZgotICAgIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCA9
IGRvY3VtZW50LnNldHRpbmdzKCkuZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKCk7Ci0gICAgc2Ny
b2xsQmVoYXZpb3JFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhT
Y3JvbGxpbmdFbmFibGVkKCk7Ci0gICAgb3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9IGRvY3Vt
ZW50LnNldHRpbmdzKCkub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCgpOwotICAgIHVzZVN5c3Rl
bUFwcGVhcmFuY2UgPSBkb2N1bWVudC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCktPnVzZVN5c3Rl
bUFwcGVhcmFuY2UoKSA6IGZhbHNlOwotICAgIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVz
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3Bl
cnRpZXNFbmFibGVkKCk7Ci0gICAgYXNwZWN0UmF0aW9FbmFibGVkID0gZG9jdW1lbnQuc2V0dGlu
Z3MoKS5hc3BlY3RSYXRpb0VuYWJsZWQoKTsKK3sKIH0KIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCkBAIC04Nywy
OCArOTQsMzEgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIAogICAg
IHJldHVybiBhLmJhc2VVUkwgPT0gYi5iYXNlVVJMCiAgICAgICAgICYmIGEuY2hhcnNldCA9PSBi
LmNoYXJzZXQKICAgICAgICAgJiYgYS5tb2RlID09IGIubW9kZQorICAgICAgICAmJiBhLmVuY2xv
c2luZ1J1bGVUeXBlID09IGIuZW5jbG9zaW5nUnVsZVR5cGUKICAgICAgICAgJiYgYS5pc0hUTUxE
b2N1bWVudCA9PSBiLmlzSFRNTERvY3VtZW50Ci0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykK
LSAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQKLSNlbmRpZgorICAgICAgICAmJiBhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPT0g
Yi5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luCisgICAgICAgICYmIGEuaXNDb250ZW50T3BhcXVl
ID09IGIuaXNDb250ZW50T3BhcXVlCisgICAgICAgICYmIGEudXNlU3lzdGVtQXBwZWFyYW5jZSA9
PSBiLnVzZVN5c3RlbUFwcGVhcmFuY2UKKyAgICAgICAgJiYgYS5hc3BlY3RSYXRpb0VuYWJsZWQg
PT0gYi5hc3BlY3RSYXRpb0VuYWJsZWQKKyAgICAgICAgJiYgYS5jb2xvckZpbHRlckVuYWJsZWQg
PT0gYi5jb2xvckZpbHRlckVuYWJsZWQKKyAgICAgICAgJiYgYS5jb25zdGFudFByb3BlcnRpZXNF
bmFibGVkID09IGIuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZAorICAgICAgICAmJiBhLmRlZmVy
cmVkQ1NTUGFyc2VyRW5hYmxlZCA9PSBiLmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZAorICAgICAg
ICAmJiBhLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSA9PSBiLmVuZm9yY2VzQ1NT
TUlNRVR5cGVJbk5vUXVpcmtzTW9kZQorICAgICAgICAmJiBhLmluZGl2aWR1YWxUcmFuc2Zvcm1Q
cm9wZXJ0aWVzRW5hYmxlZCA9PSBiLmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxl
ZAogI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCiAgICAgICAgICYmIGEubGVn
YWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaEVuYWJsZWQgPT0gYi5sZWdhY3lPdmVyZmxvd1Njcm9s
bGluZ1RvdWNoRW5hYmxlZAogI2VuZGlmCi0gICAgICAgICYmIGEuZW5mb3JjZXNDU1NNSU1FVHlw
ZUluTm9RdWlya3NNb2RlID09IGIuZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlCi0g
ICAgICAgICYmIGEudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9PSBi
LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IKKyAgICAgICAgJiYgYS5v
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkID09IGIub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZAor
ICAgICAgICAmJiBhLnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLnNjcm9sbEJlaGF2aW9yRW5h
YmxlZAogICAgICAgICAmJiBhLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9PSBiLnNwcmlu
Z1RpbWluZ0Z1bmN0aW9uRW5hYmxlZAotICAgICAgICAmJiBhLmNvbnN0YW50UHJvcGVydGllc0Vu
YWJsZWQgPT0gYi5jb25zdGFudFByb3BlcnRpZXNFbmFibGVkCi0gICAgICAgICYmIGEuY29sb3JG
aWx0ZXJFbmFibGVkID09IGIuY29sb3JGaWx0ZXJFbmFibGVkCisjaWYgRU5BQkxFKFRFWFRfQVVU
T1NJWklORykKKyAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0
b3NpemluZ0VuYWJsZWQKKyNlbmRpZgorICAgICAgICAmJiBhLnVzZUxlZ2FjeUJhY2tncm91bmRT
aXplU2hvcnRoYW5kQmVoYXZpb3IgPT0gYi51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFu
ZEJlaGF2aW9yCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICAgICAgJiYgYS5h
dHRhY2htZW50RW5hYmxlZCA9PSBiLmF0dGFjaG1lbnRFbmFibGVkCiAjZW5kaWYKLSAgICAgICAg
JiYgYS5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgPT0gYi5kZWZlcnJlZENTU1BhcnNlckVuYWJs
ZWQKLSAgICAgICAgJiYgYS5zY3JvbGxCZWhhdmlvckVuYWJsZWQgPT0gYi5zY3JvbGxCZWhhdmlv
ckVuYWJsZWQKLSAgICAgICAgJiYgYS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJs
ZWQgPT0gYi5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQKLSAgICAgICAgJiYg
YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID09IGIuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bgotICAgICAgICAmJiBhLnVzZVN5c3RlbUFwcGVhcmFuY2UgPT0gYi51c2VTeXN0ZW1BcHBlYXJh
bmNlCi0gICAgICAgICYmIGEuYXNwZWN0UmF0aW9FbmFibGVkID09IGIuYXNwZWN0UmF0aW9FbmFi
bGVkCi0gICAgICAgICYmIGEub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLm92ZXJzY3Jv
bGxCZWhhdmlvckVuYWJsZWQ7CisgICAgOwogfQogCiBVUkwgQ1NTUGFyc2VyQ29udGV4dDo6Y29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw3ICs0MSw2IEBAIGNsYXNzIERvY3VtZW50Owogc3RydWN0IENTU1BhcnNlckNvbnRl
eHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotCiAgICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKIApAQCAtNTAsMzYgKzQ5LDM3IEBAIHB1YmxpYzoKICAgICBDU1NQYXJzZXJNb2RlIG1v
ZGUgeyBIVE1MU3RhbmRhcmRNb2RlIH07CiAgICAgT3B0aW9uYWw8U3R5bGVSdWxlVHlwZT4gZW5j
bG9zaW5nUnVsZVR5cGU7CiAgICAgYm9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07Ci0jaWYg
RU5BQkxFKFRFWFRfQVVUT1NJWklORykKLSAgICBib29sIHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7
IGZhbHNlIH07Ci0jZW5kaWYKKworICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gc3VwcG9y
dCBnZXRNYXRjaGVkQ1NTUnVsZXMuCisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgZmFsc2UgfTsKKworICAgIGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKKyAgICBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAgLy8gU2V0dGluZ3MuCisg
ICAgYm9vbCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgY29sb3JGaWx0
ZXJFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIGNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQg
eyBmYWxzZSB9OworICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsK
KyAgICBib29sIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSB7IHRydWUgfTsKKyAg
ICBib29sIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNlIH07CiAj
aWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKICAgICBib29sIGxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgZW5m
b3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIHsgdHJ1ZSB9OwotICAgIGJvb2wgdXNlTGVn
YWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciB7IGZhbHNlIH07CisgICAgYm9vbCBv
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIHNjcm9sbEJlaGF2
aW9yRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBzcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJs
ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBjb2xvckZpbHRlckVuYWJsZWQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShU
RVhUX0FVVE9TSVpJTkcpCisgICAgYm9vbCB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgeyBmYWxzZSB9
OworI2VuZGlmCisgICAgYm9vbCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2
aW9yIHsgZmFsc2UgfTsKKworICAgIC8vIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuCiAjaWYgRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBib29sIGF0dGFjaG1lbnRFbmFibGVkIHsgZmFs
c2UgfTsKICNlbmRpZgotICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2Ug
fTsKLSAgICBib29sIHNjcm9sbEJlaGF2aW9yRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBp
bmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQgeyBmYWxzZSB9OwotCi0gICAgYm9v
bCBvdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKLSAgICAKLSAgICAvLyBUaGlz
IGlzIG9ubHkgbmVlZGVkIHRvIHN1cHBvcnQgZ2V0TWF0Y2hlZENTU1J1bGVzLgotICAgIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgYm9vbCB1c2VT
eXN0ZW1BcHBlYXJhbmNlIHsgZmFsc2UgfTsKIAogICAgIFVSTCBjb21wbGV0ZVVSTChjb25zdCBT
dHJpbmcmIHVybCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQ29udGVudE9wYXF1ZSB7IGZhbHNlIH07
Ci0KLSAgICBib29sIGFzcGVjdFJhdGlvRW5hYmxlZCB7IGZhbHNlIH07CiB9OwogCiBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKQEAgLTkwLDYgKzkwLDggQEAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgcwogc3RydWN0IENTU1BhcnNlckNvbnRleHRIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBrZXkpCiAgICAgeworICAgICAgICAvLyBGSVhN
RTogQ29udmVydCB0aGlzIHRvIHVzZSBXVEY6Okhhc2hlci4KKwogICAgICAgICB1bnNpZ25lZCBo
YXNoID0gMDsKICAgICAgICAgaWYgKCFrZXkuYmFzZVVSTC5pc051bGwoKSkKICAgICAgICAgICAg
IGhhc2ggXj0gV1RGOjpVUkxIYXNoOjpoYXNoKGtleS5iYXNlVVJMKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAy
NzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyNiwxNSArMTcyNiwxNSBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lWkluZGV4KENTCiAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdl
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNoYWRvdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBib29sIGlzQm94
U2hhZG93UHJvcGVydHkpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU2hhZG93KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
LCBib29sIGlzQm94U2hhZG93UHJvcGVydHkpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgp
ID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAK
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZG8gewotICAgICAgICBpZiAoUmVmUHRyPENT
U1NoYWRvd1ZhbHVlPiBzaGFkb3dWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3cocmFuZ2UsIGNz
c1BhcnNlck1vZGUsIGlzQm94U2hhZG93UHJvcGVydHksIGlzQm94U2hhZG93UHJvcGVydHkpKQot
ICAgICAgICAgICAgc2hhZG93VmFsdWVMaXN0LT5hcHBlbmQoKnNoYWRvd1ZhbHVlKTsKKyAgICAg
ICAgaWYgKGF1dG8gc2hhZG93VmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KHJhbmdlLCBjb250
ZXh0LCBpc0JveFNoYWRvd1Byb3BlcnR5LCBpc0JveFNoYWRvd1Byb3BlcnR5KSkKKyAgICAgICAg
ICAgIHNoYWRvd1ZhbHVlTGlzdC0+YXBwZW5kKHNoYWRvd1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IHdoaWxl
IChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CkBAIC0xODEzLDE5ICsx
ODEzLDE5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVUZXh0RW1waGEKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUNhcmV0Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVD
YXJldENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIHJldHVybiBjb25z
dW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBjb25zdW1lQ29sb3Io
cmFuZ2UsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0
bGluZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0bGluZUNvbG9yKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
KQogewogICAgIC8vIEFsbG93IHRoZSBzcGVjaWFsIGZvY3VzIGNvbG9yIGV2ZW4gaW4gSFRNTCBT
dGFuZGFyZCBwYXJzaW5nIG1vZGUuCiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFu
Z2UpOwotICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAg
IHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogfQogCiBzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGluZVdpZHRoKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MpCkBAIC0yMjI4LDcgKzIyMjgsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lCiAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGlvbkxvbmdoYW5kPENTU1ZhbHVlVG9w
LCBDU1NWYWx1ZUJvdHRvbT4ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOwogfQogCi1zdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lUGFpbnRTdHJva2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVQYWludFN0cm9rZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0g
Q1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKQEAgLTIy
MzgsNyArMjIzOCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8K
ICAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUp
OworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQp
OwogICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAg
ICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHVybC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTIyNDcs
NyArMjI0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8KICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gdXJsOwogICAgIH0KLSAgICByZXR1cm4gY29uc3VtZUNv
bG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yKHJhbmdl
LCBjb250ZXh0KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdseXBoT3Jp
ZW50YXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKQEAgLTMyNTgsNyArMzI1OCw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVCYWNrZ3JvdW4KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1NpemU6CiAgICAgICAgIHJldHVybiBjb25zdW1lQmFja2dyb3VuZFNpemUocHJvcGVydHks
IHJhbmdlLCBjb250ZXh0Lm1vZGUpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQubW9kZSk7Cisg
ICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH07CkBAIC00MjQxLDcgKzQyNDEsNyBAQCBSZWZQdHI8Q1NT
VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93
czoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGl2ZUludGVnZXIobV9yYW5nZSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3I6Ci0gICAgICAgIHJldHVybiBjb25z
dW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICByZXR1cm4gY29uc3Vt
ZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uU2tpcDoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVUZXh0RGVjb3JhdGlvblNraXAobV9y
YW5nZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aDoKQEAgLTQy
NjEsMTIgKzQyNjEsMTIgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFy
cwogICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZENvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlM
aWdodGluZ0NvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxlQ29sb3I6Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAg
ICByZXR1cm4gY29uc3VtZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNhcmV0Q29sb3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvcihtX3Jh
bmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvciht
X3JhbmdlLCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICByZXR1cm4gY29uc3VtZUNvbG9y
KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBpblF1aXJrc01vZGUoKSk7CisgICAgICAgIHJldHVy
biBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0LCBpblF1aXJrc01vZGUoKSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklubGluZVN0YXJ0V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlcklubGluZUVuZFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCbG9j
a1N0YXJ0V2lkdGg6CkBAIC00Mjc4LDcgKzQyNzgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1By
b3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOiB7
CiAgICAgICAgIGJvb2wgYWxsb3dRdWlya3lDb2xvcnMgPSBpblF1aXJrc01vZGUoKQogICAgICAg
ICAgICAgJiYgKGN1cnJlbnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkIHx8IGN1cnJl
bnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlCb3JkZXJDb2xvcik7Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIGFsbG93UXVpcmt5Q29sb3JzKTsK
KyAgICAgICAgcmV0dXJuIGNvbnN1bWVDb2xvcihtX3JhbmdlLCBtX2NvbnRleHQsIGFsbG93UXVp
cmt5Q29sb3JzKTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRo
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6CkBAIC00Mjk0LDcgKzQyOTQs
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NTMi4x
LCBiYWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKICAgICBjYXNlIENTU1Byb3BlcnR5Qm94
U2hhZG93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6Ci0gICAgICAgIHJl
dHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eUJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNo
YWRvdyk7CisgICAgICAgIHJldHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dCwg
cHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlXZWJraXRCb3hTaGFkb3cpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CiAjaWYgRU5B
QkxFKEZJTFRFUlNfTEVWRUxfMikKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXI6CkBAIC00MzQyLDcgKzQzNDIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5
UGFyc2VyOjpwYXJzCiAgICAgICAgIHJldHVybiBjb25zdW1lUm90YXRlKG1fcmFuZ2UsIG1fY29u
dGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3Ryb2tlOgotICAgICAgICByZXR1cm4gY29uc3VtZVBhaW50U3Ryb2tlKG1fcmFuZ2UsIG1f
Y29udGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQYWludFN0cm9rZShtX3Jhbmdl
LCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uVmVydGlj
YWw6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgogICAg
ICAgICByZXR1cm4gY29uc3VtZUdseXBoT3JpZW50YXRpb24obV9yYW5nZSwgbV9jb250ZXh0Lm1v
ZGUsIHByb3BlcnR5KTsKQEAgLTUwOTMsNyArNTA5Myw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJz
ZXI6OmNvbnN1bWVCb3JkZXIoUmUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVDb2xv
cihtX3JhbmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVD
b2xvcihtX3JhbmdlLCBtX2NvbnRleHQpOwogICAgICAgICAgICAgaWYgKGNvbG9yKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwyNjggKzY5MCwyODYgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVXJsKENTUwogICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHVybC50b1N0cmluZygpLCBDU1NVbml0VHlwZTo6
Q1NTX1VSSSk7CiB9CiAKLXN0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSB2
YWx1ZSwgYm9vbCBpc1BlcmNlbnRhZ2UpCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1l
T3B0aW9uYWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoaXNQ
ZXJjZW50YWdlKQorICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5n
ZSkpCisgICAgICAgIHJldHVybiAxLjA7CisKKyAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9
IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcocmFuZ2UpKQorICAgICAgICBy
ZXR1cm4gY2xhbXBUbzxkb3VibGU+KCphbHBoYVBhcmFtZXRlciwgMC4wLCAxLjApOworCisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZUh1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
Y29udGV4dCkKK3sKKyAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwg
Y29udGV4dC5tb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpG
b3JiaWQpKQorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVz
KGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOworCisgICAgaWYgKGF1dG8gbnVtYmVyID0gY29u
c3VtZU51bWJlclJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiAqbnVtYmVyOworCisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIGRvdWJsZSBub3JtYWxpemVIdWUoZG91Ymxl
IGh1ZSkKK3sKKyAgICByZXR1cm4gc3RkOjpmbW9kKHN0ZDo6Zm1vZChodWUsIDM2MC4wKSArIDM2
MC4wLCAzNjAuMCk7Cit9CisKK2VudW0gY2xhc3MgUkdCQ29tcG9uZW50VHlwZSB7CisgICAgTnVt
YmVyLAorICAgIFBlcmNlbnRhZ2UKK307CisKK3N0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9u
ZW50KGRvdWJsZSB2YWx1ZSwgUkdCQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlKQoreworICAg
IGlmIChjb21wb25lbnRUeXBlID09IFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2UpCiAgICAg
ICAgIHZhbHVlID0gdmFsdWUgLyAxMDAuMCAqIDI1NS4wOwogCiAgICAgcmV0dXJuIGNvbnZlcnRQ
cmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOwogfQogCi1zdGF0aWMgQ29sb3Ig
cGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorZW51bSBjbGFz
cyBSR0JPckhTTFNlcGFyYXRvclN5bnRheCB7CisgICAgQ29tbWFzLAorICAgIFdoaXRlc3BhY2VT
bGFzaAorfTsKKworc3RhdGljIGJvb2wgY29uc3VtZVJHQk9ySFNMU2VwYXJhdG9yKENTU1BhcnNl
clRva2VuUmFuZ2UmIGFyZ3MsIFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4IHN5bnRheCkKK3sKKyAg
ICBpZiAoc3ludGF4ID09IFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4OjpDb21tYXMpCisgICAgICAg
IHJldHVybiBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjb25zdW1lUkdCT3JIU0xBbHBoYVNlcGFyYXRvcihD
U1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBSR0JPckhTTFNlcGFyYXRvclN5bnRheCBzeW50YXgp
Cit7CisgICAgaWYgKHN5bnRheCA9PSBSR0JPckhTTFNlcGFyYXRvclN5bnRheDo6Q29tbWFzKQor
ICAgICAgICByZXR1cm4gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKKyAg
ICByZXR1cm4gY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKK30KKworc3Rh
dGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVJHQk9ySFNMT3B0aW9uYWxBbHBoYShDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzLCBSR0JPckhTTFNlcGFyYXRvclN5bnRheCBzeW50YXgpCit7Cisg
ICAgaWYgKCFjb25zdW1lUkdCT3JIU0xBbHBoYVNlcGFyYXRvcihhcmdzLCBzeW50YXgpKQorICAg
ICAgICByZXR1cm4gMS4wOworCisgICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1l
TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpKQorICAgICAgICByZXR1cm4gKmFs
cGhhUGFyYW1ldGVyOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIENv
bG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklk
KCkgPT0gQ1NTVmFsdWVSZ2IgfHwgcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1
ZVJnYmEpOwogICAgIGF1dG8gYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKLSAgICBi
b29sIGlzUGVyY2VudGFnZSA9IGZhbHNlOwotICAgIGRvdWJsZSBjb2xvclBhcmFtZXRlcjsKLSAg
ICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQotICAgICAgICBjb2xv
clBhcmFtZXRlciA9ICpudW1iZXI7Ci0gICAgZWxzZSBpZiAoYXV0byBwZXJjZW50ID0gY29uc3Vt
ZVBlcmNlbnRSYXcoYXJncykpIHsKLSAgICAgICAgY29sb3JQYXJhbWV0ZXIgPSAqcGVyY2VudDsK
LSAgICAgICAgaXNQZXJjZW50YWdlID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBzdHJ1Y3QgSW5pdGlhbENvbXBvbmVudCB7CisgICAgICAgIGRvdWJsZSB2YWx1
ZTsKKyAgICAgICAgUkdCQ29tcG9uZW50VHlwZSB0eXBlOworICAgIH07CiAKLSAgICBlbnVtIGNs
YXNzIENvbG9yU3ludGF4IHsKLSAgICAgICAgQ29tbWFzLAotICAgICAgICBXaGl0ZXNwYWNlU2xh
c2gsCisgICAgYXV0byBjb25zdW1lSW5pdGlhbENvbXBvbmVudCA9IFtdKGF1dG8mIGFyZ3MpIC0+
IE9wdGlvbmFsPEluaXRpYWxDb21wb25lbnQ+IHsKKyAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0g
Y29uc3VtZU51bWJlclJhdyhhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgKm51bWJlciwg
UkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0gfTsKKyAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9
IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQorICAgICAgICAgICAgcmV0dXJuIHsgeyAqcGVyY2Vu
dCwgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9IH07CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfTsKIAotICAgIENvbG9yU3ludGF4IHN5bnRheCA9IENvbG9yU3ludGF4
OjpDb21tYXM7Ci0gICAgYXV0byBjb25zdW1lU2VwYXJhdG9yID0gWyZdIHsKLSAgICAgICAgaWYg
KHN5bnRheCA9PSBDb2xvclN5bnRheDo6Q29tbWFzKQotICAgICAgICAgICAgcmV0dXJuIGNvbnN1
bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBhdXRvIGNvbnN1bWVDb21wb25lbnQgPSBbXShhdXRvJiBhcmdzLCBhdXRv
IGNvbXBvbmVudFR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChjb21wb25lbnRUeXBlKSB7CisgICAg
ICAgIGNhc2UgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZToKKyAgICAgICAgICAgIHJldHVy
biBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKKyAgICAgICAgY2FzZSBSR0JDb21wb25lbnRUeXBl
OjpOdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKKyAg
ICAgICAgfQogICAgIH07CiAKLSAgICB1aW50OF90IGNvbG9yQXJyYXlbM107Ci0gICAgY29sb3JB
cnJheVswXSA9IGNsYW1wUkdCQ29tcG9uZW50KGNvbG9yUGFyYW1ldGVyLCBpc1BlcmNlbnRhZ2Up
OwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgIGlmIChpID09IDEp
Ci0gICAgICAgICAgICBzeW50YXggPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFy
Z3MpID8gQ29sb3JTeW50YXg6OkNvbW1hcyA6IENvbG9yU3ludGF4OjpXaGl0ZXNwYWNlU2xhc2g7
Ci0gICAgICAgIGVsc2UgaWYgKCFjb25zdW1lU2VwYXJhdG9yKCkpCi0gICAgICAgICAgICByZXR1
cm4geyB9OworICAgIGF1dG8gaW5pdGlhbENvbXBvbmVudCA9IGNvbnN1bWVJbml0aWFsQ29tcG9u
ZW50KGFyZ3MpOworICAgIGlmICghaW5pdGlhbENvbXBvbmVudCkKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgICAgICBpZiAoaXNQZXJjZW50YWdlKSB7Ci0gICAgICAgICAgICBhdXRvIHBlcmNl
bnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKLSAgICAgICAgICAgIGlmICghcGVyY2VudCkK
LSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgY29sb3JBcnJheVtpXSA9
IGNsYW1wUkdCQ29tcG9uZW50KCpwZXJjZW50LCB0cnVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKLSAgICAgICAg
ICAgIGlmICghbnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAg
ICBjb2xvckFycmF5W2ldID0gY2xhbXBSR0JDb21wb25lbnQoKm51bWJlciwgZmFsc2UpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIGF1dG8gY29tcG9uZW50VHlwZSA9IGluaXRpYWxDb21wb25lbnQt
PnR5cGU7CisgICAgYXV0byByZWQgPSBpbml0aWFsQ29tcG9uZW50LT52YWx1ZTsKIAotICAgIC8v
IEhpc3RvcmljYWxseSwgYWxwaGEgd2FzIG9ubHkgcGFyc2VkIGZvciByZ2JhKCksIGJ1dCBjc3Mt
Y29sb3ItNCBzcGVjaWZpZXMgdGhhdCByZ2JhKCkgaXMgYSBzaW1wbGUgYWxpYXMgZm9yIHJnYigp
LgotICAgIGF1dG8gY29uc3VtZUFscGhhU2VwYXJhdG9yID0gWyZdIHsKLSAgICAgICAgaWYgKHN5
bnRheCA9PSBDb2xvclN5bnRheDo6Q29tbWFzKQotICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVD
b21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
Y29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKLSAgICB9OworICAgIGF1dG8g
c3ludGF4ID0gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSA/IFJHQk9ySFNM
U2VwYXJhdG9yU3ludGF4OjpDb21tYXMgOiBSR0JPckhTTFNlcGFyYXRvclN5bnRheDo6V2hpdGVz
cGFjZVNsYXNoOworICAgIAorICAgIGF1dG8gZ3JlZW4gPSBjb25zdW1lQ29tcG9uZW50KGFyZ3Ms
IGNvbXBvbmVudFR5cGUpOworICAgIGlmICghZ3JlZW4pCisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICB1aW50OF90IGFscGhhQ29tcG9uZW50ID0gMjU1OwotICAgIGlmIChjb25zdW1lQWxwaGFT
ZXBhcmF0b3IoKSkgewotICAgICAgICBhdXRvIGFscGhhID0gY29uc3VtZU51bWJlck9yUGVyY2Vu
dERpdmlkZWRCeTEwMFJhdyhhcmdzKTsKLSAgICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgICAgIGFscGhhQ29tcG9uZW50ID0gY29udmVydEZsb2F0QWxwaGFU
bzx1aW50OF90PigqYWxwaGEpOwotICAgIH0KKyAgICBpZiAoIWNvbnN1bWVSR0JPckhTTFNlcGFy
YXRvcihhcmdzLCBzeW50YXgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBibHVl
ID0gY29uc3VtZUNvbXBvbmVudChhcmdzLCBjb21wb25lbnRUeXBlKTsKKyAgICBpZiAoIWJsdWUp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZVJHQk9ySFNM
T3B0aW9uYWxBbHBoYShhcmdzLCBzeW50YXgpOworICAgIGlmICghYWxwaGEpCisgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIHJldHVybiBTUkdCQTx1aW50OF90PiB7IGNvbG9yQXJyYXlbMF0sIGNvbG9yQXJyYXlb
MV0sIGNvbG9yQXJyYXlbMl0sIGFscGhhQ29tcG9uZW50IH07CisgICAgYXV0byBub3JtYWxpemVk
UmVkID0gY2xhbXBSR0JDb21wb25lbnQocmVkLCBjb21wb25lbnRUeXBlKTsKKyAgICBhdXRvIG5v
cm1hbGl6ZWRHcmVlbiA9IGNsYW1wUkdCQ29tcG9uZW50KCpncmVlbiwgY29tcG9uZW50VHlwZSk7
CisgICAgYXV0byBub3JtYWxpemVkQmx1ZSA9IGNsYW1wUkdCQ29tcG9uZW50KCpibHVlLCBjb21w
b25lbnRUeXBlKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRBbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhh
VG88dWludDhfdD4oKmFscGhhKTsKKworICAgIHJldHVybiBTUkdCQTx1aW50OF90PiB7IG5vcm1h
bGl6ZWRSZWQsIG5vcm1hbGl6ZWRHcmVlbiwgbm9ybWFsaXplZEJsdWUsIG5vcm1hbGl6ZWRBbHBo
YSB9OwogfQogCi1zdGF0aWMgQ29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCitzdGF0aWMgQ29sb3Ig
cGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rp
b25JZCgpID09IENTU1ZhbHVlSHNsIHx8IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NT
VmFsdWVIc2xhKTsKICAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0g
ICAgZG91YmxlIGh1ZUFuZ2xlSW5EZWdyZWVzOwotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3Vt
ZUFuZ2xlUmF3KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUp
OwotICAgIGVsc2UgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKLSAg
ICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSAqbnVtYmVyOwotICAgIGVsc2UKKyAgICBhdXRvIGh1
ZSA9IGNvbnN1bWVIdWUoYXJncywgY29udGV4dCk7CisgICAgaWYgKCFodWUpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBkb3VibGUgY29sb3JBcnJheVszXTsKLSAgICBjb2xvckFycmF5WzBd
ID0gZm1vZChmbW9kKGh1ZUFuZ2xlSW5EZWdyZWVzLCAzNjAuMCkgKyAzNjAuMCwgMzYwLjApIC8g
MzYwLjA7CisgICAgYXV0byBzeW50YXggPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNl
KGFyZ3MpID8gUkdCT3JIU0xTZXBhcmF0b3JTeW50YXg6OkNvbW1hcyA6IFJHQk9ySFNMU2VwYXJh
dG9yU3ludGF4OjpXaGl0ZXNwYWNlU2xhc2g7CiAKLSAgICBib29sIHJlcXVpcmVzQ29tbWFzID0g
ZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgaWYgKGNv
bnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpIHsKLSAgICAgICAgICAgIGlmIChp
ICE9IDEgJiYgIXJlcXVpcmVzQ29tbWFzKQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgICAgICAgICByZXF1aXJlc0NvbW1hcyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVx
dWlyZXNDb21tYXMgfHwgYXJncy5hdEVuZCgpIHx8ICgmYXJncy5wZWVrKCkgLSAxKS0+dHlwZSgp
ICE9IFdoaXRlc3BhY2VUb2tlbikKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGF1
dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwotICAgICAgICBpZiAoIXBlcmNl
bnQpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBjb2xvckFycmF5W2ldID0gY2xh
bXBUbzxkb3VibGU+KCpwZXJjZW50LCAwLjAsIDEwMC4wKSAvIDEwMC4wOyAvLyBOZWVkcyB0byBi
ZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuMC4KLSAgICB9CisgICAgYXV0byBzYXR1cmF0aW9uID0g
Y29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CisgICAgaWYgKCFzYXR1cmF0aW9uKQorICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYm9vbCBjb21tYUNvbnN1bWVkID0gY29uc3VtZUNvbW1hSW5jbHVk
aW5nV2hpdGVzcGFjZShhcmdzKTsKLSAgICBib29sIHNsYXNoQ29uc3VtZWQgPSBjb25zdW1lU2xh
c2hJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwotICAgIGlmICgoY29tbWFDb25zdW1lZCAmJiAh
cmVxdWlyZXNDb21tYXMpIHx8IChzbGFzaENvbnN1bWVkICYmIHJlcXVpcmVzQ29tbWFzKSkKKyAg
ICBpZiAoIWNvbnN1bWVSR0JPckhTTFNlcGFyYXRvcihhcmdzLCBzeW50YXgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgZG91YmxlIGFscGhhID0gMS4wOwotICAgIGlmIChjb21tYUNvbnN1
bWVkIHx8IHNsYXNoQ29uc3VtZWQpIHsKLSAgICAgICAgYXV0byBhbHBoYVBhcmFtZXRlciA9IGNv
bnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7Ci0gICAgICAgIGlmICgh
YWxwaGFQYXJhbWV0ZXIpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBhbHBoYSA9
IGNsYW1wVG88ZG91YmxlPigqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKLSAgICB9CisgICAg
YXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKKyAgICBpZiAoIWxpZ2h0
bmVzcykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lUkdC
T3JIU0xPcHRpb25hbEFscGhhKGFyZ3MsIHN5bnRheCk7CisgICAgaWYgKCFhbHBoYSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oSFNMQTxmbG9h
dD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOworICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1h
bGl6ZUh1ZSgqaHVlKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRTYXR1cmF0aW9uID0gY2xhbXBUbzxk
b3VibGU+KCpzYXR1cmF0aW9uLCAwLjAsIDEwMC4wKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRMaWdo
dG5lc3MgPSBjbGFtcFRvPGRvdWJsZT4oKmxpZ2h0bmVzcywgMC4wLCAxMDAuMCk7CisgICAgYXV0
byBub3JtYWxpemVkQWxwaGEgPSBjbGFtcFRvPGRvdWJsZT4oKmFscGhhLCAwLjAsIDEuMCk7CisK
KyAgICByZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihIU0xBPGZsb2F0PiB7IHN0
YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkSHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1h
bGl6ZWRTYXR1cmF0aW9uKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRMaWdodG5lc3Mp
LCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZEFscGhhKSB9KTsKIH0KIAotc3RhdGljIE9w
dGlvbmFsPGZsb2F0PiBwYXJzZU9wdGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCitzdHJ1Y3QgV2hpdGVuZXNzQmxhY2tuZXNzIHsKKyAgICBkb3VibGUgd2hpdGVuZXNzOwor
ICAgIGRvdWJsZSBibGFja25lc3M7Cit9Oworc3RhdGljIFdoaXRlbmVzc0JsYWNrbmVzcyBub3Jt
YWxpemVXaGl0ZW5lc3NCbGFja25lc3MoZG91YmxlIHdoaXRlbmVzcywgZG91YmxlIGJsYWNrbmVz
cykKIHsKLSAgICBpZiAoIWNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKQot
ICAgICAgICByZXR1cm4gMS4wZjsKKyAgICBXaGl0ZW5lc3NCbGFja25lc3MgcmVzdWx0OwogCi0g
ICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRl
ZEJ5MTAwUmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KCphbHBoYVBh
cmFtZXRlciwgMC4wLCAxLjApOworICAgIC8vICAgVmFsdWVzIG91dHNpZGUgb2YgdGhlc2UgcmFu
Z2VzIGFyZSBub3QgaW52YWxpZCwgYnV0IGFyZSBjbGFtcGVkIHRvIHRoZQorICAgIC8vICAgcmFu
Z2VzIGRlZmluZWQgaGVyZSBhdCBjb21wdXRlZC12YWx1ZSB0aW1lLgorICAgIHJlc3VsdC53aGl0
ZW5lc3MgPSBjbGFtcFRvPGRvdWJsZT4od2hpdGVuZXNzLCAwLCAxMDApOworICAgIHJlc3VsdC5i
bGFja25lc3MgPSBjbGFtcFRvPGRvdWJsZT4oYmxhY2tuZXNzLCAwLCAxMDApOwogCi0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAvLyAgIElmIHRoZSBzdW0gb2YgdGhlc2UgdHdvIGFyZ3Vt
ZW50cyBpcyBncmVhdGVyIHRoYW4gMTAwJSwgdGhlbiBhdAorICAgIC8vICAgY29tcHV0ZWQtdmFs
dWUgdGltZSB0aGV5IGFyZSBmdXJ0aGVyIG5vcm1hbGl6ZWQgdG8gYWRkIHVwIHRvIDEwMCUsIHdp
dGgKKyAgICAvLyAgIHRoZSBzYW1lIHJlbGF0aXZlIHJhdGlvLgorICAgIGlmIChhdXRvIHN1bSA9
IHJlc3VsdC53aGl0ZW5lc3MgKyByZXN1bHQuYmxhY2tuZXNzOyBzdW0gPj0gMTAwKSB7CisgICAg
ICAgIHJlc3VsdC53aGl0ZW5lc3MgKj0gMTAwLjAgLyBzdW07CisgICAgICAgIHJlc3VsdC5ibGFj
a25lc3MgKj0gMTAwLjAgLyBzdW07CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
c3RhdGljIENvbG9yIHBhcnNlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIENvbG9yIHBhcnNlSFdCUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBD
U1NWYWx1ZUh3Yik7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKIAot
ICAgIGRvdWJsZSBodWVBbmdsZUluRGVncmVlczsKLSAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1
bWVBbmdsZVJhdyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVu
aXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVl
KTsKLSAgICBlbHNlIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncykpCi0g
ICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gKm51bWJlcjsKLSAgICBlbHNlCisgICAgYXV0byBo
dWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGlmICghaHVlKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYXV0byB3aGl0ZW5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdz
LCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIHdoaXRlbmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3
KGFyZ3MpOwogICAgIGlmICghd2hpdGVuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
YXV0byBibGFja25lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsK
KyAgICBhdXRvIGJsYWNrbmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgIGlmICgh
YmxhY2tuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhbHBoYSA9IHBhcnNl
T3B0aW9uYWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxw
aGEoYXJncyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlm
ICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgLy8gTm9ybWFsaXpl
IGh1ZS4KLQotICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gc3RkOjpmbW9kKGh1ZUFuZ2xlSW5EZWdy
ZWVzLCAzNjAuMCk7Ci0gICAgaWYgKGh1ZUFuZ2xlSW5EZWdyZWVzIDwgMC4wKQotICAgICAgICBo
dWVBbmdsZUluRGVncmVlcyArPSAzNjAuMDsKLSAgICAKLSAgICAvLyBDb252ZXJ0IGFuZ2xlIHRv
IG5vcm1hbGl6ZWQgZm9ybSBmcm9tIDAgLSAxLgotICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IGh1
ZUFuZ2xlSW5EZWdyZWVzIC8gMzYwLjA7Ci0KLSAgICAvLyBOb3JtYWxpemUgd2hpdGVuZXNzL2Js
YWNrbmVzcy4KKyAgICBhdXRvIG5vcm1hbGl6ZWRIdWUgPSBub3JtYWxpemVIdWUoKmh1ZSk7Cisg
ICAgYXV0byBbbm9ybWFsaXplZFdoaXRuZXNzLCBub3JtYWxpemVkQmxhY2tuZXNzXSA9IG5vcm1h
bGl6ZVdoaXRlbmVzc0JsYWNrbmVzcygqd2hpdGVuZXNzLCAqYmxhY2tuZXNzKTsKIAotICAgIC8v
ICAgVmFsdWVzIG91dHNpZGUgb2YgdGhlc2UgcmFuZ2VzIGFyZSBub3QgaW52YWxpZCwgYnV0IGFy
ZSBjbGFtcGVkIHRvIHRoZQotICAgIC8vICAgcmFuZ2VzIGRlZmluZWQgaGVyZSBhdCBjb21wdXRl
ZC12YWx1ZSB0aW1lLgotICAgIGF1dG8gbm9tYWxpemVkV2hpdGVuZXNzID0gY2xhbXBUbzxkb3Vi
bGU+KCp3aGl0ZW5lc3MsIDAsIDEwMCk7Ci0gICAgYXV0byBub21hbGl6ZWRCbGFja25lc3MgPSBj
bGFtcFRvPGRvdWJsZT4oKmJsYWNrbmVzcywgMCwgMTAwKTsKLQotICAgIC8vICAgSWYgdGhlIHN1
bSBvZiB0aGVzZSB0d28gYXJndW1lbnRzIGlzIGdyZWF0ZXIgdGhhbiAxMDAlLCB0aGVuIGF0Ci0g
ICAgLy8gICBjb21wdXRlZC12YWx1ZSB0aW1lIHRoZXkgYXJlIGZ1cnRoZXIgbm9ybWFsaXplZCB0
byBhZGQgdXAgdG8gMTAwJSwgd2l0aAotICAgIC8vICAgdGhlIHNhbWUgcmVsYXRpdmUgcmF0aW8u
Ci0gICAgaWYgKGF1dG8gc3VtID0gbm9tYWxpemVkV2hpdGVuZXNzICsgbm9tYWxpemVkQmxhY2tu
ZXNzOyBzdW0gPj0gMTAwKSB7Ci0gICAgICAgIG5vbWFsaXplZFdoaXRlbmVzcyAqPSAxMDAuMCAv
IHN1bTsKLSAgICAgICAgbm9tYWxpemVkQmxhY2tuZXNzICo9IDEwMC4wIC8gc3VtOwotICAgIH0K
LQotICAgIC8vIENvbnZlcnQgdG8gbm9ybWFsaXplZCBmb3JtIGZyb20gMCAtIDEuCi0gICAgbm9t
YWxpemVkV2hpdGVuZXNzIC89IDEwMC4wOwotICAgIG5vbWFsaXplZEJsYWNrbmVzcyAvPSAxMDAu
MDsKLQotICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KEhXQkE8ZmxvYXQ+
IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
bm9tYWxpemVkV2hpdGVuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vbWFsaXplZEJsYWNrbmVz
cyksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0pOworICAgIHJldHVybiBjb252ZXJ0Q29s
b3I8U1JHQkE8dWludDhfdD4+KEhXQkE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1h
bGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZFdoaXRuZXNzKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRCbGFja25lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFs
cGhhKSB9KTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlTGFiUGFyYW1ldGVycyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKK3N0YXRpYyBDb2xvciBwYXJzZUxhYlBhcmFtZXRlcnMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKQogewogICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlTGFiKTsKICAgICBhdXRv
IGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0gICAgYXV0byBsaWdodG5lc3MgPSBj
b25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIGxpZ2h0bmVz
cyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgIGlmICghbGlnaHRuZXNzKQogICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3Ms
IFZhbHVlUmFuZ2VBbGwpOworICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdz
KTsKICAgICBpZiAoIWFWYWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYlZh
bHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIGJW
YWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CiAgICAgaWYgKCFiVmFsdWUpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3Mp
OworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAo
IWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRpY19jYXN0
PGZsb2F0PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphVmFsdWUpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oKmJWYWx1ZSksICphbHBoYSB9OworICAgIHJldHVybiBMYWI8ZmxvYXQ+IHsg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KCpsaWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFWYWx1
ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYlZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBo
YSkgfTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIENvbG9y
IHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0
aW9uSWQoKSA9PSBDU1NWYWx1ZUxjaCk7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9u
KHJhbmdlKTsKIAotICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncywg
VmFsdWVSYW5nZUFsbCk7CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhh
cmdzKTsKICAgICBpZiAoIWxpZ2h0bmVzcykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1
dG8gY2hyb21hVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwot
ICAgIGlmICghY2hyb21hVmFsdWUpCisgICAgYXV0byBjaHJvbWEgPSBjb25zdW1lTnVtYmVyUmF3
KGFyZ3MpOworICAgIGlmICghY2hyb21hKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZG91
YmxlIGh1ZUFuZ2xlSW5EZWdyZWVzOwotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xl
UmF3KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOwotICAg
IGVsc2UgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdl
QWxsKSkKLSAgICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSAqbnVtYmVyOwotICAgIGVsc2UKKyAg
ICBhdXRvIGh1ZSA9IGNvbnN1bWVIdWUoYXJncywgY29udGV4dCk7CisgICAgaWYgKCFodWUpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBodWVBbmdsZUluRGVncmVlcyA9IGZtb2QoaHVlQW5n
bGVJbkRlZ3JlZXMsIDM2MC4wKTsKLSAgICBpZiAoaHVlQW5nbGVJbkRlZ3JlZXMgPCAwLjApCi0g
ICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzICs9IDM2MC4wOwotCi0gICAgYXV0byBhbHBoYSA9IHBh
cnNlT3B0aW9uYWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFs
QWxwaGEoYXJncyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNv
bnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihMQ0hBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pigq
bGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpjaHJvbWFWYWx1ZSksIHN0YXRpY19jYXN0
PGZsb2F0PihodWVBbmdsZUluRGVncmVlcyksICphbHBoYSB9KTsKKyAgICBhdXRvIG5vcm1hbGl6
ZWRIdWUgPSBub3JtYWxpemVIdWUoKmh1ZSk7CisKKyAgICByZXR1cm4gY29udmVydENvbG9yPExh
YjxmbG9hdD4+KExDSEE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpsaWdodG5lc3MpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oKmNocm9tYSksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVk
SHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4KLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBl
cyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgYXJncykKIHsKICAgICBBU1NFUlQoYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1
ZUE5OFJnYiB8fCBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRGlzcGxheVAzIHx8IGFyZ3Mu
cGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVQcm9waG90b1JnYiB8fCBhcmdzLnBlZWsoKS5pZCgpID09
IENTU1ZhbHVlUmVjMjAyMCB8fCBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlU1JHQik7CiAg
ICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwpAQCAtOTY0LDExICs5ODIsMTEgQEAgc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cAogICAgICAgICBjaGFubmVsc1tpXSA9ICp2
YWx1ZTsKICAgICB9CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3Mp
OworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAo
IWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIENvbG9yVHlwZSB7IGNs
YW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzBdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5u
ZWxzWzFdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzJdLCAwLjAsIDEuMCks
ICphbHBoYSB9OworICAgIHJldHVybiBDb2xvclR5cGUgeyBjbGFtcFRvPGZsb2F0PihjaGFubmVs
c1swXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1sxXSwgMC4wLCAxLjApLCBj
bGFtcFRvPGZsb2F0PihjaGFubmVsc1syXSwgMC4wLCAxLjApLCBzdGF0aWNfY2FzdDxmbG9hdD4o
KmFscGhhKSB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQpAQCAtOTc4LDI3ICs5OTYsMjcgQEAg
c3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvckxhYlBhcgogCiAgICAgZG91YmxlIGNo
YW5uZWxzWzNdID0geyAwLCAwLCAwIH07CiAgICAgWyZdIHsKLSAgICAgICAgYXV0byBsaWdodG5l
c3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0
byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKICAgICAgICAgaWYgKCFsaWdo
dG5lc3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoYW5uZWxzWzBdID0gKmxpZ2h0
bmVzczsKIAotICAgICAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFs
dWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdz
KTsKICAgICAgICAgaWYgKCFhVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNo
YW5uZWxzWzFdID0gKmFWYWx1ZTsKIAotICAgICAgICBhdXRvIGJWYWx1ZSA9IGNvbnN1bWVOdW1i
ZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8gYlZhbHVlID0gY29uc3Vt
ZU51bWJlclJhdyhhcmdzKTsKICAgICAgICAgaWYgKCFiVmFsdWUpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGNoYW5uZWxzWzJdID0gKmJWYWx1ZTsKICAgICB9KCk7CiAKLSAgICBhdXRv
IGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3MpOworICAgIGF1dG8gYWxwaGEgPSBjb25z
dW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5l
bHNbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMV0pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY2hhbm5lbHNbMl0pLCAqYWxwaGEgfTsKKyAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRp
Y19jYXN0PGZsb2F0PihjaGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sx
XSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0Pigq
YWxwaGEpIH07CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JYWVpQYXJh
bWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MpCkBAIC0xMDA4LDI3ICsxMDI2LDI3IEBA
IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JYWVpQYXIKIAogICAgIGRvdWJsZSBj
aGFubmVsc1szXSA9IHsgMCwgMCwgMCB9OwogICAgIFsmXSB7Ci0gICAgICAgIGF1dG8geCA9IGNv
bnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8geCA9IGNv
bnN1bWVOdW1iZXJSYXcoYXJncyk7CiAgICAgICAgIGlmICgheCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgY2hhbm5lbHNbMF0gPSAqeDsKIAotICAgICAgICBhdXRvIHkgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRvIHkgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MpOwogICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNoYW5uZWxzWzFdID0gKnk7CiAKLSAgICAgICAgYXV0byB6ID0gY29uc3VtZU51bWJl
clJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byB6ID0gY29uc3VtZU51bWJl
clJhdyhhcmdzKTsKICAgICAgICAgaWYgKCF6KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBjaGFubmVsc1syXSA9ICp6OwogICAgIH0oKTsKIAotICAgIGF1dG8gYWxwaGEgPSBwYXJzZU9w
dGlvbmFsQWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhh
KGFyZ3MpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1
cm4gWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFu
bmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZs
b2F0PihjaGFubmVsc1syXSksICphbHBoYSB9OworICAgIHJldHVybiBYWVpBPGZsb2F0LCBXaGl0
ZVBvaW50OjpENTA+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzBdKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzJdKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29s
b3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC0xMTEx
LDcgKzExMjksNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4CiAg
ICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24o
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkK
K3N0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSBjb2xvclJhbmdlID0gcmFuZ2U7CiAgICAgQ1NTVmFsdWVJRCBmdW5jdGlvbklkID0g
cmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKTsKQEAgLTExMTksMjAgKzExMzcsMjAgQEAgc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZQogICAgIHN3aXRjaCAoZnVuY3Rpb25J
ZCkgewogICAgIGNhc2UgQ1NTVmFsdWVSZ2I6CiAgICAgY2FzZSBDU1NWYWx1ZVJnYmE6Ci0gICAg
ICAgIGNvbG9yID0gcGFyc2VSR0JQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UpOworICAgICAgICBjb2xv
ciA9IHBhcnNlUkdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDU1NWYWx1ZUhzbDoKICAgICBjYXNlIENTU1ZhbHVlSHNsYToKLSAgICAg
ICAgY29sb3IgPSBwYXJzZUhTTFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY3NzUGFyc2VyTW9kZSk7
CisgICAgICAgIGNvbG9yID0gcGFyc2VIU0xQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNvbnRleHQp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlSHdiOgotICAgICAgICBjb2xvciA9
IHBhcnNlSFdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAg
Y29sb3IgPSBwYXJzZUhXQlBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY29udGV4dCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVMYWI6Ci0gICAgICAgIGNvbG9yID0gcGFyc2VMYWJQ
YXJhbWV0ZXJzKGNvbG9yUmFuZ2UpOworICAgICAgICBjb2xvciA9IHBhcnNlTGFiUGFyYW1ldGVy
cyhjb2xvclJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NWYWx1
ZUxjaDoKLSAgICAgICAgY29sb3IgPSBwYXJzZUxDSFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY3Nz
UGFyc2VyTW9kZSk7CisgICAgICAgIGNvbG9yID0gcGFyc2VMQ0hQYXJhbWV0ZXJzKGNvbG9yUmFu
Z2UsIGNvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlQ29sb3I6CiAg
ICAgICAgIGNvbG9yID0gcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyhjb2xvclJhbmdlKTsK
QEAgLTExNDUsNyArMTE2Myw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24oQ1NT
UGFyc2UKICAgICByZXR1cm4gY29sb3I7CiB9CiAKLUNvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNh
ZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9k
ZSkKK0NvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ29sb3IgcmVzdWx0
OwogICAgIGF1dG8ga2V5d29yZCA9IHJhbmdlLnBlZWsoKS5pZCgpOwpAQCAtMTE1NCw3ICsxMTcy
LDcgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUbwogICAgICAgICAv
LyAgICAgICAgRm9yIG5vdywgd2UgZGV0ZWN0IHRoZSBzeXN0ZW0gY29sb3IsIGJ1dCB0aGVuIGlu
dGVudGlvbmFsbHkgZmFpbCBwYXJzaW5nLgogICAgICAgICBpZiAoU3R5bGVDb2xvcjo6aXNTeXN0
ZW1Db2xvcihrZXl3b3JkKSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGlmICgh
aXNWYWx1ZUFsbG93ZWRJbk1vZGUoa2V5d29yZCwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAgIGlm
ICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUoa2V5d29yZCwgY29udGV4dC5tb2RlKSkKICAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIHJlc3VsdCA9IFN0eWxlQ29sb3I6OmNvbG9yRnJvbUtl
eXdvcmQoa2V5d29yZCwgeyB9KTsKICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKTsKQEAgLTExNjMsNyArMTE4MSw3IEBAIENvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNh
ZmUoQ1NTUGFyc2VyVG8KICAgICBpZiAoYXV0byBwYXJzZWRDb2xvciA9IHBhcnNlSGV4Q29sb3Io
cmFuZ2UsIGZhbHNlKSkKICAgICAgICAgcmVzdWx0ID0gKnBhcnNlZENvbG9yOwogICAgIGVsc2UK
LSAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjc3NQYXJzZXJNb2Rl
KTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjb250ZXh0KTsK
IAogICAgIGlmICghcmFuZ2UuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTExNzEs
MTEgKzExODksMTEgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUbwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmIGNvbnRleHQsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQogewogICAgIGF1dG8g
a2V5d29yZCA9IHJhbmdlLnBlZWsoKS5pZCgpOwogICAgIGlmIChTdHlsZUNvbG9yOjppc0NvbG9y
S2V5d29yZChrZXl3b3JkKSkgewotICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2RlKGtl
eXdvcmQsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2Rl
KGtleXdvcmQsIGNvbnRleHQubW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAgICAgfQpAQCAtMTE4Myw3ICsxMjAx
LDcgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3IoQwogICAgIGlmIChh
dXRvIHBhcnNlZENvbG9yID0gcGFyc2VIZXhDb2xvcihyYW5nZSwgYWNjZXB0UXVpcmt5Q29sb3Jz
KSkKICAgICAgICAgY29sb3IgPSAqcGFyc2VkQ29sb3I7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNv
bG9yID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAg
Y29sb3IgPSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBpZiAo
IWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAg
LTE0MTMsMTQgKzE0MzEsMTQgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZQogfQogCiAvLyBVc2VkIHRvIHBhcnNlIGNvbG9ycyBmb3IgLXdlYmtpdC1ncmFkaWVudCgu
Li4pLgotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRH
cmFkaWVudFN0b3BDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZXJNb2Rl
IGNzc1BhcnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
RGVwcmVjYXRlZEdyYWRpZW50U3RvcENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGFyZ3MucGVlaygpLmlk
KCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiBjb25zdW1lQ29sb3IoYXJncywgY3NzUGFyc2VyTW9kZSk7CisgICAgcmV0dXJuIGNv
bnN1bWVDb2xvcihhcmdzLCBjb250ZXh0KTsKIH0KIAotc3RhdGljIGJvb2wgY29uc3VtZURlcHJl
Y2F0ZWRHcmFkaWVudENvbG9yU3RvcChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTR3Jh
ZGllbnRDb2xvclN0b3AmIHN0b3AsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRp
YyBib29sIGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0KQogewogICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVrKCkuZnVu
Y3Rpb25JZCgpOwogICAgIGlmIChpZCAhPSBDU1NWYWx1ZUZyb20gJiYgaWQgIT0gQ1NTVmFsdWVU
byAmJiBpZCAhPSBDU1NWYWx1ZUNvbG9yU3RvcCkKQEAgLTE0NDIsMTEgKzE0NjAsMTEgQEAgc3Rh
dGljIGJvb2wgY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbAogICAgIH0KIAogICAgIHN0b3Au
cG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBvc2l0aW9u
LCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgc3RvcC5jb2xvciA9IGNvbnN1bWVEZXBy
ZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJncywgY3NzUGFyc2VyTW9kZSk7CisgICAgc3RvcC5j
b2xvciA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJncywgY29udGV4dCk7
CiAgICAgcmV0dXJuIHN0b3AuY29sb3IgJiYgYXJncy5hdEVuZCgpOwogfQogCi1zdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJn
cywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBSZWZQdHI8Q1NTR3Jh
ZGllbnRWYWx1ZT4gcmVzdWx0OwogICAgIENTU1ZhbHVlSUQgaWQgPSBhcmdzLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsKQEAgLTE0OTksNyArMTUxNyw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGUKIAogICAgIENTU0dyYWRpZW50Q29sb3JTdG9w
IHN0b3A7CiAgICAgd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykp
IHsKLSAgICAgICAgaWYgKCFjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKGFyZ3Ms
IHN0b3AsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICBpZiAoIWNvbnN1bWVEZXByZWNhdGVkR3Jh
ZGllbnRDb2xvclN0b3AoYXJncywgc3RvcCwgY29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgcmVzdWx0LT5hZGRTdG9wKFdURk1vdmUoc3RvcCkpOwogICAgIH0K
QEAgLTE1MDgsMjAgKzE1MjYsMjAgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURl
cHJlY2F0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNvbnN1bWVHcmFk
aWVudENvbG9yU3RvcHMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
bW9kZSwgQ1NTR3JhZGllbnRWYWx1ZSYgZ3JhZGllbnQpCitzdGF0aWMgYm9vbCBjb25zdW1lR3Jh
ZGllbnRDb2xvclN0b3BzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0LCBDU1NHcmFkaWVudFZhbHVlJiBncmFkaWVudCkKIHsKICAgICBi
b29sIHN1cHBvcnRzQ29sb3JIaW50cyA9IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0xp
bmVhckdyYWRpZW50IHx8IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU1JhZGlhbEdyYWRp
ZW50IHx8IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0NvbmljR3JhZGllbnQ7CiAgICAg
CiAgICAgYXV0byBjb25zdW1lU3RvcFBvc2l0aW9uID0gWyZdIHsKICAgICAgICAgcmV0dXJuIGdy
YWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0NvbmljR3JhZGllbnQKLSAgICAgICAgICAgID8g
Y29uc3VtZUFuZ2xlT3JQZXJjZW50KHJhbmdlLCBtb2RlLCBWYWx1ZVJhbmdlQWxsLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykKLSAgICAgICAgICAgIDog
Y29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgbW9kZSwgVmFsdWVSYW5nZUFsbCk7CisgICAg
ICAgICAgICA/IGNvbnN1bWVBbmdsZU9yUGVyY2VudChyYW5nZSwgY29udGV4dC5tb2RlLCBWYWx1
ZVJhbmdlQWxsLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxv
dykKKyAgICAgICAgICAgIDogY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgY29udGV4dC5t
b2RlLCBWYWx1ZVJhbmdlQWxsKTsKICAgICB9OwogCiAgICAgLy8gVGhlIGZpcnN0IGNvbG9yIHN0
b3AgY2Fubm90IGJlIGEgY29sb3IgaGludC4KICAgICBib29sIHByZXZpb3VzU3RvcFdhc0NvbG9y
SGludCA9IHRydWU7CiAgICAgZG8gewotICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9w
IHsgY29uc3VtZUNvbG9yKHJhbmdlLCBtb2RlKSwgY29uc3VtZVN0b3BQb3NpdGlvbigpLCB7IH0g
fTsKKyAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcCB7IGNvbnN1bWVDb2xvcihyYW5n
ZSwgY29udGV4dCksIGNvbnN1bWVTdG9wUG9zaXRpb24oKSwgeyB9IH07CiAgICAgICAgIGlmICgh
c3RvcC5jb2xvciAmJiAhc3RvcC5wb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMTU1MiwxMSArMTU3MCwxMSBAQCBzdGF0aWMgYm9vbCBjb25zdW1lR3JhZGllbnRDb2xv
clN0b3BzKENTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJn
cywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRp
bmcpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRp
ZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNv
bnRleHQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKIHsKICAgICBhdXRvIHJlc3VsdCA9
IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVkUmFk
aWFsR3JhZGllbnQpOwogCi0gICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZU9uZU9y
VHdvVmFsdWVkUG9zaXRpb25Db29yZGluYXRlcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQpOworICAgIGF1dG8gY2VudGVyQ29vcmRpbmF0ZSA9IGNvbnN1bWVPbmVP
clR3b1ZhbHVlZFBvc2l0aW9uQ29vcmRpbmF0ZXMoYXJncywgY29udGV4dC5tb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQpOwogICAgIGlmIChjZW50ZXJDb29yZGluYXRlICYmICFjb25zdW1lQ29t
bWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApA
QCAtMTU2NywxMCArMTU4NSwxMCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVw
cmVjYXRlCiAKICAgICAvLyBPciwgdHdvIGxlbmd0aHMgb3IgcGVyY2VudGFnZXMKICAgICBpZiAo
IXNoYXBlICYmICFzaXplS2V5d29yZCkgewotICAgICAgICBhdXRvIGhvcml6b250YWxTaXplID0g
Y29uc3VtZUxlbmd0aE9yUGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9u
TmVnYXRpdmUpOworICAgICAgICBhdXRvIGhvcml6b250YWxTaXplID0gY29uc3VtZUxlbmd0aE9y
UGVyY2VudChhcmdzLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CiAgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwogICAgICAgICBpZiAo
aG9yaXpvbnRhbFNpemUpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNvbnN1bWVMZW5n
dGhPclBlcmNlbnQoYXJncywgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsK
KyAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYXJncywg
Y29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwogICAgICAgICAgICAgaWYgKCF2
ZXJ0aWNhbFNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAg
ICBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwpAQCAtMTU4MSw3ICsxNTk5
LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZQogICAgICAgICBj
b25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwogICAgIH0KIAotICAgIGlmICgh
Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCByZXN1bHQpKQor
ICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0LCByZXN1bHQp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChjZW50ZXJDb29yZGluYXRlKSB7
CkBAIC0xNTk2LDcgKzE2MTQsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVw
cmVjYXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNl
ck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQorc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENTU0dyYWRpZW50UmVw
ZWF0IHJlcGVhdGluZykKIHsKICAgICBSZWZQdHI8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4gcmVz
dWx0ID0gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUmFkaWFs
R3JhZGllbnQpOwogCkBAIC0xNjI0LDEzICsxNjQyLDEzIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVSYWRpYWxHcmEKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gY2VudGVyID0gY29uc3VtZUxl
bmd0aE9yUGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUp
OworICAgICAgICAgICAgYXV0byBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KGFyZ3Ms
IGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgICAgIGlmICgh
Y2VudGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGhvcml6b250
YWxTaXplKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaG9y
aXpvbnRhbFNpemUgPSBjZW50ZXI7Ci0gICAgICAgICAgICBjZW50ZXIgPSBjb25zdW1lTGVuZ3Ro
T3JQZXJjZW50KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7Cisg
ICAgICAgICAgICBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KGFyZ3MsIGNvbnRleHQu
bW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgICAgIGlmIChjZW50ZXIpIHsK
ICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjZW50ZXI7CiAgICAgICAgICAgICAgICAg
KytpOwpAQCAtMTY1OSw3ICsxNjc3LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZVJhZGlhbEdyYQogICAgIGlmIChhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlQXQpIHsKICAg
ICAgICAgYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICAKLSAgICAg
ICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoYXJn
cywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBQb3NpdGlvblN5bnRheDo6
UG9zaXRpb24pOworICAgICAgICBhdXRvIGNlbnRlckNvb3JkaW5hdGUgPSBjb25zdW1lUG9zaXRp
b25Db29yZGluYXRlcyhhcmdzLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwg
UG9zaXRpb25TeW50YXg6OlBvc2l0aW9uKTsKICAgICAgICAgaWYgKCFjZW50ZXJDb29yZGluYXRl
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIApAQCAtMTY3Niw3ICsxNjk0
LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYQogCiAgICAgaWYg
KChzaGFwZSB8fCBzaXplS2V5d29yZCB8fCBob3Jpem9udGFsU2l6ZSB8fCBjZW50ZXJYIHx8IGNl
bnRlclkpICYmICFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoYXJn
cywgY3NzUGFyc2VyTW9kZSwgKnJlc3VsdCkpCisgICAgaWYgKCFjb25zdW1lR3JhZGllbnRDb2xv
clN0b3BzKGFyZ3MsIGNvbnRleHQsICpyZXN1bHQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIHJlc3VsdC0+c2V0U2hhcGUoV1RGTW92ZShzaGFwZSkpOwpAQCAtMTY4NywxMiArMTcw
NSwxMiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lUmFkaWFsR3JhCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVhckdy
YWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nLCBDU1NHcmFkaWVudFR5cGUgZ3JhZGll
bnRUeXBlKQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVhckdyYWRpZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQs
IENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZywgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlw
ZSkKIHsKICAgICBSZWZQdHI8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4gcmVzdWx0ID0gQ1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgZ3JhZGllbnRUeXBlKTsKIAogICAg
IGJvb2wgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
YW5nbGUgPSBjb25zdW1lQW5nbGUoYXJncywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6
Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpOworICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gYW5nbGUgPSBjb25zdW1lQW5nbGUoYXJncywgY29udGV4dC5tb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdyk7CiAgICAgaWYgKGFuZ2xl
KQogICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOwogICAg
IGVsc2UgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50IHx8IGNv
bnN1bWVJZGVudDxDU1NWYWx1ZVRvPihhcmdzKSkgewpAQCAtMTcxNSwxMiArMTczMywxMiBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lTGluZWFyR3JhCiAKICAgICBpZiAoZXhwZWN0
Q29tbWEgJiYgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdz
LCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0KSkKKyAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9y
U3RvcHMoYXJncywgY29udGV4dCwgKnJlc3VsdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVD
b25pY0dyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlckNvbnRleHQg
Y29udGV4dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQorc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gY29uc3VtZUNvbmljR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5n
KQogewogI2lmIEVOQUJMRShDU1NfQ09OSUNfR1JBRElFTlRTKQogICAgIFJlZlB0cjxDU1NDb25p
Y0dyYWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJl
cGVhdGluZyk7CkBAIC0xNzU0LDcgKzE3NzIsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ29uaWNHcmFkCiAKICAgICBpZiAoZXhwZWN0Q29tbWEgJiYgIWNvbnN1bWVDb21tYUlu
Y2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlm
ICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0Lm1vZGUsICpyZXN1bHQp
KQorICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0LCAqcmVz
dWx0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHJlc3VsdDsKICNlbHNl
CkBAIC0xNzY1LDE0ICsxNzgzLDE0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVD
b25pY0dyYWQKICNlbmRpZgogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZU9yTm9u
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KQor
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKHJhbmdl
LnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVu
dChyYW5nZSk7CiAgICAgcmV0dXJuIGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCk7CiB9CiAK
LXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDcm9zc0ZhZGUoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgYXJncywgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBib29sIHByZWZpeGVkKQorc3Rh
dGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNyb3NzRmFkZShDU1NQYXJzZXJUb2tlblJhbmdl
JiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBib29sIHByZWZpeGVkKQog
ewogICAgIGF1dG8gZnJvbUltYWdlVmFsdWUgPSBjb25zdW1lSW1hZ2VPck5vbmUoYXJncywgY29u
dGV4dCk7CiAgICAgaWYgKCFmcm9tSW1hZ2VWYWx1ZSB8fCAhY29uc3VtZUNvbW1hSW5jbHVkaW5n
V2hpdGVzcGFjZShhcmdzKSkKQEAgLTE4NDgsMzAgKzE4NjYsMzAgQEAgc3RhdGljIFJlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUN1c3RvbVBhaQogfQogI2VuZGlmCiAKLXN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZUdlbmVyYXRlZEltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVrKCku
ZnVuY3Rpb25JZCgpOwogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5ID0gcmFuZ2U7
CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlQ29w
eSk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiByZXN1bHQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVl
UmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChh
cmdzLCBjb250ZXh0Lm1vZGUsIE5vblJlcGVhdGluZyk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1
bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcpOwogICAgIGVsc2Ug
aWYgKGlkID09IENTU1ZhbHVlUmVwZWF0aW5nUmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJlc3Vs
dCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJlcGVhdGluZyk7
CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0LCBS
ZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0TGluZWFyR3JhZGll
bnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0
Lm1vZGUsIE5vblJlcGVhdGluZywgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCk7CisgICAgICAg
IHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRp
bmcsIENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1Zh
bHVlV2Via2l0UmVwZWF0aW5nTGluZWFyR3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1
bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJlcGVhdGluZywgQ1NTUHJlZml4
ZWRMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVu
dChhcmdzLCBjb250ZXh0LCBSZXBlYXRpbmcsIENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpOwog
ICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0aW5nTGluZWFyR3JhZGllbnQpCi0gICAg
ICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJl
cGVhdGluZywgQ1NTTGluZWFyR3JhZGllbnQpOworICAgICAgICByZXN1bHQgPSBjb25zdW1lTGlu
ZWFyR3JhZGllbnQoYXJncywgY29udGV4dCwgUmVwZWF0aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7
CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVMaW5lYXJHcmFkaWVudCkKLSAgICAgICAgcmVz
dWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgTm9uUmVwZWF0
aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJH
cmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcsIENTU0xpbmVhckdyYWRpZW50KTsK
ICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdEdyYWRpZW50KQotICAgICAgICByZXN1
bHQgPSBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSk7CisgICAg
ICAgIHJlc3VsdCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoYXJncywgY29udGV4dCk7CiAg
ICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRSYWRpYWxHcmFkaWVudCkKLSAgICAgICAg
cmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1v
ZGUsIE5vblJlcGVhdGluZyk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVEZXByZWNhdGVkUmFk
aWFsR3JhZGllbnQoYXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5nKTsKICAgICBlbHNlIGlmIChp
ZCA9PSBDU1NWYWx1ZVdlYmtpdFJlcGVhdGluZ1JhZGlhbEdyYWRpZW50KQotICAgICAgICByZXN1
bHQgPSBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwg
UmVwZWF0aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFk
aWVudChhcmdzLCBjb250ZXh0LCBSZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1Zh
bHVlQ29uaWNHcmFkaWVudCkKICAgICAgICAgcmVzdWx0ID0gY29uc3VtZUNvbmljR3JhZGllbnQo
YXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5nKTsKICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1
ZVJlcGVhdGluZ0NvbmljR3JhZGllbnQpCkBAIC0yMDE3LDcgKzIwMzUsNyBAQCBzdGF0aWMgUmVm
UHRyPENTU0Z1bmN0aW9uVmFsdWU+IGNvbnN1bWVGCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZWRWYWx1ZTsKIAogICAgIGlmIChmaWx0ZXJUeXBlID09IENTU1ZhbHVlRHJvcFNoYWRvdykKLSAg
ICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KGFyZ3MsIGNvbnRleHQubW9k
ZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lU2luZ2xlU2hh
ZG93KGFyZ3MsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlm
IChhcmdzLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWU7CkBAIC0yMDY0
LDcgKzIwODIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGaWx0ZXIoQ1NTUGFyc2VyCiAg
ICAgcmV0dXJuIGxpc3QucHRyKCk7CiB9CiAKLVJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3Vt
ZVNpbmdsZVNoYWRvdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBj
c3NQYXJzZXJNb2RlLCBib29sIGFsbG93SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpCitSZWZQdHI8
Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIGJvb2wgYWxsb3dJbnNldCwg
Ym9vbCBhbGxvd1NwcmVhZCkKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0eWxl
OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7CkBAIC0yMDg5LDcgKzIxMDcs
NyBAQCBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYXV0byBtYXliZUNvbG9y
ID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAgYXV0byBtYXli
ZUNvbG9yID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgaWYgKG1heWJl
Q29sb3IpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGp1c3QgcGFyc2VkIGEgY29sb3IgYnV0IGFs
cmVhZHkgaGFkIG9uZSwgdGhlIGdpdmVuIHRva2VuIHJhbmdlIGlzIG5vdCBhIHZhbGlkIDxzaGFk
b3c+LgogICAgICAgICAgICAgaWYgKGNvbG9yKQpAQCAtMjEwMywyMyArMjEyMSwyMyBAQCBSZWZQ
dHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgICAgICAgICAvLyBJZiB3
ZSd2ZSBhbHJlYWR5IHBhcnNlZCB0aGVzZSBsZW5ndGhzLCB0aGUgZ2l2ZW4gdmFsdWUgaXMgaW52
YWxpZCBhcyB0aGVyZSBjYW5ub3QgYmUgdHdvIGxlbmd0aHMgY29tcG9uZW50cyBpbiBhIHNpbmds
ZSA8c2hhZG93PiB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
Ci0gICAgICAgIGhvcml6b250YWxPZmZzZXQgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjc3NQYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgaG9yaXpvbnRhbE9mZnNldCA9IGNvbnN1
bWVMZW5ndGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAgIGlm
ICghaG9yaXpvbnRhbE9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB2ZXJ0aWNhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZh
bHVlUmFuZ2VBbGwpOworICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgocmFu
Z2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAgIGlmICghdmVydGljYWxP
ZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBjb25zdCBDU1NQ
YXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgICAgIC8vIFRoZSBleHBsaWNp
dCBjaGVjayBmb3IgY2FsYygpIGlzIHVuZm9ydHVuYXRlLiBUaGlzIGlzIGVuc3VyaW5nIHRoYXQg
d2Ugb25seSBmYWlsIHBhcnNpbmcgaWYgdGhlcmUgaXMgYSBsZW5ndGgsIGJ1dCBpdCBmYWlscyB0
aGUgcmFuZ2UgY2hlY2suCiAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9r
ZW4gfHwgdG9rZW4udHlwZSgpID09IE51bWJlclRva2VuIHx8ICh0b2tlbi50eXBlKCkgPT0gRnVu
Y3Rpb25Ub2tlbiAmJiBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKHRva2VuLmZ1bmN0aW9u
SWQoKSkpKSB7Ci0gICAgICAgICAgICBibHVyUmFkaXVzID0gY29uc3VtZUxlbmd0aChyYW5nZSwg
Y3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKKyAgICAgICAgICAgIGJsdXJS
YWRpdXMgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VOb25O
ZWdhdGl2ZSk7CiAgICAgICAgICAgICBpZiAoIWJsdXJSYWRpdXMpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYmx1clJhZGl1cyAmJiBh
bGxvd1NwcmVhZCkKLSAgICAgICAgICAgIHNwcmVhZERpc3RhbmNlID0gY29uc3VtZUxlbmd0aChy
YW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgICAgICBzcHJlYWRE
aXN0YW5jZSA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFs
bCk7CiAgICAgfQogICAgIAogICAgIC8vIEluIG9yZGVyIGZvciB0aGlzIHRvIGJlIGEgdmFsaWQg
PHNoYWRvdz4sIGF0IGxlYXN0IHRoZXNlIGxlbmd0aHMgbXVzdCBiZSBwcmVzZW50LgpAQCAtMjEy
OCw3ICsyMTQ2LDcgQEAgUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZAog
ICAgIHJldHVybiBDU1NTaGFkb3dWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaG9yaXpvbnRhbE9mZnNl
dCksIFdURk1vdmUodmVydGljYWxPZmZzZXQpLCBXVEZNb3ZlKGJsdXJSYWRpdXMpLCBXVEZNb3Zl
KHNwcmVhZERpc3RhbmNlKSwgV1RGTW92ZShzdHlsZSksIFdURk1vdmUoY29sb3IpKTsKIH0KIAot
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlckNvbnRleHQgY29udGV4dCwgT3B0aW9uU2V0PEFsbG93ZWRJbWFnZVR5cGU+IGFs
bG93ZWRJbWFnZVR5cGVzKQorUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIE9wdGlv
blNldDxBbGxvd2VkSW1hZ2VUeXBlPiBhbGxvd2VkSW1hZ2VUeXBlcykKIHsKICAgICBpZiAoKHJh
bmdlLnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pICYmIChhbGxvd2VkSW1hZ2VUeXBlcy5j
b250YWlucyhBbGxvd2VkSW1hZ2VUeXBlOjpSYXdTdHJpbmdBc1VSTCkpKSB7CiAgICAgICAgIGF1
dG8gdXJsU3RyaW5nVmlldyA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFs
dWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDggKzEwMiw4IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVN0cmluZygK
IFN0cmluZ1ZpZXcgY29uc3VtZVVybEFzU3RyaW5nVmlldyhDU1NQYXJzZXJUb2tlblJhbmdlJik7
CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVVcmwoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYpOwogCi1Db2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NQYXJzZXJNb2RlKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNvbG9y
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFjY2VwdFF1aXJreUNv
bG9ycyA9IGZhbHNlKTsKK0NvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMgPSBmYWxzZSk7CiAKIGVudW0gY2xhc3Mg
UG9zaXRpb25TeW50YXggewogICAgIFBvc2l0aW9uLCAvLyA8cG9zaXRpb24+CkBAIC0xMjYsOSAr
MTI2LDggQEAgZW51bSBjbGFzcyBBbGxvd2VkSW1hZ2VUeXBlIDogdWludDhfdCB7CiAgICAgR2Vu
ZXJhdGVkSW1hZ2UgPSAxIDw8IDMKIH07CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdl
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBPcHRpb25TZXQ8QWxsb3dl
ZEltYWdlVHlwZT4gPSB7IEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1h
Z2VUeXBlOjpJbWFnZVNldCwgQWxsb3dlZEltYWdlVHlwZTo6R2VuZXJhdGVkSW1hZ2UgfSk7Ci0K
LVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NQYXJzZXJDb250ZXh0KTsKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgT3B0aW9uU2V0PEFsbG93
ZWRJbWFnZVR5cGU+ID0geyBBbGxvd2VkSW1hZ2VUeXBlOjpVUkxGdW5jdGlvbiwgQWxsb3dlZElt
YWdlVHlwZTo6SW1hZ2VTZXQsIEFsbG93ZWRJbWFnZVR5cGU6OkdlbmVyYXRlZEltYWdlIH0pOwor
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIAogZW51bSBjbGFzcyBBbGxvd2VkRmlsdGVyRnVu
Y3Rpb25zIHsKICAgICBQaXhlbEZpbHRlcnMsCkBAIC0xMzYsNyArMTM1LDcgQEAgZW51bSBjbGFz
cyBBbGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsKIH07CiAKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZUZpbHRlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIEFs
bG93ZWRGaWx0ZXJGdW5jdGlvbnMpOwotUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2lu
Z2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFsbG93
SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpOworUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1l
U2luZ2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiwgYm9vbCBhbGxvd0luc2V0LCBib29sIGFsbG93U3ByZWFkKTsKIAogc3RydWN0IEZvbnRTdHls
ZVJhdyB7CiAgICAgQ1NTVmFsdWVJRCBzdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjAwLDcgKzYwMCw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJ
blIKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0
aGUgdW5kZXJsaW5lIGNvbG9yIHRvIHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEg
YnkgMzglLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBw
ZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBj
YW4gYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5saWdodG5lc3Mg
PSAwLjVmOworICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5saWdodG5lc3MgPSA1MC4wZjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEuYWxwaGEgKj0gMC4zOGY7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBrZWVwaW5nIGNvbG9yIGluIExDSEEgKGlmIHRoYXQgY2hhbmdlIGlzIG1hZGUpIG9yIGNvbnZl
cnRpbmcgYmFjayB0byB0aGUgaW5pdGlhbCB1bmRlcmx5aW5nIGNvbG9yIHR5cGUgdG8gYXZvaWQg
dW5uZWNlc3NhcmlseSBjbGFtcGluZyBjb2xvcnMgb3V0c2lkZSBvZiBzUkdCLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
Y3BwCShyZXZpc2lvbiAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw2IEBAIHN0
YXRpYyBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCBjYWxjdWxhdGUKICAgICBpZiAoaHVlID49IDM2
MC4wZikKICAgICAgICAgaHVlIC09IDM2MC4wZjsKIAotICAgIGh1ZSAvPSAzNjAuMGY7Ci0KICAg
ICByZXR1cm4geyBodWUsIG1pbiwgbWF4LCBjaHJvbWEgfTsKIH0KIApAQCAtNjksMTQgKzY3LDE0
IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0PiwKICAgICBhdXRvIFty
LCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKICAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFd
ID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsKIAotICAgIGZsb2F0IGxpZ2h0bmVzcyA9IDAuNWYg
KiAobWF4ICsgbWluKTsKKyAgICBmbG9hdCBsaWdodG5lc3MgPSAoMC41ZiAqIChtYXggKyBtaW4p
KSAqIDEwMC4wZjsKICAgICBmbG9hdCBzYXR1cmF0aW9uOwogICAgIGlmICghY2hyb21hKQogICAg
ICAgICBzYXR1cmF0aW9uID0gMDsKLSAgICBlbHNlIGlmIChsaWdodG5lc3MgPD0gMC41ZikKLSAg
ICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEgLyAobWF4ICsgbWluKSk7CisgICAgZWxzZSBpZiAo
bGlnaHRuZXNzIDw9IDUwLjBmKQorICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAvIChtYXgg
KyBtaW4pKSAqIDEwMC4wZjsKICAgICBlbHNlCi0gICAgICAgIHNhdHVyYXRpb24gPSAoY2hyb21h
IC8gKDIuMGYgLSAobWF4ICsgbWluKSkpOworICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAv
ICgyLjBmIC0gKG1heCArIG1pbikpKSAqIDEwMC4wZjsKIAogICAgIHJldHVybiB7IGh1ZSwgc2F0
dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9OwogfQpAQCAtODYsMTEgKzg0LDI2IEBAIFNSR0JB
PGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAvLyBodHRwczovL2RyYWZ0
cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IKICAgICBhdXRvIFtodWUsIHNhdHVy
YXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3I7CiAKLSAgICBpZiAoIXNhdHVyYXRpb24p
Ci0gICAgICAgIHJldHVybiB7IGxpZ2h0bmVzcywgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGFscGhh
IH07Ci0gICAgCi0gICAgZmxvYXQgdGVtcDIgPSBsaWdodG5lc3MgPD0gMC41ZiA/IGxpZ2h0bmVz
cyAqICgxLjBmICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRu
ZXNzICogc2F0dXJhdGlvbjsKLSAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBsaWdodG5lc3MgLSB0
ZW1wMjsKKyAgICBpZiAoIXNhdHVyYXRpb24pIHsKKyAgICAgICAgYXV0byBncmV5ID0gbGlnaHRu
ZXNzIC8gMTAwLjBmOworICAgICAgICByZXR1cm4geyBncmV5LCBncmV5LCBncmV5LCBhbHBoYSB9
OworICAgIH0KKworICAgIC8vIGh1ZVRvUkdCKCkgd2FudHMgaHVlIGluIHRoZSAwLTYgcmFuZ2Uu
CisgICAgYXV0byBub3JtYWxpemVkSHVlID0gKGh1ZSAvIDM2MC4wZikgKiA2LjBmOworICAgIGF1
dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IGxpZ2h0bmVzcyAvIDEwMC4wZjsKKyAgICBhdXRvIG5v
cm1hbGl6ZWRTYXR1cmF0aW9uID0gc2F0dXJhdGlvbiAvIDEwMC4wZjsKKworICAgIGF1dG8gaHVl
Rm9yUmVkID0gbm9ybWFsaXplZEh1ZSArIDIuMGY7CisgICAgYXV0byBodWVGb3JHcmVlbiA9IG5v
cm1hbGl6ZWRIdWU7CisgICAgYXV0byBodWVGb3JCbHVlID0gbm9ybWFsaXplZEh1ZSAtIDIuMGY7
CisgICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCisgICAgICAgIGh1ZUZvclJlZCAtPSA2LjBmOwor
ICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQorICAgICAgICBodWVGb3JCbHVlICs9IDYu
MGY7CisKKyAgICBmbG9hdCB0ZW1wMiA9IG5vcm1hbGl6ZWRMaWdodG5lc3MgPD0gMC41ZiA/IG5v
cm1hbGl6ZWRMaWdodG5lc3MgKiAoMS4wZiArIG5vcm1hbGl6ZWRTYXR1cmF0aW9uKSA6IG5vcm1h
bGl6ZWRMaWdodG5lc3MgKyBub3JtYWxpemVkU2F0dXJhdGlvbiAtIG5vcm1hbGl6ZWRMaWdodG5l
c3MgKiBub3JtYWxpemVkU2F0dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBub3Jt
YWxpemVkTGlnaHRuZXNzIC0gdGVtcDI7CiAgICAgCiAgICAgLy8gSHVlIGlzIGluIHRoZSByYW5n
ZSAwLTYsIG90aGVyIGFyZ3MgaW4gMC0xLgogICAgIGF1dG8gaHVlVG9SR0IgPSBbXShmbG9hdCB0
ZW1wMSwgZmxvYXQgdGVtcDIsIGZsb2F0IGh1ZSkgewpAQCAtMTAzLDE3ICsxMTYsNiBAQCBTUkdC
QTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0CiAgICAgICAgIHJldHVybiB0ZW1w
MTsKICAgICB9OwogCi0gICAgLy8gaHVlVG9SR0IoKSB3YW50cyBodWUgaW4gdGhlIDAtNiByYW5n
ZS4KLSAgICBodWUgKj0gNi4wZjsKLQotICAgIGF1dG8gaHVlRm9yUmVkID0gaHVlICsgMi4wZjsK
LSAgICBhdXRvIGh1ZUZvckdyZWVuID0gaHVlOwotICAgIGF1dG8gaHVlRm9yQmx1ZSA9IGh1ZSAt
IDIuMGY7Ci0gICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCi0gICAgICAgIGh1ZUZvclJlZCAtPSA2
LjBmOwotICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQotICAgICAgICBodWVGb3JCbHVl
ICs9IDYuMGY7Ci0KICAgICByZXR1cm4gewogICAgICAgICBodWVUb1JHQih0ZW1wMSwgdGVtcDIs
IGh1ZUZvclJlZCksCiAgICAgICAgIGh1ZVRvUkdCKHRlbXAxLCB0ZW1wMiwgaHVlRm9yR3JlZW4p
LApAQCAtMTI4LDggKzEzMCw4IEBAIEhXQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIV0JBPGZs
b2F0PiwKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI3Jn
Yi10by1od2IKICAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNM
SHVlKGNvbG9yKTsKLSAgICBhdXRvIHdoaXRlbmVzcyA9IG1pbjsKLSAgICBhdXRvIGJsYWNrbmVz
cyA9IDEuMGYgLSBtYXg7CisgICAgYXV0byB3aGl0ZW5lc3MgPSBtaW4gKiAxMDAuMGY7CisgICAg
YXV0byBibGFja25lc3MgPSAoMS4wZiAtIG1heCkgKiAxMDAuMGY7CiAgICAgCiAgICAgcmV0dXJu
IHsgaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgY29sb3IuYWxwaGEgfTsKIH0KQEAgLTEzOSw4
ICsxNDEsMjQgQEAgU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdAogICAg
IC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHdiLXRvLXJnYgogICAg
IGF1dG8gW2h1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGFscGhhXSA9IGNvbG9yOwogCi0gICAg
aWYgKHdoaXRlbmVzcyArIGJsYWNrbmVzcyA9PSAxLjBmKQotICAgICAgICByZXR1cm4geyB3aGl0
ZW5lc3MsIHdoaXRlbmVzcywgd2hpdGVuZXNzLCBhbHBoYSB9OworICAgIGlmICh3aGl0ZW5lc3Mg
KyBibGFja25lc3MgPT0gMTAwLjBmKSB7CisgICAgICAgIGF1dG8gZ3JleSA9IHdoaXRlbmVzcyAv
IDEwMC4wZjsKKyAgICAgICAgcmV0dXJuIHsgZ3JleSwgZ3JleSwgZ3JleSwgYWxwaGEgfTsKKyAg
ICB9CisKKyAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgorICAg
IGF1dG8gbm9ybWFsaXplZEh1ZSA9IChodWUgLyAzNjAuMGYpICogNi4wZjsKKworICAgIGF1dG8g
aHVlRm9yUmVkID0gbm9ybWFsaXplZEh1ZSArIDIuMGY7CisgICAgYXV0byBodWVGb3JHcmVlbiA9
IG5vcm1hbGl6ZWRIdWU7CisgICAgYXV0byBodWVGb3JCbHVlID0gbm9ybWFsaXplZEh1ZSAtIDIu
MGY7CisgICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCisgICAgICAgIGh1ZUZvclJlZCAtPSA2LjBm
OworICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQorICAgICAgICBodWVGb3JCbHVlICs9
IDYuMGY7CisKKyAgICBhdXRvIG5vcm1hbGl6ZWRXaGl0ZW5lc3MgPSB3aGl0ZW5lc3MgLyAxMDAu
MGY7CisgICAgYXV0byBub3JtYWxpemVkQmxhY2tuZXNzID0gYmxhY2tuZXNzIC8gMTAwLjBmOwog
CiAgICAgLy8gVGhpcyBpcyB0aGUgaHVlVG9SR0IgZnVuY3Rpb24gaW4gY29udmVydENvbG9yPFNS
R0JBPGZsb2F0Pj4oY29uc3QgSFNMQSYpIHdpdGggdGVtcDEgPT0gMAogICAgIC8vIGFuZCB0ZW1w
MiA9PSAxIHN0cmVuZ3RoIHJlZHVjZWQgdGhyb3VnaCBpdC4KQEAgLTE1NCwyNSArMTcyLDE0IEBA
IFNSR0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAgICAgcmV0dXJu
IDAuMGY7CiAgICAgfTsKIAotICAgIGF1dG8gYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MgPSBbJl0o
ZmxvYXQgY29tcG9uZW50KSB7Ci0gICAgICAgIHJldHVybiAoY29tcG9uZW50ICogKDEuMGYgLSBj
b2xvci53aGl0ZW5lc3MgLSBjb2xvci5ibGFja25lc3MpKSArIGNvbG9yLndoaXRlbmVzczsKKyAg
ICBhdXRvIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzID0gW10oZmxvYXQgY29tcG9uZW50LCBhdXRv
IHdoaXRlbmVzcywgYXV0byBibGFja25lc3MpIHsKKyAgICAgICAgcmV0dXJuIChjb21wb25lbnQg
KiAoMS4wZiAtIHdoaXRlbmVzcyAtIGJsYWNrbmVzcykpICsgd2hpdGVuZXNzOwogICAgIH07CiAK
LSAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgotICAgIGh1ZSAq
PSA2LjBmOwotCi0gICAgYXV0byBodWVGb3JSZWQgPSBodWUgKyAyLjBmOwotICAgIGF1dG8gaHVl
Rm9yR3JlZW4gPSBodWU7Ci0gICAgYXV0byBodWVGb3JCbHVlID0gaHVlIC0gMi4wZjsKLSAgICBp
ZiAoaHVlRm9yUmVkID4gNi4wZikKLSAgICAgICAgaHVlRm9yUmVkIC09IDYuMGY7Ci0gICAgZWxz
ZSBpZiAoaHVlRm9yQmx1ZSA8IDAuMGYpCi0gICAgICAgIGh1ZUZvckJsdWUgKz0gNi4wZjsKLQog
ICAgIHJldHVybiB7Ci0gICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1
ZUZvclJlZCkpLAotICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVG
b3JHcmVlbikpLAotICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVG
b3JCbHVlKSksCisgICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZv
clJlZCksIG5vcm1hbGl6ZWRXaGl0ZW5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3MpLAorICAgICAg
ICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JHcmVlbiksIG5vcm1hbGl6
ZWRXaGl0ZW5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3MpLAorICAgICAgICBhcHBseVdoaXRlbmVz
c0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JCbHVlKSwgbm9ybWFsaXplZFdoaXRlbmVzcywgbm9y
bWFsaXplZEJsYWNrbmVzcyksCiAgICAgICAgIGFscGhhCiAgICAgfTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAkocmV2aXNpb24g
MjcyODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IEV4
dGVuZGVkUkdCTW9kZWw8ZmxvYXQKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8ZmxvYXQ+
IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTxm
bG9hdD4sIDM+IHJhbmdlcyB7IHsKLSAgICAgICAgeyAwLCAxIH0sCi0gICAgICAgIHsgMCwgMSB9
LAotICAgICAgICB7IDAsIDEgfQorICAgICAgICB7IDAsIDM2MCB9LAorICAgICAgICB7IDAsIDEw
MCB9LAorICAgICAgICB7IDAsIDEwMCB9CiAgICAgfSB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEhXQk1v
ZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9u
ZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7Ci0gICAgICAgIHsgMCwgMSB9LAotICAgICAg
ICB7IDAsIDEgfSwKLSAgICAgICAgeyAwLCAxIH0KKyAgICAgICAgeyAwLCAzNjAgfSwKKyAgICAg
ICAgeyAwLCAxMDAgfSwKKyAgICAgICAgeyAwLCAxMDAgfQogICAgIH0gfTsKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNzI4MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIyLDcgKzE0MjIsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6ZGF0ZVBsYWNlaG9sZGVyVGV4dENv
CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHVzaW5nIExDSEE8ZmxvYXQ+IHJhdGhlciB0aGFuIEhT
TEE8ZmxvYXQ+IGZvciBiZXR0ZXIgcGVyY2VwdHVhbCByZXN1bHRzIGFuZCB0byBhdm9pZCBjbGFt
cGluZyB0byBzUkdCIGdhbXV0LCB3aGljaCBpcyB3aGF0IEhTTEEgZG9lcy4KICAgICBhdXRvIGhz
bGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKICAgICBpZiAo
dGV4dENvbG9yLmx1bWluYW5jZSgpIDwgYmFja2dyb3VuZENvbG9yLmx1bWluYW5jZSgpKQotICAg
ICAgICBoc2xhLmxpZ2h0bmVzcyArPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVz
dG1lbnRGYWN0b3IgKiAoMS4wZiAtIGhzbGEubGlnaHRuZXNzKTsKKyAgICAgICAgaHNsYS5saWdo
dG5lc3MgKz0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW50RmFjdG9yICog
KDEwMC4wZiAtIGhzbGEubGlnaHRuZXNzKTsKICAgICBlbHNlCiAgICAgICAgIGhzbGEubGlnaHRu
ZXNzICo9IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVudEZhY3RvcjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420267</attachid>
            <date>2021-02-14 20:11:54 -0800</date>
            <delta_ts>2021-02-15 10:32:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221881-20210214201153.patch</filename>
            <type>text/plain</type>
            <size>79375</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIxLTAyLTE0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVwYXJlIGZvciBhZGRpbmcgcmVs
YXRpdmUgY29sb3Igc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxODgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBleHBlcmltZW50YWwgcmVsYXRp
dmUgY29sb3Igc3VwcG9ydCBhIGxpdHRsZSBjbGVhbnVwCisgICAgICAgIGlzIGluIG9yZGVyLiBU
aGlzIGNoYW5nZToKKyAgICAgICAgCisgICAgICAgIC0gVGhyZWFkcyBhIENTU1BhcnNlckNvbnRl
eHQgdGhyb3VnaCB0aGUgY29sb3IgcGFyc2luZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBiZQorICAg
ICAgICAgIG5lZWRlZCB0byBjaGVjayBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdC4K
KyAgICAgICAgLSBEb2VzIGEgc21hbGwgY2xlYW51cCBvZiBDU1NQYXJzZXJDb250ZXh0LCBzb3J0
aW5nIGZlYXR1cmVzIGFuZCB1c2luZyB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICBsaXN0
IGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgLSBSZWZhY3RvcnMgc29tZSBvZiB0aGUgY29s
b3IgcGFyc2luZyBoZWxwZXJzIHRvIGV4dHJhY3QgbW9yZSBoZWxwZXJzLiBUaGVzZSBjbGFyaWZ5
CisgICAgICAgICAgdGhlIGNvZGUgYmV0dGVyIGFuZCB3aWxsIGJlIHNoYXJlZCBieSB0aGUgcmVs
YXRpdmUgcGFyc2Vycy4KKyAgICAgICAgLSBNb3ZlIG5vcm1hbGl6YXRpb24gb2YgY29tcG9uZW50
cyB0byBhZnRlciBwYXJzaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdvcmsKKyAgICAgICAgICBp
biB0aGUgY2FzZSBvZiBmYWlsdXJlIGFuZCBzZXBhcmF0ZSB0aGUgcGhhc2VzIGEgYml0IG1vcmUu
CisgICAgICAgIC0gUmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IFZhbHVlUmFuZ2VBbGwgcGFyYW1l
dGVycyB0aGF0IHdlcmUgYWxyZWFkeSB0aGUgZGVmYXVsdC4KKyAgICAgICAgLSBTd2l0Y2ggSFNM
QSBhbmQgSFdCQSB0byBzdG9wIHN0b3JpbmcgdGhlaXIgY29tcG9uZW50cyBpbiBhIDAtMSBub3Jt
YWxpemF0aW9uCisgICAgICAgICAgYW5kIGluc3RlYWQgdXNlIHZhbHVlcyB0aGF0IG1hdGNoIHRo
ZSBpbnB1dCwgMC0zNjAgZm9yIGh1ZSwgYW5kIDAtMTAwIGZvciB0aGUKKyAgICAgICAgICB0aGUg
cmVtYWluaW5nIHR3byBjb21wb25lbnRzLiBUaGlzIHNlZW1zIG1vcmUgbmF0dXJhbCwgYW5kIHdp
bGwgc2ltcGxpZnkKKyAgICAgICAgICBmdXR1cmUgY29sb3IgZnVuY3Rpb24gd29yayB0aGF0IGV4
cGVjdHMgdGhlIHZhbHVlcyBpbiB0aGlzIGZvcm0uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3Jr
ZXJTYWZlKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2hvdWxkRW5hYmxlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dEhhc2g6
Omhhc2gpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3VtZVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1l
Q2FyZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lT3V0bGluZUNvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQYWludFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdW1lQmFja2dyb3VuZENvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlcjo6Y29uc3VtZUJvcmRlcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpub3JtYWxpemVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6
ZVdoaXRlbmVzc0JsYWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OnBhcnNlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTENIUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZv
clJHQlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkR3JhZGllbnRDb2xvclN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGluZWFyR3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29uaWNHcmFkaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbWFnZU9y
Tm9uZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVDcm9zc0ZhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lRmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lU2luZ2xlU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VPcHRpb25hbEFscGhh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SW1hZ2UpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FsY3VsYXRlSFNMSHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj46
OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTxmbG9hdD4+Ojpjb252ZXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhXQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRl
eHRDb2xvciBjb25zdCk6CisKIDIwMjEtMDItMTQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBNb2JpbGVTYWZhcmkgY3Jhc2hlcyBhdCBXZWJDb3Jl
OiBXZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZG9FbnRlckZ1bGxzY3Jl
ZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9u
IDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIENvbG9yIENTU1BhcnNlcjo6cGFyc2VDb2xv
cldvcmtlclNhZmUoY28KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50
b2tlblJhbmdlKCkpOwogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdl
LCBIVE1MU3RhbmRhcmRNb2RlKTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdlLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkp
OwogfQogCiBDb2xvciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoU3RyaW5nVmlldyBzdHJp
bmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywzOSArNDcsNDYgQEAgQ1NT
UGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChDU1NQYQogewogfQogCi1DU1NQYXJzZXJD
b250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
VVJMJiBzaGVldEJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IGJhc2VVUkwo
c2hlZXRCYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogc2hlZXRCYXNlVVJM
KQotICAgICwgY2hhcnNldChjaGFyc2V0KQotICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01v
ZGUoKSA/IEhUTUxRdWlya3NNb2RlIDogSFRNTFN0YW5kYXJkTW9kZSkKLSAgICAsIGlzSFRNTERv
Y3VtZW50KGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKHNoZWV0QmFzZVVSTC5pc051bGwoKSB8fCBkb2N1bWVudC5zZWN1cml0eU9yaWdp
bigpLmNhblJlcXVlc3QoYmFzZVVSTCkpCi17Ci0gICAgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpOwotICAgIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3Ig
PSBkb2N1bWVudC5zZXR0aW5ncygpLnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVo
YXZpb3IoKTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHRleHRBdXRvc2l6aW5n
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0j
ZW5kaWYKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIGxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5sZWdhY3lP
dmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCgpOworc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxl
TGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7
CiAgICAgLy8gVGhlIGxlZ2FjeSAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2ggYmVo
YXZpb3IgbWF5IGhhdmUgYmVlbiBkaXNhYmxlZCB0aHJvdWdoIHRoZSB3ZWJzaXRlIHBvbGljeSwK
ICAgICAvLyBpbiB0aGF0IGNhc2Ugd2Ugd2FudCB0byBkaXNhYmxlIHRoZSBsZWdhY3kgYmVoYXZp
b3IgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBzZXR0aW5nIHNheXMuCiAgICAgaWYgKGF1dG8qIGxv
YWRlciA9IGRvY3VtZW50LmxvYWRlcigpKSB7CiAgICAgICAgIGlmIChsb2FkZXItPmxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3koKSA9PSBMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1Rv
dWNoUG9saWN5OjpEaXNhYmxlKQotICAgICAgICAgICAgbGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdU
b3VjaEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cisg
ICAgcmV0dXJuIGRvY3VtZW50LnNldHRpbmdzKCkubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQoKTsKK30KKyNlbmRpZgorCitDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250
ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBzaGVldEJhc2VVUkwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IGJhc2VVUkwgeyBzaGVldEJhc2VVUkwuaXNOdWxs
KCkgPyBkb2N1bWVudC5iYXNlVVJMKCkgOiBzaGVldEJhc2VVUkwgfQorICAgICwgY2hhcnNldCB7
IGNoYXJzZXQgfQorICAgICwgbW9kZSB7IGRvY3VtZW50LmluUXVpcmtzTW9kZSgpID8gSFRNTFF1
aXJrc01vZGUgOiBIVE1MU3RhbmRhcmRNb2RlIH0KKyAgICAsIGlzSFRNTERvY3VtZW50IHsgZG9j
dW1lbnQuaXNIVE1MRG9jdW1lbnQoKSB9CisgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgc2hlZXRCYXNlVVJMLmlzTnVsbCgpIHx8IGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuY2Fu
UmVxdWVzdChiYXNlVVJMKSB9CisgICAgLCB1c2VTeXN0ZW1BcHBlYXJhbmNlIHsgZG9jdW1lbnQu
cGFnZSgpID8gZG9jdW1lbnQucGFnZSgpLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCkgOiBmYWxzZSB9
CisgICAgLCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBkb2N1bWVudC5zZXR0aW5ncygpLmFzcGVjdFJh
dGlvRW5hYmxlZCgpIH0KKyAgICAsIGNvbG9yRmlsdGVyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRp
bmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCkgfQorICAgICwgY29uc3RhbnRQcm9wZXJ0aWVzRW5h
YmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpIH0K
KyAgICAsIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuZGVm
ZXJyZWRDU1NQYXJzZXJFbmFibGVkKCkgfQorICAgICwgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9R
dWlya3NNb2RlIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVp
cmtzTW9kZSgpIH0KKyAgICAsIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7
IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3BlcnRpZXNFbmFi
bGVkKCkgfQorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgLCBsZWdh
Y3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCB7IHNob3VsZEVuYWJsZUxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2goZG9jdW1lbnQpIH0KICNlbmRpZgotICAgIHNwcmluZ1RpbWluZ0Z1
bmN0aW9uRW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuc3ByaW5nVGltaW5nRnVuY3Rpb25F
bmFibGVkKCk7Ci0gICAgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCA9IGRvY3VtZW50LnNldHRp
bmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpOwotICAgIGNvbG9yRmlsdGVyRW5hYmxl
ZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCk7CisgICAgLCBvdmVy
c2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5vdmVyc2Nyb2xsQmVo
YXZpb3JFbmFibGVkKCkgfQorICAgICwgc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQu
c2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkKCkgfQorICAgICwgc3By
aW5nVGltaW5nRnVuY3Rpb25FbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5zcHJpbmdUaW1p
bmdGdW5jdGlvbkVuYWJsZWQoKSB9CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICAs
IHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXpp
bmdFbmFibGVkKCkgfQorI2VuZGlmCisgICAgLCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0
aGFuZEJlaGF2aW9yIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6
ZVNob3J0aGFuZEJlaGF2aW9yKCkgfQogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0g
ICAgYXR0YWNobWVudEVuYWJsZWQgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCgpOworICAgICwgYXR0YWNobWVudEVuYWJs
ZWQgeyBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRF
bGVtZW50RW5hYmxlZCgpIH0KICNlbmRpZgotICAgIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCA9
IGRvY3VtZW50LnNldHRpbmdzKCkuZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKCk7Ci0gICAgc2Ny
b2xsQmVoYXZpb3JFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhT
Y3JvbGxpbmdFbmFibGVkKCk7Ci0gICAgb3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9IGRvY3Vt
ZW50LnNldHRpbmdzKCkub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCgpOwotICAgIHVzZVN5c3Rl
bUFwcGVhcmFuY2UgPSBkb2N1bWVudC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCktPnVzZVN5c3Rl
bUFwcGVhcmFuY2UoKSA6IGZhbHNlOwotICAgIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVz
RW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3Bl
cnRpZXNFbmFibGVkKCk7Ci0gICAgYXNwZWN0UmF0aW9FbmFibGVkID0gZG9jdW1lbnQuc2V0dGlu
Z3MoKS5hc3BlY3RSYXRpb0VuYWJsZWQoKTsKK3sKIH0KIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCkBAIC04Nywy
OCArOTQsMzEgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIAogICAg
IHJldHVybiBhLmJhc2VVUkwgPT0gYi5iYXNlVVJMCiAgICAgICAgICYmIGEuY2hhcnNldCA9PSBi
LmNoYXJzZXQKICAgICAgICAgJiYgYS5tb2RlID09IGIubW9kZQorICAgICAgICAmJiBhLmVuY2xv
c2luZ1J1bGVUeXBlID09IGIuZW5jbG9zaW5nUnVsZVR5cGUKICAgICAgICAgJiYgYS5pc0hUTUxE
b2N1bWVudCA9PSBiLmlzSFRNTERvY3VtZW50Ci0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykK
LSAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0b3NpemluZ0Vu
YWJsZWQKLSNlbmRpZgorICAgICAgICAmJiBhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPT0g
Yi5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luCisgICAgICAgICYmIGEuaXNDb250ZW50T3BhcXVl
ID09IGIuaXNDb250ZW50T3BhcXVlCisgICAgICAgICYmIGEudXNlU3lzdGVtQXBwZWFyYW5jZSA9
PSBiLnVzZVN5c3RlbUFwcGVhcmFuY2UKKyAgICAgICAgJiYgYS5hc3BlY3RSYXRpb0VuYWJsZWQg
PT0gYi5hc3BlY3RSYXRpb0VuYWJsZWQKKyAgICAgICAgJiYgYS5jb2xvckZpbHRlckVuYWJsZWQg
PT0gYi5jb2xvckZpbHRlckVuYWJsZWQKKyAgICAgICAgJiYgYS5jb25zdGFudFByb3BlcnRpZXNF
bmFibGVkID09IGIuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZAorICAgICAgICAmJiBhLmRlZmVy
cmVkQ1NTUGFyc2VyRW5hYmxlZCA9PSBiLmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZAorICAgICAg
ICAmJiBhLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSA9PSBiLmVuZm9yY2VzQ1NT
TUlNRVR5cGVJbk5vUXVpcmtzTW9kZQorICAgICAgICAmJiBhLmluZGl2aWR1YWxUcmFuc2Zvcm1Q
cm9wZXJ0aWVzRW5hYmxlZCA9PSBiLmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxl
ZAogI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCiAgICAgICAgICYmIGEubGVn
YWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaEVuYWJsZWQgPT0gYi5sZWdhY3lPdmVyZmxvd1Njcm9s
bGluZ1RvdWNoRW5hYmxlZAogI2VuZGlmCi0gICAgICAgICYmIGEuZW5mb3JjZXNDU1NNSU1FVHlw
ZUluTm9RdWlya3NNb2RlID09IGIuZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlCi0g
ICAgICAgICYmIGEudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9PSBi
LnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IKKyAgICAgICAgJiYgYS5v
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkID09IGIub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZAor
ICAgICAgICAmJiBhLnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLnNjcm9sbEJlaGF2aW9yRW5h
YmxlZAogICAgICAgICAmJiBhLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9PSBiLnNwcmlu
Z1RpbWluZ0Z1bmN0aW9uRW5hYmxlZAotICAgICAgICAmJiBhLmNvbnN0YW50UHJvcGVydGllc0Vu
YWJsZWQgPT0gYi5jb25zdGFudFByb3BlcnRpZXNFbmFibGVkCi0gICAgICAgICYmIGEuY29sb3JG
aWx0ZXJFbmFibGVkID09IGIuY29sb3JGaWx0ZXJFbmFibGVkCisjaWYgRU5BQkxFKFRFWFRfQVVU
T1NJWklORykKKyAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0
b3NpemluZ0VuYWJsZWQKKyNlbmRpZgorICAgICAgICAmJiBhLnVzZUxlZ2FjeUJhY2tncm91bmRT
aXplU2hvcnRoYW5kQmVoYXZpb3IgPT0gYi51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFu
ZEJlaGF2aW9yCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICAgICAgJiYgYS5h
dHRhY2htZW50RW5hYmxlZCA9PSBiLmF0dGFjaG1lbnRFbmFibGVkCiAjZW5kaWYKLSAgICAgICAg
JiYgYS5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgPT0gYi5kZWZlcnJlZENTU1BhcnNlckVuYWJs
ZWQKLSAgICAgICAgJiYgYS5zY3JvbGxCZWhhdmlvckVuYWJsZWQgPT0gYi5zY3JvbGxCZWhhdmlv
ckVuYWJsZWQKLSAgICAgICAgJiYgYS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJs
ZWQgPT0gYi5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQKLSAgICAgICAgJiYg
YS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID09IGIuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bgotICAgICAgICAmJiBhLnVzZVN5c3RlbUFwcGVhcmFuY2UgPT0gYi51c2VTeXN0ZW1BcHBlYXJh
bmNlCi0gICAgICAgICYmIGEuYXNwZWN0UmF0aW9FbmFibGVkID09IGIuYXNwZWN0UmF0aW9FbmFi
bGVkCi0gICAgICAgICYmIGEub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLm92ZXJzY3Jv
bGxCZWhhdmlvckVuYWJsZWQ7CisgICAgOwogfQogCiBVUkwgQ1NTUGFyc2VyQ29udGV4dDo6Y29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00MSw3ICs0MSw2IEBAIGNsYXNzIERvY3VtZW50Owogc3RydWN0IENTU1BhcnNlckNvbnRl
eHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotCiAgICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFVSTCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmlu
ZygpKTsKIApAQCAtNTAsMzYgKzQ5LDM3IEBAIHB1YmxpYzoKICAgICBDU1NQYXJzZXJNb2RlIG1v
ZGUgeyBIVE1MU3RhbmRhcmRNb2RlIH07CiAgICAgT3B0aW9uYWw8U3R5bGVSdWxlVHlwZT4gZW5j
bG9zaW5nUnVsZVR5cGU7CiAgICAgYm9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07Ci0jaWYg
RU5BQkxFKFRFWFRfQVVUT1NJWklORykKLSAgICBib29sIHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7
IGZhbHNlIH07Ci0jZW5kaWYKKworICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gc3VwcG9y
dCBnZXRNYXRjaGVkQ1NTUnVsZXMuCisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IHsgZmFsc2UgfTsKKworICAgIGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKKyAgICBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAgLy8gU2V0dGluZ3MuCisg
ICAgYm9vbCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgY29sb3JGaWx0
ZXJFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIGNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQg
eyBmYWxzZSB9OworICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsK
KyAgICBib29sIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSB7IHRydWUgfTsKKyAg
ICBib29sIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNlIH07CiAj
aWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKICAgICBib29sIGxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgZW5m
b3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIHsgdHJ1ZSB9OwotICAgIGJvb2wgdXNlTGVn
YWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciB7IGZhbHNlIH07CisgICAgYm9vbCBv
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIHNjcm9sbEJlaGF2
aW9yRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBzcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJs
ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBjb2xvckZpbHRlckVuYWJsZWQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShU
RVhUX0FVVE9TSVpJTkcpCisgICAgYm9vbCB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgeyBmYWxzZSB9
OworI2VuZGlmCisgICAgYm9vbCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2
aW9yIHsgZmFsc2UgfTsKKworICAgIC8vIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuCiAjaWYgRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBib29sIGF0dGFjaG1lbnRFbmFibGVkIHsgZmFs
c2UgfTsKICNlbmRpZgotICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2Ug
fTsKLSAgICBib29sIHNjcm9sbEJlaGF2aW9yRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBp
bmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQgeyBmYWxzZSB9OwotCi0gICAgYm9v
bCBvdmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKLSAgICAKLSAgICAvLyBUaGlz
IGlzIG9ubHkgbmVlZGVkIHRvIHN1cHBvcnQgZ2V0TWF0Y2hlZENTU1J1bGVzLgotICAgIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgYm9vbCB1c2VT
eXN0ZW1BcHBlYXJhbmNlIHsgZmFsc2UgfTsKIAogICAgIFVSTCBjb21wbGV0ZVVSTChjb25zdCBT
dHJpbmcmIHVybCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQ29udGVudE9wYXF1ZSB7IGZhbHNlIH07
Ci0KLSAgICBib29sIGFzcGVjdFJhdGlvRW5hYmxlZCB7IGZhbHNlIH07CiB9OwogCiBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKQEAgLTkwLDYgKzkwLDggQEAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgcwogc3RydWN0IENTU1BhcnNlckNvbnRleHRIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBrZXkpCiAgICAgeworICAgICAgICAvLyBGSVhN
RTogQ29udmVydCB0aGlzIHRvIHVzZSBXVEY6Okhhc2hlci4KKwogICAgICAgICB1bnNpZ25lZCBo
YXNoID0gMDsKICAgICAgICAgaWYgKCFrZXkuYmFzZVVSTC5pc051bGwoKSkKICAgICAgICAgICAg
IGhhc2ggXj0gV1RGOjpVUkxIYXNoOjpoYXNoKGtleS5iYXNlVVJMKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAy
NzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyNiwxNSArMTcyNiwxNSBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lWkluZGV4KENTCiAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdl
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNoYWRvdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBib29sIGlzQm94
U2hhZG93UHJvcGVydHkpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU2hhZG93KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
LCBib29sIGlzQm94U2hhZG93UHJvcGVydHkpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgp
ID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAK
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZG8gewotICAgICAgICBpZiAoUmVmUHRyPENT
U1NoYWRvd1ZhbHVlPiBzaGFkb3dWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3cocmFuZ2UsIGNz
c1BhcnNlck1vZGUsIGlzQm94U2hhZG93UHJvcGVydHksIGlzQm94U2hhZG93UHJvcGVydHkpKQot
ICAgICAgICAgICAgc2hhZG93VmFsdWVMaXN0LT5hcHBlbmQoKnNoYWRvd1ZhbHVlKTsKKyAgICAg
ICAgaWYgKGF1dG8gc2hhZG93VmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KHJhbmdlLCBjb250
ZXh0LCBpc0JveFNoYWRvd1Byb3BlcnR5LCBpc0JveFNoYWRvd1Byb3BlcnR5KSkKKyAgICAgICAg
ICAgIHNoYWRvd1ZhbHVlTGlzdC0+YXBwZW5kKHNoYWRvd1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IHdoaWxl
IChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CkBAIC0xODEzLDE5ICsx
ODEzLDE5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVUZXh0RW1waGEKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUNhcmV0Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVD
YXJldENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIHJldHVybiBjb25z
dW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBjb25zdW1lQ29sb3Io
cmFuZ2UsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0
bGluZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0bGluZUNvbG9yKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0
KQogewogICAgIC8vIEFsbG93IHRoZSBzcGVjaWFsIGZvY3VzIGNvbG9yIGV2ZW4gaW4gSFRNTCBT
dGFuZGFyZCBwYXJzaW5nIG1vZGUuCiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1Zh
bHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFu
Z2UpOwotICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAg
IHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogfQogCiBzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGluZVdpZHRoKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MpCkBAIC0yMjI4LDcgKzIyMjgsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lCiAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGlvbkxvbmdoYW5kPENTU1ZhbHVlVG9w
LCBDU1NWYWx1ZUJvdHRvbT4ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOwogfQogCi1zdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lUGFpbnRTdHJva2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVQYWludFN0cm9rZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0g
Q1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKQEAgLTIy
MzgsNyArMjIzOCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8K
ICAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUp
OworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQp
OwogICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAg
ICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHVybC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTIyNDcs
NyArMjI0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8KICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gdXJsOwogICAgIH0KLSAgICByZXR1cm4gY29uc3VtZUNv
bG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yKHJhbmdl
LCBjb250ZXh0KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdseXBoT3Jp
ZW50YXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKQEAgLTMyNTgsNyArMzI1OCw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVCYWNrZ3JvdW4KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1NpemU6CiAgICAgICAgIHJldHVybiBjb25zdW1lQmFja2dyb3VuZFNpemUocHJvcGVydHks
IHJhbmdlLCBjb250ZXh0Lm1vZGUpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQubW9kZSk7Cisg
ICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH07CkBAIC00MjQxLDcgKzQyNDEsNyBAQCBSZWZQdHI8Q1NT
VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93
czoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGl2ZUludGVnZXIobV9yYW5nZSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3I6Ci0gICAgICAgIHJldHVybiBjb25z
dW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICByZXR1cm4gY29uc3Vt
ZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uU2tpcDoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVUZXh0RGVjb3JhdGlvblNraXAobV9y
YW5nZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aDoKQEAgLTQy
NjEsMTIgKzQyNjEsMTIgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFy
cwogICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZENvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlM
aWdodGluZ0NvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxlQ29sb3I6Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAg
ICByZXR1cm4gY29uc3VtZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNhcmV0Q29sb3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvcihtX3Jh
bmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvciht
X3JhbmdlLCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICByZXR1cm4gY29uc3VtZUNvbG9y
KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBpblF1aXJrc01vZGUoKSk7CisgICAgICAgIHJldHVy
biBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0LCBpblF1aXJrc01vZGUoKSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklubGluZVN0YXJ0V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlcklubGluZUVuZFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCbG9j
a1N0YXJ0V2lkdGg6CkBAIC00Mjc4LDcgKzQyNzgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1By
b3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOiB7
CiAgICAgICAgIGJvb2wgYWxsb3dRdWlya3lDb2xvcnMgPSBpblF1aXJrc01vZGUoKQogICAgICAg
ICAgICAgJiYgKGN1cnJlbnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkIHx8IGN1cnJl
bnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlCb3JkZXJDb2xvcik7Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIGFsbG93UXVpcmt5Q29sb3JzKTsK
KyAgICAgICAgcmV0dXJuIGNvbnN1bWVDb2xvcihtX3JhbmdlLCBtX2NvbnRleHQsIGFsbG93UXVp
cmt5Q29sb3JzKTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRo
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6CkBAIC00Mjk0LDcgKzQyOTQs
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NTMi4x
LCBiYWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKICAgICBjYXNlIENTU1Byb3BlcnR5Qm94
U2hhZG93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6Ci0gICAgICAgIHJl
dHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eUJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNo
YWRvdyk7CisgICAgICAgIHJldHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dCwg
cHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlXZWJraXRCb3hTaGFkb3cpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CiAjaWYgRU5B
QkxFKEZJTFRFUlNfTEVWRUxfMikKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXI6CkBAIC00MzQyLDcgKzQzNDIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5
UGFyc2VyOjpwYXJzCiAgICAgICAgIHJldHVybiBjb25zdW1lUm90YXRlKG1fcmFuZ2UsIG1fY29u
dGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICBjYXNlIENTU1Byb3Bl
cnR5U3Ryb2tlOgotICAgICAgICByZXR1cm4gY29uc3VtZVBhaW50U3Ryb2tlKG1fcmFuZ2UsIG1f
Y29udGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQYWludFN0cm9rZShtX3Jhbmdl
LCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uVmVydGlj
YWw6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgogICAg
ICAgICByZXR1cm4gY29uc3VtZUdseXBoT3JpZW50YXRpb24obV9yYW5nZSwgbV9jb250ZXh0Lm1v
ZGUsIHByb3BlcnR5KTsKQEAgLTUwOTMsNyArNTA5Myw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJz
ZXI6OmNvbnN1bWVCb3JkZXIoUmUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVDb2xv
cihtX3JhbmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVD
b2xvcihtX3JhbmdlLCBtX2NvbnRleHQpOwogICAgICAgICAgICAgaWYgKGNvbG9yKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwyNjggKzY5MCwyODYgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVXJsKENTUwogICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHVybC50b1N0cmluZygpLCBDU1NVbml0VHlwZTo6
Q1NTX1VSSSk7CiB9CiAKLXN0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSB2
YWx1ZSwgYm9vbCBpc1BlcmNlbnRhZ2UpCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1l
T3B0aW9uYWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoaXNQ
ZXJjZW50YWdlKQorICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5n
ZSkpCisgICAgICAgIHJldHVybiAxLjA7CisKKyAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9
IGNvbnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcocmFuZ2UpKQorICAgICAgICBy
ZXR1cm4gY2xhbXBUbzxkb3VibGU+KCphbHBoYVBhcmFtZXRlciwgMC4wLCAxLjApOworCisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZUh1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
Y29udGV4dCkKK3sKKyAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwg
Y29udGV4dC5tb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpG
b3JiaWQpKQorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVz
KGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOworCisgICAgaWYgKGF1dG8gbnVtYmVyID0gY29u
c3VtZU51bWJlclJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiAqbnVtYmVyOworCisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIGRvdWJsZSBub3JtYWxpemVIdWUoZG91Ymxl
IGh1ZSkKK3sKKyAgICByZXR1cm4gc3RkOjpmbW9kKHN0ZDo6Zm1vZChodWUsIDM2MC4wKSArIDM2
MC4wLCAzNjAuMCk7Cit9CisKK2VudW0gY2xhc3MgUkdCQ29tcG9uZW50VHlwZSB7CisgICAgTnVt
YmVyLAorICAgIFBlcmNlbnRhZ2UKK307CisKK3N0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9u
ZW50KGRvdWJsZSB2YWx1ZSwgUkdCQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlKQoreworICAg
IGlmIChjb21wb25lbnRUeXBlID09IFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2UpCiAgICAg
ICAgIHZhbHVlID0gdmFsdWUgLyAxMDAuMCAqIDI1NS4wOwogCiAgICAgcmV0dXJuIGNvbnZlcnRQ
cmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOwogfQogCi1zdGF0aWMgQ29sb3Ig
cGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorZW51bSBjbGFz
cyBSR0JPckhTTFNlcGFyYXRvclN5bnRheCB7CisgICAgQ29tbWFzLAorICAgIFdoaXRlc3BhY2VT
bGFzaAorfTsKKworc3RhdGljIGJvb2wgY29uc3VtZVJHQk9ySFNMU2VwYXJhdG9yKENTU1BhcnNl
clRva2VuUmFuZ2UmIGFyZ3MsIFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4IHN5bnRheCkKK3sKKyAg
ICBpZiAoc3ludGF4ID09IFJHQk9ySFNMU2VwYXJhdG9yU3ludGF4OjpDb21tYXMpCisgICAgICAg
IHJldHVybiBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjb25zdW1lUkdCT3JIU0xBbHBoYVNlcGFyYXRvcihD
U1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBSR0JPckhTTFNlcGFyYXRvclN5bnRheCBzeW50YXgp
Cit7CisgICAgaWYgKHN5bnRheCA9PSBSR0JPckhTTFNlcGFyYXRvclN5bnRheDo6Q29tbWFzKQor
ICAgICAgICByZXR1cm4gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKKyAg
ICByZXR1cm4gY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKK30KKworc3Rh
dGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVJHQk9ySFNMT3B0aW9uYWxBbHBoYShDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzLCBSR0JPckhTTFNlcGFyYXRvclN5bnRheCBzeW50YXgpCit7Cisg
ICAgaWYgKCFjb25zdW1lUkdCT3JIU0xBbHBoYVNlcGFyYXRvcihhcmdzLCBzeW50YXgpKQorICAg
ICAgICByZXR1cm4gMS4wOworCisgICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1l
TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpKQorICAgICAgICByZXR1cm4gKmFs
cGhhUGFyYW1ldGVyOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIENv
bG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklk
KCkgPT0gQ1NTVmFsdWVSZ2IgfHwgcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1
ZVJnYmEpOwogICAgIGF1dG8gYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKLSAgICBi
b29sIGlzUGVyY2VudGFnZSA9IGZhbHNlOwotICAgIGRvdWJsZSBjb2xvclBhcmFtZXRlcjsKLSAg
ICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQotICAgICAgICBjb2xv
clBhcmFtZXRlciA9ICpudW1iZXI7Ci0gICAgZWxzZSBpZiAoYXV0byBwZXJjZW50ID0gY29uc3Vt
ZVBlcmNlbnRSYXcoYXJncykpIHsKLSAgICAgICAgY29sb3JQYXJhbWV0ZXIgPSAqcGVyY2VudDsK
LSAgICAgICAgaXNQZXJjZW50YWdlID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBzdHJ1Y3QgSW5pdGlhbENvbXBvbmVudCB7CisgICAgICAgIGRvdWJsZSB2YWx1
ZTsKKyAgICAgICAgUkdCQ29tcG9uZW50VHlwZSB0eXBlOworICAgIH07CiAKLSAgICBlbnVtIGNs
YXNzIENvbG9yU3ludGF4IHsKLSAgICAgICAgQ29tbWFzLAotICAgICAgICBXaGl0ZXNwYWNlU2xh
c2gsCisgICAgYXV0byBjb25zdW1lSW5pdGlhbENvbXBvbmVudCA9IFtdKGF1dG8mIGFyZ3MpIC0+
IE9wdGlvbmFsPEluaXRpYWxDb21wb25lbnQ+IHsKKyAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0g
Y29uc3VtZU51bWJlclJhdyhhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgKm51bWJlciwg
UkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0gfTsKKyAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9
IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQorICAgICAgICAgICAgcmV0dXJuIHsgeyAqcGVyY2Vu
dCwgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9IH07CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfTsKIAotICAgIENvbG9yU3ludGF4IHN5bnRheCA9IENvbG9yU3ludGF4
OjpDb21tYXM7Ci0gICAgYXV0byBjb25zdW1lU2VwYXJhdG9yID0gWyZdIHsKLSAgICAgICAgaWYg
KHN5bnRheCA9PSBDb2xvclN5bnRheDo6Q29tbWFzKQotICAgICAgICAgICAgcmV0dXJuIGNvbnN1
bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBhdXRvIGNvbnN1bWVDb21wb25lbnQgPSBbXShhdXRvJiBhcmdzLCBhdXRv
IGNvbXBvbmVudFR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChjb21wb25lbnRUeXBlKSB7CisgICAg
ICAgIGNhc2UgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZToKKyAgICAgICAgICAgIHJldHVy
biBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKKyAgICAgICAgY2FzZSBSR0JDb21wb25lbnRUeXBl
OjpOdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKKyAg
ICAgICAgfQogICAgIH07CiAKLSAgICB1aW50OF90IGNvbG9yQXJyYXlbM107Ci0gICAgY29sb3JB
cnJheVswXSA9IGNsYW1wUkdCQ29tcG9uZW50KGNvbG9yUGFyYW1ldGVyLCBpc1BlcmNlbnRhZ2Up
OwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgIGlmIChpID09IDEp
Ci0gICAgICAgICAgICBzeW50YXggPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFy
Z3MpID8gQ29sb3JTeW50YXg6OkNvbW1hcyA6IENvbG9yU3ludGF4OjpXaGl0ZXNwYWNlU2xhc2g7
Ci0gICAgICAgIGVsc2UgaWYgKCFjb25zdW1lU2VwYXJhdG9yKCkpCi0gICAgICAgICAgICByZXR1
cm4geyB9OworICAgIGF1dG8gaW5pdGlhbENvbXBvbmVudCA9IGNvbnN1bWVJbml0aWFsQ29tcG9u
ZW50KGFyZ3MpOworICAgIGlmICghaW5pdGlhbENvbXBvbmVudCkKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgICAgICBpZiAoaXNQZXJjZW50YWdlKSB7Ci0gICAgICAgICAgICBhdXRvIHBlcmNl
bnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKLSAgICAgICAgICAgIGlmICghcGVyY2VudCkK
LSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgY29sb3JBcnJheVtpXSA9
IGNsYW1wUkdCQ29tcG9uZW50KCpwZXJjZW50LCB0cnVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKLSAgICAgICAg
ICAgIGlmICghbnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAg
ICBjb2xvckFycmF5W2ldID0gY2xhbXBSR0JDb21wb25lbnQoKm51bWJlciwgZmFsc2UpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIGF1dG8gY29tcG9uZW50VHlwZSA9IGluaXRpYWxDb21wb25lbnQt
PnR5cGU7CisgICAgYXV0byByZWQgPSBpbml0aWFsQ29tcG9uZW50LT52YWx1ZTsKIAotICAgIC8v
IEhpc3RvcmljYWxseSwgYWxwaGEgd2FzIG9ubHkgcGFyc2VkIGZvciByZ2JhKCksIGJ1dCBjc3Mt
Y29sb3ItNCBzcGVjaWZpZXMgdGhhdCByZ2JhKCkgaXMgYSBzaW1wbGUgYWxpYXMgZm9yIHJnYigp
LgotICAgIGF1dG8gY29uc3VtZUFscGhhU2VwYXJhdG9yID0gWyZdIHsKLSAgICAgICAgaWYgKHN5
bnRheCA9PSBDb2xvclN5bnRheDo6Q29tbWFzKQotICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVD
b21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
Y29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKLSAgICB9OworICAgIGF1dG8g
c3ludGF4ID0gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSA/IFJHQk9ySFNM
U2VwYXJhdG9yU3ludGF4OjpDb21tYXMgOiBSR0JPckhTTFNlcGFyYXRvclN5bnRheDo6V2hpdGVz
cGFjZVNsYXNoOworICAgIAorICAgIGF1dG8gZ3JlZW4gPSBjb25zdW1lQ29tcG9uZW50KGFyZ3Ms
IGNvbXBvbmVudFR5cGUpOworICAgIGlmICghZ3JlZW4pCisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICB1aW50OF90IGFscGhhQ29tcG9uZW50ID0gMjU1OwotICAgIGlmIChjb25zdW1lQWxwaGFT
ZXBhcmF0b3IoKSkgewotICAgICAgICBhdXRvIGFscGhhID0gY29uc3VtZU51bWJlck9yUGVyY2Vu
dERpdmlkZWRCeTEwMFJhdyhhcmdzKTsKLSAgICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgICAgIGFscGhhQ29tcG9uZW50ID0gY29udmVydEZsb2F0QWxwaGFU
bzx1aW50OF90PigqYWxwaGEpOwotICAgIH0KKyAgICBpZiAoIWNvbnN1bWVSR0JPckhTTFNlcGFy
YXRvcihhcmdzLCBzeW50YXgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBibHVl
ID0gY29uc3VtZUNvbXBvbmVudChhcmdzLCBjb21wb25lbnRUeXBlKTsKKyAgICBpZiAoIWJsdWUp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZVJHQk9ySFNM
T3B0aW9uYWxBbHBoYShhcmdzLCBzeW50YXgpOworICAgIGlmICghYWxwaGEpCisgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIHJldHVybiBTUkdCQTx1aW50OF90PiB7IGNvbG9yQXJyYXlbMF0sIGNvbG9yQXJyYXlb
MV0sIGNvbG9yQXJyYXlbMl0sIGFscGhhQ29tcG9uZW50IH07CisgICAgYXV0byBub3JtYWxpemVk
UmVkID0gY2xhbXBSR0JDb21wb25lbnQocmVkLCBjb21wb25lbnRUeXBlKTsKKyAgICBhdXRvIG5v
cm1hbGl6ZWRHcmVlbiA9IGNsYW1wUkdCQ29tcG9uZW50KCpncmVlbiwgY29tcG9uZW50VHlwZSk7
CisgICAgYXV0byBub3JtYWxpemVkQmx1ZSA9IGNsYW1wUkdCQ29tcG9uZW50KCpibHVlLCBjb21w
b25lbnRUeXBlKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRBbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhh
VG88dWludDhfdD4oKmFscGhhKTsKKworICAgIHJldHVybiBTUkdCQTx1aW50OF90PiB7IG5vcm1h
bGl6ZWRSZWQsIG5vcm1hbGl6ZWRHcmVlbiwgbm9ybWFsaXplZEJsdWUsIG5vcm1hbGl6ZWRBbHBo
YSB9OwogfQogCi1zdGF0aWMgQ29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCitzdGF0aWMgQ29sb3Ig
cGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rp
b25JZCgpID09IENTU1ZhbHVlSHNsIHx8IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NT
VmFsdWVIc2xhKTsKICAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0g
ICAgZG91YmxlIGh1ZUFuZ2xlSW5EZWdyZWVzOwotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3Vt
ZUFuZ2xlUmF3KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUp
OwotICAgIGVsc2UgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKLSAg
ICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSAqbnVtYmVyOwotICAgIGVsc2UKKyAgICBhdXRvIGh1
ZSA9IGNvbnN1bWVIdWUoYXJncywgY29udGV4dCk7CisgICAgaWYgKCFodWUpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBkb3VibGUgY29sb3JBcnJheVszXTsKLSAgICBjb2xvckFycmF5WzBd
ID0gZm1vZChmbW9kKGh1ZUFuZ2xlSW5EZWdyZWVzLCAzNjAuMCkgKyAzNjAuMCwgMzYwLjApIC8g
MzYwLjA7CisgICAgYXV0byBzeW50YXggPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNl
KGFyZ3MpID8gUkdCT3JIU0xTZXBhcmF0b3JTeW50YXg6OkNvbW1hcyA6IFJHQk9ySFNMU2VwYXJh
dG9yU3ludGF4OjpXaGl0ZXNwYWNlU2xhc2g7CiAKLSAgICBib29sIHJlcXVpcmVzQ29tbWFzID0g
ZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgaWYgKGNv
bnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpIHsKLSAgICAgICAgICAgIGlmIChp
ICE9IDEgJiYgIXJlcXVpcmVzQ29tbWFzKQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgICAgICAgICByZXF1aXJlc0NvbW1hcyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVx
dWlyZXNDb21tYXMgfHwgYXJncy5hdEVuZCgpIHx8ICgmYXJncy5wZWVrKCkgLSAxKS0+dHlwZSgp
ICE9IFdoaXRlc3BhY2VUb2tlbikKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGF1
dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwotICAgICAgICBpZiAoIXBlcmNl
bnQpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBjb2xvckFycmF5W2ldID0gY2xh
bXBUbzxkb3VibGU+KCpwZXJjZW50LCAwLjAsIDEwMC4wKSAvIDEwMC4wOyAvLyBOZWVkcyB0byBi
ZSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuMC4KLSAgICB9CisgICAgYXV0byBzYXR1cmF0aW9uID0g
Y29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CisgICAgaWYgKCFzYXR1cmF0aW9uKQorICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYm9vbCBjb21tYUNvbnN1bWVkID0gY29uc3VtZUNvbW1hSW5jbHVk
aW5nV2hpdGVzcGFjZShhcmdzKTsKLSAgICBib29sIHNsYXNoQ29uc3VtZWQgPSBjb25zdW1lU2xh
c2hJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwotICAgIGlmICgoY29tbWFDb25zdW1lZCAmJiAh
cmVxdWlyZXNDb21tYXMpIHx8IChzbGFzaENvbnN1bWVkICYmIHJlcXVpcmVzQ29tbWFzKSkKKyAg
ICBpZiAoIWNvbnN1bWVSR0JPckhTTFNlcGFyYXRvcihhcmdzLCBzeW50YXgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgZG91YmxlIGFscGhhID0gMS4wOwotICAgIGlmIChjb21tYUNvbnN1
bWVkIHx8IHNsYXNoQ29uc3VtZWQpIHsKLSAgICAgICAgYXV0byBhbHBoYVBhcmFtZXRlciA9IGNv
bnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7Ci0gICAgICAgIGlmICgh
YWxwaGFQYXJhbWV0ZXIpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBhbHBoYSA9
IGNsYW1wVG88ZG91YmxlPigqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKLSAgICB9CisgICAg
YXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKKyAgICBpZiAoIWxpZ2h0
bmVzcykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lUkdC
T3JIU0xPcHRpb25hbEFscGhhKGFyZ3MsIHN5bnRheCk7CisgICAgaWYgKCFhbHBoYSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oSFNMQTxmbG9h
dD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOworICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1h
bGl6ZUh1ZSgqaHVlKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRTYXR1cmF0aW9uID0gY2xhbXBUbzxk
b3VibGU+KCpzYXR1cmF0aW9uLCAwLjAsIDEwMC4wKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRMaWdo
dG5lc3MgPSBjbGFtcFRvPGRvdWJsZT4oKmxpZ2h0bmVzcywgMC4wLCAxMDAuMCk7CisgICAgYXV0
byBub3JtYWxpemVkQWxwaGEgPSBjbGFtcFRvPGRvdWJsZT4oKmFscGhhLCAwLjAsIDEuMCk7CisK
KyAgICByZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihIU0xBPGZsb2F0PiB7IHN0
YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkSHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1h
bGl6ZWRTYXR1cmF0aW9uKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRMaWdodG5lc3Mp
LCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZEFscGhhKSB9KTsKIH0KIAotc3RhdGljIE9w
dGlvbmFsPGZsb2F0PiBwYXJzZU9wdGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCitzdHJ1Y3QgV2hpdGVuZXNzQmxhY2tuZXNzIHsKKyAgICBkb3VibGUgd2hpdGVuZXNzOwor
ICAgIGRvdWJsZSBibGFja25lc3M7Cit9Oworc3RhdGljIFdoaXRlbmVzc0JsYWNrbmVzcyBub3Jt
YWxpemVXaGl0ZW5lc3NCbGFja25lc3MoZG91YmxlIHdoaXRlbmVzcywgZG91YmxlIGJsYWNrbmVz
cykKIHsKLSAgICBpZiAoIWNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKQot
ICAgICAgICByZXR1cm4gMS4wZjsKKyAgICBXaGl0ZW5lc3NCbGFja25lc3MgcmVzdWx0OwogCi0g
ICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRl
ZEJ5MTAwUmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KCphbHBoYVBh
cmFtZXRlciwgMC4wLCAxLjApOworICAgIC8vICAgVmFsdWVzIG91dHNpZGUgb2YgdGhlc2UgcmFu
Z2VzIGFyZSBub3QgaW52YWxpZCwgYnV0IGFyZSBjbGFtcGVkIHRvIHRoZQorICAgIC8vICAgcmFu
Z2VzIGRlZmluZWQgaGVyZSBhdCBjb21wdXRlZC12YWx1ZSB0aW1lLgorICAgIHJlc3VsdC53aGl0
ZW5lc3MgPSBjbGFtcFRvPGRvdWJsZT4od2hpdGVuZXNzLCAwLCAxMDApOworICAgIHJlc3VsdC5i
bGFja25lc3MgPSBjbGFtcFRvPGRvdWJsZT4oYmxhY2tuZXNzLCAwLCAxMDApOwogCi0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAvLyAgIElmIHRoZSBzdW0gb2YgdGhlc2UgdHdvIGFyZ3Vt
ZW50cyBpcyBncmVhdGVyIHRoYW4gMTAwJSwgdGhlbiBhdAorICAgIC8vICAgY29tcHV0ZWQtdmFs
dWUgdGltZSB0aGV5IGFyZSBmdXJ0aGVyIG5vcm1hbGl6ZWQgdG8gYWRkIHVwIHRvIDEwMCUsIHdp
dGgKKyAgICAvLyAgIHRoZSBzYW1lIHJlbGF0aXZlIHJhdGlvLgorICAgIGlmIChhdXRvIHN1bSA9
IHJlc3VsdC53aGl0ZW5lc3MgKyByZXN1bHQuYmxhY2tuZXNzOyBzdW0gPj0gMTAwKSB7CisgICAg
ICAgIHJlc3VsdC53aGl0ZW5lc3MgKj0gMTAwLjAgLyBzdW07CisgICAgICAgIHJlc3VsdC5ibGFj
a25lc3MgKj0gMTAwLjAgLyBzdW07CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
c3RhdGljIENvbG9yIHBhcnNlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIENvbG9yIHBhcnNlSFdCUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBD
U1NWYWx1ZUh3Yik7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKIAot
ICAgIGRvdWJsZSBodWVBbmdsZUluRGVncmVlczsKLSAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1
bWVBbmdsZVJhdyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVu
aXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVl
KTsKLSAgICBlbHNlIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncykpCi0g
ICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gKm51bWJlcjsKLSAgICBlbHNlCisgICAgYXV0byBo
dWUgPSBjb25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGlmICghaHVlKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYXV0byB3aGl0ZW5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdz
LCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIHdoaXRlbmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3
KGFyZ3MpOwogICAgIGlmICghd2hpdGVuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
YXV0byBibGFja25lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsK
KyAgICBhdXRvIGJsYWNrbmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgIGlmICgh
YmxhY2tuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhbHBoYSA9IHBhcnNl
T3B0aW9uYWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxw
aGEoYXJncyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlm
ICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgLy8gTm9ybWFsaXpl
IGh1ZS4KLQotICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gc3RkOjpmbW9kKGh1ZUFuZ2xlSW5EZWdy
ZWVzLCAzNjAuMCk7Ci0gICAgaWYgKGh1ZUFuZ2xlSW5EZWdyZWVzIDwgMC4wKQotICAgICAgICBo
dWVBbmdsZUluRGVncmVlcyArPSAzNjAuMDsKLSAgICAKLSAgICAvLyBDb252ZXJ0IGFuZ2xlIHRv
IG5vcm1hbGl6ZWQgZm9ybSBmcm9tIDAgLSAxLgotICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IGh1
ZUFuZ2xlSW5EZWdyZWVzIC8gMzYwLjA7Ci0KLSAgICAvLyBOb3JtYWxpemUgd2hpdGVuZXNzL2Js
YWNrbmVzcy4KKyAgICBhdXRvIG5vcm1hbGl6ZWRIdWUgPSBub3JtYWxpemVIdWUoKmh1ZSk7Cisg
ICAgYXV0byBbbm9ybWFsaXplZFdoaXRuZXNzLCBub3JtYWxpemVkQmxhY2tuZXNzXSA9IG5vcm1h
bGl6ZVdoaXRlbmVzc0JsYWNrbmVzcygqd2hpdGVuZXNzLCAqYmxhY2tuZXNzKTsKIAotICAgIC8v
ICAgVmFsdWVzIG91dHNpZGUgb2YgdGhlc2UgcmFuZ2VzIGFyZSBub3QgaW52YWxpZCwgYnV0IGFy
ZSBjbGFtcGVkIHRvIHRoZQotICAgIC8vICAgcmFuZ2VzIGRlZmluZWQgaGVyZSBhdCBjb21wdXRl
ZC12YWx1ZSB0aW1lLgotICAgIGF1dG8gbm9tYWxpemVkV2hpdGVuZXNzID0gY2xhbXBUbzxkb3Vi
bGU+KCp3aGl0ZW5lc3MsIDAsIDEwMCk7Ci0gICAgYXV0byBub21hbGl6ZWRCbGFja25lc3MgPSBj
bGFtcFRvPGRvdWJsZT4oKmJsYWNrbmVzcywgMCwgMTAwKTsKLQotICAgIC8vICAgSWYgdGhlIHN1
bSBvZiB0aGVzZSB0d28gYXJndW1lbnRzIGlzIGdyZWF0ZXIgdGhhbiAxMDAlLCB0aGVuIGF0Ci0g
ICAgLy8gICBjb21wdXRlZC12YWx1ZSB0aW1lIHRoZXkgYXJlIGZ1cnRoZXIgbm9ybWFsaXplZCB0
byBhZGQgdXAgdG8gMTAwJSwgd2l0aAotICAgIC8vICAgdGhlIHNhbWUgcmVsYXRpdmUgcmF0aW8u
Ci0gICAgaWYgKGF1dG8gc3VtID0gbm9tYWxpemVkV2hpdGVuZXNzICsgbm9tYWxpemVkQmxhY2tu
ZXNzOyBzdW0gPj0gMTAwKSB7Ci0gICAgICAgIG5vbWFsaXplZFdoaXRlbmVzcyAqPSAxMDAuMCAv
IHN1bTsKLSAgICAgICAgbm9tYWxpemVkQmxhY2tuZXNzICo9IDEwMC4wIC8gc3VtOwotICAgIH0K
LQotICAgIC8vIENvbnZlcnQgdG8gbm9ybWFsaXplZCBmb3JtIGZyb20gMCAtIDEuCi0gICAgbm9t
YWxpemVkV2hpdGVuZXNzIC89IDEwMC4wOwotICAgIG5vbWFsaXplZEJsYWNrbmVzcyAvPSAxMDAu
MDsKLQotICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KEhXQkE8ZmxvYXQ+
IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
bm9tYWxpemVkV2hpdGVuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vbWFsaXplZEJsYWNrbmVz
cyksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0pOworICAgIHJldHVybiBjb252ZXJ0Q29s
b3I8U1JHQkE8dWludDhfdD4+KEhXQkE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1h
bGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZFdoaXRuZXNzKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRCbGFja25lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFs
cGhhKSB9KTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlTGFiUGFyYW1ldGVycyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKK3N0YXRpYyBDb2xvciBwYXJzZUxhYlBhcmFtZXRlcnMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKQogewogICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlTGFiKTsKICAgICBhdXRv
IGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0gICAgYXV0byBsaWdodG5lc3MgPSBj
b25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIGxpZ2h0bmVz
cyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgIGlmICghbGlnaHRuZXNzKQogICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3Ms
IFZhbHVlUmFuZ2VBbGwpOworICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdz
KTsKICAgICBpZiAoIWFWYWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYlZh
bHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIGJW
YWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CiAgICAgaWYgKCFiVmFsdWUpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3Mp
OworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAo
IWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRpY19jYXN0
PGZsb2F0PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphVmFsdWUpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oKmJWYWx1ZSksICphbHBoYSB9OworICAgIHJldHVybiBMYWI8ZmxvYXQ+IHsg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KCpsaWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFWYWx1
ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYlZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBo
YSkgfTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIENvbG9y
IHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0
aW9uSWQoKSA9PSBDU1NWYWx1ZUxjaCk7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9u
KHJhbmdlKTsKIAotICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncywg
VmFsdWVSYW5nZUFsbCk7CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhh
cmdzKTsKICAgICBpZiAoIWxpZ2h0bmVzcykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1
dG8gY2hyb21hVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwot
ICAgIGlmICghY2hyb21hVmFsdWUpCisgICAgYXV0byBjaHJvbWEgPSBjb25zdW1lTnVtYmVyUmF3
KGFyZ3MpOworICAgIGlmICghY2hyb21hKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZG91
YmxlIGh1ZUFuZ2xlSW5EZWdyZWVzOwotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xl
UmF3KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOwotICAg
IGVsc2UgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdl
QWxsKSkKLSAgICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSAqbnVtYmVyOwotICAgIGVsc2UKKyAg
ICBhdXRvIGh1ZSA9IGNvbnN1bWVIdWUoYXJncywgY29udGV4dCk7CisgICAgaWYgKCFodWUpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBodWVBbmdsZUluRGVncmVlcyA9IGZtb2QoaHVlQW5n
bGVJbkRlZ3JlZXMsIDM2MC4wKTsKLSAgICBpZiAoaHVlQW5nbGVJbkRlZ3JlZXMgPCAwLjApCi0g
ICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzICs9IDM2MC4wOwotCi0gICAgYXV0byBhbHBoYSA9IHBh
cnNlT3B0aW9uYWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFs
QWxwaGEoYXJncyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNv
bnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihMQ0hBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pigq
bGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpjaHJvbWFWYWx1ZSksIHN0YXRpY19jYXN0
PGZsb2F0PihodWVBbmdsZUluRGVncmVlcyksICphbHBoYSB9KTsKKyAgICBhdXRvIG5vcm1hbGl6
ZWRIdWUgPSBub3JtYWxpemVIdWUoKmh1ZSk7CisKKyAgICByZXR1cm4gY29udmVydENvbG9yPExh
YjxmbG9hdD4+KExDSEE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpsaWdodG5lc3MpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oKmNocm9tYSksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVk
SHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZT4KLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBl
cyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgYXJncykKIHsKICAgICBBU1NFUlQoYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1
ZUE5OFJnYiB8fCBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRGlzcGxheVAzIHx8IGFyZ3Mu
cGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVQcm9waG90b1JnYiB8fCBhcmdzLnBlZWsoKS5pZCgpID09
IENTU1ZhbHVlUmVjMjAyMCB8fCBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlU1JHQik7CiAg
ICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwpAQCAtOTY0LDExICs5ODIsMTEgQEAgc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cAogICAgICAgICBjaGFubmVsc1tpXSA9ICp2
YWx1ZTsKICAgICB9CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3Mp
OworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAo
IWFscGhhKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIENvbG9yVHlwZSB7IGNs
YW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzBdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5u
ZWxzWzFdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzJdLCAwLjAsIDEuMCks
ICphbHBoYSB9OworICAgIHJldHVybiBDb2xvclR5cGUgeyBjbGFtcFRvPGZsb2F0PihjaGFubmVs
c1swXSwgMC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1sxXSwgMC4wLCAxLjApLCBj
bGFtcFRvPGZsb2F0PihjaGFubmVsc1syXSwgMC4wLCAxLjApLCBzdGF0aWNfY2FzdDxmbG9hdD4o
KmFscGhhKSB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQpAQCAtOTc4LDI3ICs5OTYsMjcgQEAg
c3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvckxhYlBhcgogCiAgICAgZG91YmxlIGNo
YW5uZWxzWzNdID0geyAwLCAwLCAwIH07CiAgICAgWyZdIHsKLSAgICAgICAgYXV0byBsaWdodG5l
c3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0
byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKICAgICAgICAgaWYgKCFsaWdo
dG5lc3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoYW5uZWxzWzBdID0gKmxpZ2h0
bmVzczsKIAotICAgICAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFs
dWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdz
KTsKICAgICAgICAgaWYgKCFhVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNo
YW5uZWxzWzFdID0gKmFWYWx1ZTsKIAotICAgICAgICBhdXRvIGJWYWx1ZSA9IGNvbnN1bWVOdW1i
ZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8gYlZhbHVlID0gY29uc3Vt
ZU51bWJlclJhdyhhcmdzKTsKICAgICAgICAgaWYgKCFiVmFsdWUpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGNoYW5uZWxzWzJdID0gKmJWYWx1ZTsKICAgICB9KCk7CiAKLSAgICBhdXRv
IGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3MpOworICAgIGF1dG8gYWxwaGEgPSBjb25z
dW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5l
bHNbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMV0pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY2hhbm5lbHNbMl0pLCAqYWxwaGEgfTsKKyAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRp
Y19jYXN0PGZsb2F0PihjaGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sx
XSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0Pigq
YWxwaGEpIH07CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JYWVpQYXJh
bWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MpCkBAIC0xMDA4LDI3ICsxMDI2LDI3IEBA
IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JYWVpQYXIKIAogICAgIGRvdWJsZSBj
aGFubmVsc1szXSA9IHsgMCwgMCwgMCB9OwogICAgIFsmXSB7Ci0gICAgICAgIGF1dG8geCA9IGNv
bnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8geCA9IGNv
bnN1bWVOdW1iZXJSYXcoYXJncyk7CiAgICAgICAgIGlmICgheCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgY2hhbm5lbHNbMF0gPSAqeDsKIAotICAgICAgICBhdXRvIHkgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRvIHkgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MpOwogICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNoYW5uZWxzWzFdID0gKnk7CiAKLSAgICAgICAgYXV0byB6ID0gY29uc3VtZU51bWJl
clJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byB6ID0gY29uc3VtZU51bWJl
clJhdyhhcmdzKTsKICAgICAgICAgaWYgKCF6KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBjaGFubmVsc1syXSA9ICp6OwogICAgIH0oKTsKIAotICAgIGF1dG8gYWxwaGEgPSBwYXJzZU9w
dGlvbmFsQWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhh
KGFyZ3MpOwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1
cm4gWFlaQTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFu
bmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZs
b2F0PihjaGFubmVsc1syXSksICphbHBoYSB9OworICAgIHJldHVybiBYWVpBPGZsb2F0LCBXaGl0
ZVBvaW50OjpENTA+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzBdKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzJdKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29s
b3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC0xMTEx
LDcgKzExMjksNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4CiAg
ICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24o
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkK
K3N0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSBjb2xvclJhbmdlID0gcmFuZ2U7CiAgICAgQ1NTVmFsdWVJRCBmdW5jdGlvbklkID0g
cmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKTsKQEAgLTExMTksMjAgKzExMzcsMjAgQEAgc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZQogICAgIHN3aXRjaCAoZnVuY3Rpb25J
ZCkgewogICAgIGNhc2UgQ1NTVmFsdWVSZ2I6CiAgICAgY2FzZSBDU1NWYWx1ZVJnYmE6Ci0gICAg
ICAgIGNvbG9yID0gcGFyc2VSR0JQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UpOworICAgICAgICBjb2xv
ciA9IHBhcnNlUkdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDU1NWYWx1ZUhzbDoKICAgICBjYXNlIENTU1ZhbHVlSHNsYToKLSAgICAg
ICAgY29sb3IgPSBwYXJzZUhTTFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY3NzUGFyc2VyTW9kZSk7
CisgICAgICAgIGNvbG9yID0gcGFyc2VIU0xQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNvbnRleHQp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlSHdiOgotICAgICAgICBjb2xvciA9
IHBhcnNlSFdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAg
Y29sb3IgPSBwYXJzZUhXQlBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY29udGV4dCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVMYWI6Ci0gICAgICAgIGNvbG9yID0gcGFyc2VMYWJQ
YXJhbWV0ZXJzKGNvbG9yUmFuZ2UpOworICAgICAgICBjb2xvciA9IHBhcnNlTGFiUGFyYW1ldGVy
cyhjb2xvclJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NWYWx1
ZUxjaDoKLSAgICAgICAgY29sb3IgPSBwYXJzZUxDSFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY3Nz
UGFyc2VyTW9kZSk7CisgICAgICAgIGNvbG9yID0gcGFyc2VMQ0hQYXJhbWV0ZXJzKGNvbG9yUmFu
Z2UsIGNvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlQ29sb3I6CiAg
ICAgICAgIGNvbG9yID0gcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyhjb2xvclJhbmdlKTsK
QEAgLTExNDUsNyArMTE2Myw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24oQ1NT
UGFyc2UKICAgICByZXR1cm4gY29sb3I7CiB9CiAKLUNvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNh
ZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9k
ZSkKK0NvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ29sb3IgcmVzdWx0
OwogICAgIGF1dG8ga2V5d29yZCA9IHJhbmdlLnBlZWsoKS5pZCgpOwpAQCAtMTE1NCw3ICsxMTcy
LDcgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUbwogICAgICAgICAv
LyAgICAgICAgRm9yIG5vdywgd2UgZGV0ZWN0IHRoZSBzeXN0ZW0gY29sb3IsIGJ1dCB0aGVuIGlu
dGVudGlvbmFsbHkgZmFpbCBwYXJzaW5nLgogICAgICAgICBpZiAoU3R5bGVDb2xvcjo6aXNTeXN0
ZW1Db2xvcihrZXl3b3JkKSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGlmICgh
aXNWYWx1ZUFsbG93ZWRJbk1vZGUoa2V5d29yZCwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAgIGlm
ICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUoa2V5d29yZCwgY29udGV4dC5tb2RlKSkKICAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIHJlc3VsdCA9IFN0eWxlQ29sb3I6OmNvbG9yRnJvbUtl
eXdvcmQoa2V5d29yZCwgeyB9KTsKICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKTsKQEAgLTExNjMsNyArMTE4MSw3IEBAIENvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNh
ZmUoQ1NTUGFyc2VyVG8KICAgICBpZiAoYXV0byBwYXJzZWRDb2xvciA9IHBhcnNlSGV4Q29sb3Io
cmFuZ2UsIGZhbHNlKSkKICAgICAgICAgcmVzdWx0ID0gKnBhcnNlZENvbG9yOwogICAgIGVsc2UK
LSAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjc3NQYXJzZXJNb2Rl
KTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjb250ZXh0KTsK
IAogICAgIGlmICghcmFuZ2UuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTExNzEs
MTEgKzExODksMTEgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUbwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmIGNvbnRleHQsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQogewogICAgIGF1dG8g
a2V5d29yZCA9IHJhbmdlLnBlZWsoKS5pZCgpOwogICAgIGlmIChTdHlsZUNvbG9yOjppc0NvbG9y
S2V5d29yZChrZXl3b3JkKSkgewotICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2RlKGtl
eXdvcmQsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2Rl
KGtleXdvcmQsIGNvbnRleHQubW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAgICAgfQpAQCAtMTE4Myw3ICsxMjAx
LDcgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3IoQwogICAgIGlmIChh
dXRvIHBhcnNlZENvbG9yID0gcGFyc2VIZXhDb2xvcihyYW5nZSwgYWNjZXB0UXVpcmt5Q29sb3Jz
KSkKICAgICAgICAgY29sb3IgPSAqcGFyc2VkQ29sb3I7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNv
bG9yID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAg
Y29sb3IgPSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBpZiAo
IWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAg
LTE0MTMsMTQgKzE0MzEsMTQgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZQogfQogCiAvLyBVc2VkIHRvIHBhcnNlIGNvbG9ycyBmb3IgLXdlYmtpdC1ncmFkaWVudCgu
Li4pLgotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRH
cmFkaWVudFN0b3BDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZXJNb2Rl
IGNzc1BhcnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
RGVwcmVjYXRlZEdyYWRpZW50U3RvcENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGFyZ3MucGVlaygpLmlk
KCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiBjb25zdW1lQ29sb3IoYXJncywgY3NzUGFyc2VyTW9kZSk7CisgICAgcmV0dXJuIGNv
bnN1bWVDb2xvcihhcmdzLCBjb250ZXh0KTsKIH0KIAotc3RhdGljIGJvb2wgY29uc3VtZURlcHJl
Y2F0ZWRHcmFkaWVudENvbG9yU3RvcChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTR3Jh
ZGllbnRDb2xvclN0b3AmIHN0b3AsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRp
YyBib29sIGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0KQogewogICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVrKCkuZnVu
Y3Rpb25JZCgpOwogICAgIGlmIChpZCAhPSBDU1NWYWx1ZUZyb20gJiYgaWQgIT0gQ1NTVmFsdWVU
byAmJiBpZCAhPSBDU1NWYWx1ZUNvbG9yU3RvcCkKQEAgLTE0NDIsMTEgKzE0NjAsMTEgQEAgc3Rh
dGljIGJvb2wgY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbAogICAgIH0KIAogICAgIHN0b3Au
cG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBvc2l0aW9u
LCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgc3RvcC5jb2xvciA9IGNvbnN1bWVEZXBy
ZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJncywgY3NzUGFyc2VyTW9kZSk7CisgICAgc3RvcC5j
b2xvciA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJncywgY29udGV4dCk7
CiAgICAgcmV0dXJuIHN0b3AuY29sb3IgJiYgYXJncy5hdEVuZCgpOwogfQogCi1zdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJn
cywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBSZWZQdHI8Q1NTR3Jh
ZGllbnRWYWx1ZT4gcmVzdWx0OwogICAgIENTU1ZhbHVlSUQgaWQgPSBhcmdzLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsKQEAgLTE0OTksNyArMTUxNyw3IEBAIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGUKIAogICAgIENTU0dyYWRpZW50Q29sb3JTdG9w
IHN0b3A7CiAgICAgd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykp
IHsKLSAgICAgICAgaWYgKCFjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKGFyZ3Ms
IHN0b3AsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICBpZiAoIWNvbnN1bWVEZXByZWNhdGVkR3Jh
ZGllbnRDb2xvclN0b3AoYXJncywgc3RvcCwgY29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgcmVzdWx0LT5hZGRTdG9wKFdURk1vdmUoc3RvcCkpOwogICAgIH0K
QEAgLTE1MDgsMjAgKzE1MjYsMjAgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURl
cHJlY2F0ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNvbnN1bWVHcmFk
aWVudENvbG9yU3RvcHMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
bW9kZSwgQ1NTR3JhZGllbnRWYWx1ZSYgZ3JhZGllbnQpCitzdGF0aWMgYm9vbCBjb25zdW1lR3Jh
ZGllbnRDb2xvclN0b3BzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0LCBDU1NHcmFkaWVudFZhbHVlJiBncmFkaWVudCkKIHsKICAgICBi
b29sIHN1cHBvcnRzQ29sb3JIaW50cyA9IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0xp
bmVhckdyYWRpZW50IHx8IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU1JhZGlhbEdyYWRp
ZW50IHx8IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0NvbmljR3JhZGllbnQ7CiAgICAg
CiAgICAgYXV0byBjb25zdW1lU3RvcFBvc2l0aW9uID0gWyZdIHsKICAgICAgICAgcmV0dXJuIGdy
YWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0NvbmljR3JhZGllbnQKLSAgICAgICAgICAgID8g
Y29uc3VtZUFuZ2xlT3JQZXJjZW50KHJhbmdlLCBtb2RlLCBWYWx1ZVJhbmdlQWxsLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykKLSAgICAgICAgICAgIDog
Y29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgbW9kZSwgVmFsdWVSYW5nZUFsbCk7CisgICAg
ICAgICAgICA/IGNvbnN1bWVBbmdsZU9yUGVyY2VudChyYW5nZSwgY29udGV4dC5tb2RlLCBWYWx1
ZVJhbmdlQWxsLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxv
dykKKyAgICAgICAgICAgIDogY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgY29udGV4dC5t
b2RlLCBWYWx1ZVJhbmdlQWxsKTsKICAgICB9OwogCiAgICAgLy8gVGhlIGZpcnN0IGNvbG9yIHN0
b3AgY2Fubm90IGJlIGEgY29sb3IgaGludC4KICAgICBib29sIHByZXZpb3VzU3RvcFdhc0NvbG9y
SGludCA9IHRydWU7CiAgICAgZG8gewotICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9w
IHsgY29uc3VtZUNvbG9yKHJhbmdlLCBtb2RlKSwgY29uc3VtZVN0b3BQb3NpdGlvbigpLCB7IH0g
fTsKKyAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcCB7IGNvbnN1bWVDb2xvcihyYW5n
ZSwgY29udGV4dCksIGNvbnN1bWVTdG9wUG9zaXRpb24oKSwgeyB9IH07CiAgICAgICAgIGlmICgh
c3RvcC5jb2xvciAmJiAhc3RvcC5wb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMTU1MiwxMSArMTU3MCwxMSBAQCBzdGF0aWMgYm9vbCBjb25zdW1lR3JhZGllbnRDb2xv
clN0b3BzKENTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJn
cywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRp
bmcpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRp
ZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNv
bnRleHQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKIHsKICAgICBhdXRvIHJlc3VsdCA9
IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVkUmFk
aWFsR3JhZGllbnQpOwogCi0gICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZU9uZU9y
VHdvVmFsdWVkUG9zaXRpb25Db29yZGluYXRlcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQpOworICAgIGF1dG8gY2VudGVyQ29vcmRpbmF0ZSA9IGNvbnN1bWVPbmVP
clR3b1ZhbHVlZFBvc2l0aW9uQ29vcmRpbmF0ZXMoYXJncywgY29udGV4dC5tb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQpOwogICAgIGlmIChjZW50ZXJDb29yZGluYXRlICYmICFjb25zdW1lQ29t
bWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApA
QCAtMTU2NywxMCArMTU4NSwxMCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVw
cmVjYXRlCiAKICAgICAvLyBPciwgdHdvIGxlbmd0aHMgb3IgcGVyY2VudGFnZXMKICAgICBpZiAo
IXNoYXBlICYmICFzaXplS2V5d29yZCkgewotICAgICAgICBhdXRvIGhvcml6b250YWxTaXplID0g
Y29uc3VtZUxlbmd0aE9yUGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9u
TmVnYXRpdmUpOworICAgICAgICBhdXRvIGhvcml6b250YWxTaXplID0gY29uc3VtZUxlbmd0aE9y
UGVyY2VudChhcmdzLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CiAgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwogICAgICAgICBpZiAo
aG9yaXpvbnRhbFNpemUpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNvbnN1bWVMZW5n
dGhPclBlcmNlbnQoYXJncywgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsK
KyAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYXJncywg
Y29udGV4dC5tb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwogICAgICAgICAgICAgaWYgKCF2
ZXJ0aWNhbFNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAg
ICBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwpAQCAtMTU4MSw3ICsxNTk5
LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZQogICAgICAgICBj
b25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwogICAgIH0KIAotICAgIGlmICgh
Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCByZXN1bHQpKQor
ICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0LCByZXN1bHQp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChjZW50ZXJDb29yZGluYXRlKSB7
CkBAIC0xNTk2LDcgKzE2MTQsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVw
cmVjYXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNl
ck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQorc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENTU0dyYWRpZW50UmVw
ZWF0IHJlcGVhdGluZykKIHsKICAgICBSZWZQdHI8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4gcmVz
dWx0ID0gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUmFkaWFs
R3JhZGllbnQpOwogCkBAIC0xNjI0LDEzICsxNjQyLDEzIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVSYWRpYWxHcmEKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gY2VudGVyID0gY29uc3VtZUxl
bmd0aE9yUGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUp
OworICAgICAgICAgICAgYXV0byBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KGFyZ3Ms
IGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgICAgIGlmICgh
Y2VudGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGhvcml6b250
YWxTaXplKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaG9y
aXpvbnRhbFNpemUgPSBjZW50ZXI7Ci0gICAgICAgICAgICBjZW50ZXIgPSBjb25zdW1lTGVuZ3Ro
T3JQZXJjZW50KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7Cisg
ICAgICAgICAgICBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KGFyZ3MsIGNvbnRleHQu
bW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgICAgIGlmIChjZW50ZXIpIHsK
ICAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjZW50ZXI7CiAgICAgICAgICAgICAgICAg
KytpOwpAQCAtMTY1OSw3ICsxNjc3LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZVJhZGlhbEdyYQogICAgIGlmIChhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlQXQpIHsKICAg
ICAgICAgYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICAKLSAgICAg
ICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoYXJn
cywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBQb3NpdGlvblN5bnRheDo6
UG9zaXRpb24pOworICAgICAgICBhdXRvIGNlbnRlckNvb3JkaW5hdGUgPSBjb25zdW1lUG9zaXRp
b25Db29yZGluYXRlcyhhcmdzLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwg
UG9zaXRpb25TeW50YXg6OlBvc2l0aW9uKTsKICAgICAgICAgaWYgKCFjZW50ZXJDb29yZGluYXRl
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIApAQCAtMTY3Niw3ICsxNjk0
LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYQogCiAgICAgaWYg
KChzaGFwZSB8fCBzaXplS2V5d29yZCB8fCBob3Jpem9udGFsU2l6ZSB8fCBjZW50ZXJYIHx8IGNl
bnRlclkpICYmICFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoYXJn
cywgY3NzUGFyc2VyTW9kZSwgKnJlc3VsdCkpCisgICAgaWYgKCFjb25zdW1lR3JhZGllbnRDb2xv
clN0b3BzKGFyZ3MsIGNvbnRleHQsICpyZXN1bHQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIHJlc3VsdC0+c2V0U2hhcGUoV1RGTW92ZShzaGFwZSkpOwpAQCAtMTY4NywxMiArMTcw
NSwxMiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lUmFkaWFsR3JhCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVhckdy
YWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nLCBDU1NHcmFkaWVudFR5cGUgZ3JhZGll
bnRUeXBlKQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVhckdyYWRpZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQs
IENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZywgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlw
ZSkKIHsKICAgICBSZWZQdHI8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4gcmVzdWx0ID0gQ1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgZ3JhZGllbnRUeXBlKTsKIAogICAg
IGJvb2wgZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
YW5nbGUgPSBjb25zdW1lQW5nbGUoYXJncywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6
Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpOworICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gYW5nbGUgPSBjb25zdW1lQW5nbGUoYXJncywgY29udGV4dC5tb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdyk7CiAgICAgaWYgKGFuZ2xl
KQogICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOwogICAg
IGVsc2UgaWYgKGdyYWRpZW50VHlwZSA9PSBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50IHx8IGNv
bnN1bWVJZGVudDxDU1NWYWx1ZVRvPihhcmdzKSkgewpAQCAtMTcxNSwxMiArMTczMywxMiBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lTGluZWFyR3JhCiAKICAgICBpZiAoZXhwZWN0
Q29tbWEgJiYgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdz
LCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0KSkKKyAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9y
U3RvcHMoYXJncywgY29udGV4dCwgKnJlc3VsdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVD
b25pY0dyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlckNvbnRleHQg
Y29udGV4dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQorc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gY29uc3VtZUNvbmljR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5n
KQogewogI2lmIEVOQUJMRShDU1NfQ09OSUNfR1JBRElFTlRTKQogICAgIFJlZlB0cjxDU1NDb25p
Y0dyYWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJl
cGVhdGluZyk7CkBAIC0xNzU0LDcgKzE3NzIsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ29uaWNHcmFkCiAKICAgICBpZiAoZXhwZWN0Q29tbWEgJiYgIWNvbnN1bWVDb21tYUlu
Y2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlm
ICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0Lm1vZGUsICpyZXN1bHQp
KQorICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0LCAqcmVz
dWx0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHJlc3VsdDsKICNlbHNl
CkBAIC0xNzY1LDE0ICsxNzgzLDE0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVD
b25pY0dyYWQKICNlbmRpZgogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZU9yTm9u
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KQor
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKHJhbmdl
LnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVu
dChyYW5nZSk7CiAgICAgcmV0dXJuIGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCk7CiB9CiAK
LXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDcm9zc0ZhZGUoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgYXJncywgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBib29sIHByZWZpeGVkKQorc3Rh
dGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNyb3NzRmFkZShDU1NQYXJzZXJUb2tlblJhbmdl
JiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBib29sIHByZWZpeGVkKQog
ewogICAgIGF1dG8gZnJvbUltYWdlVmFsdWUgPSBjb25zdW1lSW1hZ2VPck5vbmUoYXJncywgY29u
dGV4dCk7CiAgICAgaWYgKCFmcm9tSW1hZ2VWYWx1ZSB8fCAhY29uc3VtZUNvbW1hSW5jbHVkaW5n
V2hpdGVzcGFjZShhcmdzKSkKQEAgLTE4NDgsMzAgKzE4NjYsMzAgQEAgc3RhdGljIFJlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUN1c3RvbVBhaQogfQogI2VuZGlmCiAKLXN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZUdlbmVyYXRlZEltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVrKCku
ZnVuY3Rpb25JZCgpOwogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5ID0gcmFuZ2U7
CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlQ29w
eSk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiByZXN1bHQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVl
UmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChh
cmdzLCBjb250ZXh0Lm1vZGUsIE5vblJlcGVhdGluZyk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1
bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcpOwogICAgIGVsc2Ug
aWYgKGlkID09IENTU1ZhbHVlUmVwZWF0aW5nUmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJlc3Vs
dCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJlcGVhdGluZyk7
CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0LCBS
ZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0TGluZWFyR3JhZGll
bnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0
Lm1vZGUsIE5vblJlcGVhdGluZywgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCk7CisgICAgICAg
IHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRp
bmcsIENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1Zh
bHVlV2Via2l0UmVwZWF0aW5nTGluZWFyR3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1
bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJlcGVhdGluZywgQ1NTUHJlZml4
ZWRMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVu
dChhcmdzLCBjb250ZXh0LCBSZXBlYXRpbmcsIENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpOwog
ICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0aW5nTGluZWFyR3JhZGllbnQpCi0gICAg
ICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJl
cGVhdGluZywgQ1NTTGluZWFyR3JhZGllbnQpOworICAgICAgICByZXN1bHQgPSBjb25zdW1lTGlu
ZWFyR3JhZGllbnQoYXJncywgY29udGV4dCwgUmVwZWF0aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7
CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVMaW5lYXJHcmFkaWVudCkKLSAgICAgICAgcmVz
dWx0ID0gY29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgTm9uUmVwZWF0
aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJH
cmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcsIENTU0xpbmVhckdyYWRpZW50KTsK
ICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdEdyYWRpZW50KQotICAgICAgICByZXN1
bHQgPSBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSk7CisgICAg
ICAgIHJlc3VsdCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoYXJncywgY29udGV4dCk7CiAg
ICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRSYWRpYWxHcmFkaWVudCkKLSAgICAgICAg
cmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1v
ZGUsIE5vblJlcGVhdGluZyk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVEZXByZWNhdGVkUmFk
aWFsR3JhZGllbnQoYXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5nKTsKICAgICBlbHNlIGlmIChp
ZCA9PSBDU1NWYWx1ZVdlYmtpdFJlcGVhdGluZ1JhZGlhbEdyYWRpZW50KQotICAgICAgICByZXN1
bHQgPSBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwg
UmVwZWF0aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFk
aWVudChhcmdzLCBjb250ZXh0LCBSZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1Zh
bHVlQ29uaWNHcmFkaWVudCkKICAgICAgICAgcmVzdWx0ID0gY29uc3VtZUNvbmljR3JhZGllbnQo
YXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5nKTsKICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1
ZVJlcGVhdGluZ0NvbmljR3JhZGllbnQpCkBAIC0yMDE3LDcgKzIwMzUsNyBAQCBzdGF0aWMgUmVm
UHRyPENTU0Z1bmN0aW9uVmFsdWU+IGNvbnN1bWVGCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZWRWYWx1ZTsKIAogICAgIGlmIChmaWx0ZXJUeXBlID09IENTU1ZhbHVlRHJvcFNoYWRvdykKLSAg
ICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KGFyZ3MsIGNvbnRleHQubW9k
ZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lU2luZ2xlU2hh
ZG93KGFyZ3MsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlm
IChhcmdzLmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWU7CkBAIC0yMDY0
LDcgKzIwODIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGaWx0ZXIoQ1NTUGFyc2VyCiAg
ICAgcmV0dXJuIGxpc3QucHRyKCk7CiB9CiAKLVJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3Vt
ZVNpbmdsZVNoYWRvdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBj
c3NQYXJzZXJNb2RlLCBib29sIGFsbG93SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpCitSZWZQdHI8
Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIGJvb2wgYWxsb3dJbnNldCwg
Ym9vbCBhbGxvd1NwcmVhZCkKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0eWxl
OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7CkBAIC0yMDg5LDcgKzIxMDcs
NyBAQCBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYXV0byBtYXliZUNvbG9y
ID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAgYXV0byBtYXli
ZUNvbG9yID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgaWYgKG1heWJl
Q29sb3IpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGp1c3QgcGFyc2VkIGEgY29sb3IgYnV0IGFs
cmVhZHkgaGFkIG9uZSwgdGhlIGdpdmVuIHRva2VuIHJhbmdlIGlzIG5vdCBhIHZhbGlkIDxzaGFk
b3c+LgogICAgICAgICAgICAgaWYgKGNvbG9yKQpAQCAtMjEwMywyMyArMjEyMSwyMyBAQCBSZWZQ
dHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgICAgICAgICAvLyBJZiB3
ZSd2ZSBhbHJlYWR5IHBhcnNlZCB0aGVzZSBsZW5ndGhzLCB0aGUgZ2l2ZW4gdmFsdWUgaXMgaW52
YWxpZCBhcyB0aGVyZSBjYW5ub3QgYmUgdHdvIGxlbmd0aHMgY29tcG9uZW50cyBpbiBhIHNpbmds
ZSA8c2hhZG93PiB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
Ci0gICAgICAgIGhvcml6b250YWxPZmZzZXQgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjc3NQYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgaG9yaXpvbnRhbE9mZnNldCA9IGNvbnN1
bWVMZW5ndGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAgIGlm
ICghaG9yaXpvbnRhbE9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB2ZXJ0aWNhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZh
bHVlUmFuZ2VBbGwpOworICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgocmFu
Z2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAgIGlmICghdmVydGljYWxP
ZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBjb25zdCBDU1NQ
YXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgICAgIC8vIFRoZSBleHBsaWNp
dCBjaGVjayBmb3IgY2FsYygpIGlzIHVuZm9ydHVuYXRlLiBUaGlzIGlzIGVuc3VyaW5nIHRoYXQg
d2Ugb25seSBmYWlsIHBhcnNpbmcgaWYgdGhlcmUgaXMgYSBsZW5ndGgsIGJ1dCBpdCBmYWlscyB0
aGUgcmFuZ2UgY2hlY2suCiAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9r
ZW4gfHwgdG9rZW4udHlwZSgpID09IE51bWJlclRva2VuIHx8ICh0b2tlbi50eXBlKCkgPT0gRnVu
Y3Rpb25Ub2tlbiAmJiBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKHRva2VuLmZ1bmN0aW9u
SWQoKSkpKSB7Ci0gICAgICAgICAgICBibHVyUmFkaXVzID0gY29uc3VtZUxlbmd0aChyYW5nZSwg
Y3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKKyAgICAgICAgICAgIGJsdXJS
YWRpdXMgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VOb25O
ZWdhdGl2ZSk7CiAgICAgICAgICAgICBpZiAoIWJsdXJSYWRpdXMpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYmx1clJhZGl1cyAmJiBh
bGxvd1NwcmVhZCkKLSAgICAgICAgICAgIHNwcmVhZERpc3RhbmNlID0gY29uc3VtZUxlbmd0aChy
YW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgICAgICBzcHJlYWRE
aXN0YW5jZSA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFs
bCk7CiAgICAgfQogICAgIAogICAgIC8vIEluIG9yZGVyIGZvciB0aGlzIHRvIGJlIGEgdmFsaWQg
PHNoYWRvdz4sIGF0IGxlYXN0IHRoZXNlIGxlbmd0aHMgbXVzdCBiZSBwcmVzZW50LgpAQCAtMjEy
OCw3ICsyMTQ2LDcgQEAgUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZAog
ICAgIHJldHVybiBDU1NTaGFkb3dWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaG9yaXpvbnRhbE9mZnNl
dCksIFdURk1vdmUodmVydGljYWxPZmZzZXQpLCBXVEZNb3ZlKGJsdXJSYWRpdXMpLCBXVEZNb3Zl
KHNwcmVhZERpc3RhbmNlKSwgV1RGTW92ZShzdHlsZSksIFdURk1vdmUoY29sb3IpKTsKIH0KIAot
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlckNvbnRleHQgY29udGV4dCwgT3B0aW9uU2V0PEFsbG93ZWRJbWFnZVR5cGU+IGFs
bG93ZWRJbWFnZVR5cGVzKQorUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIE9wdGlv
blNldDxBbGxvd2VkSW1hZ2VUeXBlPiBhbGxvd2VkSW1hZ2VUeXBlcykKIHsKICAgICBpZiAoKHJh
bmdlLnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pICYmIChhbGxvd2VkSW1hZ2VUeXBlcy5j
b250YWlucyhBbGxvd2VkSW1hZ2VUeXBlOjpSYXdTdHJpbmdBc1VSTCkpKSB7CiAgICAgICAgIGF1
dG8gdXJsU3RyaW5nVmlldyA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFs
dWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDggKzEwMiw4IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVN0cmluZygK
IFN0cmluZ1ZpZXcgY29uc3VtZVVybEFzU3RyaW5nVmlldyhDU1NQYXJzZXJUb2tlblJhbmdlJik7
CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVVcmwoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYpOwogCi1Db2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NQYXJzZXJNb2RlKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNvbG9y
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFjY2VwdFF1aXJreUNv
bG9ycyA9IGZhbHNlKTsKK0NvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMgPSBmYWxzZSk7CiAKIGVudW0gY2xhc3Mg
UG9zaXRpb25TeW50YXggewogICAgIFBvc2l0aW9uLCAvLyA8cG9zaXRpb24+CkBAIC0xMjYsOSAr
MTI2LDggQEAgZW51bSBjbGFzcyBBbGxvd2VkSW1hZ2VUeXBlIDogdWludDhfdCB7CiAgICAgR2Vu
ZXJhdGVkSW1hZ2UgPSAxIDw8IDMKIH07CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdl
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBPcHRpb25TZXQ8QWxsb3dl
ZEltYWdlVHlwZT4gPSB7IEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1h
Z2VUeXBlOjpJbWFnZVNldCwgQWxsb3dlZEltYWdlVHlwZTo6R2VuZXJhdGVkSW1hZ2UgfSk7Ci0K
LVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NQYXJzZXJDb250ZXh0KTsKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgT3B0aW9uU2V0PEFsbG93
ZWRJbWFnZVR5cGU+ID0geyBBbGxvd2VkSW1hZ2VUeXBlOjpVUkxGdW5jdGlvbiwgQWxsb3dlZElt
YWdlVHlwZTo6SW1hZ2VTZXQsIEFsbG93ZWRJbWFnZVR5cGU6OkdlbmVyYXRlZEltYWdlIH0pOwor
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIAogZW51bSBjbGFzcyBBbGxvd2VkRmlsdGVyRnVu
Y3Rpb25zIHsKICAgICBQaXhlbEZpbHRlcnMsCkBAIC0xMzYsNyArMTM1LDcgQEAgZW51bSBjbGFz
cyBBbGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsKIH07CiAKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZUZpbHRlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIEFs
bG93ZWRGaWx0ZXJGdW5jdGlvbnMpOwotUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2lu
Z2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFsbG93
SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpOworUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1l
U2luZ2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiwgYm9vbCBhbGxvd0luc2V0LCBib29sIGFsbG93U3ByZWFkKTsKIAogc3RydWN0IEZvbnRTdHls
ZVJhdyB7CiAgICAgQ1NTVmFsdWVJRCBzdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjAwLDcgKzYwMCw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJ
blIKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0
aGUgdW5kZXJsaW5lIGNvbG9yIHRvIHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEg
YnkgMzglLAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBw
ZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBj
YW4gYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5saWdodG5lc3Mg
PSAwLjVmOworICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5saWdodG5lc3MgPSA1MC4wZjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEuYWxwaGEgKj0gMC4zOGY7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBrZWVwaW5nIGNvbG9yIGluIExDSEEgKGlmIHRoYXQgY2hhbmdlIGlzIG1hZGUpIG9yIGNvbnZl
cnRpbmcgYmFjayB0byB0aGUgaW5pdGlhbCB1bmRlcmx5aW5nIGNvbG9yIHR5cGUgdG8gYXZvaWQg
dW5uZWNlc3NhcmlseSBjbGFtcGluZyBjb2xvcnMgb3V0c2lkZSBvZiBzUkdCLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
Y3BwCShyZXZpc2lvbiAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw2IEBAIHN0
YXRpYyBIU0xIdWVDYWxjdWxhdGlvblJlc3VsdCBjYWxjdWxhdGUKICAgICBpZiAoaHVlID49IDM2
MC4wZikKICAgICAgICAgaHVlIC09IDM2MC4wZjsKIAotICAgIGh1ZSAvPSAzNjAuMGY7Ci0KICAg
ICByZXR1cm4geyBodWUsIG1pbiwgbWF4LCBjaHJvbWEgfTsKIH0KIApAQCAtNjksMTQgKzY3LDE0
IEBAIEhTTEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0PiwKICAgICBhdXRvIFty
LCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKICAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFd
ID0gY2FsY3VsYXRlSFNMSHVlKGNvbG9yKTsKIAotICAgIGZsb2F0IGxpZ2h0bmVzcyA9IDAuNWYg
KiAobWF4ICsgbWluKTsKKyAgICBmbG9hdCBsaWdodG5lc3MgPSAoMC41ZiAqIChtYXggKyBtaW4p
KSAqIDEwMC4wZjsKICAgICBmbG9hdCBzYXR1cmF0aW9uOwogICAgIGlmICghY2hyb21hKQogICAg
ICAgICBzYXR1cmF0aW9uID0gMDsKLSAgICBlbHNlIGlmIChsaWdodG5lc3MgPD0gMC41ZikKLSAg
ICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEgLyAobWF4ICsgbWluKSk7CisgICAgZWxzZSBpZiAo
bGlnaHRuZXNzIDw9IDUwLjBmKQorICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAvIChtYXgg
KyBtaW4pKSAqIDEwMC4wZjsKICAgICBlbHNlCi0gICAgICAgIHNhdHVyYXRpb24gPSAoY2hyb21h
IC8gKDIuMGYgLSAobWF4ICsgbWluKSkpOworICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAv
ICgyLjBmIC0gKG1heCArIG1pbikpKSAqIDEwMC4wZjsKIAogICAgIHJldHVybiB7IGh1ZSwgc2F0
dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9OwogfQpAQCAtODYsMTEgKzg0LDI2IEBAIFNSR0JB
PGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAvLyBodHRwczovL2RyYWZ0
cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IKICAgICBhdXRvIFtodWUsIHNhdHVy
YXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3I7CiAKLSAgICBpZiAoIXNhdHVyYXRpb24p
Ci0gICAgICAgIHJldHVybiB7IGxpZ2h0bmVzcywgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGFscGhh
IH07Ci0gICAgCi0gICAgZmxvYXQgdGVtcDIgPSBsaWdodG5lc3MgPD0gMC41ZiA/IGxpZ2h0bmVz
cyAqICgxLjBmICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRu
ZXNzICogc2F0dXJhdGlvbjsKLSAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBsaWdodG5lc3MgLSB0
ZW1wMjsKKyAgICBpZiAoIXNhdHVyYXRpb24pIHsKKyAgICAgICAgYXV0byBncmV5ID0gbGlnaHRu
ZXNzIC8gMTAwLjBmOworICAgICAgICByZXR1cm4geyBncmV5LCBncmV5LCBncmV5LCBhbHBoYSB9
OworICAgIH0KKworICAgIC8vIGh1ZVRvUkdCKCkgd2FudHMgaHVlIGluIHRoZSAwLTYgcmFuZ2Uu
CisgICAgYXV0byBub3JtYWxpemVkSHVlID0gKGh1ZSAvIDM2MC4wZikgKiA2LjBmOworICAgIGF1
dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IGxpZ2h0bmVzcyAvIDEwMC4wZjsKKyAgICBhdXRvIG5v
cm1hbGl6ZWRTYXR1cmF0aW9uID0gc2F0dXJhdGlvbiAvIDEwMC4wZjsKKworICAgIGF1dG8gaHVl
Rm9yUmVkID0gbm9ybWFsaXplZEh1ZSArIDIuMGY7CisgICAgYXV0byBodWVGb3JHcmVlbiA9IG5v
cm1hbGl6ZWRIdWU7CisgICAgYXV0byBodWVGb3JCbHVlID0gbm9ybWFsaXplZEh1ZSAtIDIuMGY7
CisgICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCisgICAgICAgIGh1ZUZvclJlZCAtPSA2LjBmOwor
ICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQorICAgICAgICBodWVGb3JCbHVlICs9IDYu
MGY7CisKKyAgICBmbG9hdCB0ZW1wMiA9IG5vcm1hbGl6ZWRMaWdodG5lc3MgPD0gMC41ZiA/IG5v
cm1hbGl6ZWRMaWdodG5lc3MgKiAoMS4wZiArIG5vcm1hbGl6ZWRTYXR1cmF0aW9uKSA6IG5vcm1h
bGl6ZWRMaWdodG5lc3MgKyBub3JtYWxpemVkU2F0dXJhdGlvbiAtIG5vcm1hbGl6ZWRMaWdodG5l
c3MgKiBub3JtYWxpemVkU2F0dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBub3Jt
YWxpemVkTGlnaHRuZXNzIC0gdGVtcDI7CiAgICAgCiAgICAgLy8gSHVlIGlzIGluIHRoZSByYW5n
ZSAwLTYsIG90aGVyIGFyZ3MgaW4gMC0xLgogICAgIGF1dG8gaHVlVG9SR0IgPSBbXShmbG9hdCB0
ZW1wMSwgZmxvYXQgdGVtcDIsIGZsb2F0IGh1ZSkgewpAQCAtMTAzLDE3ICsxMTYsNiBAQCBTUkdC
QTxmbG9hdD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0CiAgICAgICAgIHJldHVybiB0ZW1w
MTsKICAgICB9OwogCi0gICAgLy8gaHVlVG9SR0IoKSB3YW50cyBodWUgaW4gdGhlIDAtNiByYW5n
ZS4KLSAgICBodWUgKj0gNi4wZjsKLQotICAgIGF1dG8gaHVlRm9yUmVkID0gaHVlICsgMi4wZjsK
LSAgICBhdXRvIGh1ZUZvckdyZWVuID0gaHVlOwotICAgIGF1dG8gaHVlRm9yQmx1ZSA9IGh1ZSAt
IDIuMGY7Ci0gICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCi0gICAgICAgIGh1ZUZvclJlZCAtPSA2
LjBmOwotICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQotICAgICAgICBodWVGb3JCbHVl
ICs9IDYuMGY7Ci0KICAgICByZXR1cm4gewogICAgICAgICBodWVUb1JHQih0ZW1wMSwgdGVtcDIs
IGh1ZUZvclJlZCksCiAgICAgICAgIGh1ZVRvUkdCKHRlbXAxLCB0ZW1wMiwgaHVlRm9yR3JlZW4p
LApAQCAtMTI4LDggKzEzMCw4IEBAIEhXQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIV0JBPGZs
b2F0PiwKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI3Jn
Yi10by1od2IKICAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNM
SHVlKGNvbG9yKTsKLSAgICBhdXRvIHdoaXRlbmVzcyA9IG1pbjsKLSAgICBhdXRvIGJsYWNrbmVz
cyA9IDEuMGYgLSBtYXg7CisgICAgYXV0byB3aGl0ZW5lc3MgPSBtaW4gKiAxMDAuMGY7CisgICAg
YXV0byBibGFja25lc3MgPSAoMS4wZiAtIG1heCkgKiAxMDAuMGY7CiAgICAgCiAgICAgcmV0dXJu
IHsgaHVlLCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgY29sb3IuYWxwaGEgfTsKIH0KQEAgLTEzOSw4
ICsxNDEsMjQgQEAgU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdAogICAg
IC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHdiLXRvLXJnYgogICAg
IGF1dG8gW2h1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGFscGhhXSA9IGNvbG9yOwogCi0gICAg
aWYgKHdoaXRlbmVzcyArIGJsYWNrbmVzcyA9PSAxLjBmKQotICAgICAgICByZXR1cm4geyB3aGl0
ZW5lc3MsIHdoaXRlbmVzcywgd2hpdGVuZXNzLCBhbHBoYSB9OworICAgIGlmICh3aGl0ZW5lc3Mg
KyBibGFja25lc3MgPT0gMTAwLjBmKSB7CisgICAgICAgIGF1dG8gZ3JleSA9IHdoaXRlbmVzcyAv
IDEwMC4wZjsKKyAgICAgICAgcmV0dXJuIHsgZ3JleSwgZ3JleSwgZ3JleSwgYWxwaGEgfTsKKyAg
ICB9CisKKyAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgorICAg
IGF1dG8gbm9ybWFsaXplZEh1ZSA9IChodWUgLyAzNjAuMGYpICogNi4wZjsKKworICAgIGF1dG8g
aHVlRm9yUmVkID0gbm9ybWFsaXplZEh1ZSArIDIuMGY7CisgICAgYXV0byBodWVGb3JHcmVlbiA9
IG5vcm1hbGl6ZWRIdWU7CisgICAgYXV0byBodWVGb3JCbHVlID0gbm9ybWFsaXplZEh1ZSAtIDIu
MGY7CisgICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCisgICAgICAgIGh1ZUZvclJlZCAtPSA2LjBm
OworICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQorICAgICAgICBodWVGb3JCbHVlICs9
IDYuMGY7CisKKyAgICBhdXRvIG5vcm1hbGl6ZWRXaGl0ZW5lc3MgPSB3aGl0ZW5lc3MgLyAxMDAu
MGY7CisgICAgYXV0byBub3JtYWxpemVkQmxhY2tuZXNzID0gYmxhY2tuZXNzIC8gMTAwLjBmOwog
CiAgICAgLy8gVGhpcyBpcyB0aGUgaHVlVG9SR0IgZnVuY3Rpb24gaW4gY29udmVydENvbG9yPFNS
R0JBPGZsb2F0Pj4oY29uc3QgSFNMQSYpIHdpdGggdGVtcDEgPT0gMAogICAgIC8vIGFuZCB0ZW1w
MiA9PSAxIHN0cmVuZ3RoIHJlZHVjZWQgdGhyb3VnaCBpdC4KQEAgLTE1NCwyNSArMTcyLDE0IEBA
IFNSR0JBPGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAgICAgcmV0dXJu
IDAuMGY7CiAgICAgfTsKIAotICAgIGF1dG8gYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MgPSBbJl0o
ZmxvYXQgY29tcG9uZW50KSB7Ci0gICAgICAgIHJldHVybiAoY29tcG9uZW50ICogKDEuMGYgLSBj
b2xvci53aGl0ZW5lc3MgLSBjb2xvci5ibGFja25lc3MpKSArIGNvbG9yLndoaXRlbmVzczsKKyAg
ICBhdXRvIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzID0gW10oZmxvYXQgY29tcG9uZW50LCBhdXRv
IHdoaXRlbmVzcywgYXV0byBibGFja25lc3MpIHsKKyAgICAgICAgcmV0dXJuIChjb21wb25lbnQg
KiAoMS4wZiAtIHdoaXRlbmVzcyAtIGJsYWNrbmVzcykpICsgd2hpdGVuZXNzOwogICAgIH07CiAK
LSAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgotICAgIGh1ZSAq
PSA2LjBmOwotCi0gICAgYXV0byBodWVGb3JSZWQgPSBodWUgKyAyLjBmOwotICAgIGF1dG8gaHVl
Rm9yR3JlZW4gPSBodWU7Ci0gICAgYXV0byBodWVGb3JCbHVlID0gaHVlIC0gMi4wZjsKLSAgICBp
ZiAoaHVlRm9yUmVkID4gNi4wZikKLSAgICAgICAgaHVlRm9yUmVkIC09IDYuMGY7Ci0gICAgZWxz
ZSBpZiAoaHVlRm9yQmx1ZSA8IDAuMGYpCi0gICAgICAgIGh1ZUZvckJsdWUgKz0gNi4wZjsKLQog
ICAgIHJldHVybiB7Ci0gICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1
ZUZvclJlZCkpLAotICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVG
b3JHcmVlbikpLAotICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVG
b3JCbHVlKSksCisgICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZv
clJlZCksIG5vcm1hbGl6ZWRXaGl0ZW5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3MpLAorICAgICAg
ICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JHcmVlbiksIG5vcm1hbGl6
ZWRXaGl0ZW5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3MpLAorICAgICAgICBhcHBseVdoaXRlbmVz
c0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JCbHVlKSwgbm9ybWFsaXplZFdoaXRlbmVzcywgbm9y
bWFsaXplZEJsYWNrbmVzcyksCiAgICAgICAgIGFscGhhCiAgICAgfTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAkocmV2aXNpb24g
MjcyODM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IEV4
dGVuZGVkUkdCTW9kZWw8ZmxvYXQKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8ZmxvYXQ+
IHsKICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTxm
bG9hdD4sIDM+IHJhbmdlcyB7IHsKLSAgICAgICAgeyAwLCAxIH0sCi0gICAgICAgIHsgMCwgMSB9
LAotICAgICAgICB7IDAsIDEgfQorICAgICAgICB7IDAsIDM2MCB9LAorICAgICAgICB7IDAsIDEw
MCB9LAorICAgICAgICB7IDAsIDEwMCB9CiAgICAgfSB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEhXQk1v
ZGVsPGZsb2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9u
ZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7Ci0gICAgICAgIHsgMCwgMSB9LAotICAgICAg
ICB7IDAsIDEgfSwKLSAgICAgICAgeyAwLCAxIH0KKyAgICAgICAgeyAwLCAzNjAgfSwKKyAgICAg
ICAgeyAwLCAxMDAgfSwKKyAgICAgICAgeyAwLCAxMDAgfQogICAgIH0gfTsKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNzI4MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIyLDcgKzE0MjIsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6ZGF0ZVBsYWNlaG9sZGVyVGV4dENv
CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHVzaW5nIExDSEE8ZmxvYXQ+IHJhdGhlciB0aGFuIEhT
TEE8ZmxvYXQ+IGZvciBiZXR0ZXIgcGVyY2VwdHVhbCByZXN1bHRzIGFuZCB0byBhdm9pZCBjbGFt
cGluZyB0byBzUkdCIGdhbXV0LCB3aGljaCBpcyB3aGF0IEhTTEEgZG9lcy4KICAgICBhdXRvIGhz
bGEgPSB0ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKICAgICBpZiAo
dGV4dENvbG9yLmx1bWluYW5jZSgpIDwgYmFja2dyb3VuZENvbG9yLmx1bWluYW5jZSgpKQotICAg
ICAgICBoc2xhLmxpZ2h0bmVzcyArPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVz
dG1lbnRGYWN0b3IgKiAoMS4wZiAtIGhzbGEubGlnaHRuZXNzKTsKKyAgICAgICAgaHNsYS5saWdo
dG5lc3MgKz0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW50RmFjdG9yICog
KDEwMC4wZiAtIGhzbGEubGlnaHRuZXNzKTsKICAgICBlbHNlCiAgICAgICAgIGhzbGEubGlnaHRu
ZXNzICo9IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVudEZhY3RvcjsKIApJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjcyODQyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMjEtMDItMTQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisg
ICAgICAgIFByZXBhcmUgZm9yIGFkZGluZyByZWxhdGl2ZSBjb2xvciBzdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE4ODEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgVXBkYXRlIEhTTEEgdGVzdHMg
dG8gYWNjb3VudCBmb3IgSFNMQSBub3cgdXNpbmcgMC0zNjAsIDAtMTAwLCAwLTEwMCBib3VuZHMg
cmF0aGVyIHRoYW4gMC0xLCAwLTEsIDAtMS4KKwogMjAyMS0wMi0xNCAgUGVuZyBMaXUgIDxwZW5n
LmxpdTZAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFVQXSBNb3ZlIFVzZUdQVVByb2Nlc3NGb3JN
ZWRpYUVuYWJsZWQgZnJvbSBXZWJQcmVmZXJlbmNlc0ludGVybmFsIHRvIFdlYlByZWZlcmVuY2Vz
RXhwZXJpbWVudGFsCkBAIC0xMDM3LDYgKzEwNDcsMTkgQEAKIAogMjAyMS0wMi0wNyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKKyAgICAgICAgVXBkYXRlIHNSR0IgPC0+IFhZWiBj
b252ZXJzaW9uIG1hdHJpeCB2YWx1ZXMgdG8gbWF0Y2ggdmFsdWVzIGluIGxhdGVzdCBzcGVjCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE1MzMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIFVwZGF0ZSB2YWx1ZXMgdG8gdmFsdWVzIGluIFAz
IDwtPiBzUkdCIGNvbnZlcnNpb24gdGVzdCBhbmQgdXBkYXRlIHRvCisgICAgICAgIHVzZSBFWFBF
Q1RfRkxPQVRfRVEgc28gdGhlIHZhbHVlcyBjYW4gYmUgc2VlbiBpbiB0aGUgb3V0cHV0IHdoZW4g
dGhpZ3MKKyAgICAgICAgZmFpbC4KKworMjAyMS0wMi0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0Bh
cHBsZS5jb20+CisKICAgICAgICAgUmVtb3ZlIG1vcmUgc3BlY2lhbCBjYXNlcyBmcm9tIGNvbG9y
IGNvbnZlcnNpb24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMTUxOQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29s
b3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNzI4MzcpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkg
KzQyLDkgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiAKICAgICBFWFBFQ1RfRkxPQVRf
RVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5z
YXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0g
ICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNz
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xv
ci5saWdodG5lc3MpOwogICAgIAogICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0
Q29sb3I8U1JHQkE8dWludDhfdD4+KGhzbGFDb2xvcik7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCBy
b3VuZFRyaXBwZWRDb2xvcik7CkBAIC02MCw3ICs2MCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X0JsYWNrKQogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNU
X0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xvci5saWdodG5l
c3MpOwogCiAgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1
aW50OF90Pj4oaHNsYUNvbG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENv
bG9yKTsKQEAgLTczLDEwICs3MywxMCBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiAgICAg
YXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwog
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwotICAgIEVYUEVDVF9GTE9B
VF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwg
aHNsYUNvbG9yLmxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNsYUNvbG9y
LnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSg1MCwgaHNsYUNvbG9yLmxpZ2h0bmVz
cyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5s
aWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSAqIDEwMCwg
aHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKICAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29u
dmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAgIEVYUEVDVF9FUShjb2xv
ciwgcm91bmRUcmlwcGVkQ29sb3IpOwpAQCAtODgsMTEgKzg4LDExIEBAIFRFU1QoQ29sb3IsIFJH
QlRvSFNMX0dyZWVuKQogCiAgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxv
c3N5PEhTTEE8ZmxvYXQ+PigpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGhz
bGFDb2xvci5odWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlv
bik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDEyMCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDEwMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSg1MCwgaHNs
YUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNz
KCksIGhzbGFDb2xvci5saWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdo
dG5lc3MoKSAqIDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKICAgICBhdXRvIHJvdW5kVHJp
cHBlZENvbG9yID0gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAg
IEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwpAQCAtMTA0LDExICsxMDQsMTEg
QEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIAogICAgIGF1dG8gaHNsYUNvbG9yID0gY29s
b3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKIAotICAgIEVYUEVDVF9GTE9BVF9F
USgwLjY2NjY2NjY5LCBoc2xhQ29sb3IuaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGhzbGFDb2xvci5s
aWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDAsIGhzbGFDb2xvci5odWUpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgxMDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNTAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VR
KGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoY29sb3IubGlnaHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCiAg
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4o
aHNsYUNvbG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKQEAg
LTEyMiw5ICsxMjIsOSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3JheSkKIAogICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwg
aHNsYUNvbG9yLnNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUwMTk2MDc4NDMx
MzcyNTQ4LCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAuMTk2
MDgzLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKICAgICAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29s
b3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9F
UShjb2xvci5saWdodG5lc3MoKSAqIDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKICAgICBh
dXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xh
Q29sb3IpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwpAQCAtMTM4
LDkgKzEzOCw5IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xv
ci5zYXR1cmF0aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC42Mjc0NTA5ODAzOTIxNTY4NSwg
aHNsYUNvbG9yLmxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYyLjc0NTEwMiwgaHNs
YUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNz
KCksIGhzbGFDb2xvci5saWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdo
dG5lc3MoKSAqIDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKICAgICBhdXRvIHJvdW5kVHJp
cHBlZENvbG9yID0gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAg
IEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwpAQCAtMTU0LDkgKzE1NCw5IEBA
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgw
LCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVy
YXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjc1Mjk0MTE3NjQ3MDU4ODIyLCBoc2xhQ29s
b3IubGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzUuMjk0MTIxLCBoc2xhQ29sb3Iu
bGlnaHRuZXNzKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNs
YUNvbG9yLmxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygp
ICogMTAwLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAogICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KGhzbGFDb2xvcik7CiAgICAgRVhQRUNU
X0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420330</attachid>
            <date>2021-02-15 10:32:22 -0800</date>
            <delta_ts>2021-02-15 13:10:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221881-20210215103221.patch</filename>
            <type>text/plain</type>
            <size>78511</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDIxLTAyLTE1ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVwYXJlIGZvciBhZGRpbmcgcmVs
YXRpdmUgY29sb3Igc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxODgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBleHBlcmltZW50YWwgcmVsYXRpdmUg
Y29sb3Igc3VwcG9ydCBhIGxpdHRsZSBjbGVhbnVwCisgICAgICAgIGlzIGluIG9yZGVyLiBUaGlz
IGNoYW5nZToKKyAgICAgICAgCisgICAgICAgIC0gVGhyZWFkcyBhIENTU1BhcnNlckNvbnRleHQg
dGhyb3VnaCB0aGUgY29sb3IgcGFyc2luZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBiZQorICAgICAg
ICAgIG5lZWRlZCB0byBjaGVjayBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdC4KKyAg
ICAgICAgLSBEb2VzIGEgc21hbGwgY2xlYW51cCBvZiBDU1NQYXJzZXJDb250ZXh0LCBzb3J0aW5n
IGZlYXR1cmVzIGFuZCB1c2luZyB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICBsaXN0IGlu
IHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgLSBSZWZhY3RvcnMgc29tZSBvZiB0aGUgY29sb3Ig
cGFyc2luZyBoZWxwZXJzIHRvIGV4dHJhY3QgbW9yZSBoZWxwZXJzLiBUaGVzZSBjbGFyaWZ5Cisg
ICAgICAgICAgdGhlIGNvZGUgYmV0dGVyIGFuZCB3aWxsIGJlIHNoYXJlZCBieSB0aGUgcmVsYXRp
dmUgcGFyc2Vycy4KKyAgICAgICAgLSBNb3ZlIG5vcm1hbGl6YXRpb24gb2YgY29tcG9uZW50cyB0
byBhZnRlciBwYXJzaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHdvcmsKKyAgICAgICAgICBpbiB0
aGUgY2FzZSBvZiBmYWlsdXJlIGFuZCBzZXBhcmF0ZSB0aGUgcGhhc2VzIGEgYml0IG1vcmUuCisg
ICAgICAgIC0gUmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IFZhbHVlUmFuZ2VBbGwgcGFyYW1ldGVy
cyB0aGF0IHdlcmUgYWxyZWFkeSB0aGUgZGVmYXVsdC4KKyAgICAgICAgLSBTd2l0Y2ggSFNMQSBh
bmQgSFdCQSB0byBzdG9wIHN0b3JpbmcgdGhlaXIgY29tcG9uZW50cyBpbiBhIDAtMSBub3JtYWxp
emF0aW9uCisgICAgICAgICAgYW5kIGluc3RlYWQgdXNlIHZhbHVlcyB0aGF0IG1hdGNoIHRoZSBp
bnB1dCwgMC0zNjAgZm9yIGh1ZSwgYW5kIDAtMTAwIGZvciB0aGUKKyAgICAgICAgICB0aGUgcmVt
YWluaW5nIHR3byBjb21wb25lbnRzLiBUaGlzIHNlZW1zIG1vcmUgbmF0dXJhbCwgYW5kIHdpbGwg
c2ltcGxpZnkKKyAgICAgICAgICBmdXR1cmUgY29sb3IgZnVuY3Rpb24gd29yayB0aGF0IGV4cGVj
dHMgdGhlIHZhbHVlcyBpbiB0aGlzIGZvcm0uCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3JrZXJT
YWZlKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvdWxkRW5hYmxlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFy
c2VyQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dEhhc2g6Omhh
c2gpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29uc3VtZVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ2Fy
ZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lT3V0bGluZUNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN1bWVQYWludFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dW1lQmFja2dyb3VuZENvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlcjo6cGFyc2VTaW5nbGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlcjo6Y29uc3VtZUJvcmRlcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpub3JtYWxpemVIdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUkdCUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlSFNMUGFyYW1ldGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6ZVdo
aXRlbmVzc0JsYWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OnBhcnNlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OnBhcnNlTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTENIUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclJH
QlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFy
c2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlBhcmFtZXRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9y
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lQ29sb3JXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNhdGVk
R3JhZGllbnRDb2xvclN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNhdGVk
UmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGluZWFyR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29uaWNHcmFkaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbWFnZU9yTm9u
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVD
cm9zc0ZhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lR2VuZXJhdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lU2luZ2xlU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VPcHRpb25hbEFscGhhKTog
RGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5o
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW1h
Z2UpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsY3VsYXRlSFNMSHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNSR0JBPGZsb2F0Pj46OmNv
bnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFNMQTxmbG9hdD4+Ojpjb252ZXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhXQkE8ZmxvYXQ+Pjo6Y29udmVydCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JNb2RlbHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmRhdGVQbGFjZWhvbGRlclRleHRD
b2xvciBjb25zdCk6CisKIDIwMjEtMDItMTQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxl
LmNvbT4KIAogICAgICAgICBbaU9TXSBNb2JpbGVTYWZhcmkgY3Jhc2hlcyBhdCBXZWJDb3JlOiBX
ZWJDb3JlOjpWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZG9FbnRlckZ1bGxzY3JlZW4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDI3
MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIENvbG9yIENTU1BhcnNlcjo6cGFyc2VDb2xvcldv
cmtlclNhZmUoY28KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50b2tl
blJhbmdlKCkpOwogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKLSAgICByZXR1cm4g
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdlLCBI
VE1MU3RhbmRhcmRNb2RlKTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lQ29sb3JXb3JrZXJTYWZlKHJhbmdlLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwog
fQogCiBDb2xvciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoU3RyaW5nVmlldyBzdHJpbmcp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyQ29udGV4dC5j
cHAJKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywzOSArNDcsNDYgQEAgQ1NTUGFy
c2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChDU1NQYQogewogfQogCi1DU1NQYXJzZXJDb250
ZXh0OjpDU1NQYXJzZXJDb250ZXh0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJM
JiBzaGVldEJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLSAgICA6IGJhc2VVUkwoc2hl
ZXRCYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogc2hlZXRCYXNlVVJMKQot
ICAgICwgY2hhcnNldChjaGFyc2V0KQotICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01vZGUo
KSA/IEhUTUxRdWlya3NNb2RlIDogSFRNTFN0YW5kYXJkTW9kZSkKLSAgICAsIGlzSFRNTERvY3Vt
ZW50KGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luKHNoZWV0QmFzZVVSTC5pc051bGwoKSB8fCBkb2N1bWVudC5zZWN1cml0eU9yaWdpbigp
LmNhblJlcXVlc3QoYmFzZVVSTCkpCi17Ci0gICAgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWly
a3NNb2RlID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVpcmtz
TW9kZSgpOwotICAgIHVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IgPSBk
b2N1bWVudC5zZXR0aW5ncygpLnVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZp
b3IoKTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHRleHRBdXRvc2l6aW5nRW5h
YmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0jZW5k
aWYKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIGxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2hFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5sZWdhY3lPdmVy
Zmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCgpOworc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlTGVn
YWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CiAg
ICAgLy8gVGhlIGxlZ2FjeSAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2ggYmVoYXZp
b3IgbWF5IGhhdmUgYmVlbiBkaXNhYmxlZCB0aHJvdWdoIHRoZSB3ZWJzaXRlIHBvbGljeSwKICAg
ICAvLyBpbiB0aGF0IGNhc2Ugd2Ugd2FudCB0byBkaXNhYmxlIHRoZSBsZWdhY3kgYmVoYXZpb3Ig
cmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBzZXR0aW5nIHNheXMuCiAgICAgaWYgKGF1dG8qIGxvYWRl
ciA9IGRvY3VtZW50LmxvYWRlcigpKSB7CiAgICAgICAgIGlmIChsb2FkZXItPmxlZ2FjeU92ZXJm
bG93U2Nyb2xsaW5nVG91Y2hQb2xpY3koKSA9PSBMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNo
UG9saWN5OjpEaXNhYmxlKQotICAgICAgICAgICAgbGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3Vj
aEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAg
cmV0dXJuIGRvY3VtZW50LnNldHRpbmdzKCkubGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaEVu
YWJsZWQoKTsKK30KKyNlbmRpZgorCitDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0
KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBzaGVldEJhc2VVUkwsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCkKKyAgICA6IGJhc2VVUkwgeyBzaGVldEJhc2VVUkwuaXNOdWxsKCkg
PyBkb2N1bWVudC5iYXNlVVJMKCkgOiBzaGVldEJhc2VVUkwgfQorICAgICwgY2hhcnNldCB7IGNo
YXJzZXQgfQorICAgICwgbW9kZSB7IGRvY3VtZW50LmluUXVpcmtzTW9kZSgpID8gSFRNTFF1aXJr
c01vZGUgOiBIVE1MU3RhbmRhcmRNb2RlIH0KKyAgICAsIGlzSFRNTERvY3VtZW50IHsgZG9jdW1l
bnQuaXNIVE1MRG9jdW1lbnQoKSB9CisgICAgLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIHsg
c2hlZXRCYXNlVVJMLmlzTnVsbCgpIHx8IGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuY2FuUmVx
dWVzdChiYXNlVVJMKSB9CisgICAgLCB1c2VTeXN0ZW1BcHBlYXJhbmNlIHsgZG9jdW1lbnQucGFn
ZSgpID8gZG9jdW1lbnQucGFnZSgpLT51c2VTeXN0ZW1BcHBlYXJhbmNlKCkgOiBmYWxzZSB9Cisg
ICAgLCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBkb2N1bWVudC5zZXR0aW5ncygpLmFzcGVjdFJhdGlv
RW5hYmxlZCgpIH0KKyAgICAsIGNvbG9yRmlsdGVyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdz
KCkuY29sb3JGaWx0ZXJFbmFibGVkKCkgfQorICAgICwgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxl
ZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpIH0KKyAg
ICAsIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkuZGVmZXJy
ZWRDU1NQYXJzZXJFbmFibGVkKCkgfQorICAgICwgZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWly
a3NNb2RlIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5lbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVpcmtz
TW9kZSgpIH0KKyAgICAsIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7IGRv
Y3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3BlcnRpZXNFbmFibGVk
KCkgfQorI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgLCBsZWdhY3lP
dmVyZmxvd1Njcm9sbGluZ1RvdWNoRW5hYmxlZCB7IHNob3VsZEVuYWJsZUxlZ2FjeU92ZXJmbG93
U2Nyb2xsaW5nVG91Y2goZG9jdW1lbnQpIH0KICNlbmRpZgotICAgIHNwcmluZ1RpbWluZ0Z1bmN0
aW9uRW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuc3ByaW5nVGltaW5nRnVuY3Rpb25FbmFi
bGVkKCk7Ci0gICAgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdz
KCkuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCgpOwotICAgIGNvbG9yRmlsdGVyRW5hYmxlZCA9
IGRvY3VtZW50LnNldHRpbmdzKCkuY29sb3JGaWx0ZXJFbmFibGVkKCk7CisgICAgLCBvdmVyc2Ny
b2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5vdmVyc2Nyb2xsQmVoYXZp
b3JFbmFibGVkKCkgfQorICAgICwgc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZG9jdW1lbnQuc2V0
dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkKCkgfQorICAgICwgc3ByaW5n
VGltaW5nRnVuY3Rpb25FbmFibGVkIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS5zcHJpbmdUaW1pbmdG
dW5jdGlvbkVuYWJsZWQoKSB9CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICAsIHRl
eHRBdXRvc2l6aW5nRW5hYmxlZCB7IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdF
bmFibGVkKCkgfQorI2VuZGlmCisgICAgLCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFu
ZEJlaGF2aW9yIHsgZG9jdW1lbnQuc2V0dGluZ3MoKS51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNo
b3J0aGFuZEJlaGF2aW9yKCkgfQogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0gICAg
YXR0YWNobWVudEVuYWJsZWQgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZCgpOworICAgICwgYXR0YWNobWVudEVuYWJsZWQg
eyBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRFbGVt
ZW50RW5hYmxlZCgpIH0KICNlbmRpZgotICAgIGRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZCA9IGRv
Y3VtZW50LnNldHRpbmdzKCkuZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKCk7Ci0gICAgc2Nyb2xs
QmVoYXZpb3JFbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3MoKS5DU1NPTVZpZXdTbW9vdGhTY3Jv
bGxpbmdFbmFibGVkKCk7Ci0gICAgb3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9IGRvY3VtZW50
LnNldHRpbmdzKCkub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCgpOwotICAgIHVzZVN5c3RlbUFw
cGVhcmFuY2UgPSBkb2N1bWVudC5wYWdlKCkgPyBkb2N1bWVudC5wYWdlKCktPnVzZVN5c3RlbUFw
cGVhcmFuY2UoKSA6IGZhbHNlOwotICAgIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5h
YmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkuY3NzSW5kaXZpZHVhbFRyYW5zZm9ybVByb3BlcnRp
ZXNFbmFibGVkKCk7Ci0gICAgYXNwZWN0UmF0aW9FbmFibGVkID0gZG9jdW1lbnQuc2V0dGluZ3Mo
KS5hc3BlY3RSYXRpb0VuYWJsZWQoKTsKK3sKIH0KIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIGEsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGIpCkBAIC04NywyOCAr
OTQsMzEgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1BhcnNlckNvbnRleHQmIAogICAgIHJl
dHVybiBhLmJhc2VVUkwgPT0gYi5iYXNlVVJMCiAgICAgICAgICYmIGEuY2hhcnNldCA9PSBiLmNo
YXJzZXQKICAgICAgICAgJiYgYS5tb2RlID09IGIubW9kZQorICAgICAgICAmJiBhLmVuY2xvc2lu
Z1J1bGVUeXBlID09IGIuZW5jbG9zaW5nUnVsZVR5cGUKICAgICAgICAgJiYgYS5pc0hUTUxEb2N1
bWVudCA9PSBiLmlzSFRNTERvY3VtZW50Ci0jaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKLSAg
ICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0b3NpemluZ0VuYWJs
ZWQKLSNlbmRpZgorICAgICAgICAmJiBhLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPT0gYi5o
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luCisgICAgICAgICYmIGEuaXNDb250ZW50T3BhcXVlID09
IGIuaXNDb250ZW50T3BhcXVlCisgICAgICAgICYmIGEudXNlU3lzdGVtQXBwZWFyYW5jZSA9PSBi
LnVzZVN5c3RlbUFwcGVhcmFuY2UKKyAgICAgICAgJiYgYS5hc3BlY3RSYXRpb0VuYWJsZWQgPT0g
Yi5hc3BlY3RSYXRpb0VuYWJsZWQKKyAgICAgICAgJiYgYS5jb2xvckZpbHRlckVuYWJsZWQgPT0g
Yi5jb2xvckZpbHRlckVuYWJsZWQKKyAgICAgICAgJiYgYS5jb25zdGFudFByb3BlcnRpZXNFbmFi
bGVkID09IGIuY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZAorICAgICAgICAmJiBhLmRlZmVycmVk
Q1NTUGFyc2VyRW5hYmxlZCA9PSBiLmRlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZAorICAgICAgICAm
JiBhLmVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSA9PSBiLmVuZm9yY2VzQ1NTTUlN
RVR5cGVJbk5vUXVpcmtzTW9kZQorICAgICAgICAmJiBhLmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9w
ZXJ0aWVzRW5hYmxlZCA9PSBiLmluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZAog
I2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCiAgICAgICAgICYmIGEubGVnYWN5
T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaEVuYWJsZWQgPT0gYi5sZWdhY3lPdmVyZmxvd1Njcm9sbGlu
Z1RvdWNoRW5hYmxlZAogI2VuZGlmCi0gICAgICAgICYmIGEuZW5mb3JjZXNDU1NNSU1FVHlwZUlu
Tm9RdWlya3NNb2RlID09IGIuZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlCi0gICAg
ICAgICYmIGEudXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciA9PSBiLnVz
ZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRoYW5kQmVoYXZpb3IKKyAgICAgICAgJiYgYS5vdmVy
c2Nyb2xsQmVoYXZpb3JFbmFibGVkID09IGIub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZAorICAg
ICAgICAmJiBhLnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLnNjcm9sbEJlaGF2aW9yRW5hYmxl
ZAogICAgICAgICAmJiBhLnNwcmluZ1RpbWluZ0Z1bmN0aW9uRW5hYmxlZCA9PSBiLnNwcmluZ1Rp
bWluZ0Z1bmN0aW9uRW5hYmxlZAotICAgICAgICAmJiBhLmNvbnN0YW50UHJvcGVydGllc0VuYWJs
ZWQgPT0gYi5jb25zdGFudFByb3BlcnRpZXNFbmFibGVkCi0gICAgICAgICYmIGEuY29sb3JGaWx0
ZXJFbmFibGVkID09IGIuY29sb3JGaWx0ZXJFbmFibGVkCisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJ
WklORykKKyAgICAgICAgJiYgYS50ZXh0QXV0b3NpemluZ0VuYWJsZWQgPT0gYi50ZXh0QXV0b3Np
emluZ0VuYWJsZWQKKyNlbmRpZgorICAgICAgICAmJiBhLnVzZUxlZ2FjeUJhY2tncm91bmRTaXpl
U2hvcnRoYW5kQmVoYXZpb3IgPT0gYi51c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJl
aGF2aW9yCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICAgICAgJiYgYS5hdHRh
Y2htZW50RW5hYmxlZCA9PSBiLmF0dGFjaG1lbnRFbmFibGVkCiAjZW5kaWYKLSAgICAgICAgJiYg
YS5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQgPT0gYi5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQK
LSAgICAgICAgJiYgYS5zY3JvbGxCZWhhdmlvckVuYWJsZWQgPT0gYi5zY3JvbGxCZWhhdmlvckVu
YWJsZWQKLSAgICAgICAgJiYgYS5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQg
PT0gYi5pbmRpdmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQKLSAgICAgICAgJiYgYS5o
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID09IGIuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbgot
ICAgICAgICAmJiBhLnVzZVN5c3RlbUFwcGVhcmFuY2UgPT0gYi51c2VTeXN0ZW1BcHBlYXJhbmNl
Ci0gICAgICAgICYmIGEuYXNwZWN0UmF0aW9FbmFibGVkID09IGIuYXNwZWN0UmF0aW9FbmFibGVk
Ci0gICAgICAgICYmIGEub3ZlcnNjcm9sbEJlaGF2aW9yRW5hYmxlZCA9PSBiLm92ZXJzY3JvbGxC
ZWhhdmlvckVuYWJsZWQ7CisgICAgOwogfQogCiBVUkwgQ1NTUGFyc2VyQ29udGV4dDo6Y29tcGxl
dGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlckNvbnRleHQuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3ICs0MSw2IEBAIGNsYXNzIERvY3VtZW50Owogc3RydWN0IENTU1BhcnNlckNvbnRleHQg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotCiAgICAgQ1NTUGFyc2Vy
Q29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBVUkwmIGJhc2VVUkwgPSBVUkwoKSk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgQ1NTUGFyc2VyQ29udGV4dChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFVS
TCYgYmFzZVVSTCA9IFVSTCgpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBlbXB0eVN0cmluZygp
KTsKIApAQCAtNTAsMzYgKzQ5LDM3IEBAIHB1YmxpYzoKICAgICBDU1NQYXJzZXJNb2RlIG1vZGUg
eyBIVE1MU3RhbmRhcmRNb2RlIH07CiAgICAgT3B0aW9uYWw8U3R5bGVSdWxlVHlwZT4gZW5jbG9z
aW5nUnVsZVR5cGU7CiAgICAgYm9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07Ci0jaWYgRU5B
QkxFKFRFWFRfQVVUT1NJWklORykKLSAgICBib29sIHRleHRBdXRvc2l6aW5nRW5hYmxlZCB7IGZh
bHNlIH07Ci0jZW5kaWYKKworICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gc3VwcG9ydCBn
ZXRNYXRjaGVkQ1NTUnVsZXMuCisgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIHsg
ZmFsc2UgfTsKKworICAgIGJvb2wgaXNDb250ZW50T3BhcXVlIHsgZmFsc2UgfTsKKyAgICBib29s
IHVzZVN5c3RlbUFwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAgLy8gU2V0dGluZ3MuCisgICAg
Ym9vbCBhc3BlY3RSYXRpb0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgY29sb3JGaWx0ZXJF
bmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIGNvbnN0YW50UHJvcGVydGllc0VuYWJsZWQgeyBm
YWxzZSB9OworICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsKKyAg
ICBib29sIGVuZm9yY2VzQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZSB7IHRydWUgfTsKKyAgICBi
b29sIGluZGl2aWR1YWxUcmFuc2Zvcm1Qcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNlIH07CiAjaWYg
RU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKICAgICBib29sIGxlZ2FjeU92ZXJmbG93
U2Nyb2xsaW5nVG91Y2hFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgotICAgIGJvb2wgZW5mb3Jj
ZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlIHsgdHJ1ZSB9OwotICAgIGJvb2wgdXNlTGVnYWN5
QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciB7IGZhbHNlIH07CisgICAgYm9vbCBvdmVy
c2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIHNjcm9sbEJlaGF2aW9y
RW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBzcHJpbmdUaW1pbmdGdW5jdGlvbkVuYWJsZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgY29uc3RhbnRQcm9wZXJ0aWVzRW5hYmxlZCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBjb2xvckZpbHRlckVuYWJsZWQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShURVhU
X0FVVE9TSVpJTkcpCisgICAgYm9vbCB0ZXh0QXV0b3NpemluZ0VuYWJsZWQgeyBmYWxzZSB9Owor
I2VuZGlmCisgICAgYm9vbCB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9y
IHsgZmFsc2UgfTsKKworICAgIC8vIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuCiAjaWYgRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBib29sIGF0dGFjaG1lbnRFbmFibGVkIHsgZmFsc2Ug
fTsKICNlbmRpZgotICAgIGJvb2wgZGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkIHsgZmFsc2UgfTsK
LSAgICBib29sIHNjcm9sbEJlaGF2aW9yRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBpbmRp
dmlkdWFsVHJhbnNmb3JtUHJvcGVydGllc0VuYWJsZWQgeyBmYWxzZSB9OwotCi0gICAgYm9vbCBv
dmVyc2Nyb2xsQmVoYXZpb3JFbmFibGVkIHsgZmFsc2UgfTsKLSAgICAKLSAgICAvLyBUaGlzIGlz
IG9ubHkgbmVlZGVkIHRvIHN1cHBvcnQgZ2V0TWF0Y2hlZENTU1J1bGVzLgotICAgIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgYm9vbCB1c2VTeXN0
ZW1BcHBlYXJhbmNlIHsgZmFsc2UgfTsKIAogICAgIFVSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3Q7Ci0KLSAgICBib29sIGlzQ29udGVudE9wYXF1ZSB7IGZhbHNlIH07Ci0K
LSAgICBib29sIGFzcGVjdFJhdGlvRW5hYmxlZCB7IGZhbHNlIH07CiB9OwogCiBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsK
QEAgLTkwLDYgKzkwLDggQEAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
cwogc3RydWN0IENTU1BhcnNlckNvbnRleHRIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBrZXkpCiAgICAgeworICAgICAgICAvLyBGSVhNRTog
Q29udmVydCB0aGlzIHRvIHVzZSBXVEY6Okhhc2hlci4KKwogICAgICAgICB1bnNpZ25lZCBoYXNo
ID0gMDsKICAgICAgICAgaWYgKCFrZXkuYmFzZVVSTC5pc051bGwoKSkKICAgICAgICAgICAgIGhh
c2ggXj0gV1RGOjpVUkxIYXNoOjpoYXNoKGtleS5iYXNlVVJMKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNzI4
MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTcyNiwxNSArMTcyNiwxNSBAQCBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lWkluZGV4KENTCiAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdlKTsK
IH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNoYWRvdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBib29sIGlzQm94U2hh
ZG93UHJvcGVydHkpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU2hhZG93KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBi
b29sIGlzQm94U2hhZG93UHJvcGVydHkpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09
IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAKICAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzaGFkb3dWYWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZG8gewotICAgICAgICBpZiAoUmVmUHRyPENTU1No
YWRvd1ZhbHVlPiBzaGFkb3dWYWx1ZSA9IGNvbnN1bWVTaW5nbGVTaGFkb3cocmFuZ2UsIGNzc1Bh
cnNlck1vZGUsIGlzQm94U2hhZG93UHJvcGVydHksIGlzQm94U2hhZG93UHJvcGVydHkpKQotICAg
ICAgICAgICAgc2hhZG93VmFsdWVMaXN0LT5hcHBlbmQoKnNoYWRvd1ZhbHVlKTsKKyAgICAgICAg
aWYgKGF1dG8gc2hhZG93VmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KHJhbmdlLCBjb250ZXh0
LCBpc0JveFNoYWRvd1Byb3BlcnR5LCBpc0JveFNoYWRvd1Byb3BlcnR5KSkKKyAgICAgICAgICAg
IHNoYWRvd1ZhbHVlTGlzdC0+YXBwZW5kKHNoYWRvd1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IHdoaWxlIChj
b25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CkBAIC0xODEzLDE5ICsxODEz
LDE5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVUZXh0RW1waGEKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUNhcmV0Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVDYXJl
dENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBjb250ZXh0KQogewogICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUF1dG8p
CiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIHJldHVybiBjb25zdW1l
Q29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFu
Z2UsIGNvbnRleHQpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0bGlu
ZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lT3V0bGluZUNvbG9yKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQog
ewogICAgIC8vIEFsbG93IHRoZSBzcGVjaWFsIGZvY3VzIGNvbG9yIGV2ZW4gaW4gSFRNTCBTdGFu
ZGFyZCBwYXJzaW5nIG1vZGUuCiAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVl
V2Via2l0Rm9jdXNSaW5nQ29sb3IpCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2Up
OwotICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworICAgIHJl
dHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogfQogCiBzdGF0aWMgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGluZVdpZHRoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Mp
CkBAIC0yMjI4LDcgKzIyMjgsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lCiAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGlvbkxvbmdoYW5kPENTU1ZhbHVlVG9wLCBD
U1NWYWx1ZUJvdHRvbT4ocmFuZ2UsIGNzc1BhcnNlck1vZGUpOwogfQogCi1zdGF0aWMgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lUGFpbnRTdHJva2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVQYWludFN0cm9rZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NT
VmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKQEAgLTIyMzgs
NyArMjIzOCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8KICAg
ICAgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAg
IHBhcnNlZFZhbHVlID0gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOwor
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwog
ICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICAg
ICAgICAgIHZhbHVlcy0+YXBwZW5kKHVybC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTIyNDcsNyAr
MjI0Nyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVQYWludFN0cm8KICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gdXJsOwogICAgIH0KLSAgICByZXR1cm4gY29uc3VtZUNvbG9y
KHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yKHJhbmdlLCBj
b250ZXh0KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdseXBoT3JpZW50
YXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSkKQEAgLTMyNTgsNyArMzI1OCw3IEBAIHN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVCYWNrZ3JvdW4KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a1NpemU6CiAgICAgICAgIHJldHVybiBjb25zdW1lQmFja2dyb3VuZFNpemUocHJvcGVydHksIHJh
bmdlLCBjb250ZXh0Lm1vZGUpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6
Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQubW9kZSk7CisgICAg
ICAgIHJldHVybiBjb25zdW1lQ29sb3IocmFuZ2UsIGNvbnRleHQpOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH07CkBAIC00MjQxLDcgKzQyNDEsNyBAQCBSZWZQdHI8Q1NTVmFs
dWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZG93czoK
ICAgICAgICAgcmV0dXJuIGNvbnN1bWVQb3NpdGl2ZUludGVnZXIobV9yYW5nZSk7CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1l
Q29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICByZXR1cm4gY29uc3VtZUNv
bG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uU2tpcDoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVUZXh0RGVjb3JhdGlvblNraXAobV9yYW5n
ZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aDoKQEAgLTQyNjEs
MTIgKzQyNjEsMTIgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFycwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZENvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlMaWdo
dGluZ0NvbG9yOgogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5SdWxlQ29sb3I6Ci0gICAgICAg
IHJldHVybiBjb25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICBy
ZXR1cm4gY29uc3VtZUNvbG9yKG1fcmFuZ2UsIG1fY29udGV4dCk7CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUNhcmV0Q29sb3I6Ci0gICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvcihtX3Jhbmdl
LCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lQ2FyZXRDb2xvcihtX3Jh
bmdlLCBtX2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKICAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICByZXR1cm4gY29uc3VtZUNvbG9yKG1f
cmFuZ2UsIG1fY29udGV4dC5tb2RlLCBpblF1aXJrc01vZGUoKSk7CisgICAgICAgIHJldHVybiBj
b25zdW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0LCBpblF1aXJrc01vZGUoKSk7CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlcklubGluZVN0YXJ0V2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlcklubGluZUVuZFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCbG9ja1N0
YXJ0V2lkdGg6CkBAIC00Mjc4LDcgKzQyNzgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3Bl
cnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOiB7CiAg
ICAgICAgIGJvb2wgYWxsb3dRdWlya3lDb2xvcnMgPSBpblF1aXJrc01vZGUoKQogICAgICAgICAg
ICAgJiYgKGN1cnJlbnRTaG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkIHx8IGN1cnJlbnRT
aG9ydGhhbmQgPT0gQ1NTUHJvcGVydHlCb3JkZXJDb2xvcik7Ci0gICAgICAgIHJldHVybiBjb25z
dW1lQ29sb3IobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIGFsbG93UXVpcmt5Q29sb3JzKTsKKyAg
ICAgICAgcmV0dXJuIGNvbnN1bWVDb2xvcihtX3JhbmdlLCBtX2NvbnRleHQsIGFsbG93UXVpcmt5
Q29sb3JzKTsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoOgog
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6CkBAIC00Mjk0LDcgKzQyOTQsNyBA
QCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRTaGFkb3c6IC8vIENTUzIgcHJvcGVydHksIGRyb3BwZWQgaW4gQ1NTMi4xLCBi
YWNrIGluIENTUzMsIHNvIHRyZWF0IGFzIENTUzMKICAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2hh
ZG93OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6Ci0gICAgICAgIHJldHVy
biBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlLCBwcm9wZXJ0eSA9PSBDU1NQ
cm9wZXJ0eUJveFNoYWRvdyB8fCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRv
dyk7CisgICAgICAgIHJldHVybiBjb25zdW1lU2hhZG93KG1fcmFuZ2UsIG1fY29udGV4dCwgcHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlCb3hTaGFkb3cgfHwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlX
ZWJraXRCb3hTaGFkb3cpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CiAjaWYgRU5BQkxF
KEZJTFRFUlNfTEVWRUxfMikKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0
ZXI6CkBAIC00MzQyLDcgKzQzNDIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFy
c2VyOjpwYXJzCiAgICAgICAgIHJldHVybiBjb25zdW1lUm90YXRlKG1fcmFuZ2UsIG1fY29udGV4
dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICBjYXNlIENTU1Byb3BlcnR5
U3Ryb2tlOgotICAgICAgICByZXR1cm4gY29uc3VtZVBhaW50U3Ryb2tlKG1fcmFuZ2UsIG1fY29u
dGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVQYWludFN0cm9rZShtX3JhbmdlLCBt
X2NvbnRleHQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uVmVydGljYWw6
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOgogICAgICAg
ICByZXR1cm4gY29uc3VtZUdseXBoT3JpZW50YXRpb24obV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUs
IHByb3BlcnR5KTsKQEAgLTUwOTMsNyArNTA5Myw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6
OmNvbnN1bWVCb3JkZXIoUmUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoIWNvbG9yKSB7Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVDb2xvciht
X3JhbmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAgICAgICBjb2xvciA9IGNvbnN1bWVDb2xv
cihtX3JhbmdlLCBtX2NvbnRleHQpOwogICAgICAgICAgICAgaWYgKGNvbG9yKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
NzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwyNjggKzY5MCwyNzQgQEAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVXJsKENTUwogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHVybC50b1N0cmluZygpLCBDU1NVbml0VHlwZTo6Q1NT
X1VSSSk7CiB9CiAKLXN0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSB2YWx1
ZSwgYm9vbCBpc1BlcmNlbnRhZ2UpCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lT3B0
aW9uYWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoaXNQZXJj
ZW50YWdlKQorICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkp
CisgICAgICAgIHJldHVybiAxLjA7CisKKyAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9IGNv
bnN1bWVOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcocmFuZ2UpKQorICAgICAgICByZXR1
cm4gY2xhbXBUbygqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKKworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVIdWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCit7
CisgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcocmFuZ2UsIGNvbnRleHQubW9k
ZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKKyAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlw
ZSwgYW5nbGUtPnZhbHVlKTsKKworICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3KHJhbmdlKTsK
K30KKworc3RhdGljIGRvdWJsZSBub3JtYWxpemVIdWUoZG91YmxlIGh1ZSkKK3sKKyAgICByZXR1
cm4gc3RkOjpmbW9kKHN0ZDo6Zm1vZChodWUsIDM2MC4wKSArIDM2MC4wLCAzNjAuMCk7Cit9CisK
K2VudW0gY2xhc3MgUkdCQ29tcG9uZW50VHlwZSB7IE51bWJlciwgUGVyY2VudGFnZSB9OworCitz
dGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgdmFsdWUsIFJHQkNvbXBvbmVu
dFR5cGUgY29tcG9uZW50VHlwZSkKK3sKKyAgICBpZiAoY29tcG9uZW50VHlwZSA9PSBSR0JDb21w
b25lbnRUeXBlOjpQZXJjZW50YWdlKQogICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gMTAwLjAgKiAy
NTUuMDsKIAogICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRl
KHZhbHVlKTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKK2VudW0gY2xhc3MgUkdCT3JIU0xTZXBhcmF0b3JTeW50YXggeyBD
b21tYXMsIFdoaXRlc3BhY2VTbGFzaCB9OworCitzdGF0aWMgYm9vbCBjb25zdW1lUkdCT3JIU0xT
ZXBhcmF0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgUkdCT3JIU0xTZXBhcmF0b3JTeW50
YXggc3ludGF4KQoreworICAgIGlmIChzeW50YXggPT0gUkdCT3JIU0xTZXBhcmF0b3JTeW50YXg6
OkNvbW1hcykKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2Uo
YXJncyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNvbnN1bWVSR0JPckhT
TEFscGhhU2VwYXJhdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIFJHQk9ySFNMU2VwYXJh
dG9yU3ludGF4IHN5bnRheCkKK3sKKyAgICBpZiAoc3ludGF4ID09IFJHQk9ySFNMU2VwYXJhdG9y
U3ludGF4OjpDb21tYXMpCisgICAgICAgIHJldHVybiBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0
ZXNwYWNlKGFyZ3MpOworICAgIHJldHVybiBjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNl
KGFyZ3MpOworfQorCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUkdCT3JIU0xPcHRp
b25hbEFscGhhKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIFJHQk9ySFNMU2VwYXJhdG9yU3lu
dGF4IHN5bnRheCkKK3sKKyAgICBpZiAoIWNvbnN1bWVSR0JPckhTTEFscGhhU2VwYXJhdG9yKGFy
Z3MsIHN5bnRheCkpCisgICAgICAgIHJldHVybiAxLjA7CisKKyAgICByZXR1cm4gY29uc3VtZU51
bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhhcmdzKTsKK30KKworc3RhdGljIENvbG9yIHBh
cnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0g
Q1NTVmFsdWVSZ2IgfHwgcmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVJnYmEp
OwogICAgIGF1dG8gYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CiAKLSAgICBib29sIGlz
UGVyY2VudGFnZSA9IGZhbHNlOwotICAgIGRvdWJsZSBjb2xvclBhcmFtZXRlcjsKLSAgICBpZiAo
YXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQotICAgICAgICBjb2xvclBhcmFt
ZXRlciA9ICpudW1iZXI7Ci0gICAgZWxzZSBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNl
bnRSYXcoYXJncykpIHsKLSAgICAgICAgY29sb3JQYXJhbWV0ZXIgPSAqcGVyY2VudDsKLSAgICAg
ICAgaXNQZXJjZW50YWdlID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICBzdHJ1Y3QgSW5pdGlhbENvbXBvbmVudCB7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAg
ICAgICAgUkdCQ29tcG9uZW50VHlwZSB0eXBlOworICAgIH07CiAKLSAgICBlbnVtIGNsYXNzIENv
bG9yU3ludGF4IHsKLSAgICAgICAgQ29tbWFzLAotICAgICAgICBXaGl0ZXNwYWNlU2xhc2gsCisg
ICAgYXV0byBjb25zdW1lSW5pdGlhbENvbXBvbmVudCA9IFtdKGF1dG8mIGFyZ3MpIC0+IE9wdGlv
bmFsPEluaXRpYWxDb21wb25lbnQ+IHsKKyAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3Vt
ZU51bWJlclJhdyhhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgKm51bWJlciwgUkdCQ29t
cG9uZW50VHlwZTo6TnVtYmVyIH0gfTsKKyAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1
bWVQZXJjZW50UmF3KGFyZ3MpKQorICAgICAgICAgICAgcmV0dXJuIHsgeyAqcGVyY2VudCwgUkdC
Q29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgfTsKIAotICAgIENvbG9yU3ludGF4IHN5bnRheCA9IENvbG9yU3ludGF4OjpDb21t
YXM7Ci0gICAgYXV0byBjb25zdW1lU2VwYXJhdG9yID0gWyZdIHsKLSAgICAgICAgaWYgKHN5bnRh
eCA9PSBDb2xvclN5bnRheDo6Q29tbWFzKQotICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVDb21t
YUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBhdXRvIGNvbnN1bWVDb21wb25lbnQgPSBbXShhdXRvJiBhcmdzLCBhdXRvIGNvbXBv
bmVudFR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChjb21wb25lbnRUeXBlKSB7CisgICAgICAgIGNh
c2UgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZToKKyAgICAgICAgICAgIHJldHVybiBjb25z
dW1lUGVyY2VudFJhdyhhcmdzKTsKKyAgICAgICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpOdW1i
ZXI6CisgICAgICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKKyAgICAgICAg
fQogICAgIH07CiAKLSAgICB1aW50OF90IGNvbG9yQXJyYXlbM107Ci0gICAgY29sb3JBcnJheVsw
XSA9IGNsYW1wUkdCQ29tcG9uZW50KGNvbG9yUGFyYW1ldGVyLCBpc1BlcmNlbnRhZ2UpOwotICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgIGlmIChpID09IDEpCi0gICAg
ICAgICAgICBzeW50YXggPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpID8g
Q29sb3JTeW50YXg6OkNvbW1hcyA6IENvbG9yU3ludGF4OjpXaGl0ZXNwYWNlU2xhc2g7Ci0gICAg
ICAgIGVsc2UgaWYgKCFjb25zdW1lU2VwYXJhdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9
OworICAgIGF1dG8gaW5pdGlhbENvbXBvbmVudCA9IGNvbnN1bWVJbml0aWFsQ29tcG9uZW50KGFy
Z3MpOworICAgIGlmICghaW5pdGlhbENvbXBvbmVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgICAgICBpZiAoaXNQZXJjZW50YWdlKSB7Ci0gICAgICAgICAgICBhdXRvIHBlcmNlbnQgPSBj
b25zdW1lUGVyY2VudFJhdyhhcmdzKTsKLSAgICAgICAgICAgIGlmICghcGVyY2VudCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgY29sb3JBcnJheVtpXSA9IGNsYW1w
UkdCQ29tcG9uZW50KCpwZXJjZW50LCB0cnVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKLSAgICAgICAgICAgIGlm
ICghbnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICBjb2xv
ckFycmF5W2ldID0gY2xhbXBSR0JDb21wb25lbnQoKm51bWJlciwgZmFsc2UpOwotICAgICAgICB9
Ci0gICAgfQorICAgIGF1dG8gY29tcG9uZW50VHlwZSA9IGluaXRpYWxDb21wb25lbnQtPnR5cGU7
CisgICAgYXV0byByZWQgPSBpbml0aWFsQ29tcG9uZW50LT52YWx1ZTsKIAotICAgIC8vIEhpc3Rv
cmljYWxseSwgYWxwaGEgd2FzIG9ubHkgcGFyc2VkIGZvciByZ2JhKCksIGJ1dCBjc3MtY29sb3It
NCBzcGVjaWZpZXMgdGhhdCByZ2JhKCkgaXMgYSBzaW1wbGUgYWxpYXMgZm9yIHJnYigpLgotICAg
IGF1dG8gY29uc3VtZUFscGhhU2VwYXJhdG9yID0gWyZdIHsKLSAgICAgICAgaWYgKHN5bnRheCA9
PSBDb2xvclN5bnRheDo6Q29tbWFzKQotICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVDb21tYUlu
Y2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gY29uc3Vt
ZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKTsKLSAgICB9OworICAgIGF1dG8gc3ludGF4
ID0gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSA/IFJHQk9ySFNMU2VwYXJh
dG9yU3ludGF4OjpDb21tYXMgOiBSR0JPckhTTFNlcGFyYXRvclN5bnRheDo6V2hpdGVzcGFjZVNs
YXNoOworICAgIAorICAgIGF1dG8gZ3JlZW4gPSBjb25zdW1lQ29tcG9uZW50KGFyZ3MsIGNvbXBv
bmVudFR5cGUpOworICAgIGlmICghZ3JlZW4pCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICB1
aW50OF90IGFscGhhQ29tcG9uZW50ID0gMjU1OwotICAgIGlmIChjb25zdW1lQWxwaGFTZXBhcmF0
b3IoKSkgewotICAgICAgICBhdXRvIGFscGhhID0gY29uc3VtZU51bWJlck9yUGVyY2VudERpdmlk
ZWRCeTEwMFJhdyhhcmdzKTsKLSAgICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgIGFscGhhQ29tcG9uZW50ID0gY29udmVydEZsb2F0QWxwaGFUbzx1aW50
OF90PigqYWxwaGEpOwotICAgIH0KKyAgICBpZiAoIWNvbnN1bWVSR0JPckhTTFNlcGFyYXRvcihh
cmdzLCBzeW50YXgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBibHVlID0gY29u
c3VtZUNvbXBvbmVudChhcmdzLCBjb21wb25lbnRUeXBlKTsKKyAgICBpZiAoIWJsdWUpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZVJHQk9ySFNMT3B0aW9u
YWxBbHBoYShhcmdzLCBzeW50YXgpOworICAgIGlmICghYWxwaGEpCisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IHJldHVybiBTUkdCQTx1aW50OF90PiB7IGNvbG9yQXJyYXlbMF0sIGNvbG9yQXJyYXlbMV0sIGNv
bG9yQXJyYXlbMl0sIGFscGhhQ29tcG9uZW50IH07CisgICAgYXV0byBub3JtYWxpemVkUmVkID0g
Y2xhbXBSR0JDb21wb25lbnQocmVkLCBjb21wb25lbnRUeXBlKTsKKyAgICBhdXRvIG5vcm1hbGl6
ZWRHcmVlbiA9IGNsYW1wUkdCQ29tcG9uZW50KCpncmVlbiwgY29tcG9uZW50VHlwZSk7CisgICAg
YXV0byBub3JtYWxpemVkQmx1ZSA9IGNsYW1wUkdCQ29tcG9uZW50KCpibHVlLCBjb21wb25lbnRU
eXBlKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRBbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88dWlu
dDhfdD4oKmFscGhhKTsKKworICAgIHJldHVybiBTUkdCQTx1aW50OF90PiB7IG5vcm1hbGl6ZWRS
ZWQsIG5vcm1hbGl6ZWRHcmVlbiwgbm9ybWFsaXplZEJsdWUsIG5vcm1hbGl6ZWRBbHBoYSB9Owog
fQogCi1zdGF0aWMgQ29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCitzdGF0aWMgQ29sb3IgcGFyc2VI
U0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgp
ID09IENTU1ZhbHVlSHNsIHx8IHJhbmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVI
c2xhKTsKICAgICBhdXRvIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0gICAgZG91
YmxlIGh1ZUFuZ2xlSW5EZWdyZWVzOwotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xl
UmF3KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOwotICAg
IGVsc2UgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKLSAgICAgICAg
aHVlQW5nbGVJbkRlZ3JlZXMgPSAqbnVtYmVyOwotICAgIGVsc2UKKyAgICBhdXRvIGh1ZSA9IGNv
bnN1bWVIdWUoYXJncywgY29udGV4dCk7CisgICAgaWYgKCFodWUpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBkb3VibGUgY29sb3JBcnJheVszXTsKLSAgICBjb2xvckFycmF5WzBdID0gZm1v
ZChmbW9kKGh1ZUFuZ2xlSW5EZWdyZWVzLCAzNjAuMCkgKyAzNjAuMCwgMzYwLjApIC8gMzYwLjA7
CisgICAgYXV0byBzeW50YXggPSBjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3Mp
ID8gUkdCT3JIU0xTZXBhcmF0b3JTeW50YXg6OkNvbW1hcyA6IFJHQk9ySFNMU2VwYXJhdG9yU3lu
dGF4OjpXaGl0ZXNwYWNlU2xhc2g7CiAKLSAgICBib29sIHJlcXVpcmVzQ29tbWFzID0gZmFsc2U7
Ci0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgaWYgKGNvbnN1bWVD
b21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpIHsKLSAgICAgICAgICAgIGlmIChpICE9IDEg
JiYgIXJlcXVpcmVzQ29tbWFzKQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
ICAgICByZXF1aXJlc0NvbW1hcyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVxdWlyZXND
b21tYXMgfHwgYXJncy5hdEVuZCgpIHx8ICgmYXJncy5wZWVrKCkgLSAxKS0+dHlwZSgpICE9IFdo
aXRlc3BhY2VUb2tlbikKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGF1dG8gcGVy
Y2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwotICAgICAgICBpZiAoIXBlcmNlbnQpCi0g
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBjb2xvckFycmF5W2ldID0gY2xhbXBUbzxk
b3VibGU+KCpwZXJjZW50LCAwLjAsIDEwMC4wKSAvIDEwMC4wOyAvLyBOZWVkcyB0byBiZSB2YWx1
ZSBiZXR3ZWVuIDAgYW5kIDEuMC4KLSAgICB9CisgICAgYXV0byBzYXR1cmF0aW9uID0gY29uc3Vt
ZVBlcmNlbnRSYXcoYXJncyk7CisgICAgaWYgKCFzYXR1cmF0aW9uKQorICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgYm9vbCBjb21tYUNvbnN1bWVkID0gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hp
dGVzcGFjZShhcmdzKTsKLSAgICBib29sIHNsYXNoQ29uc3VtZWQgPSBjb25zdW1lU2xhc2hJbmNs
dWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwotICAgIGlmICgoY29tbWFDb25zdW1lZCAmJiAhcmVxdWly
ZXNDb21tYXMpIHx8IChzbGFzaENvbnN1bWVkICYmIHJlcXVpcmVzQ29tbWFzKSkKKyAgICBpZiAo
IWNvbnN1bWVSR0JPckhTTFNlcGFyYXRvcihhcmdzLCBzeW50YXgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgZG91YmxlIGFscGhhID0gMS4wOwotICAgIGlmIChjb21tYUNvbnN1bWVkIHx8
IHNsYXNoQ29uc3VtZWQpIHsKLSAgICAgICAgYXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVO
dW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7Ci0gICAgICAgIGlmICghYWxwaGFQ
YXJhbWV0ZXIpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBhbHBoYSA9IGNsYW1w
VG88ZG91YmxlPigqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKLSAgICB9CisgICAgYXV0byBs
aWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKKyAgICBpZiAoIWxpZ2h0bmVzcykK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lUkdCT3JIU0xP
cHRpb25hbEFscGhhKGFyZ3MsIHN5bnRheCk7CisgICAgaWYgKCFhbHBoYSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oSFNMQTxmbG9hdD4geyBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYWxwaGEpIH0pOworICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1hbGl6ZUh1
ZSgqaHVlKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRTYXR1cmF0aW9uID0gY2xhbXBUbzxkb3VibGU+
KCpzYXR1cmF0aW9uLCAwLjAsIDEwMC4wKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRMaWdodG5lc3Mg
PSBjbGFtcFRvPGRvdWJsZT4oKmxpZ2h0bmVzcywgMC4wLCAxMDAuMCk7CisgICAgYXV0byBub3Jt
YWxpemVkQWxwaGEgPSBjbGFtcFRvPGRvdWJsZT4oKmFscGhhLCAwLjAsIDEuMCk7CisKKyAgICBy
ZXR1cm4gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihIU0xBPGZsb2F0PiB7IHN0YXRpY19j
YXN0PGZsb2F0Pihub3JtYWxpemVkSHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRT
YXR1cmF0aW9uKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRMaWdodG5lc3MpLCBzdGF0
aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZEFscGhhKSB9KTsKIH0KIAotc3RhdGljIE9wdGlvbmFs
PGZsb2F0PiBwYXJzZU9wdGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCitz
dHJ1Y3QgV2hpdGVuZXNzQmxhY2tuZXNzIHsKKyAgICBkb3VibGUgd2hpdGVuZXNzOworICAgIGRv
dWJsZSBibGFja25lc3M7Cit9Oworc3RhdGljIFdoaXRlbmVzc0JsYWNrbmVzcyBub3JtYWxpemVX
aGl0ZW5lc3NCbGFja25lc3MoZG91YmxlIHdoaXRlbmVzcywgZG91YmxlIGJsYWNrbmVzcykKIHsK
LSAgICBpZiAoIWNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKQotICAgICAg
ICByZXR1cm4gMS4wZjsKKyAgICBXaGl0ZW5lc3NCbGFja25lc3MgcmVzdWx0OwogCi0gICAgaWYg
KGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAw
UmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KCphbHBoYVBhcmFtZXRl
ciwgMC4wLCAxLjApOworICAgIC8vICAgVmFsdWVzIG91dHNpZGUgb2YgdGhlc2UgcmFuZ2VzIGFy
ZSBub3QgaW52YWxpZCwgYnV0IGFyZSBjbGFtcGVkIHRvIHRoZQorICAgIC8vICAgcmFuZ2VzIGRl
ZmluZWQgaGVyZSBhdCBjb21wdXRlZC12YWx1ZSB0aW1lLgorICAgIHJlc3VsdC53aGl0ZW5lc3Mg
PSBjbGFtcFRvPGRvdWJsZT4od2hpdGVuZXNzLCAwLCAxMDApOworICAgIHJlc3VsdC5ibGFja25l
c3MgPSBjbGFtcFRvPGRvdWJsZT4oYmxhY2tuZXNzLCAwLCAxMDApOwogCi0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAvLyAgIElmIHRoZSBzdW0gb2YgdGhlc2UgdHdvIGFyZ3VtZW50cyBp
cyBncmVhdGVyIHRoYW4gMTAwJSwgdGhlbiBhdAorICAgIC8vICAgY29tcHV0ZWQtdmFsdWUgdGlt
ZSB0aGV5IGFyZSBmdXJ0aGVyIG5vcm1hbGl6ZWQgdG8gYWRkIHVwIHRvIDEwMCUsIHdpdGgKKyAg
ICAvLyAgIHRoZSBzYW1lIHJlbGF0aXZlIHJhdGlvLgorICAgIGlmIChhdXRvIHN1bSA9IHJlc3Vs
dC53aGl0ZW5lc3MgKyByZXN1bHQuYmxhY2tuZXNzOyBzdW0gPj0gMTAwKSB7CisgICAgICAgIHJl
c3VsdC53aGl0ZW5lc3MgKj0gMTAwLjAgLyBzdW07CisgICAgICAgIHJlc3VsdC5ibGFja25lc3Mg
Kj0gMTAwLjAgLyBzdW07CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IENvbG9yIHBhcnNlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIENvbG9yIHBhcnNlSFdCUGFyYW1ldGVy
cyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29u
dGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1
ZUh3Yik7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKIAotICAgIGRv
dWJsZSBodWVBbmdsZUluRGVncmVlczsKLSAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmds
ZVJhdyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNz
WmVyb1F1aXJrOjpGb3JiaWQpKQotICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVlKTsKLSAg
ICBlbHNlIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncykpCi0gICAgICAg
IGh1ZUFuZ2xlSW5EZWdyZWVzID0gKm51bWJlcjsKLSAgICBlbHNlCisgICAgYXV0byBodWUgPSBj
b25zdW1lSHVlKGFyZ3MsIGNvbnRleHQpOworICAgIGlmICghaHVlKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgYXV0byB3aGl0ZW5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1
ZVJhbmdlQWxsKTsKKyAgICBhdXRvIHdoaXRlbmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3Mp
OwogICAgIGlmICghd2hpdGVuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBi
bGFja25lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBh
dXRvIGJsYWNrbmVzcyA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgIGlmICghYmxhY2tu
ZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBhbHBoYSA9IHBhcnNlT3B0aW9u
YWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJn
cyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmICghYXJn
cy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgLy8gTm9ybWFsaXplIGh1ZS4K
LQotICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gc3RkOjpmbW9kKGh1ZUFuZ2xlSW5EZWdyZWVzLCAz
NjAuMCk7Ci0gICAgaWYgKGh1ZUFuZ2xlSW5EZWdyZWVzIDwgMC4wKQotICAgICAgICBodWVBbmds
ZUluRGVncmVlcyArPSAzNjAuMDsKLSAgICAKLSAgICAvLyBDb252ZXJ0IGFuZ2xlIHRvIG5vcm1h
bGl6ZWQgZm9ybSBmcm9tIDAgLSAxLgotICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IGh1ZUFuZ2xl
SW5EZWdyZWVzIC8gMzYwLjA7Ci0KLSAgICAvLyBOb3JtYWxpemUgd2hpdGVuZXNzL2JsYWNrbmVz
cy4KKyAgICBhdXRvIG5vcm1hbGl6ZWRIdWUgPSBub3JtYWxpemVIdWUoKmh1ZSk7CisgICAgYXV0
byBbbm9ybWFsaXplZFdoaXRuZXNzLCBub3JtYWxpemVkQmxhY2tuZXNzXSA9IG5vcm1hbGl6ZVdo
aXRlbmVzc0JsYWNrbmVzcygqd2hpdGVuZXNzLCAqYmxhY2tuZXNzKTsKIAotICAgIC8vICAgVmFs
dWVzIG91dHNpZGUgb2YgdGhlc2UgcmFuZ2VzIGFyZSBub3QgaW52YWxpZCwgYnV0IGFyZSBjbGFt
cGVkIHRvIHRoZQotICAgIC8vICAgcmFuZ2VzIGRlZmluZWQgaGVyZSBhdCBjb21wdXRlZC12YWx1
ZSB0aW1lLgotICAgIGF1dG8gbm9tYWxpemVkV2hpdGVuZXNzID0gY2xhbXBUbzxkb3VibGU+KCp3
aGl0ZW5lc3MsIDAsIDEwMCk7Ci0gICAgYXV0byBub21hbGl6ZWRCbGFja25lc3MgPSBjbGFtcFRv
PGRvdWJsZT4oKmJsYWNrbmVzcywgMCwgMTAwKTsKLQotICAgIC8vICAgSWYgdGhlIHN1bSBvZiB0
aGVzZSB0d28gYXJndW1lbnRzIGlzIGdyZWF0ZXIgdGhhbiAxMDAlLCB0aGVuIGF0Ci0gICAgLy8g
ICBjb21wdXRlZC12YWx1ZSB0aW1lIHRoZXkgYXJlIGZ1cnRoZXIgbm9ybWFsaXplZCB0byBhZGQg
dXAgdG8gMTAwJSwgd2l0aAotICAgIC8vICAgdGhlIHNhbWUgcmVsYXRpdmUgcmF0aW8uCi0gICAg
aWYgKGF1dG8gc3VtID0gbm9tYWxpemVkV2hpdGVuZXNzICsgbm9tYWxpemVkQmxhY2tuZXNzOyBz
dW0gPj0gMTAwKSB7Ci0gICAgICAgIG5vbWFsaXplZFdoaXRlbmVzcyAqPSAxMDAuMCAvIHN1bTsK
LSAgICAgICAgbm9tYWxpemVkQmxhY2tuZXNzICo9IDEwMC4wIC8gc3VtOwotICAgIH0KLQotICAg
IC8vIENvbnZlcnQgdG8gbm9ybWFsaXplZCBmb3JtIGZyb20gMCAtIDEuCi0gICAgbm9tYWxpemVk
V2hpdGVuZXNzIC89IDEwMC4wOwotICAgIG5vbWFsaXplZEJsYWNrbmVzcyAvPSAxMDAuMDsKLQot
ICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KEhXQkE8ZmxvYXQ+IHsgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9tYWxp
emVkV2hpdGVuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vbWFsaXplZEJsYWNrbmVzcyksIHN0
YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH0pOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JH
QkE8dWludDhfdD4+KEhXQkE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRI
dWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZFdoaXRuZXNzKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG5vcm1hbGl6ZWRCbGFja25lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9
KTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlTGFiUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKK3N0YXRpYyBDb2xvciBwYXJzZUxhYlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKQogewogICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlTGFiKTsKICAgICBhdXRvIGFyZ3Mg
PSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwogCi0gICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1l
UGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIGxpZ2h0bmVzcyA9IGNv
bnN1bWVQZXJjZW50UmF3KGFyZ3MpOwogICAgIGlmICghbGlnaHRuZXNzKQogICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVl
UmFuZ2VBbGwpOworICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKICAg
ICBpZiAoIWFWYWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gYlZhbHVlID0g
Y29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBhdXRvIGJWYWx1ZSA9
IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CiAgICAgaWYgKCFiVmFsdWUpCiAgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3MpOworICAg
IGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAoIWFscGhh
KQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0
PigqbGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphVmFsdWUpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oKmJWYWx1ZSksICphbHBoYSB9OworICAgIHJldHVybiBMYWI8ZmxvYXQ+IHsgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KCpsaWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFWYWx1ZSksIHN0
YXRpY19jYXN0PGZsb2F0PigqYlZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsK
IH0KIAotc3RhdGljIENvbG9yIHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorc3RhdGljIENvbG9yIHBhcnNl
TENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQo
KSA9PSBDU1NWYWx1ZUxjaCk7CiAgICAgYXV0byBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdl
KTsKIAotICAgIGF1dG8gbGlnaHRuZXNzID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncywgVmFsdWVS
YW5nZUFsbCk7CisgICAgYXV0byBsaWdodG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsK
ICAgICBpZiAoIWxpZ2h0bmVzcykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gY2hy
b21hVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOwotICAgIGlm
ICghY2hyb21hVmFsdWUpCisgICAgYXV0byBjaHJvbWEgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3Mp
OworICAgIGlmICghY2hyb21hKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZG91YmxlIGh1
ZUFuZ2xlSW5EZWdyZWVzOwotICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlUmF3KGFy
Z3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVp
cms6OkZvcmJpZCkpCi0gICAgICAgIGh1ZUFuZ2xlSW5EZWdyZWVzID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOwotICAgIGVsc2Ug
aWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKSkK
LSAgICAgICAgaHVlQW5nbGVJbkRlZ3JlZXMgPSAqbnVtYmVyOwotICAgIGVsc2UKKyAgICBhdXRv
IGh1ZSA9IGNvbnN1bWVIdWUoYXJncywgY29udGV4dCk7CisgICAgaWYgKCFodWUpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBodWVBbmdsZUluRGVncmVlcyA9IGZtb2QoaHVlQW5nbGVJbkRl
Z3JlZXMsIDM2MC4wKTsKLSAgICBpZiAoaHVlQW5nbGVJbkRlZ3JlZXMgPCAwLjApCi0gICAgICAg
IGh1ZUFuZ2xlSW5EZWdyZWVzICs9IDM2MC4wOwotCi0gICAgYXV0byBhbHBoYSA9IHBhcnNlT3B0
aW9uYWxBbHBoYShhcmdzKTsKKyAgICBhdXRvIGFscGhhID0gY29uc3VtZU9wdGlvbmFsQWxwaGEo
YXJncyk7CiAgICAgaWYgKCFhbHBoYSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmICgh
YXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbnZlcnRD
b2xvcjxMYWI8ZmxvYXQ+PihMQ0hBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0PigqbGlnaHRu
ZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpjaHJvbWFWYWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0
PihodWVBbmdsZUluRGVncmVlcyksICphbHBoYSB9KTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRIdWUg
PSBub3JtYWxpemVIdWUoKmh1ZSk7CisKKyAgICByZXR1cm4gY29udmVydENvbG9yPExhYjxmbG9h
dD4+KExDSEE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpsaWdodG5lc3MpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oKmNocm9tYSksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkSHVlKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZT4KLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiBhcmdzKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0
aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgYXJncykKIHsKICAgICBBU1NFUlQoYXJncy5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZUE5OFJn
YiB8fCBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlRGlzcGxheVAzIHx8IGFyZ3MucGVlaygp
LmlkKCkgPT0gQ1NTVmFsdWVQcm9waG90b1JnYiB8fCBhcmdzLnBlZWsoKS5pZCgpID09IENTU1Zh
bHVlUmVjMjAyMCB8fCBhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlU1JHQik7CiAgICAgY29u
c3VtZUlkZW50UmF3KGFyZ3MpOwpAQCAtOTY0LDExICs5NzAsMTEgQEAgc3RhdGljIENvbG9yIHBh
cnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cAogICAgICAgICBjaGFubmVsc1tpXSA9ICp2YWx1ZTsK
ICAgICB9CiAKLSAgICBhdXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3MpOworICAg
IGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAoIWFscGhh
KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIENvbG9yVHlwZSB7IGNsYW1wVG88
ZmxvYXQ+KGNoYW5uZWxzWzBdLCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzFd
LCAwLjAsIDEuMCksIGNsYW1wVG88ZmxvYXQ+KGNoYW5uZWxzWzJdLCAwLjAsIDEuMCksICphbHBo
YSB9OworICAgIHJldHVybiBDb2xvclR5cGUgeyBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1swXSwg
MC4wLCAxLjApLCBjbGFtcFRvPGZsb2F0PihjaGFubmVsc1sxXSwgMC4wLCAxLjApLCBjbGFtcFRv
PGZsb2F0PihjaGFubmVsc1syXSwgMC4wLCAxLjApLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhh
KSB9OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyYW1ldGVy
cyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzKQpAQCAtOTc4LDI3ICs5ODQsMjcgQEAgc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvckxhYlBhcgogCiAgICAgZG91YmxlIGNoYW5uZWxz
WzNdID0geyAwLCAwLCAwIH07CiAgICAgWyZdIHsKLSAgICAgICAgYXV0byBsaWdodG5lc3MgPSBj
b25zdW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byBsaWdo
dG5lc3MgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKICAgICAgICAgaWYgKCFsaWdodG5lc3Mp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoYW5uZWxzWzBdID0gKmxpZ2h0bmVzczsK
IAotICAgICAgICBhdXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5n
ZUFsbCk7CisgICAgICAgIGF1dG8gYVZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKICAg
ICAgICAgaWYgKCFhVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoYW5uZWxz
WzFdID0gKmFWYWx1ZTsKIAotICAgICAgICBhdXRvIGJWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXco
YXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8gYlZhbHVlID0gY29uc3VtZU51bWJl
clJhdyhhcmdzKTsKICAgICAgICAgaWYgKCFiVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNoYW5uZWxzWzJdID0gKmJWYWx1ZTsKICAgICB9KCk7CiAKLSAgICBhdXRvIGFscGhh
ID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3MpOworICAgIGF1dG8gYWxwaGEgPSBjb25zdW1lT3B0
aW9uYWxBbHBoYShhcmdzKTsKICAgICBpZiAoIWFscGhhKQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMF0p
LCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hhbm5lbHNbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY2hh
bm5lbHNbMl0pLCAqYWxwaGEgfTsKKyAgICByZXR1cm4gTGFiPGZsb2F0PiB7IHN0YXRpY19jYXN0
PGZsb2F0PihjaGFubmVsc1swXSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0
YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1syXSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEp
IH07CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JYWVpQYXJhbWV0ZXJz
KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MpCkBAIC0xMDA4LDI3ICsxMDE0LDI3IEBAIHN0YXRp
YyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JYWVpQYXIKIAogICAgIGRvdWJsZSBjaGFubmVs
c1szXSA9IHsgMCwgMCwgMCB9OwogICAgIFsmXSB7Ci0gICAgICAgIGF1dG8geCA9IGNvbnN1bWVO
dW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgIGF1dG8geCA9IGNvbnN1bWVO
dW1iZXJSYXcoYXJncyk7CiAgICAgICAgIGlmICgheCkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgY2hhbm5lbHNbMF0gPSAqeDsKIAotICAgICAgICBhdXRvIHkgPSBjb25zdW1lTnVtYmVy
UmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBhdXRvIHkgPSBjb25zdW1lTnVtYmVy
UmF3KGFyZ3MpOwogICAgICAgICBpZiAoIXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNoYW5uZWxzWzFdID0gKnk7CiAKLSAgICAgICAgYXV0byB6ID0gY29uc3VtZU51bWJlclJhdyhh
cmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgYXV0byB6ID0gY29uc3VtZU51bWJlclJhdyhh
cmdzKTsKICAgICAgICAgaWYgKCF6KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGFu
bmVsc1syXSA9ICp6OwogICAgIH0oKTsKIAotICAgIGF1dG8gYWxwaGEgPSBwYXJzZU9wdGlvbmFs
QWxwaGEoYXJncyk7CisgICAgYXV0byBhbHBoYSA9IGNvbnN1bWVPcHRpb25hbEFscGhhKGFyZ3Mp
OwogICAgIGlmICghYWxwaGEpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gWFla
QTxmbG9hdCwgV2hpdGVQb2ludDo6RDUwPiB7IHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sw
XSksIHN0YXRpY19jYXN0PGZsb2F0PihjaGFubmVsc1sxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihj
aGFubmVsc1syXSksICphbHBoYSB9OworICAgIHJldHVybiBYWVpBPGZsb2F0LCBXaGl0ZVBvaW50
OjpENTA+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzBdKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGNoYW5uZWxzWzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNoYW5uZWxzWzJdKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5j
dGlvblBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC0xMTExLDcgKzEx
MTcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4CiAgICAgcmV0
dXJuICpyZXN1bHQ7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24oQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRp
YyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5n
ZSBjb2xvclJhbmdlID0gcmFuZ2U7CiAgICAgQ1NTVmFsdWVJRCBmdW5jdGlvbklkID0gcmFuZ2Uu
cGVlaygpLmZ1bmN0aW9uSWQoKTsKQEAgLTExMTksMjAgKzExMjUsMjAgQEAgc3RhdGljIENvbG9y
IHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZQogICAgIHN3aXRjaCAoZnVuY3Rpb25JZCkgewog
ICAgIGNhc2UgQ1NTVmFsdWVSZ2I6CiAgICAgY2FzZSBDU1NWYWx1ZVJnYmE6Ci0gICAgICAgIGNv
bG9yID0gcGFyc2VSR0JQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UpOworICAgICAgICBjb2xvciA9IHBh
cnNlUkdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NWYWx1ZUhzbDoKICAgICBjYXNlIENTU1ZhbHVlSHNsYToKLSAgICAgICAgY29s
b3IgPSBwYXJzZUhTTFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY3NzUGFyc2VyTW9kZSk7CisgICAg
ICAgIGNvbG9yID0gcGFyc2VIU0xQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNvbnRleHQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlSHdiOgotICAgICAgICBjb2xvciA9IHBhcnNl
SFdCUGFyYW1ldGVycyhjb2xvclJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAgY29sb3Ig
PSBwYXJzZUhXQlBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY29udGV4dCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ1NTVmFsdWVMYWI6Ci0gICAgICAgIGNvbG9yID0gcGFyc2VMYWJQYXJhbWV0
ZXJzKGNvbG9yUmFuZ2UpOworICAgICAgICBjb2xvciA9IHBhcnNlTGFiUGFyYW1ldGVycyhjb2xv
clJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NWYWx1ZUxjaDoK
LSAgICAgICAgY29sb3IgPSBwYXJzZUxDSFBhcmFtZXRlcnMoY29sb3JSYW5nZSwgY3NzUGFyc2Vy
TW9kZSk7CisgICAgICAgIGNvbG9yID0gcGFyc2VMQ0hQYXJhbWV0ZXJzKGNvbG9yUmFuZ2UsIGNv
bnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlQ29sb3I6CiAgICAgICAg
IGNvbG9yID0gcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyhjb2xvclJhbmdlKTsKQEAgLTEx
NDUsNyArMTE1MSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb24oQ1NTUGFyc2UK
ICAgICByZXR1cm4gY29sb3I7CiB9CiAKLUNvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK0Nv
bG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQ29sb3IgcmVzdWx0OwogICAg
IGF1dG8ga2V5d29yZCA9IHJhbmdlLnBlZWsoKS5pZCgpOwpAQCAtMTE1NCw3ICsxMTYwLDcgQEAg
Q29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUbwogICAgICAgICAvLyAgICAg
ICAgRm9yIG5vdywgd2UgZGV0ZWN0IHRoZSBzeXN0ZW0gY29sb3IsIGJ1dCB0aGVuIGludGVudGlv
bmFsbHkgZmFpbCBwYXJzaW5nLgogICAgICAgICBpZiAoU3R5bGVDb2xvcjo6aXNTeXN0ZW1Db2xv
cihrZXl3b3JkKSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGlmICghaXNWYWx1
ZUFsbG93ZWRJbk1vZGUoa2V5d29yZCwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAgIGlmICghaXNW
YWx1ZUFsbG93ZWRJbk1vZGUoa2V5d29yZCwgY29udGV4dC5tb2RlKSkKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgICAgIHJlc3VsdCA9IFN0eWxlQ29sb3I6OmNvbG9yRnJvbUtleXdvcmQo
a2V5d29yZCwgeyB9KTsKICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2Uo
KTsKQEAgLTExNjMsNyArMTE2OSw3IEBAIENvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NT
UGFyc2VyVG8KICAgICBpZiAoYXV0byBwYXJzZWRDb2xvciA9IHBhcnNlSGV4Q29sb3IocmFuZ2Us
IGZhbHNlKSkKICAgICAgICAgcmVzdWx0ID0gKnBhcnNlZENvbG9yOwogICAgIGVsc2UKLSAgICAg
ICAgcmVzdWx0ID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAg
ICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjb250ZXh0KTsKIAogICAg
IGlmICghcmFuZ2UuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTExNzEsMTEgKzEx
NzcsMTEgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQYXJzZXJUbwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNvbG9y
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUs
IGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lQ29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGNvbnRleHQsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQogewogICAgIGF1dG8ga2V5d29y
ZCA9IHJhbmdlLnBlZWsoKS5pZCgpOwogICAgIGlmIChTdHlsZUNvbG9yOjppc0NvbG9yS2V5d29y
ZChrZXl3b3JkKSkgewotICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2RlKGtleXdvcmQs
IGNzc1BhcnNlck1vZGUpKQorICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2RlKGtleXdv
cmQsIGNvbnRleHQubW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAgICAgfQpAQCAtMTE4Myw3ICsxMTg5LDcgQEAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3IoQwogICAgIGlmIChhdXRvIHBh
cnNlZENvbG9yID0gcGFyc2VIZXhDb2xvcihyYW5nZSwgYWNjZXB0UXVpcmt5Q29sb3JzKSkKICAg
ICAgICAgY29sb3IgPSAqcGFyc2VkQ29sb3I7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbG9yID0g
cGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAgY29sb3Ig
PSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBpZiAoIWNvbG9y
LmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTE0MTMs
MTQgKzE0MTksMTQgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZQog
fQogCiAvLyBVc2VkIHRvIHBhcnNlIGNvbG9ycyBmb3IgLXdlYmtpdC1ncmFkaWVudCguLi4pLgot
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVu
dFN0b3BDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRGVwcmVj
YXRlZEdyYWRpZW50U3RvcENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGFyZ3MucGVlaygpLmlkKCkgPT0g
Q1NTVmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBjb25zdW1lQ29sb3IoYXJncywgY3NzUGFyc2VyTW9kZSk7CisgICAgcmV0dXJuIGNvbnN1bWVD
b2xvcihhcmdzLCBjb250ZXh0KTsKIH0KIAotc3RhdGljIGJvb2wgY29uc3VtZURlcHJlY2F0ZWRH
cmFkaWVudENvbG9yU3RvcChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTR3JhZGllbnRD
b2xvclN0b3AmIHN0b3AsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBib29s
IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBjb250ZXh0KQogewogICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVrKCkuZnVuY3Rpb25J
ZCgpOwogICAgIGlmIChpZCAhPSBDU1NWYWx1ZUZyb20gJiYgaWQgIT0gQ1NTVmFsdWVUbyAmJiBp
ZCAhPSBDU1NWYWx1ZUNvbG9yU3RvcCkKQEAgLTE0NDIsMTEgKzE0NDgsMTEgQEAgc3RhdGljIGJv
b2wgY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbAogICAgIH0KIAogICAgIHN0b3AucG9zaXRp
b24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBvc2l0aW9uLCBDU1NV
bml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgc3RvcC5jb2xvciA9IGNvbnN1bWVEZXByZWNhdGVk
R3JhZGllbnRTdG9wQ29sb3IoYXJncywgY3NzUGFyc2VyTW9kZSk7CisgICAgc3RvcC5jb2xvciA9
IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJncywgY29udGV4dCk7CiAgICAg
cmV0dXJuIHN0b3AuY29sb3IgJiYgYXJncy5hdEVuZCgpOwogfQogCi1zdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFy
Z3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBSZWZQdHI8Q1NTR3JhZGllbnRW
YWx1ZT4gcmVzdWx0OwogICAgIENTU1ZhbHVlSUQgaWQgPSBhcmdzLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkuaWQoKTsKQEAgLTE0OTksNyArMTUwNSw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVEZXByZWNhdGUKIAogICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3A7
CiAgICAgd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpIHsKLSAg
ICAgICAgaWYgKCFjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKGFyZ3MsIHN0b3As
IGNzc1BhcnNlck1vZGUpKQorICAgICAgICBpZiAoIWNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRD
b2xvclN0b3AoYXJncywgc3RvcCwgY29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgcmVzdWx0LT5hZGRTdG9wKFdURk1vdmUoc3RvcCkpOwogICAgIH0KQEAgLTE1
MDgsMjAgKzE1MTQsMjAgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0
ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNvbnN1bWVHcmFkaWVudENv
bG9yU3RvcHMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwg
Q1NTR3JhZGllbnRWYWx1ZSYgZ3JhZGllbnQpCitzdGF0aWMgYm9vbCBjb25zdW1lR3JhZGllbnRD
b2xvclN0b3BzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0LCBDU1NHcmFkaWVudFZhbHVlJiBncmFkaWVudCkKIHsKICAgICBib29sIHN1
cHBvcnRzQ29sb3JIaW50cyA9IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0xpbmVhckdy
YWRpZW50IHx8IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU1JhZGlhbEdyYWRpZW50IHx8
IGdyYWRpZW50LmdyYWRpZW50VHlwZSgpID09IENTU0NvbmljR3JhZGllbnQ7CiAgICAgCiAgICAg
YXV0byBjb25zdW1lU3RvcFBvc2l0aW9uID0gWyZdIHsKICAgICAgICAgcmV0dXJuIGdyYWRpZW50
LmdyYWRpZW50VHlwZSgpID09IENTU0NvbmljR3JhZGllbnQKLSAgICAgICAgICAgID8gY29uc3Vt
ZUFuZ2xlT3JQZXJjZW50KHJhbmdlLCBtb2RlLCBWYWx1ZVJhbmdlQWxsLCBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykKLSAgICAgICAgICAgIDogY29uc3Vt
ZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgbW9kZSwgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgICAg
ICA/IGNvbnN1bWVBbmdsZU9yUGVyY2VudChyYW5nZSwgY29udGV4dC5tb2RlLCBWYWx1ZVJhbmdl
QWxsLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykKKyAg
ICAgICAgICAgIDogY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgY29udGV4dC5tb2RlLCBW
YWx1ZVJhbmdlQWxsKTsKICAgICB9OwogCiAgICAgLy8gVGhlIGZpcnN0IGNvbG9yIHN0b3AgY2Fu
bm90IGJlIGEgY29sb3IgaGludC4KICAgICBib29sIHByZXZpb3VzU3RvcFdhc0NvbG9ySGludCA9
IHRydWU7CiAgICAgZG8gewotICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9wIHsgY29u
c3VtZUNvbG9yKHJhbmdlLCBtb2RlKSwgY29uc3VtZVN0b3BQb3NpdGlvbigpLCB7IH0gfTsKKyAg
ICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcCB7IGNvbnN1bWVDb2xvcihyYW5nZSwgY29u
dGV4dCksIGNvbnN1bWVTdG9wUG9zaXRpb24oKSwgeyB9IH07CiAgICAgICAgIGlmICghc3RvcC5j
b2xvciAmJiAhc3RvcC5wb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MTU1MiwxMSArMTU1OCwxMSBAQCBzdGF0aWMgYm9vbCBjb25zdW1lR3JhZGllbnRDb2xvclN0b3Bz
KENTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1
bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NT
UGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCitz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQs
IENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKIHsKICAgICBhdXRvIHJlc3VsdCA9IENTU1Jh
ZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVkUmFkaWFsR3Jh
ZGllbnQpOwogCi0gICAgYXV0byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZU9uZU9yVHdvVmFs
dWVkUG9zaXRpb25Db29yZGluYXRlcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
OjpGb3JiaWQpOworICAgIGF1dG8gY2VudGVyQ29vcmRpbmF0ZSA9IGNvbnN1bWVPbmVPclR3b1Zh
bHVlZFBvc2l0aW9uQ29vcmRpbmF0ZXMoYXJncywgY29udGV4dC5tb2RlLCBVbml0bGVzc1F1aXJr
OjpGb3JiaWQpOwogICAgIGlmIChjZW50ZXJDb29yZGluYXRlICYmICFjb25zdW1lQ29tbWFJbmNs
dWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTU2
NywxMCArMTU3MywxMCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRl
CiAKICAgICAvLyBPciwgdHdvIGxlbmd0aHMgb3IgcGVyY2VudGFnZXMKICAgICBpZiAoIXNoYXBl
ICYmICFzaXplS2V5d29yZCkgewotICAgICAgICBhdXRvIGhvcml6b250YWxTaXplID0gY29uc3Vt
ZUxlbmd0aE9yUGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRp
dmUpOworICAgICAgICBhdXRvIGhvcml6b250YWxTaXplID0gY29uc3VtZUxlbmd0aE9yUGVyY2Vu
dChhcmdzLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CiAgICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxTaXplOwogICAgICAgICBpZiAoaG9yaXpv
bnRhbFNpemUpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNvbnN1bWVMZW5ndGhPclBl
cmNlbnQoYXJncywgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKKyAgICAg
ICAgICAgIHZlcnRpY2FsU2l6ZSA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYXJncywgY29udGV4
dC5tb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwogICAgICAgICAgICAgaWYgKCF2ZXJ0aWNh
bFNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBjb25z
dW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwpAQCAtMTU4MSw3ICsxNTg3LDcgQEAg
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZQogICAgICAgICBjb25zdW1l
Q29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpOwogICAgIH0KIAotICAgIGlmICghY29uc3Vt
ZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCByZXN1bHQpKQorICAgIGlm
ICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0LCByZXN1bHQpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChjZW50ZXJDb29yZGluYXRlKSB7CkBAIC0x
NTk2LDcgKzE2MDIsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRl
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQorc3RhdGljIFJlZlB0
cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFy
Z3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENTU0dyYWRpZW50UmVwZWF0IHJl
cGVhdGluZykKIHsKICAgICBSZWZQdHI8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4gcmVzdWx0ID0g
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUmFkaWFsR3JhZGll
bnQpOwogCkBAIC0xNjI0LDEzICsxNjMwLDEzIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVSYWRpYWxHcmEKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gY2VudGVyID0gY29uc3VtZUxlbmd0aE9y
UGVyY2VudChhcmdzLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOworICAg
ICAgICAgICAgYXV0byBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KGFyZ3MsIGNvbnRl
eHQubW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgICAgIGlmICghY2VudGVy
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGhvcml6b250YWxTaXpl
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaG9yaXpvbnRh
bFNpemUgPSBjZW50ZXI7Ci0gICAgICAgICAgICBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQZXJj
ZW50KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CisgICAgICAg
ICAgICBjZW50ZXIgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KGFyZ3MsIGNvbnRleHQubW9kZSwg
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgICAgIGlmIChjZW50ZXIpIHsKICAgICAg
ICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjZW50ZXI7CiAgICAgICAgICAgICAgICAgKytpOwpA
QCAtMTY1OSw3ICsxNjY1LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlh
bEdyYQogICAgIGlmIChhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlQXQpIHsKICAgICAgICAg
YXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICAKLSAgICAgICAgYXV0
byBjZW50ZXJDb29yZGluYXRlID0gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoYXJncywgY3Nz
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBQb3NpdGlvblN5bnRheDo6UG9zaXRp
b24pOworICAgICAgICBhdXRvIGNlbnRlckNvb3JkaW5hdGUgPSBjb25zdW1lUG9zaXRpb25Db29y
ZGluYXRlcyhhcmdzLCBjb250ZXh0Lm1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgUG9zaXRp
b25TeW50YXg6OlBvc2l0aW9uKTsKICAgICAgICAgaWYgKCFjZW50ZXJDb29yZGluYXRlKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIApAQCAtMTY3Niw3ICsxNjgyLDcgQEAg
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYQogCiAgICAgaWYgKChzaGFw
ZSB8fCBzaXplS2V5d29yZCB8fCBob3Jpem9udGFsU2l6ZSB8fCBjZW50ZXJYIHx8IGNlbnRlclkp
ICYmICFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoYXJncywgY3Nz
UGFyc2VyTW9kZSwgKnJlc3VsdCkpCisgICAgaWYgKCFjb25zdW1lR3JhZGllbnRDb2xvclN0b3Bz
KGFyZ3MsIGNvbnRleHQsICpyZXN1bHQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IHJlc3VsdC0+c2V0U2hhcGUoV1RGTW92ZShzaGFwZSkpOwpAQCAtMTY4NywxMiArMTY5MywxMiBA
QCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lUmFkaWFsR3JhCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVhckdyYWRpZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwg
Q1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nLCBDU1NHcmFkaWVudFR5cGUgZ3JhZGllbnRUeXBl
KQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVhckdyYWRpZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENTU0dy
YWRpZW50UmVwZWF0IHJlcGVhdGluZywgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKIHsK
ICAgICBSZWZQdHI8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4gcmVzdWx0ID0gQ1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgZ3JhZGllbnRUeXBlKTsKIAogICAgIGJvb2wg
ZXhwZWN0Q29tbWEgPSB0cnVlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYW5nbGUg
PSBjb25zdW1lQW5nbGUoYXJncywgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlk
LCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gYW5nbGUgPSBjb25zdW1lQW5nbGUoYXJncywgY29udGV4dC5tb2RlLCBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdyk7CiAgICAgaWYgKGFuZ2xlKQogICAg
ICAgICByZXN1bHQtPnNldEFuZ2xlKGFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIGVsc2Ug
aWYgKGdyYWRpZW50VHlwZSA9PSBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50IHx8IGNvbnN1bWVJ
ZGVudDxDU1NWYWx1ZVRvPihhcmdzKSkgewpAQCAtMTcxNSwxMiArMTcyMSwxMiBAQCBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lTGluZWFyR3JhCiAKICAgICBpZiAoZXhwZWN0Q29tbWEg
JiYgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQ
YXJzZXJNb2RlLCAqcmVzdWx0KSkKKyAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMo
YXJncywgY29udGV4dCwgKnJlc3VsdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDb25pY0dy
YWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlckNvbnRleHQgY29udGV4
dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZUNvbmljR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NT
UGFyc2VyQ29udGV4dCYgY29udGV4dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQogewog
I2lmIEVOQUJMRShDU1NfQ09OSUNfR1JBRElFTlRTKQogICAgIFJlZlB0cjxDU1NDb25pY0dyYWRp
ZW50VmFsdWU+IHJlc3VsdCA9IENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGlu
Zyk7CkBAIC0xNzU0LDcgKzE3NjAsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
Q29uaWNHcmFkCiAKICAgICBpZiAoZXhwZWN0Q29tbWEgJiYgIWNvbnN1bWVDb21tYUluY2x1ZGlu
Z1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghY29u
c3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0Lm1vZGUsICpyZXN1bHQpKQorICAg
IGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjb250ZXh0LCAqcmVzdWx0KSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHJlc3VsdDsKICNlbHNlCkBAIC0x
NzY1LDE0ICsxNzcxLDE0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDb25pY0dy
YWQKICNlbmRpZgogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZU9yTm9uZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KQorUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWso
KS5pZCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5n
ZSk7CiAgICAgcmV0dXJuIGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCk7CiB9CiAKLXN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDcm9zc0ZhZGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
YXJncywgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0LCBib29sIHByZWZpeGVkKQorc3RhdGljIFJl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNyb3NzRmFkZShDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdz
LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBib29sIHByZWZpeGVkKQogewogICAg
IGF1dG8gZnJvbUltYWdlVmFsdWUgPSBjb25zdW1lSW1hZ2VPck5vbmUoYXJncywgY29udGV4dCk7
CiAgICAgaWYgKCFmcm9tSW1hZ2VWYWx1ZSB8fCAhY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVz
cGFjZShhcmdzKSkKQEAgLTE4NDgsMzAgKzE4NTQsMzAgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZT4gY29uc3VtZUN1c3RvbVBhaQogfQogI2VuZGlmCiAKLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyQ29udGV4dCBjb250ZXh0KQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdlbmVy
YXRlZEltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQogewogICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVrKCkuZnVuY3Rp
b25JZCgpOwogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5ID0gcmFuZ2U7CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlQ29weSk7CiAg
ICAgUmVmUHRyPENTU1ZhbHVlPiByZXN1bHQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVlUmFkaWFs
R3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBj
b250ZXh0Lm1vZGUsIE5vblJlcGVhdGluZyk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVSYWRp
YWxHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlk
ID09IENTU1ZhbHVlUmVwZWF0aW5nUmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNv
bnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJlcGVhdGluZyk7CisgICAg
ICAgIHJlc3VsdCA9IGNvbnN1bWVSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0LCBSZXBlYXRp
bmcpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0TGluZWFyR3JhZGllbnQpCi0g
ICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUs
IE5vblJlcGVhdGluZywgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3Vs
dCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcsIENT
U1ByZWZpeGVkTGluZWFyR3JhZGllbnQpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlV2Vi
a2l0UmVwZWF0aW5nTGluZWFyR3JhZGllbnQpCi0gICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5l
YXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJlcGVhdGluZywgQ1NTUHJlZml4ZWRMaW5l
YXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdz
LCBjb250ZXh0LCBSZXBlYXRpbmcsIENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpOwogICAgIGVs
c2UgaWYgKGlkID09IENTU1ZhbHVlUmVwZWF0aW5nTGluZWFyR3JhZGllbnQpCi0gICAgICAgIHJl
c3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIFJlcGVhdGlu
ZywgQ1NTTGluZWFyR3JhZGllbnQpOworICAgICAgICByZXN1bHQgPSBjb25zdW1lTGluZWFyR3Jh
ZGllbnQoYXJncywgY29udGV4dCwgUmVwZWF0aW5nLCBDU1NMaW5lYXJHcmFkaWVudCk7CiAgICAg
ZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVMaW5lYXJHcmFkaWVudCkKLSAgICAgICAgcmVzdWx0ID0g
Y29uc3VtZUxpbmVhckdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgTm9uUmVwZWF0aW5nLCBD
U1NMaW5lYXJHcmFkaWVudCk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVMaW5lYXJHcmFkaWVu
dChhcmdzLCBjb250ZXh0LCBOb25SZXBlYXRpbmcsIENTU0xpbmVhckdyYWRpZW50KTsKICAgICBl
bHNlIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdEdyYWRpZW50KQotICAgICAgICByZXN1bHQgPSBj
b25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSk7CisgICAgICAgIHJl
c3VsdCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoYXJncywgY29udGV4dCk7CiAgICAgZWxz
ZSBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRSYWRpYWxHcmFkaWVudCkKLSAgICAgICAgcmVzdWx0
ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChhcmdzLCBjb250ZXh0Lm1vZGUsIE5v
blJlcGVhdGluZyk7CisgICAgICAgIHJlc3VsdCA9IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3Jh
ZGllbnQoYXJncywgY29udGV4dCwgTm9uUmVwZWF0aW5nKTsKICAgICBlbHNlIGlmIChpZCA9PSBD
U1NWYWx1ZVdlYmtpdFJlcGVhdGluZ1JhZGlhbEdyYWRpZW50KQotICAgICAgICByZXN1bHQgPSBj
b25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KGFyZ3MsIGNvbnRleHQubW9kZSwgUmVwZWF0
aW5nKTsKKyAgICAgICAgcmVzdWx0ID0gY29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudChh
cmdzLCBjb250ZXh0LCBSZXBlYXRpbmcpOwogICAgIGVsc2UgaWYgKGlkID09IENTU1ZhbHVlQ29u
aWNHcmFkaWVudCkKICAgICAgICAgcmVzdWx0ID0gY29uc3VtZUNvbmljR3JhZGllbnQoYXJncywg
Y29udGV4dCwgTm9uUmVwZWF0aW5nKTsKICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVh
dGluZ0NvbmljR3JhZGllbnQpCkBAIC0yMDE3LDcgKzIwMjMsNyBAQCBzdGF0aWMgUmVmUHRyPENT
U0Z1bmN0aW9uVmFsdWU+IGNvbnN1bWVGCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1
ZTsKIAogICAgIGlmIChmaWx0ZXJUeXBlID09IENTU1ZhbHVlRHJvcFNoYWRvdykKLSAgICAgICAg
cGFyc2VkVmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KGFyZ3MsIGNvbnRleHQubW9kZSwgZmFs
c2UsIGZhbHNlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lU2luZ2xlU2hhZG93KGFy
Z3MsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChhcmdz
LmF0RW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWU7CkBAIC0yMDY0LDcgKzIw
NzAsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGaWx0ZXIoQ1NTUGFyc2VyCiAgICAgcmV0
dXJuIGxpc3QucHRyKCk7CiB9CiAKLVJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNpbmds
ZVNoYWRvdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJz
ZXJNb2RlLCBib29sIGFsbG93SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpCitSZWZQdHI8Q1NTU2hh
ZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIGJvb2wgYWxsb3dJbnNldCwgYm9vbCBh
bGxvd1NwcmVhZCkKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0eWxlOwogICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7CkBAIC0yMDg5LDcgKzIwOTUsNyBAQCBS
ZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYXV0byBtYXliZUNvbG9yID0gY29u
c3VtZUNvbG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAgYXV0byBtYXliZUNvbG9y
ID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjb250ZXh0KTsKICAgICAgICAgaWYgKG1heWJlQ29sb3Ip
IHsKICAgICAgICAgICAgIC8vIElmIHdlIGp1c3QgcGFyc2VkIGEgY29sb3IgYnV0IGFscmVhZHkg
aGFkIG9uZSwgdGhlIGdpdmVuIHRva2VuIHJhbmdlIGlzIG5vdCBhIHZhbGlkIDxzaGFkb3c+Lgog
ICAgICAgICAgICAgaWYgKGNvbG9yKQpAQCAtMjEwMywyMyArMjEwOSwyMyBAQCBSZWZQdHI8Q1NT
U2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFkCiAgICAgICAgICAgICAvLyBJZiB3ZSd2ZSBh
bHJlYWR5IHBhcnNlZCB0aGVzZSBsZW5ndGhzLCB0aGUgZ2l2ZW4gdmFsdWUgaXMgaW52YWxpZCBh
cyB0aGVyZSBjYW5ub3QgYmUgdHdvIGxlbmd0aHMgY29tcG9uZW50cyBpbiBhIHNpbmdsZSA8c2hh
ZG93PiB2YWx1ZS4KICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAg
ICAgIGhvcml6b250YWxPZmZzZXQgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjc3NQYXJzZXJNb2Rl
LCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgaG9yaXpvbnRhbE9mZnNldCA9IGNvbnN1bWVMZW5n
dGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAgIGlmICghaG9y
aXpvbnRhbE9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB2ZXJ0
aWNhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2VBbGwpOworICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNv
bnRleHQubW9kZSwgVmFsdWVSYW5nZUFsbCk7CiAgICAgICAgIGlmICghdmVydGljYWxPZmZzZXQp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBjb25zdCBDU1NQYXJzZXJU
b2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgICAgIC8vIFRoZSBleHBsaWNpdCBjaGVj
ayBmb3IgY2FsYygpIGlzIHVuZm9ydHVuYXRlLiBUaGlzIGlzIGVuc3VyaW5nIHRoYXQgd2Ugb25s
eSBmYWlsIHBhcnNpbmcgaWYgdGhlcmUgaXMgYSBsZW5ndGgsIGJ1dCBpdCBmYWlscyB0aGUgcmFu
Z2UgY2hlY2suCiAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwg
dG9rZW4udHlwZSgpID09IE51bWJlclRva2VuIHx8ICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25U
b2tlbiAmJiBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKHRva2VuLmZ1bmN0aW9uSWQoKSkp
KSB7Ci0gICAgICAgICAgICBibHVyUmFkaXVzID0gY29uc3VtZUxlbmd0aChyYW5nZSwgY3NzUGFy
c2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKKyAgICAgICAgICAgIGJsdXJSYWRpdXMg
PSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjb250ZXh0Lm1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2
ZSk7CiAgICAgICAgICAgICBpZiAoIWJsdXJSYWRpdXMpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYmx1clJhZGl1cyAmJiBhbGxvd1Nw
cmVhZCkKLSAgICAgICAgICAgIHNwcmVhZERpc3RhbmNlID0gY29uc3VtZUxlbmd0aChyYW5nZSwg
Y3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCk7CisgICAgICAgICAgICBzcHJlYWREaXN0YW5j
ZSA9IGNvbnN1bWVMZW5ndGgocmFuZ2UsIGNvbnRleHQubW9kZSwgVmFsdWVSYW5nZUFsbCk7CiAg
ICAgfQogICAgIAogICAgIC8vIEluIG9yZGVyIGZvciB0aGlzIHRvIGJlIGEgdmFsaWQgPHNoYWRv
dz4sIGF0IGxlYXN0IHRoZXNlIGxlbmd0aHMgbXVzdCBiZSBwcmVzZW50LgpAQCAtMjEyOCw3ICsy
MTM0LDcgQEAgUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZAogICAgIHJl
dHVybiBDU1NTaGFkb3dWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaG9yaXpvbnRhbE9mZnNldCksIFdU
Rk1vdmUodmVydGljYWxPZmZzZXQpLCBXVEZNb3ZlKGJsdXJSYWRpdXMpLCBXVEZNb3ZlKHNwcmVh
ZERpc3RhbmNlKSwgV1RGTW92ZShzdHlsZSksIFdURk1vdmUoY29sb3IpKTsKIH0KIAotUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlckNvbnRleHQgY29udGV4dCwgT3B0aW9uU2V0PEFsbG93ZWRJbWFnZVR5cGU+IGFsbG93ZWRJ
bWFnZVR5cGVzKQorUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIE9wdGlvblNldDxB
bGxvd2VkSW1hZ2VUeXBlPiBhbGxvd2VkSW1hZ2VUeXBlcykKIHsKICAgICBpZiAoKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pICYmIChhbGxvd2VkSW1hZ2VUeXBlcy5jb250YWlu
cyhBbGxvd2VkSW1hZ2VUeXBlOjpSYXdTdHJpbmdBc1VSTCkpKSB7CiAgICAgICAgIGF1dG8gdXJs
U3RyaW5nVmlldyA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaAkocmV2aXNpb24gMjcyODM3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDgg
KzEwMiw4IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVN0cmluZygKIFN0cmlu
Z1ZpZXcgY29uc3VtZVVybEFzU3RyaW5nVmlldyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVVcmwoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwog
Ci1Db2xvciBjb25zdW1lQ29sb3JXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQ
YXJzZXJNb2RlKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNvbG9yKENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFjY2VwdFF1aXJreUNvbG9ycyA9
IGZhbHNlKTsKK0NvbG9yIGNvbnN1bWVDb2xvcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUNvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiwgYm9vbCBhY2NlcHRRdWlya3lDb2xvcnMgPSBmYWxzZSk7CiAKIGVudW0gY2xhc3MgUG9zaXRp
b25TeW50YXggewogICAgIFBvc2l0aW9uLCAvLyA8cG9zaXRpb24+CkBAIC0xMjYsOSArMTI2LDgg
QEAgZW51bSBjbGFzcyBBbGxvd2VkSW1hZ2VUeXBlIDogdWludDhfdCB7CiAgICAgR2VuZXJhdGVk
SW1hZ2UgPSAxIDw8IDMKIH07CiAKLVJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJDb250ZXh0LCBPcHRpb25TZXQ8QWxsb3dlZEltYWdl
VHlwZT4gPSB7IEFsbG93ZWRJbWFnZVR5cGU6OlVSTEZ1bmN0aW9uLCBBbGxvd2VkSW1hZ2VUeXBl
OjpJbWFnZVNldCwgQWxsb3dlZEltYWdlVHlwZTo6R2VuZXJhdGVkSW1hZ2UgfSk7Ci0KLVJlZlB0
cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlT3JOb25lKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQ
YXJzZXJDb250ZXh0KTsKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgT3B0aW9uU2V0PEFsbG93ZWRJbWFn
ZVR5cGU+ID0geyBBbGxvd2VkSW1hZ2VUeXBlOjpVUkxGdW5jdGlvbiwgQWxsb3dlZEltYWdlVHlw
ZTo6SW1hZ2VTZXQsIEFsbG93ZWRJbWFnZVR5cGU6OkdlbmVyYXRlZEltYWdlIH0pOworUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lSW1hZ2VPck5vbmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmKTsKIAogZW51bSBjbGFzcyBBbGxvd2VkRmlsdGVyRnVuY3Rpb25z
IHsKICAgICBQaXhlbEZpbHRlcnMsCkBAIC0xMzYsNyArMTM1LDcgQEAgZW51bSBjbGFzcyBBbGxv
d2VkRmlsdGVyRnVuY3Rpb25zIHsKIH07CiAKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZpbHRl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIEFsbG93ZWRG
aWx0ZXJGdW5jdGlvbnMpOwotUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hh
ZG93KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFsbG93SW5zZXQs
IGJvb2wgYWxsb3dTcHJlYWQpOworUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xl
U2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgYm9v
bCBhbGxvd0luc2V0LCBib29sIGFsbG93U3ByZWFkKTsKIAogc3RydWN0IEZvbnRTdHlsZVJhdyB7
CiAgICAgQ1NTVmFsdWVJRCBzdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI3MjgzNykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNjAw
LDcgKzYwMCw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblIKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGUgdW5k
ZXJsaW5lIGNvbG9yIHRvIHRoZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEgYnkgMzgl
LAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBwZWFyIG9u
IGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBjYW4gYmUg
c3BlY2lmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5saWdodG5lc3MgPSAwLjVm
OworICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5saWdodG5lc3MgPSA1MC4wZjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGhzbGEuYWxwaGEgKj0gMC4zOGY7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBrZWVw
aW5nIGNvbG9yIGluIExDSEEgKGlmIHRoYXQgY2hhbmdlIGlzIG1hZGUpIG9yIGNvbnZlcnRpbmcg
YmFjayB0byB0aGUgaW5pdGlhbCB1bmRlcmx5aW5nIGNvbG9yIHR5cGUgdG8gYXZvaWQgdW5uZWNl
c3NhcmlseSBjbGFtcGluZyBjb2xvcnMgb3V0c2lkZSBvZiBzUkdCLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCShy
ZXZpc2lvbiAyNzI4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckNvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw2IEBAIHN0YXRpYyBI
U0xIdWVDYWxjdWxhdGlvblJlc3VsdCBjYWxjdWxhdGUKICAgICBpZiAoaHVlID49IDM2MC4wZikK
ICAgICAgICAgaHVlIC09IDM2MC4wZjsKIAotICAgIGh1ZSAvPSAzNjAuMGY7Ci0KICAgICByZXR1
cm4geyBodWUsIG1pbiwgbWF4LCBjaHJvbWEgfTsKIH0KIApAQCAtNjksMTQgKzY3LDE0IEBAIEhT
TEE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIU0xBPGZsb2F0PiwKICAgICBhdXRvIFtyLCBnLCBi
LCBhbHBoYV0gPSBjb2xvcjsKICAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2Fs
Y3VsYXRlSFNMSHVlKGNvbG9yKTsKIAotICAgIGZsb2F0IGxpZ2h0bmVzcyA9IDAuNWYgKiAobWF4
ICsgbWluKTsKKyAgICBmbG9hdCBsaWdodG5lc3MgPSAoMC41ZiAqIChtYXggKyBtaW4pKSAqIDEw
MC4wZjsKICAgICBmbG9hdCBzYXR1cmF0aW9uOwogICAgIGlmICghY2hyb21hKQogICAgICAgICBz
YXR1cmF0aW9uID0gMDsKLSAgICBlbHNlIGlmIChsaWdodG5lc3MgPD0gMC41ZikKLSAgICAgICAg
c2F0dXJhdGlvbiA9IChjaHJvbWEgLyAobWF4ICsgbWluKSk7CisgICAgZWxzZSBpZiAobGlnaHRu
ZXNzIDw9IDUwLjBmKQorICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAvIChtYXggKyBtaW4p
KSAqIDEwMC4wZjsKICAgICBlbHNlCi0gICAgICAgIHNhdHVyYXRpb24gPSAoY2hyb21hIC8gKDIu
MGYgLSAobWF4ICsgbWluKSkpOworICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAvICgyLjBm
IC0gKG1heCArIG1pbikpKSAqIDEwMC4wZjsKIAogICAgIHJldHVybiB7IGh1ZSwgc2F0dXJhdGlv
biwgbGlnaHRuZXNzLCBhbHBoYSB9OwogfQpAQCAtODYsMTEgKzg0LDI2IEBAIFNSR0JBPGZsb2F0
PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvY3NzLWNvbG9yLTQvI2hzbC10by1yZ2IKICAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24s
IGxpZ2h0bmVzcywgYWxwaGFdID0gY29sb3I7CiAKLSAgICBpZiAoIXNhdHVyYXRpb24pCi0gICAg
ICAgIHJldHVybiB7IGxpZ2h0bmVzcywgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGFscGhhIH07Ci0g
ICAgCi0gICAgZmxvYXQgdGVtcDIgPSBsaWdodG5lc3MgPD0gMC41ZiA/IGxpZ2h0bmVzcyAqICgx
LjBmICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNzICog
c2F0dXJhdGlvbjsKLSAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBsaWdodG5lc3MgLSB0ZW1wMjsK
KyAgICBpZiAoIXNhdHVyYXRpb24pIHsKKyAgICAgICAgYXV0byBncmV5ID0gbGlnaHRuZXNzIC8g
MTAwLjBmOworICAgICAgICByZXR1cm4geyBncmV5LCBncmV5LCBncmV5LCBhbHBoYSB9OworICAg
IH0KKworICAgIC8vIGh1ZVRvUkdCKCkgd2FudHMgaHVlIGluIHRoZSAwLTYgcmFuZ2UuCisgICAg
YXV0byBub3JtYWxpemVkSHVlID0gKGh1ZSAvIDM2MC4wZikgKiA2LjBmOworICAgIGF1dG8gbm9y
bWFsaXplZExpZ2h0bmVzcyA9IGxpZ2h0bmVzcyAvIDEwMC4wZjsKKyAgICBhdXRvIG5vcm1hbGl6
ZWRTYXR1cmF0aW9uID0gc2F0dXJhdGlvbiAvIDEwMC4wZjsKKworICAgIGF1dG8gaHVlRm9yUmVk
ID0gbm9ybWFsaXplZEh1ZSArIDIuMGY7CisgICAgYXV0byBodWVGb3JHcmVlbiA9IG5vcm1hbGl6
ZWRIdWU7CisgICAgYXV0byBodWVGb3JCbHVlID0gbm9ybWFsaXplZEh1ZSAtIDIuMGY7CisgICAg
aWYgKGh1ZUZvclJlZCA+IDYuMGYpCisgICAgICAgIGh1ZUZvclJlZCAtPSA2LjBmOworICAgIGVs
c2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQorICAgICAgICBodWVGb3JCbHVlICs9IDYuMGY7CisK
KyAgICBmbG9hdCB0ZW1wMiA9IG5vcm1hbGl6ZWRMaWdodG5lc3MgPD0gMC41ZiA/IG5vcm1hbGl6
ZWRMaWdodG5lc3MgKiAoMS4wZiArIG5vcm1hbGl6ZWRTYXR1cmF0aW9uKSA6IG5vcm1hbGl6ZWRM
aWdodG5lc3MgKyBub3JtYWxpemVkU2F0dXJhdGlvbiAtIG5vcm1hbGl6ZWRMaWdodG5lc3MgKiBu
b3JtYWxpemVkU2F0dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBub3JtYWxpemVk
TGlnaHRuZXNzIC0gdGVtcDI7CiAgICAgCiAgICAgLy8gSHVlIGlzIGluIHRoZSByYW5nZSAwLTYs
IG90aGVyIGFyZ3MgaW4gMC0xLgogICAgIGF1dG8gaHVlVG9SR0IgPSBbXShmbG9hdCB0ZW1wMSwg
ZmxvYXQgdGVtcDIsIGZsb2F0IGh1ZSkgewpAQCAtMTAzLDE3ICsxMTYsNiBAQCBTUkdCQTxmbG9h
dD4gQ29sb3JDb252ZXJzaW9uPFNSR0JBPGZsb2F0CiAgICAgICAgIHJldHVybiB0ZW1wMTsKICAg
ICB9OwogCi0gICAgLy8gaHVlVG9SR0IoKSB3YW50cyBodWUgaW4gdGhlIDAtNiByYW5nZS4KLSAg
ICBodWUgKj0gNi4wZjsKLQotICAgIGF1dG8gaHVlRm9yUmVkID0gaHVlICsgMi4wZjsKLSAgICBh
dXRvIGh1ZUZvckdyZWVuID0gaHVlOwotICAgIGF1dG8gaHVlRm9yQmx1ZSA9IGh1ZSAtIDIuMGY7
Ci0gICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCi0gICAgICAgIGh1ZUZvclJlZCAtPSA2LjBmOwot
ICAgIGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQotICAgICAgICBodWVGb3JCbHVlICs9IDYu
MGY7Ci0KICAgICByZXR1cm4gewogICAgICAgICBodWVUb1JHQih0ZW1wMSwgdGVtcDIsIGh1ZUZv
clJlZCksCiAgICAgICAgIGh1ZVRvUkdCKHRlbXAxLCB0ZW1wMiwgaHVlRm9yR3JlZW4pLApAQCAt
MTI4LDggKzEzMCw4IEBAIEhXQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxIV0JBPGZsb2F0PiwK
IHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLTQvI3JnYi10by1o
d2IKICAgICBhdXRvIFtodWUsIG1pbiwgbWF4LCBjaHJvbWFdID0gY2FsY3VsYXRlSFNMSHVlKGNv
bG9yKTsKLSAgICBhdXRvIHdoaXRlbmVzcyA9IG1pbjsKLSAgICBhdXRvIGJsYWNrbmVzcyA9IDEu
MGYgLSBtYXg7CisgICAgYXV0byB3aGl0ZW5lc3MgPSBtaW4gKiAxMDAuMGY7CisgICAgYXV0byBi
bGFja25lc3MgPSAoMS4wZiAtIG1heCkgKiAxMDAuMGY7CiAgICAgCiAgICAgcmV0dXJuIHsgaHVl
LCB3aGl0ZW5lc3MsIGJsYWNrbmVzcywgY29sb3IuYWxwaGEgfTsKIH0KQEAgLTEzOSw4ICsxNDEs
MjQgQEAgU1JHQkE8ZmxvYXQ+IENvbG9yQ29udmVyc2lvbjxTUkdCQTxmbG9hdAogICAgIC8vIGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHdiLXRvLXJnYgogICAgIGF1dG8g
W2h1ZSwgd2hpdGVuZXNzLCBibGFja25lc3MsIGFscGhhXSA9IGNvbG9yOwogCi0gICAgaWYgKHdo
aXRlbmVzcyArIGJsYWNrbmVzcyA9PSAxLjBmKQotICAgICAgICByZXR1cm4geyB3aGl0ZW5lc3Ms
IHdoaXRlbmVzcywgd2hpdGVuZXNzLCBhbHBoYSB9OworICAgIGlmICh3aGl0ZW5lc3MgKyBibGFj
a25lc3MgPT0gMTAwLjBmKSB7CisgICAgICAgIGF1dG8gZ3JleSA9IHdoaXRlbmVzcyAvIDEwMC4w
ZjsKKyAgICAgICAgcmV0dXJuIHsgZ3JleSwgZ3JleSwgZ3JleSwgYWxwaGEgfTsKKyAgICB9CisK
KyAgICAvLyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgorICAgIGF1dG8g
bm9ybWFsaXplZEh1ZSA9IChodWUgLyAzNjAuMGYpICogNi4wZjsKKworICAgIGF1dG8gaHVlRm9y
UmVkID0gbm9ybWFsaXplZEh1ZSArIDIuMGY7CisgICAgYXV0byBodWVGb3JHcmVlbiA9IG5vcm1h
bGl6ZWRIdWU7CisgICAgYXV0byBodWVGb3JCbHVlID0gbm9ybWFsaXplZEh1ZSAtIDIuMGY7Cisg
ICAgaWYgKGh1ZUZvclJlZCA+IDYuMGYpCisgICAgICAgIGh1ZUZvclJlZCAtPSA2LjBmOworICAg
IGVsc2UgaWYgKGh1ZUZvckJsdWUgPCAwLjBmKQorICAgICAgICBodWVGb3JCbHVlICs9IDYuMGY7
CisKKyAgICBhdXRvIG5vcm1hbGl6ZWRXaGl0ZW5lc3MgPSB3aGl0ZW5lc3MgLyAxMDAuMGY7Cisg
ICAgYXV0byBub3JtYWxpemVkQmxhY2tuZXNzID0gYmxhY2tuZXNzIC8gMTAwLjBmOwogCiAgICAg
Ly8gVGhpcyBpcyB0aGUgaHVlVG9SR0IgZnVuY3Rpb24gaW4gY29udmVydENvbG9yPFNSR0JBPGZs
b2F0Pj4oY29uc3QgSFNMQSYpIHdpdGggdGVtcDEgPT0gMAogICAgIC8vIGFuZCB0ZW1wMiA9PSAx
IHN0cmVuZ3RoIHJlZHVjZWQgdGhyb3VnaCBpdC4KQEAgLTE1NCwyNSArMTcyLDE0IEBAIFNSR0JB
PGZsb2F0PiBDb2xvckNvbnZlcnNpb248U1JHQkE8ZmxvYXQKICAgICAgICAgcmV0dXJuIDAuMGY7
CiAgICAgfTsKIAotICAgIGF1dG8gYXBwbHlXaGl0ZW5lc3NCbGFja25lc3MgPSBbJl0oZmxvYXQg
Y29tcG9uZW50KSB7Ci0gICAgICAgIHJldHVybiAoY29tcG9uZW50ICogKDEuMGYgLSBjb2xvci53
aGl0ZW5lc3MgLSBjb2xvci5ibGFja25lc3MpKSArIGNvbG9yLndoaXRlbmVzczsKKyAgICBhdXRv
IGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzID0gW10oZmxvYXQgY29tcG9uZW50LCBhdXRvIHdoaXRl
bmVzcywgYXV0byBibGFja25lc3MpIHsKKyAgICAgICAgcmV0dXJuIChjb21wb25lbnQgKiAoMS4w
ZiAtIHdoaXRlbmVzcyAtIGJsYWNrbmVzcykpICsgd2hpdGVuZXNzOwogICAgIH07CiAKLSAgICAv
LyBodWVUb1JHQigpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgotICAgIGh1ZSAqPSA2LjBm
OwotCi0gICAgYXV0byBodWVGb3JSZWQgPSBodWUgKyAyLjBmOwotICAgIGF1dG8gaHVlRm9yR3Jl
ZW4gPSBodWU7Ci0gICAgYXV0byBodWVGb3JCbHVlID0gaHVlIC0gMi4wZjsKLSAgICBpZiAoaHVl
Rm9yUmVkID4gNi4wZikKLSAgICAgICAgaHVlRm9yUmVkIC09IDYuMGY7Ci0gICAgZWxzZSBpZiAo
aHVlRm9yQmx1ZSA8IDAuMGYpCi0gICAgICAgIGh1ZUZvckJsdWUgKz0gNi4wZjsKLQogICAgIHJl
dHVybiB7Ci0gICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZvclJl
ZCkpLAotICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JHcmVl
bikpLAotICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JCbHVl
KSksCisgICAgICAgIGFwcGx5V2hpdGVuZXNzQmxhY2tuZXNzKGh1ZVRvUkdCKGh1ZUZvclJlZCks
IG5vcm1hbGl6ZWRXaGl0ZW5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3MpLAorICAgICAgICBhcHBs
eVdoaXRlbmVzc0JsYWNrbmVzcyhodWVUb1JHQihodWVGb3JHcmVlbiksIG5vcm1hbGl6ZWRXaGl0
ZW5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3MpLAorICAgICAgICBhcHBseVdoaXRlbmVzc0JsYWNr
bmVzcyhodWVUb1JHQihodWVGb3JCbHVlKSwgbm9ybWFsaXplZFdoaXRlbmVzcywgbm9ybWFsaXpl
ZEJsYWNrbmVzcyksCiAgICAgICAgIGFscGhhCiAgICAgfTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTW9kZWxzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAkocmV2aXNpb24gMjcyODM3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNb2RlbHMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjcsMTggKzY3LDE4IEBAIHRlbXBsYXRlPD4gc3RydWN0IEV4dGVuZGVk
UkdCTW9kZWw8ZmxvYXQKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8ZmxvYXQ+IHsKICAg
ICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTxmbG9hdD4s
IDM+IHJhbmdlcyB7IHsKLSAgICAgICAgeyAwLCAxIH0sCi0gICAgICAgIHsgMCwgMSB9LAotICAg
ICAgICB7IDAsIDEgfQorICAgICAgICB7IDAsIDM2MCB9LAorICAgICAgICB7IDAsIDEwMCB9LAor
ICAgICAgICB7IDAsIDEwMCB9CiAgICAgfSB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0ludmVydGlibGUgPSBmYWxzZTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEhXQk1vZGVsPGZs
b2F0PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFu
Z2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7Ci0gICAgICAgIHsgMCwgMSB9LAotICAgICAgICB7IDAs
IDEgfSwKLSAgICAgICAgeyAwLCAxIH0KKyAgICAgICAgeyAwLCAzNjAgfSwKKyAgICAgICAgeyAw
LCAxMDAgfSwKKyAgICAgICAgeyAwLCAxMDAgfQogICAgIH0gfTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNzI4MzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIyLDcg
KzE0MjIsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6ZGF0ZVBsYWNlaG9sZGVyVGV4dENvCiAgICAg
Ly8gRklYTUU6IENvbnNpZGVyIHVzaW5nIExDSEE8ZmxvYXQ+IHJhdGhlciB0aGFuIEhTTEE8Zmxv
YXQ+IGZvciBiZXR0ZXIgcGVyY2VwdHVhbCByZXN1bHRzIGFuZCB0byBhdm9pZCBjbGFtcGluZyB0
byBzUkdCIGdhbXV0LCB3aGljaCBpcyB3aGF0IEhTTEEgZG9lcy4KICAgICBhdXRvIGhzbGEgPSB0
ZXh0Q29sb3IudG9Db2xvclR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKICAgICBpZiAodGV4dENv
bG9yLmx1bWluYW5jZSgpIDwgYmFja2dyb3VuZENvbG9yLmx1bWluYW5jZSgpKQotICAgICAgICBo
c2xhLmxpZ2h0bmVzcyArPSBkYXRlUGxhY2Vob2xkZXJDb2xvckxpZ2h0bmVzc0FkanVzdG1lbnRG
YWN0b3IgKiAoMS4wZiAtIGhzbGEubGlnaHRuZXNzKTsKKyAgICAgICAgaHNsYS5saWdodG5lc3Mg
Kz0gZGF0ZVBsYWNlaG9sZGVyQ29sb3JMaWdodG5lc3NBZGp1c3RtZW50RmFjdG9yICogKDEwMC4w
ZiAtIGhzbGEubGlnaHRuZXNzKTsKICAgICBlbHNlCiAgICAgICAgIGhzbGEubGlnaHRuZXNzICo9
IGRhdGVQbGFjZWhvbGRlckNvbG9yTGlnaHRuZXNzQWRqdXN0bWVudEZhY3RvcjsKIApJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjcyODQyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMjEtMDItMTUgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IFByZXBhcmUgZm9yIGFkZGluZyByZWxhdGl2ZSBjb2xvciBzdXBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE4ODEKKworICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgVXBkYXRlIEhTTEEgdGVzdHMgdG8gYWNjb3Vu
dCBmb3IgSFNMQSBub3cgdXNpbmcgMC0zNjAsIDAtMTAwLCAwLTEwMCBib3VuZHMgcmF0aGVyIHRo
YW4gMC0xLCAwLTEsIDAtMS4KKwogMjAyMS0wMi0xNCAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBw
bGUuY29tPgogCiAgICAgICAgIFtHUFVQXSBNb3ZlIFVzZUdQVVByb2Nlc3NGb3JNZWRpYUVuYWJs
ZWQgZnJvbSBXZWJQcmVmZXJlbmNlc0ludGVybmFsIHRvIFdlYlByZWZlcmVuY2VzRXhwZXJpbWVu
dGFsCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9y
VGVzdHMuY3BwCShyZXZpc2lvbiAyNzI4MzcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDkgQEAg
VEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNs
YUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9u
KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgRVhQRUNU
X0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xvci5saWdodG5l
c3MpOwogICAgIAogICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0Q29sb3I8U1JH
QkE8dWludDhfdD4+KGhzbGFDb2xvcik7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBw
ZWRDb2xvcik7CkBAIC02MCw3ICs2MCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQog
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CiAgICAgRVhQRUNU
X0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VR
KGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoY29sb3IubGlnaHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCiAg
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4o
aHNsYUNvbG9yKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKQEAg
LTczLDEwICs3MywxMCBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiAgICAgYXV0byBoc2xh
Q29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8ZmxvYXQ+PigpOwogCiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBo
c2xhQ29sb3Iuc2F0dXJhdGlvbik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgaHNsYUNvbG9y
LmxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNsYUNvbG9yLnNhdHVyYXRp
b24pOworICAgIEVYUEVDVF9GTE9BVF9FUSg1MCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3Mp
OworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSAqIDEwMCwgaHNsYUNvbG9y
LmxpZ2h0bmVzcyk7CiAKICAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydENvbG9y
PFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRU
cmlwcGVkQ29sb3IpOwpAQCAtODgsMTEgKzg4LDExIEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dy
ZWVuKQogCiAgICAgYXV0byBoc2xhQ29sb3IgPSBjb2xvci50b0NvbG9yVHlwZUxvc3N5PEhTTEE8
ZmxvYXQ+PigpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGhzbGFDb2xvci5o
dWUpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDAuNSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDEyMCwgaHNsYUNvbG9yLmh1ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEwMCwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOworICAgIEVYUEVDVF9GTE9BVF9FUSg1MCwgaHNsYUNvbG9yLmxp
Z2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFD
b2xvci5saWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSAq
IDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKICAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAgIEVYUEVDVF9F
UShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwpAQCAtMTA0LDExICsxMDQsMTEgQEAgVEVTVChD
b2xvciwgUkdCVG9IU0xfQmx1ZSkKIAogICAgIGF1dG8gaHNsYUNvbG9yID0gY29sb3IudG9Db2xv
clR5cGVMb3NzeTxIU0xBPGZsb2F0Pj4oKTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjY2NjY2
NjY5LCBoc2xhQ29sb3IuaHVlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLnNh
dHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGhzbGFDb2xvci5saWdodG5lc3Mp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDAsIGhzbGFDb2xvci5odWUpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgxMDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
NTAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxp
Z2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoY29s
b3IubGlnaHRuZXNzKCkgKiAxMDAsIGhzbGFDb2xvci5saWdodG5lc3MpOwogCiAgICAgYXV0byBy
b3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTx1aW50OF90Pj4oaHNsYUNvbG9y
KTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKQEAgLTEyMiw5ICsx
MjIsOSBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3JheSkKIAogICAgIEVYUEVDVF9GTE9B
VF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9y
LnNhdHVyYXRpb24pOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUwMTk2MDc4NDMxMzcyNTQ4LCBo
c2xhQ29sb3IubGlnaHRuZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNTAuMTk2MDgzLCBoc2xh
Q29sb3IubGlnaHRuZXNzKTsKICAgICAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRu
ZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5s
aWdodG5lc3MoKSAqIDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKICAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwog
ICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwpAQCAtMTM4LDkgKzEzOCw5
IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwg
aHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0
aW9uKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC42Mjc0NTA5ODAzOTIxNTY4NSwgaHNsYUNvbG9y
LmxpZ2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYyLjc0NTEwMiwgaHNsYUNvbG9yLmxp
Z2h0bmVzcyk7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFD
b2xvci5saWdodG5lc3MpOworICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSAq
IDEwMCwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKICAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gY29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+Pihoc2xhQ29sb3IpOwogICAgIEVYUEVDVF9F
UShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwpAQCAtMTU0LDkgKzE1NCw5IEBAIFRFU1QoQ29s
b3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29s
b3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwot
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLjc1Mjk0MTE3NjQ3MDU4ODIyLCBoc2xhQ29sb3IubGlnaHRu
ZXNzKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNzUuMjk0MTIxLCBoc2xhQ29sb3IubGlnaHRuZXNz
KTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxp
Z2h0bmVzcyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpICogMTAwLCBo
c2xhQ29sb3IubGlnaHRuZXNzKTsKIAogICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252
ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KGhzbGFDb2xvcik7CiAgICAgRVhQRUNUX0VRKGNvbG9y
LCByb3VuZFRyaXBwZWRDb2xvcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420353</attachid>
            <date>2021-02-15 13:10:29 -0800</date>
            <delta_ts>2021-02-15 13:40:52 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-221881-20210215151028.patch</filename>
            <type>text/plain</type>
            <size>1392</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTNiNDEyOTM1NjBiZGNm
OTRlNWRiNTljMDE5ZDM3YjVhM2YxZTIxZi4uOWRjZGYyZDFjMDYzZTJkODZlZGM0YmMxNDViOTU4
MjM1NGVmMWFhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTAyLTE1ICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AZ25vbWUub3JnPgorCisgICAgICAgIFVucmV2aWV3
ZWQsIHNpbGVuY2UgLVdyZXR1cm4tdHlwZSB3YXJuaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE4ODEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzc0MzU4MDQzPgorCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZVJHQlBhcmFtZXRlcnMpOgorCiAyMDIxLTAyLTE1ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRA
YXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gKFJFR1JFU1NJT04gcjI3Mjc3Nik6
IEluY29ycmVjdCBvcmRlciBmb3IgZGVjb2RpbmcgdGhlIFBhdHRlcm4gcmVwZWF0IHByb3BlcnRp
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAppbmRleCA5MGZmYjU3NDBiZTE3MGE3OTM3NWYzMTQxMjk5ZGI0NDJlZGY3
MTA0Li45ZTc3NGE3N2MzZWUzNDc4Njk2ZGVlMDllOTNkYzg2OWJlNjM1NDBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCkBAIC03NzMsNiArNzczLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGUKICAgICAgICAg
Y2FzZSBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXI6CiAgICAgICAgICAgICByZXR1cm4gY29uc3Vt
ZU51bWJlclJhdyhhcmdzKTsKICAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH07CiAKICAgICBhdXRvIGluaXRpYWxDb21wb25lbnQgPSBjb25zdW1l
SW5pdGlhbENvbXBvbmVudChhcmdzKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>