<?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>164134</bug_id>
          
          <creation_ts>2016-10-28 10:12:46 -0700</creation_ts>
          <short_desc>WebAssembly JS API: implement importing and defining Memory</short_desc>
          <delta_ts>2016-12-09 14:40:07 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>161709</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1245641</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-28 10:12:46 -0700</bug_when>
    <thetext>https://github.com/WebAssembly/design/blob/master/JS.md#webassemblymemory-constructor

Also allow importing / exporting them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257499</commentid>
    <comment_count>1</comment_count>
      <attachid>296451</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-07 17:34:36 -0800</bug_when>
    <thetext>Created attachment 296451
WIP

I need to hook it up to Instance now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257560</commentid>
    <comment_count>2</comment_count>
      <attachid>296469</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-07 20:06:47 -0800</bug_when>
    <thetext>Created attachment 296469
WIP

Need to write stuff in the builder now to test that it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257632</commentid>
    <comment_count>3</comment_count>
      <attachid>296469</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-07 22:56:02 -0800</bug_when>
    <thetext>Comment on attachment 296469
WIP

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

Quick review.

&gt; Source/JavaScriptCore/jsc.cpp:2629
&gt; +    if (!!plan.getModuleInformation()-&gt;memory) {

I&apos;m not a fan of having operator bool for this. It&apos;s not clear what it means w.r.t. wasm semantics.

&gt; Source/JavaScriptCore/testWasm.cpp:306
&gt; +    /*

I think all the ones without memory can be removed separately? Or are those not in the builder yet?

And this patch can remove all the memory ones.

&gt; Source/JavaScriptCore/runtime/VM.h:297
&gt; +    uint32_t wasmMemorySize;

I&apos;d like use to call it &quot;size in pages&quot; so it&apos;s unambiguously not bytes (or use &quot;size in bytes&quot;... maybe bytes is better?).

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:212
&gt; +    if (!!memory) {

Ditto on operator bool, I&apos;d spell out the meaning.

&gt; Source/JavaScriptCore/wasm/WasmMemoryInformation.cpp:29
&gt; +#include &quot;WasmCallingConvention.h&quot;

I think we usually put this include under the #if ENABLE.

&gt; Source/JavaScriptCore/wasm/WasmMemoryInformation.h:62
&gt; +    explicit operator bool() const { return !!m_minSize &amp;&amp; !!m_maxSize; }

I would make this an explicit function.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:327
&gt; +    PageCount maxSize = PageCount::max();

IMO it&apos;s worth distinguishing between explicitly getting max from the user, versus getting an unspecified value.

&gt; Source/JavaScriptCore/wasm/WasmPageCount.h:36
&gt; +        : m_pageCount(UINT_MAX)

I&apos;d rather use a typedef for uint32_t here and below, and / or do:
  std::numeric_limits&lt;typeof(m_pageCount)&gt;::max()

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:62
&gt; +                createTypeError(exec, ASCIILiteral(&quot;WebAssembly.Memory expects the &apos;initial&apos; property to be an integer in the range: [0, 2^32 - 1]&quot;)));

That&apos;s too big: we can only address 32-bit, so 2^32 pages exceeds that number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257655</commentid>
    <comment_count>4</comment_count>
      <attachid>296469</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-08 00:02:27 -0800</bug_when>
    <thetext>Comment on attachment 296469
WIP

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

Thanks for the comments.

&gt;&gt; Source/JavaScriptCore/runtime/VM.h:297
&gt;&gt; +    uint32_t wasmMemorySize;
&gt; 
&gt; I&apos;d like use to call it &quot;size in pages&quot; so it&apos;s unambiguously not bytes (or use &quot;size in bytes&quot;... maybe bytes is better?).

This is in bytes. My solution for this problem was adding Wasm::PageCount to indicate we&apos;re talking about a quantity of pages. Any other memory related size is an uint32 and represents bytes. That said, it&apos;s probably worth adding &quot;bytes&quot; to the end of this name to prevent any confusion.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:212
&gt;&gt; +    if (!!memory) {
&gt; 
&gt; Ditto on operator bool, I&apos;d spell out the meaning.

What name would you give this?

The first thing that comes to my mind is &quot;isValid&quot; and that doesn&apos;t seem much better than &quot;operator book&quot;. In some ways, what we want is an Optional&lt;MemoryInformation&gt;, but I thought I&apos;d just build in the Optional bit into the MemoryInformation itself.

&gt;&gt; Source/JavaScriptCore/wasm/WasmMemoryInformation.cpp:29
&gt;&gt; +#include &quot;WasmCallingConvention.h&quot;
&gt; 
&gt; I think we usually put this include under the #if ENABLE.

Will fix.

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:327
&gt;&gt; +    PageCount maxSize = PageCount::max();
&gt; 
&gt; IMO it&apos;s worth distinguishing between explicitly getting max from the user, versus getting an unspecified value.

Yeah you&apos;re right. I was mimicking what the old code was doing, but we definitely want to be able to tell when a module specifies a maximum memory size versus not specifying one. I just now need to decide what to do inside Memory construction when given an invalid maximum page count.

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:62
&gt;&gt; +                createTypeError(exec, ASCIILiteral(&quot;WebAssembly.Memory expects the &apos;initial&apos; property to be an integer in the range: [0, 2^32 - 1]&quot;)));
&gt; 
&gt; That&apos;s too big: we can only address 32-bit, so 2^32 pages exceeds that number.

This is just performing the toUint32t operation the spec defines. There is a nicer error below when you specify a page count that is too large. Do you think it&apos;s worth specifiying this error to just say it expects a range up to PageCount::max()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257926</commentid>
    <comment_count>5</comment_count>
      <attachid>296580</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-08 15:57:15 -0800</bug_when>
    <thetext>Created attachment 296580
WIP

The Memory API works enough to be able to run a simple test on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258010</commentid>
    <comment_count>6</comment_count>
      <attachid>296612</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-08 18:59:48 -0800</bug_when>
    <thetext>Created attachment 296612
WIP

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258025</commentid>
    <comment_count>7</comment_count>
      <attachid>296617</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-08 19:23:32 -0800</bug_when>
    <thetext>Created attachment 296617
WIP

More tests and more validation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258035</commentid>
    <comment_count>8</comment_count>
      <attachid>296623</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-08 19:42:29 -0800</bug_when>
    <thetext>Created attachment 296623
WIP

I think this is just about done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258058</commentid>
    <comment_count>9</comment_count>
      <attachid>296623</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-08 20:55:58 -0800</bug_when>
    <thetext>Comment on attachment 296623
WIP

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

&gt; JSTests/wasm/Builder.js:108
&gt; +        assert.isString(field, `Import function field should be a string, got &quot;${field}&quot;`);

Both above should be &quot;Import memory&quot;.

&gt; JSTests/wasm/Builder.js:109
&gt; +        // FIXME: what validation should I do here?

I&apos;d just fix that later, separate bug.

&gt; JSTests/wasm/Builder.js:482
&gt; +                                        const functionIndexSpaceOffset = 0;

Derp.

&gt; JSTests/wasm/Builder_WebAssemblyBinary.js:64
&gt; +                assert.truthy(typeof initial === &quot;number&quot;, &quot;Execpt a number of undefined for &apos;maximum&apos;&quot;);

assert.isA(foo, &quot;number&quot;, &quot;what what&quot;); does that for you.

Also, typo &quot;Execpt&quot;.

&gt; JSTests/wasm/Builder_WebAssemblyBinary.js:71
&gt; +                    assert.truthy(typeof maximum === &quot;undefined&quot;, &quot;Execpt a number of undefined for &apos;maximum&apos;&quot;);

Ditto.

&gt; JSTests/wasm/Builder_WebAssemblyBinary.js:73
&gt; +                put(bin, &quot;varuint32&quot;, hasMaximum);

This is a varuint1.

&gt; JSTests/wasm/js-api/test_memory.js:3
&gt; +function assert(b) {

The other tests just import assert.js.

&gt; JSTests/wasm/js-api/test_memory.js:12
&gt; +    let threw = false;

The assert module has a helper for throwing. See test_BuilderJSON.js:

(function CustomSectionInvalidByte() {
    const u = (new Builder()).Unknown(&quot;custom section&quot;);
    assert.throws(() =&gt; u.Byte(0xFF + 1), Error, `Not the same: &quot;0&quot; and &quot;256&quot;: Unknown section expected byte, got: &quot;256&quot;`);
})();

&gt; JSTests/wasm/js-api/test_memory.js:150
&gt; +    }

This test passing makes me happy.

&gt; Source/JavaScriptCore/runtime/VM.h:300
&gt; +    uint32_t wasmMemorySize;

I&apos;d call these &quot;top&quot; as well, since we can have multiple.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:357
&gt; +    // We only allow one memory for now.

Can you quote the spec / design here? Makes it easier to map back if it changes IMO.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:66
&gt; +        // so we guarantee its lifecylce.

Typo.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:166
&gt; +                        throwException(exec, throwScope, createTypeError(exec, ASCIILiteral(&quot;Memory imports &apos;maximum&apos; is larger than the module&apos;s expected &apos;maximum&quot;))));

No &quot;s&quot; on &quot;import&quot; as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258089</commentid>
    <comment_count>10</comment_count>
      <attachid>296623</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-08 23:46:08 -0800</bug_when>
    <thetext>Comment on attachment 296623
WIP

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

&gt;&gt; JSTests/wasm/Builder.js:482
&gt;&gt; +                                        const functionIndexSpaceOffset = 0;
&gt; 
&gt; Derp.

I need to come up with the actual solution for this. I&apos;ll figure it out before uploading the patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258250</commentid>
    <comment_count>11</comment_count>
      <attachid>296675</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-09 12:43:45 -0800</bug_when>
    <thetext>Created attachment 296675
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258252</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-09 12:46:46 -0800</bug_when>
    <thetext>Attachment 296675 did not pass style-queue:


ERROR: Source/JavaScriptCore/jsc.cpp:72:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryPrototype.cpp:57:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.h:50:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:197:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258263</commentid>
    <comment_count>13</comment_count>
      <attachid>296675</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-09 12:58:24 -0800</bug_when>
    <thetext>Comment on attachment 296675
patch

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

A few nits, then lgtm

&gt; JSTests/wasm/js-api/test_basic_api.js:78
&gt; +        new WebAssembly.Memory({initial: 20});

We should add a FIXME to test more of the Memory API&apos;s properties.

&gt; JSTests/wasm/js-api/test_memory.js:1
&gt; +import Builder from &apos;../Builder.js&apos;;

I would use assert.js here. It does much of the assert / throw stuff below.

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:43
&gt; +    RELEASE_ASSERT(!maximum || maximum &gt;= initial); // This should be gauaranteed by our caller.

Typo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258276</commentid>
    <comment_count>14</comment_count>
      <attachid>296685</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-09 13:27:35 -0800</bug_when>
    <thetext>Created attachment 296685
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258280</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-09 13:30:05 -0800</bug_when>
    <thetext>Attachment 296685 did not pass style-queue:


ERROR: Source/JavaScriptCore/jsc.cpp:72:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyMemoryPrototype.cpp:57:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyMemory.h:50:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:197:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258341</commentid>
    <comment_count>16</comment_count>
      <attachid>296685</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-09 14:29:18 -0800</bug_when>
    <thetext>Comment on attachment 296685
patch

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

r=me.

&gt; JSTests/wasm/Builder.js:106
&gt; +    return (module, field, {initial, maximum}) =&gt; {

Why destructure this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258342</commentid>
    <comment_count>17</comment_count>
      <attachid>296685</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-09 14:32:01 -0800</bug_when>
    <thetext>Comment on attachment 296685
patch

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

&gt;&gt; JSTests/wasm/Builder.js:106
&gt;&gt; +    return (module, field, {initial, maximum}) =&gt; {
&gt; 
&gt; Why destructure this?

Probably when I was debugging this code. I&apos;ll remove that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258352</commentid>
    <comment_count>18</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-09 14:40:07 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/209630</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296451</attachid>
            <date>2016-12-07 17:34:36 -0800</date>
            <delta_ts>2016-12-07 20:06:47 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>42692</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAogI2lu
Y2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgog
I2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUg
PGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjYy
Miw2ICsyNjIzLDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMK
ICAgICAgICAgICAgIH0pOwogICAgIH0KIAorICAgIHZvaWQqIG1lbW9yeUJ5dGVzID0gbnVsbHB0
cjsKKyAgICB1aW50MzJfdCBtZW1vcnlTaXplID0gMDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bTo6TWVtb3J5PiBtZW1vcnk7CisgICAgaWYgKCEhcGxhbi5nZXRNb2R1bGVJbmZvcm1hdGlvbigp
LT5tZW1vcnkpIHsKKyAgICAgICAgbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1v
cnk+KHBsYW4uZ2V0TW9kdWxlSW5mb3JtYXRpb24oKS0+bWVtb3J5Lm1pblNpemUoKSwgcGxhbi5n
ZXRNb2R1bGVJbmZvcm1hdGlvbigpLT5tZW1vcnkubWF4U2l6ZSgpKTsKKyAgICAgICAgbWVtb3J5
Qnl0ZXMgPSBtZW1vcnktPm1lbW9yeSgpOworICAgICAgICBtZW1vcnlTaXplID0gbWVtb3J5LT5z
aXplKCk7CisgICAgfQorICAgIHZtLndhc21NZW1vcnlQb2ludGVyID0gbWVtb3J5Qnl0ZXM7Cisg
ICAgdm0ud2FzbU1lbW9yeVNpemUgPSBtZW1vcnlTaXplOworCiAgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewogICAgICAgICBKU0FycmF5KiB0ZXN0Q2Fz
ZXMgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPmFyZ3VtZW50KGkgKyAyKSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgdGVzdENhc2VzLT5sZW5ndGgo
KTsgKyt0ZXN0SW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAkocmV2
aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrUGxhbihQbGFu
JiBwbGFuLCB1bnNpZ24KIC8vIEZvciBub3cgd2UgaW5saW5lIHRoZSB0ZXN0IGZpbGVzLgogc3Rh
dGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIHsKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tQbGFuKTsK
KyAgICAvKgogICAgIHsKICAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206CiAgICAgICAgIC8vICAg
IChtb2R1bGUKQEAgLTE0MzAsNiArMTQzMiw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygp
CiAgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKICAgICB9CiAKKyAgICAq
LwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDA3LDEwICsxNDA3LDEyIEBACiAJCTc5NUIxOTk3MUQ3OEJFMzUwMDI2MkZBMCAvKiBN
YXBCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5NUIxOTk1MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCAqLzsgfTsKIAkJNzk1QjE5
OTgxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2
NDY1NkExQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBH
ZXRQdXRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzk3RDQ2NkYxREY4QTg1MDAwOEI1MjlGIC8qIFdhc21QYWdlQ291bnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0Q0NjZFMURGOEE4NTAw
MDhCNTI5RiAvKiBXYXNtUGFnZUNvdW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzk4OTM3NzgxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg5Mzc3NjFEQ0FC
NTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLzsgfTsKIAkJNzk4OTM3NzkxRENBQjU3
MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5
OEY4NDU5MURGOEIxNTAwMDA5NEQxOSAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4Rjg0NTgxREY4QjE1
MDAwMDk0RDE5IC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgKi87IH07CiAJCTc5OUVGN0M0
MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBC
M1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMDkwN0QxRDc2
ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLzsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2
NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQy
Myw2ICsxNDI1LDcgQEAKIAkJNzlCMDBDQkYxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUIwMENC
QjFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUIxNzg4RTFEMzk5QjgwMDBCMUE1NjcgLyog
SklUTWF0aElDRm9yd2FyZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTg5OUZFMUQzODYxMkUwMEQxOEM3MyAvKiBKSVRNYXRoSUNGb3J3YXJkcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Qjgx
OTkzMUREMjVDRjUwMEREQzcxNCAvKiBKU0dsb2JhbE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QjgxOTkyMUREMjVDRjUwMERE
QzcxNCAvKiBKU0dsb2JhbE9iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUMwOTYyRDFERjhBQ0Y0MDA5Qjg0OTkgLyogV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUMwOTYyQzFERjhBQ0Y0MDA5Qjg0OTkgLyogV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlDNEIxNUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzlDNEIxNUIxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2Vy
dmF0aW9uUGhhc2UuY3BwICovOyB9OwogCQk3OUM0QjE1RTFCQTIxNThGMDBGRDU5MkUgLyogREZH
TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEg
LyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzgyOCwxMCAr
MzgzMSwxMiBAQAogCQk3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk1QjE5OTYxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwQmFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRQdXRJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5N0Q0NjZFMURGOEE4NTAwMDhCNTI5RiAvKiBXYXNt
UGFnZUNvdW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21QYWdlQ291
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaXhlZEFycmF5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRB
cnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZpeGVkQXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4Rjg0NTgxREY4QjE1MDAwMDk0RDE5IC8q
IFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1hcC5oOyBwYXRoID0g
YjMvQjNQQ1RvT3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QTA5
MDdEMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBIYXNoTWFwSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWFwSW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzg0NCw2ICszODQ5LDcgQEAKIAkJNzlCMDBDQkExQzZBQjA3RTAw
ODhDNjVEIC8qIFByb3h5T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByb3h5T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlC
MDBDQkIxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFByb3h5T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc5QjgxOTkyMUREMjVDRjUwMEREQzcxNCAvKiBKU0dsb2JhbE9iamVjdElubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QzA5NjJDMURGOEFDRjQwMDlCODQ5OSAv
KiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc5QzRCMTVCMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0xpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludFBDUmFuZ2VzLmg7IHBhdGggPSBsbGludC9M
TEludFBDUmFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTk2LDggKzYw
MDIsMTEgQEAKIAkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFy
c2VyLmggKi8sCiAJCQkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuY3Bw
ICovLAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggKi8sCisJ
CQkJNzlDMDk2MkMxREY4QUNGNDAwOUI4NDk5IC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5oICov
LAorCQkJCTc5OEY4NDU4MURGOEIxNTAwMDA5NEQxOSAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24u
Y3BwICovLAogCQkJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2Vy
LmNwcCAqLywKIAkJCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNl
ci5oICovLAorCQkJCTc5N0Q0NjZFMURGOEE4NTAwMDhCNTI5RiAvKiBXYXNtUGFnZUNvdW50Lmgg
Ki8sCiAJCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKIAkJ
CQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLywKIAkJCQk1M0Y0MEU4
QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovLApAQCAtNzc2MSw2ICs3NzcwLDcg
QEAKIAkJCQk3OTIzM0MyQjFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0aElDLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODUwMjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OUMwOTYyRDFERjhBQ0Y0MDA5Qjg0
OTkgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUw
NDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQTc2MjA3MURCOTI0MzMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtODE4Niw2ICs4MTk2LDcgQEAKIAkJCQlGRUI1OEMxNTE4N0I4QjE2MDA5
OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTk4
RDBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMwMkU5MEYwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3OTdENDY2RjFERjhBODUwMDA4QjUyOUYgLyogV2FzbVBhZ2VDb3VudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTk2QjczMUIxQkRBMDhEMTAwMzMxQjg0IC8qIEVycm9yUHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OTgwRUQxRDNBRTAwRjFGNjgxIC8qIERp
cmVjdEV2YWxDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NDk4MjA0MTg5MUQwQjAw
MDgxRTVCOCAvKiBFdmVudExvb3AuaCBpbiBIZWFkZXJzICovLApAQCAtOTgzNyw2ICs5ODQ4LDcg
QEAKIAkJCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDM4NkE3ODFERDY5ODlDMDA4NjUyQzQgLyog
SW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk0OTU4NzFD
NTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzk4
Rjg0NTkxREY4QjE1MDAwMDk0RDE5IC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCREM1MTE1MjI4RkZEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJGQ0JGMjFEQjU4REFEMDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM0
QTE1MjI4MDlBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA5NDYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtMjkzLDYgKzI5Myw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSB2b2lkKiwgYmVjYXVzZSBpdCBtaWdodCBub3QgcG9pbnQgdG8gYSBDYWxsRnJhbWUuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDQ0MQogICAgIEV4
ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOyAKKyAgICB2b2lkKiB3YXNtTWVtb3J5UG9pbnRlcjsKKyAg
ICB1aW50MzJfdCB3YXNtTWVtb3J5U2l6ZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1
cmVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlUmFyZURhdGFTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3Ry
dWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMw
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0
eUV4cHJlc3Npb24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9j
ZWR1cmUmLCBGdW5jdGlvbkNvbXBpbGF0aW9uKik7CisgICAgQjNJUkdlbmVyYXRvcihNZW1vcnlJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEZ1bmN0aW9uQ29tcGlsYXRpb24qKTsKIAogICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsK
ICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBA
IC0xNzksNyArMTc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgc3RhY2spOwog
ICAgIFZhbHVlKiB6ZXJvRm9yVHlwZShUeXBlKTsKIAotICAgIE1lbW9yeSogbV9tZW1vcnk7CiAg
ICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAg
ICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CkBAIC0xOTAsOSArMTg5LDggQEAgcHJpdmF0
ZToKICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW251bVR5cGVzXTsKIH07CiAKLUIzSVJHZW5lcmF0
b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBG
dW5jdGlvbkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbikKLSAgICA6IG1fbWVtb3J5KG1lbW9yeSkK
LSAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1l
bW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBGdW5jdGlvbkNv
bXBpbGF0aW9uKiBjb21waWxhdGlvbikKKyAgICA6IG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBt
X3VubGlua2VkQ2FsbHMoY29tcGlsYXRpb24tPnVubGlua2VkQ2FsbHMpCiB7CiAgICAgbV9jdXJy
ZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKQEAgLTIxMSwxMiArMjA5LDEyIEBAIEIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW0KICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChtX21lbW9yeSkgewotICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtX21lbW9yeS0+
cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgaWYgKCEhbWVtb3J5KSB7
CisgICAgICAgIG1fbWVtb3J5QmFzZUdQUiA9IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5iYXNl
TWVtb3J5UG9pbnRlcjsKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQ
Uik7Ci0gICAgICAgIEFTU0VSVCghbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdp
c3RlcnNbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IG1fbWVtb3J5
LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKLSAgICAg
ICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiBpbmZvIDogbV9tZW1vcnktPnBp
bm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCisgICAgICAgIEFTU0VSVCghbWVtb3J5LnBp
bm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgIG1f
bWVtb3J5U2l6ZUdQUiA9IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBd
LnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZv
JiBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCiAgICAgICAg
ICAgICBtX3Byb2MucGluUmVnaXN0ZXIoaW5mby5zaXplUmVnaXN0ZXIpOwogCiAgICAgICAgIG1f
cHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKQEAgLTY2MCw3ICs2NTgsNyBAQCB2b2lkIEIz
SVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvCiAgICAgZGF0YUxvZ0xuKCJcbiIpOwog
fQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1dyYXBwZXIo
Vk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IG1haW5GdW5jdGlvbiwgTWVtb3J5KiBtZW1vcnkpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENv
bXBpbGF0aW9uPiBjcmVhdGVKU1dyYXBwZXIoVk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25h
dHVyZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgTWVtb3J5SW5mb3JtYXRp
b24mIG1lbW9yeSkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IHByb2MuYWRkQmxvY2soKTsKQEAgLTY4MiwxMiArNjgwLDEzIEBAIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWEKICAgICAvLyBNb3ZlIG1lbW9yeSB2YWx1ZXMgdG8g
dGhlIGFwcHJvcmlhdGUgcGxhY2VzLCBpZiBuZWVkZWQuCiAgICAgVmFsdWUqIGJhc2VNZW1vcnkg
PSBudWxscHRyOwogICAgIFZlY3RvcjxWYWx1ZSo+IHNpemVzOwotICAgIGlmIChtZW1vcnkpIHsK
LSAgICAgICAgYmFzZU1lbW9yeSA9IGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIG1lbW9yeS0+bWVtb3J5KCkpOworICAgIGlmICghIW1lbW9yeSkgeworICAg
ICAgICBiYXNlTWVtb3J5ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9h
ZCwgSW50NjQsIE9yaWdpbigpLAorICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZtLndhc21NZW1vcnlQb2ludGVyKSk7CiAgICAgICAg
IFZhbHVlKiBzaXplID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwg
SW50MzIsIE9yaWdpbigpLAotICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5
OjpvZmZzZXRPZlNpemUoKSkpOwotICAgICAgICBzaXplcy5yZXNlcnZlQ2FwYWNpdHkobWVtb3J5
LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgICAgIGZvciAo
YXV0byBpbmZvIDogbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKSB7Cisg
ICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAmdm0ud2FzbU1lbW9yeVNpemUpKTsKKyAgICAgICAgc2l6ZXMucmVzZXJ2ZUNhcGFjaXR5KG1l
bW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIGZv
ciAoYXV0byBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpIHsK
ICAgICAgICAgICAgIHNpemVzLmFwcGVuZChibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBT
dWIsIE9yaWdpbigpLCBzaXplLAogICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaW5mby5zaXplT2Zmc2V0KSkpOwogICAgICAgICB9
CkBAIC03MDEsMTEgKzcwMCwxMSBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9u
PiBjcmVhCiAKICAgICAvLyBNb3ZlIHRoZSBhcmd1bWVudHMgaW50byBwbGFjZS4KICAgICBWYWx1
ZSogcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKHByb2MsIGJsb2Nr
LCBPcmlnaW4oKSwgYXJndW1lbnRzLCB0b0IzVHlwZShzaWduYXR1cmUtPnJldHVyblR5cGUpLCBb
Jl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewotICAgICAgICBpZiAobWVtb3J5KSB7
Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZXMuc2l6ZSgpID09IG1lbW9yeS0+cGlubmVkUmVnaXN0
ZXJzKCkuc2l6ZVJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKENvbnN0cmFpbmVkVmFsdWUoYmFzZU1lbW9yeSwgVmFsdWVSZXA6OnJlZyhtZW1vcnktPnBp
bm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKSkpOworICAgICAgICBpZiAoISFtZW1v
cnkpIHsKKyAgICAgICAgICAgIEFTU0VSVChzaXplcy5zaXplKCkgPT0gbWVtb3J5LnBpbm5lZFJl
Z2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGJhc2VNZW1vcnksIFZhbHVlUmVwOjpyZWcobWVtb3J5
LnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKSkpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHNpemVzW2ldLCBWYWx1ZVJlcDo6
cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1tpXS5zaXplUmVnaXN0
ZXIpKSk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFs
dWUoc2l6ZXNbaV0sIFZhbHVlUmVwOjpyZWcobWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVS
ZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOwogICAgICAgICB9CiAKICAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CkBAIC03MzksNyArNzM4LDcgQEAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYQogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PENvbXBpbGF0aW9uPih2bSwgcHJvYyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
bXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIE1lbW9yeSogbWVtb3J5LCBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5j
dGlvbnMsIHVuc2lnbmVkIG9wdExldmVsKQorc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGls
YXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgY29u
c3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9u
PiYgZnVuY3Rpb25zLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0
ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb25Db21waWxhdGlvbj4oKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDk0
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2Vk
dXJlKHZvaWQqKTsKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3Mg
TWVtb3J5OworY2xhc3MgTWVtb3J5SW5mb3JtYXRpb247CiAKLXN0ZDo6dW5pcXVlX3B0cjxGdW5j
dGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6
ZV90LCBNZW1vcnkqLCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZv
cm1hdGlvbj4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworc3RkOjp1bmlxdWVfcHRyPEZ1bmN0
aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QsIE1lbW9yeUluZm9ybWF0aW9uJiwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEZ1
bmN0aW9uSW5mb3JtYXRpb24+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5IEBACiAjaW5jbHVkZSAi
QjNUeXBlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21P
cHMuaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwNSw4ICsxMDcsNiBAQCBzdHJ1Y3QgRnVuY3Rpb25J
bmZvcm1hdGlvbiB7CiAgICAgc2l6ZV90IGVuZDsKIH07CiAKLWNsYXNzIE1lbW9yeTsKLQogc3Ry
dWN0IEV4cG9ydCB7CiAgICAgSWRlbnRpZmllciBmaWVsZDsKICAgICBFeHRlcm5hbDo6S2luZCBr
aW5kOwpAQCAtMTIyLDcgKzEyMiw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAg
VmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlczsKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRz
OwogICAgIFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiBmdW5jdGlvbnM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPE1lbW9yeT4gbWVtb3J5OworICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsK
ICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2aXNp
b24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1NZW1vcnk6Ok1lbW9yeSh1aW50MzJfdCBzdGFydGluZ1NpemUsIHVp
bnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwaW5uZWRTaXplUmVnaXN0
ZXJzKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IHN0YXJ0aW5nU2l6ZSwgUGFnZUNvdW50IGNh
cGFjaXR5KQogICAgIDogbV9tb2RlKE1vZGU6OkJvdW5kc0NoZWNraW5nKQotICAgICwgbV9zaXpl
KHN0YXJ0aW5nU2l6ZSkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCisgICAgLCBtX3NpemUo
c3RhcnRpbmdTaXplLmJ5dGVzKCkpCisgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5LmJ5dGVzKCkp
CiAgICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNoZWNraW5nIHRo
ZW4gd2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KICAgICAvLyBzZWU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLSAgICAsIG1f
bWFwcGVkQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heFBhZ2VDb3VudCkgKiBzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocGFnZVNpemUpKQorICAgICwgbV9tYXBwZWRDYXBhY2l0eShQYWdl
Q291bnQ6Om1heCgpLmJ5dGVzKCkpCiB7CiAgICAgQVNTRVJUKHBpbm5lZFNpemVSZWdpc3RlcnMu
c2l6ZSgpID4gMCk7CiAKQEAgLTUwLDI1ICs1MCwxMiBAQCBNZW1vcnk6Ok1lbW9yeSh1aW50MzJf
dCBzdGFydGluZ1NpemUsIHVpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNT
RVJUKHN0YXJ0aW5nU2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKLSAgICBpZiAobXByb3RlY3Qo
cmVzdWx0LCBzdGFydGluZ1NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgQVNT
RVJUKG1fc2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKKyAgICBpZiAobXByb3RlY3QocmVzdWx0
LCBtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CiAgICAgICAgIG11bm1hcChyZXN1
bHQsIG1fbWFwcGVkQ2FwYWNpdHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5z
aWduZWQgcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6ZVJlZ2lzdGVycy5zaXpl
KCkgKyAxOwotICAgIGpzY0NhbGxpbmdDb252ZW50aW9uKCkubV9jYWxsZWVTYXZlUmVnaXN0ZXJz
LmZvckVhY2goWyZdIChSZWcgcmVnKSB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSByZWcuZ3ByKCk7
Ci0gICAgICAgIGlmICghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzIHx8IFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpLmdldChyZWcpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBp
ZiAocmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID09IDEpIHsKLSAgICAgICAgICAgIG1fcGlubmVk
UmVnaXN0ZXJzLmJhc2VNZW1vcnlQb2ludGVyID0gZ3ByOwotICAgICAgICAgICAgcmVtYWluaW5n
UGlubmVkUmVnaXN0ZXJzLS07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9waW5uZWRS
ZWdpc3RlcnMuc2l6ZVJlZ2lzdGVycy5hcHBlbmQoeyBncHIsIHBpbm5lZFNpemVSZWdpc3RlcnNb
LS1yZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgLSAxXSB9KTsKLSAgICB9KTsKLQotICAgIEFTU0VS
VCghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzKTsKICAgICBtX21lbW9yeSA9IHJlc3VsdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAkocmV2aXNpb24g
MjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywyOCArMjcsMTIgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21QYWdl
Q291bnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAotc3RydWN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8gewotICAgIEdQ
UlJlZyBzaXplUmVnaXN0ZXI7Ci0gICAgdW5zaWduZWQgc2l6ZU9mZnNldDsKLX07Ci0KLS8vIEZJ
WE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVy
LiBSaWdodCBub3cgd2UgdGFrZSBhIHZlY3RvciB3aXRoIG9ubHkgb25lCi0vLyBlbnRyeS4gU3Bl
Y2lmaWNhbGx5IGFuIGVudHJ5IHdoZXJlIHRoZSBzaXplT2Zmc2V0ID09IDAuIElmIHdlIGhhdmUg
bW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lzdGVyLAotLy8gd2UgY2FuIGhhdmUgb25lIGZvciBlYWNo
IGxvYWQgc2l6ZSBjbGFzcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYyOTUyCi1zdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJbmZvIHsKLSAgICBWZWN0b3I8UGlu
bmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKLSAgICBHUFJSZWcgYmFzZU1lbW9y
eVBvaW50ZXI7Ci19OwotCi1jb25zdGV4cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOwot
Y29uc3RleHByIHVpbnQzMl90IG1heFBhZ2VDb3VudCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pigo
MXVsbCA8PCAzMikgLyBwYWdlU2l6ZSk7Ci0KIGNsYXNzIE1lbW9yeSB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU5
LDggKzQzLDcgQEAgcHVibGljOgogICAgICAgICBCb3VuZHNDaGVja2luZwogICAgIH07CiAKLSAg
ICBNZW1vcnkoKSA9IGRlZmF1bHQ7Ci0gICAgTWVtb3J5KHVpbnQzMl90IHN0YXJ0aW5nU2l6ZSwg
dWludDMyX3QgY2FwYWNpdHksIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdp
c3RlcnMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShQYWdlQ291bnQgc3RhcnRpbmdT
aXplLCBQYWdlQ291bnQgY2FwYWNpdHkpOwogCiAgICAgfk1lbW9yeSgpCiAgICAgewpAQCAtNzAs
NyArNTMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBt
X21lbW9yeTsgfQogICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
LSAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fcGlubmVkUmVnaXN0ZXJzOyB9CiAKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KIApAQCAtODcsNyArNjksNiBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRl
OgogICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OwotICAgIFBpbm5lZFJlZ2lzdGVySW5m
byBtX3Bpbm5lZFJlZ2lzdGVyczsKICAgICBNb2RlIG1fbW9kZTsKICAgICB1aW50MzJfdCBtX3Np
emUgeyAwIH07CiAgICAgdWludDMyX3QgbV9jYXBhY2l0eSB7IDAgfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5m
b3JtYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCisKKyNpbmNsdWRlICJXYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKKworTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0
aW9uKFBhZ2VDb3VudCBtaW5TaXplLCBQYWdlQ291bnQgbWF4U2l6ZSwgIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMpCisgICAgOiBtX21pblNpemUobWluU2l6ZSkK
KyAgICAsIG1fbWF4U2l6ZShtYXhTaXplKQoreworICAgIEFTU0VSVCghIW1fbWluU2l6ZSk7Cisg
ICAgQVNTRVJUKCEhbV9tYXhTaXplKTsKKyAgICBBU1NFUlQoISEqdGhpcyk7CisKKyAgICB1bnNp
Z25lZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplUmVnaXN0ZXJzLnNpemUo
KSArIDE7CisgICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2NhbGxlZVNhdmVSZWdpc3RlcnMu
Zm9yRWFjaChbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgR1BSUmVnIGdwciA9IHJlZy5ncHIoKTsK
KyAgICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVnaXN0ZXJTZXQ6OnN0
YWNrUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
IChyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPT0gMSkgeworICAgICAgICAgICAgbV9waW5uZWRS
ZWdpc3RlcnMuYmFzZU1lbW9yeVBvaW50ZXIgPSBncHI7CisgICAgICAgICAgICByZW1haW5pbmdQ
aW5uZWRSZWdpc3RlcnMtLTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3Bpbm5lZFJl
Z2lzdGVycy5zaXplUmVnaXN0ZXJzLmFwcGVuZCh7IGdwciwgcGlubmVkU2l6ZVJlZ2lzdGVyc1st
LXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyAtIDFdIH0pOworICAgIH0pOworCisgICAgQVNTRVJU
KCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQu
aCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CisKK3N0cnVjdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvIHsKKyAgICBHUFJSZWcgc2l6
ZVJlZ2lzdGVyOworICAgIHVuc2lnbmVkIHNpemVPZmZzZXQ7Cit9OworCisvLyBGSVhNRTogV2Ug
c2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3Rlci4gUmlnaHQg
bm93IHdlIHRha2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9uZQorLy8gZW50cnkuIFNwZWNpZmljYWxs
eSBhbiBlbnRyeSB3aGVyZSB0aGUgc2l6ZU9mZnNldCA9PSAwLiBJZiB3ZSBoYXZlIG1vcmUgdGhh
biBvbmUgc2l6ZSByZWdpc3RlciwKKy8vIHdlIGNhbiBoYXZlIG9uZSBmb3IgZWFjaCBsb2FkIHNp
emUgY2xhc3MuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
Mjk1Mgorc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7CisgICAgVmVjdG9yPFBpbm5lZFNpemVS
ZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CisgICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVy
OworfTsKKworY2xhc3MgTWVtb3J5SW5mb3JtYXRpb24geworcHVibGljOgorICAgIE1lbW9yeUlu
Zm9ybWF0aW9uKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKnRoaXMpOworICAgIH0KKworICAg
IE1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBtaW5TaXplLCBQYWdlQ291bnQgbWF4U2l6ZSwg
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMpOworCisgICAgY29u
c3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X3Bpbm5lZFJlZ2lzdGVyczsgfQorICAgIFBhZ2VDb3VudCBtaW5TaXplKCkgY29uc3QgeyByZXR1
cm4gbV9taW5TaXplOyB9CisgICAgUGFnZUNvdW50IG1heFNpemUoKSBjb25zdCB7IHJldHVybiBt
X21heFNpemU7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiAhIW1f
bWluU2l6ZSAmJiAhIW1fbWF4U2l6ZTsgfQorCitwcml2YXRlOgorICAgIFBhZ2VDb3VudCBtX21p
blNpemUgeyB9OworICAgIFBhZ2VDb3VudCBtX21heFNpemUgeyB9OworICAgIFBpbm5lZFJlZ2lz
dGVySW5mbyBtX3Bpbm5lZFJlZ2lzdGVycyB7IH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA5NDYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNp
bmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAj
aW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAKQEAgLTMxNCwyNiArMzE0LDMxIEBAIGJvb2wgTW9k
dWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCiAgICAgaWYgKCFwYXJzZVZhclVJbnQxKGZsYWdzKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdWludDMyX3Qgc2l6ZTsKLSAgICBpZiAoIXBh
cnNlVmFyVUludDMyKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHNpemUg
PiBtYXhQYWdlQ291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBQYWdlQ291bnQgbWlu
U2l6ZTsKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHNpemU7CisgICAgICAgIGlmICghcGFyc2VW
YXJVSW50MzIoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgh
UGFnZUNvdW50Ojppc1ZhbGlkKHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBtaW5TaXplID0gUGFnZUNvdW50KHNpemUpOworICAgIH0KIAotICAgIHVpbnQzMl90IGNh
cGFjaXR5ID0gbWF4UGFnZUNvdW50OworICAgIFBhZ2VDb3VudCBtYXhTaXplID0gUGFnZUNvdW50
OjptYXgoKTsKICAgICBpZiAoZmxhZ3MpIHsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihj
YXBhY2l0eSkpCisgICAgICAgIHVpbnQzMl90IHNpemU7CisgICAgICAgIGlmICghcGFyc2VWYXJV
SW50MzIoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghUGFn
ZUNvdW50Ojppc1ZhbGlkKHNpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoc2l6ZSA+IGNhcGFjaXR5IHx8IGNhcGFjaXR5ID4gbWF4UGFnZUNvdW50KQorICAgICAg
ICBtYXhTaXplID0gUGFnZUNvdW50KHNpemUpOworICAgICAgICBpZiAobWluU2l6ZSA+IG1heFNp
emUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY2FwYWNpdHkgKj0g
cGFnZVNpemU7Ci0gICAgc2l6ZSAqPSBwYWdlU2l6ZTsKLQogICAgIFZlY3Rvcjx1bnNpZ25lZD4g
cGlubmVkU2l6ZXMgPSB7IDAgfTsKLSAgICBtX21vZHVsZS0+bWVtb3J5ID0gc3RkOjptYWtlX3Vu
aXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7Ci0gICAgcmV0dXJuIG1f
bW9kdWxlLT5tZW1vcnktPm1lbW9yeSgpOworICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBNZW1vcnlJ
bmZvcm1hdGlvbihtaW5TaXplLCBtYXhTaXplLCBwaW5uZWRTaXplcyk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFBhZ2VDb3VudCB7CisKK3B1YmxpYzoK
KyAgICBQYWdlQ291bnQoKQorICAgICAgICA6IG1fcGFnZUNvdW50KFVJTlRfTUFYKQorICAgIHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChtYXhQYWdlQ291bnQgPCBVSU5UX01BWCwgIldlIHJlbHkg
b24gdGhpcyBoZXJlLiIpOworICAgIH0KKworICAgIFBhZ2VDb3VudCh1aW50MzJfdCBwYWdlQ291
bnQpCisgICAgICAgIDogbV9wYWdlQ291bnQocGFnZUNvdW50KQorICAgIHsgfQorCisgICAgc2l6
ZV90IGJ5dGVzKCkgeyByZXR1cm4gbV9wYWdlQ291bnQgKiBwYWdlU2l6ZTsgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNWYWxpZCh1aW50MzJfdCBwYWdlQ291bnQpCisgICAgeworICAgICAgICByZXR1
cm4gcGFnZUNvdW50IDw9IG1heFBhZ2VDb3VudDsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFnZUNv
dW50IG1heCgpCisgICAgeworICAgICAgICByZXR1cm4gUGFnZUNvdW50KG1heFBhZ2VDb3VudCk7
CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9wYWdlQ291bnQgIT0gVUlOVF9NQVg7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcjwoY29uc3QgUGFnZUNvdW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3BhZ2VDb3VudCA8IG90aGVyLm1fcGFnZUNvdW50OworICAgIH0KKyAgICBib29sIG9w
ZXJhdG9yPihjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fcGFnZUNvdW50ID4gb3RoZXIubV9wYWdlQ291bnQ7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbWF4UGFnZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KCgxdWxsIDw8IDMyKSAvIHBhZ2VTaXplKTsKKworICAgIHVpbnQzMl90IG1fcGFnZUNvdW50
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
QVNNKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkocmV2aXNp
b24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBQbGFuOjpydW4oKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9jb21waWxlZEZ1bmN0aW9ucy51
bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmdldCgpLCBpbmZvLnNpZ25h
dHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zKSk7CisgICAgICAgIG1fY29tcGls
ZWRGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeSwgaW5m
by5zaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucykpOwogICAgIH0KIAog
ICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9uLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwx
MSArNjQsMTMgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwog
ICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICB9CisgICAgLyoKICAgICBj
b25zdCBNZW1vcnkqIG1lbW9yeSgpIGNvbnN0CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VCghZmFpbGVkKCkpOwogICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5
LmdldCgpOwogICAgIH0KKyAgICAqLwogICAgIHNpemVfdCBjb21waWxlZEZ1bmN0aW9uQ291bnQo
KSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuY3BwCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIs
MTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorY29uc3Qg
Q2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1l
bW9yeSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJs
eU1lbW9yeSkgfTsKKworSlNXZWJBc3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJseU1lbW9yeTo6
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNZW1vcnk+JiYgbWVtb3J5KQogewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1lbW9yeT4odm0uaGVhcCkpIEpTV2ViQXNzZW1i
bHlNZW1vcnkodm0sIHN0cnVjdHVyZSk7CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3Nl
bWJseU1lbW9yeSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKG1lbW9yeSkpOwogICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDQsOCAr
NDYsOSBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZVN0CiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2Vt
Ymx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5
KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9tZW1vcnkoV1RGTW92ZShtZW1v
cnkpKQogewogfQogCkBAIC02OCw4ICs3MSw2IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6
dmlzaXRDaGlsZHJlbigKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0g
eyAiV2ViQXNzZW1ibHkuTWVtb3J5IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1dlYkFzc2VtYmx5TWVtb3J5KSB9OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDIwOTQ2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGli
bGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM2LDE2ICszNywyMCBAQCBjbGFzcyBKU1dlYkFz
c2VtYmx5TWVtb3J5IDogcHVibGljIEpTRGVzCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBj
cmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmKTsK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCisgICAgV2FzbTo6TWVtb3J5KiBt
ZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgSlNX
ZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSopOworICAgIEpTV2ViQXNzZW1ibHlNZW1v
cnkoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmKTsKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIwOTQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCwxMSBA
QAogCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21NZW1v
cnkuaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogI2luY2x1ZGUg
IldlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IubHV0LmgiCiAKQEAgLTQzLDE5ICs0Nyw3OSBA
QCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1CiAgQGVuZAogICovCiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlNZW1vcnkoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0MTM0Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlv
bihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIldlYkFzc2Vt
Ymx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgTWVtb3J5IGNvbnN0cnVjdG9yIHByb3BlcnR5
IikpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9
IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1i
bHkuTWVtb3J5IGV4cGVjdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiKSkpKTsKKworICAgIGF1dG8g
Z2V0VWludDMyID0gWyZdIChKU1ZhbHVlIHZhbHVlKSAtPiB1aW50MzJfdCB7CisgICAgICAgIGRv
dWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLnRvSW50ZWdlcihleGVjKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICBpZiAoZG91YmxlVmFsdWUg
PCAwIHx8IGRvdWJsZVZhbHVlID4gVUlOVF9NQVgpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgdGhlICdpbml0aWFs
JyBwcm9wZXJ0eSB0byBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZTogWzAsIDJeMzIgLSAxXSIp
KSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGRvdWJsZVZhbHVlKTsKKyAgICB9OworCisgICAgSlNPYmplY3Qq
IG1lbW9yeURlc2NyaXB0b3I7CisgICAgeworICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gZXhl
Yy0+YXJndW1lbnQoMCk7CisgICAgICAgIGlmICghYXJndW1lbnQuaXNPYmplY3QoKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVt
b3J5IGV4Y2VwdHMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCIpKSkpOworICAg
ICAgICBtZW1vcnlEZXNjcmlwdG9yID0ganNDYXN0PEpTT2JqZWN0Kj4oYXJndW1lbnQpOworICAg
IH0KKworICAgIFdhc206OlBhZ2VDb3VudCBtaW5TaXplOworICAgIHsKKyAgICAgICAgSWRlbnRp
ZmllciBpbml0aWFsID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJpbml0aWFsIik7Cisg
ICAgICAgIEpTVmFsdWUgbWluU2l6ZVZhbHVlID0gbWVtb3J5RGVzY3JpcHRvci0+Z2V0KGV4ZWMs
IGluaXRpYWwpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CisgICAgICAgIHVpbnQzMl90IHNpemUgPSBnZXRVaW50MzIobWluU2l6ZVZhbHVlKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICBpZiAoIVdh
c206OlBhZ2VDb3VudDo6aXNWYWxpZChzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IGludmFsaWQgJ2luaXRpYWwn
IHBhZ2UgY291bnQiKSkpKTsKKyAgICAgICAgbWluU2l6ZSA9IFdhc206OlBhZ2VDb3VudChzaXpl
KTsKKyAgICB9CisKKyAgICBXYXNtOjpQYWdlQ291bnQgbWF4U2l6ZTsKKyAgICB7CisgICAgICAg
IElkZW50aWZpZXIgbWF4aW11bSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11
bSIpOworICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gbWVtb3J5RGVzY3JpcHRvci0+aGFzUHJv
cGVydHkoZXhlYywgbWF4aW11bSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKKyAgICAgICAgaWYgKGhhc1Byb3BlcnR5KSB7CisgICAgICAgICAgICBKU1Zh
bHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBtYXhpbXVtKTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAg
ICAgICAgIHVpbnQzMl90IHNpemUgPSBnZXRVaW50MzIobWF4U2l6ZVZhbHVlKTsKKyAgICAgICAg
ICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKHNpemUpKQorICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IGlu
dmFsaWQgJ2luaXRpYWwnIHBhZ2UgY291bnQiKSkpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgICAgIG1heFNpemUgPSBXYXNtOjpQ
YWdlQ291bnQoc2l6ZSk7CisKKyAgICAgICAgICAgIGlmIChtaW5TaXplID4gbWF4U2l6ZSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IHByb3ZpZGVkIGEgJ21heGltdW0nIHBh
Z2UgY291bnQgdGhhdCBzbWFsbGVyIHRoYW4gdGhlICdpbml0aWFsJyBwYWdlIGNvdW50IikpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
d2hhdCBkb2VzIHRoZSBzcGVjIHNheSB0byBkbyBoZXJlLgorICAgICAgICAgICAgbWF4U2l6ZSA9
IG1pblNpemU7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5PihtaW5TaXpl
LCBtYXhTaXplKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1l
bW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5
TWVtb3J5U3RydWN0dXJlKCksIFdURk1vdmUobWVtb3J5KSkpOwogfQogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUq
IHN0YXRlKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCAiV2ViQXNzZW1ibHkuTWVtb3J5IikpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1
Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
IldlYkFzc2VtYmx5Lk1lbW9yeSIpKTsKIH0KIAogV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rv
ciogV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296469</attachid>
            <date>2016-12-07 20:06:47 -0800</date>
            <delta_ts>2016-12-08 15:57:15 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>50721</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQAogI2lu
Y2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgog
I2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUg
PGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjYy
Miw2ICsyNjIzLDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMK
ICAgICAgICAgICAgIH0pOwogICAgIH0KIAorICAgIHZvaWQqIG1lbW9yeUJ5dGVzID0gbnVsbHB0
cjsKKyAgICB1aW50MzJfdCBtZW1vcnlTaXplID0gMDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bTo6TWVtb3J5PiBtZW1vcnk7CisgICAgaWYgKCEhcGxhbi5nZXRNb2R1bGVJbmZvcm1hdGlvbigp
LT5tZW1vcnkpIHsKKyAgICAgICAgbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1v
cnk+KHBsYW4uZ2V0TW9kdWxlSW5mb3JtYXRpb24oKS0+bWVtb3J5Lm1pblNpemUoKSwgcGxhbi5n
ZXRNb2R1bGVJbmZvcm1hdGlvbigpLT5tZW1vcnkubWF4U2l6ZSgpKTsKKyAgICAgICAgbWVtb3J5
Qnl0ZXMgPSBtZW1vcnktPm1lbW9yeSgpOworICAgICAgICBtZW1vcnlTaXplID0gbWVtb3J5LT5z
aXplKCk7CisgICAgfQorICAgIHZtLndhc21NZW1vcnlQb2ludGVyID0gbWVtb3J5Qnl0ZXM7Cisg
ICAgdm0ud2FzbU1lbW9yeVNpemUgPSBtZW1vcnlTaXplOworCiAgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewogICAgICAgICBKU0FycmF5KiB0ZXN0Q2Fz
ZXMgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPmFyZ3VtZW50KGkgKyAyKSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgdGVzdENhc2VzLT5sZW5ndGgo
KTsgKyt0ZXN0SW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAkocmV2
aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrUGxhbihQbGFu
JiBwbGFuLCB1bnNpZ24KIC8vIEZvciBub3cgd2UgaW5saW5lIHRoZSB0ZXN0IGZpbGVzLgogc3Rh
dGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIHsKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tQbGFuKTsK
KyAgICAvKgogICAgIHsKICAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206CiAgICAgICAgIC8vICAg
IChtb2R1bGUKQEAgLTE0MzAsNiArMTQzMiw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygp
CiAgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oMCkt
PmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYpIH0pLCAwKTsKICAgICB9CiAKKyAgICAq
LwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDA3LDEwICsxNDA3LDEyIEBACiAJCTc5NUIxOTk3MUQ3OEJFMzUwMDI2MkZBMCAvKiBN
YXBCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5NUIxOTk1MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCAqLzsgfTsKIAkJNzk1QjE5
OTgxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2
NDY1NkExQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBH
ZXRQdXRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzk3RDQ2NkYxREY4QTg1MDAwOEI1MjlGIC8qIFdhc21QYWdlQ291bnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0Q0NjZFMURGOEE4NTAw
MDhCNTI5RiAvKiBXYXNtUGFnZUNvdW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzk4OTM3NzgxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg5Mzc3NjFEQ0FC
NTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLzsgfTsKIAkJNzk4OTM3NzkxRENBQjU3
MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5
OEY4NDU5MURGOEIxNTAwMDA5NEQxOSAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4Rjg0NTgxREY4QjE1
MDAwMDk0RDE5IC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgKi87IH07CiAJCTc5OUVGN0M0
MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBC
M1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMDkwN0QxRDc2
ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLzsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2
NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQy
Myw2ICsxNDI1LDcgQEAKIAkJNzlCMDBDQkYxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUIwMENC
QjFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUIxNzg4RTFEMzk5QjgwMDBCMUE1NjcgLyog
SklUTWF0aElDRm9yd2FyZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTg5OUZFMUQzODYxMkUwMEQxOEM3MyAvKiBKSVRNYXRoSUNGb3J3YXJkcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5Qjgx
OTkzMUREMjVDRjUwMEREQzcxNCAvKiBKU0dsb2JhbE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QjgxOTkyMUREMjVDRjUwMERE
QzcxNCAvKiBKU0dsb2JhbE9iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUMwOTYyRDFERjhBQ0Y0MDA5Qjg0OTkgLyogV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUMwOTYyQzFERjhBQ0Y0MDA5Qjg0OTkgLyogV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlDNEIxNUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzlDNEIxNUIxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2Vy
dmF0aW9uUGhhc2UuY3BwICovOyB9OwogCQk3OUM0QjE1RTFCQTIxNThGMDBGRDU5MkUgLyogREZH
TGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEg
LyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzgyOCwxMCAr
MzgzMSwxMiBAQAogCQk3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk1QjE5OTYxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwQmFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRQdXRJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5N0Q0NjZFMURGOEE4NTAwMDhCNTI5RiAvKiBXYXNt
UGFnZUNvdW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21QYWdlQ291
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaXhlZEFycmF5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRB
cnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZpeGVkQXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4Rjg0NTgxREY4QjE1MDAwMDk0RDE5IC8q
IFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1hcC5oOyBwYXRoID0g
YjMvQjNQQ1RvT3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QTA5
MDdEMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBIYXNoTWFwSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWFwSW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzg0NCw2ICszODQ5LDcgQEAKIAkJNzlCMDBDQkExQzZBQjA3RTAw
ODhDNjVEIC8qIFByb3h5T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByb3h5T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlC
MDBDQkIxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFByb3h5T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc5QjgxOTkyMUREMjVDRjUwMEREQzcxNCAvKiBKU0dsb2JhbE9iamVjdElubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QzA5NjJDMURGOEFDRjQwMDlCODQ5OSAv
KiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc5QzRCMTVCMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0xpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQ
cmVzZXJ2YXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludFBDUmFuZ2VzLmg7IHBhdGggPSBsbGludC9M
TEludFBDUmFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTk2LDggKzYw
MDIsMTEgQEAKIAkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFy
c2VyLmggKi8sCiAJCQkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuY3Bw
ICovLAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggKi8sCisJ
CQkJNzlDMDk2MkMxREY4QUNGNDAwOUI4NDk5IC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5oICov
LAorCQkJCTc5OEY4NDU4MURGOEIxNTAwMDA5NEQxOSAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24u
Y3BwICovLAogCQkJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2Vy
LmNwcCAqLywKIAkJCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyogV2FzbU1vZHVsZVBhcnNl
ci5oICovLAorCQkJCTc5N0Q0NjZFMURGOEE4NTAwMDhCNTI5RiAvKiBXYXNtUGFnZUNvdW50Lmgg
Ki8sCiAJCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLywKIAkJ
CQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLywKIAkJCQk1M0Y0MEU4
QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovLApAQCAtNzc2MSw2ICs3NzcwLDcg
QEAKIAkJCQk3OTIzM0MyQjFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0aElDLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODUwMjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OUMwOTYyRDFERjhBQ0Y0MDA5Qjg0
OTkgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUw
NDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQTc2MjA3MURCOTI0MzMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtODE4Niw2ICs4MTk2LDcgQEAKIAkJCQlGRUI1OEMxNTE4N0I4QjE2MDA5
OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTk4
RDBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMwMkU5MEYwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3OTdENDY2RjFERjhBODUwMDA4QjUyOUYgLyogV2FzbVBhZ2VDb3VudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTk2QjczMUIxQkRBMDhEMTAwMzMxQjg0IC8qIEVycm9yUHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OTgwRUQxRDNBRTAwRjFGNjgxIC8qIERp
cmVjdEV2YWxDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NDk4MjA0MTg5MUQwQjAw
MDgxRTVCOCAvKiBFdmVudExvb3AuaCBpbiBIZWFkZXJzICovLApAQCAtOTgzNyw2ICs5ODQ4LDcg
QEAKIAkJCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDM4NkE3ODFERDY5ODlDMDA4NjUyQzQgLyog
SW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk0OTU4NzFD
NTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzk4
Rjg0NTkxREY4QjE1MDAwMDk0RDE5IC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCREM1MTE1MjI4RkZEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJGQ0JGMjFEQjU4REFEMDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM0
QTE1MjI4MDlBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA5NDYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtMjkzLDYgKzI5Myw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSB2b2lkKiwgYmVjYXVzZSBpdCBtaWdodCBub3QgcG9pbnQgdG8gYSBDYWxsRnJhbWUuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDQ0MQogICAgIEV4
ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOyAKKyAgICB2b2lkKiB3YXNtTWVtb3J5UG9pbnRlcjsKKyAg
ICB1aW50MzJfdCB3YXNtTWVtb3J5U2l6ZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1
cmVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlUmFyZURhdGFTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3Ry
dWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMw
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0
eUV4cHJlc3Npb24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9j
ZWR1cmUmLCBGdW5jdGlvbkNvbXBpbGF0aW9uKik7CisgICAgQjNJUkdlbmVyYXRvcihNZW1vcnlJ
bmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEZ1bmN0aW9uQ29tcGlsYXRpb24qKTsKIAogICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsK
ICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBA
IC0xNzksNyArMTc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2Nr
KGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgc3RhY2spOwog
ICAgIFZhbHVlKiB6ZXJvRm9yVHlwZShUeXBlKTsKIAotICAgIE1lbW9yeSogbV9tZW1vcnk7CiAg
ICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAg
ICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CkBAIC0xOTAsOSArMTg5LDggQEAgcHJpdmF0
ZToKICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW251bVR5cGVzXTsKIH07CiAKLUIzSVJHZW5lcmF0
b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBG
dW5jdGlvbkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbikKLSAgICA6IG1fbWVtb3J5KG1lbW9yeSkK
LSAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1l
bW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBGdW5jdGlvbkNv
bXBpbGF0aW9uKiBjb21waWxhdGlvbikKKyAgICA6IG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBt
X3VubGlua2VkQ2FsbHMoY29tcGlsYXRpb24tPnVubGlua2VkQ2FsbHMpCiB7CiAgICAgbV9jdXJy
ZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKQEAgLTIxMSwxMiArMjA5LDEyIEBAIEIzSVJH
ZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW0KICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChtX21lbW9yeSkgewotICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtX21lbW9yeS0+
cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgaWYgKCEhbWVtb3J5KSB7
CisgICAgICAgIG1fbWVtb3J5QmFzZUdQUiA9IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5iYXNl
TWVtb3J5UG9pbnRlcjsKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQ
Uik7Ci0gICAgICAgIEFTU0VSVCghbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdp
c3RlcnNbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IG1fbWVtb3J5
LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKLSAgICAg
ICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiBpbmZvIDogbV9tZW1vcnktPnBp
bm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCisgICAgICAgIEFTU0VSVCghbWVtb3J5LnBp
bm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgIG1f
bWVtb3J5U2l6ZUdQUiA9IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBd
LnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZv
JiBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCiAgICAgICAg
ICAgICBtX3Byb2MucGluUmVnaXN0ZXIoaW5mby5zaXplUmVnaXN0ZXIpOwogCiAgICAgICAgIG1f
cHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKQEAgLTY2MCw3ICs2NTgsNyBAQCB2b2lkIEIz
SVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvCiAgICAgZGF0YUxvZ0xuKCJcbiIpOwog
fQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1dyYXBwZXIo
Vk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IG1haW5GdW5jdGlvbiwgTWVtb3J5KiBtZW1vcnkpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENv
bXBpbGF0aW9uPiBjcmVhdGVKU1dyYXBwZXIoVk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25h
dHVyZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgTWVtb3J5SW5mb3JtYXRp
b24mIG1lbW9yeSkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IHByb2MuYWRkQmxvY2soKTsKQEAgLTY4MiwxMiArNjgwLDEzIEBAIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWEKICAgICAvLyBNb3ZlIG1lbW9yeSB2YWx1ZXMgdG8g
dGhlIGFwcHJvcmlhdGUgcGxhY2VzLCBpZiBuZWVkZWQuCiAgICAgVmFsdWUqIGJhc2VNZW1vcnkg
PSBudWxscHRyOwogICAgIFZlY3RvcjxWYWx1ZSo+IHNpemVzOwotICAgIGlmIChtZW1vcnkpIHsK
LSAgICAgICAgYmFzZU1lbW9yeSA9IGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIG1lbW9yeS0+bWVtb3J5KCkpOworICAgIGlmICghIW1lbW9yeSkgeworICAg
ICAgICBiYXNlTWVtb3J5ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9h
ZCwgSW50NjQsIE9yaWdpbigpLAorICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZtLndhc21NZW1vcnlQb2ludGVyKSk7CiAgICAgICAg
IFZhbHVlKiBzaXplID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwg
SW50MzIsIE9yaWdpbigpLAotICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5
OjpvZmZzZXRPZlNpemUoKSkpOwotICAgICAgICBzaXplcy5yZXNlcnZlQ2FwYWNpdHkobWVtb3J5
LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7Ci0gICAgICAgIGZvciAo
YXV0byBpbmZvIDogbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKSB7Cisg
ICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAmdm0ud2FzbU1lbW9yeVNpemUpKTsKKyAgICAgICAgc2l6ZXMucmVzZXJ2ZUNhcGFjaXR5KG1l
bW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUoKSk7CisgICAgICAgIGZv
ciAoYXV0byBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpIHsK
ICAgICAgICAgICAgIHNpemVzLmFwcGVuZChibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBT
dWIsIE9yaWdpbigpLCBzaXplLAogICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaW5mby5zaXplT2Zmc2V0KSkpOwogICAgICAgICB9
CkBAIC03MDEsMTEgKzcwMCwxMSBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9u
PiBjcmVhCiAKICAgICAvLyBNb3ZlIHRoZSBhcmd1bWVudHMgaW50byBwbGFjZS4KICAgICBWYWx1
ZSogcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKHByb2MsIGJsb2Nr
LCBPcmlnaW4oKSwgYXJndW1lbnRzLCB0b0IzVHlwZShzaWduYXR1cmUtPnJldHVyblR5cGUpLCBb
Jl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewotICAgICAgICBpZiAobWVtb3J5KSB7
Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZXMuc2l6ZSgpID09IG1lbW9yeS0+cGlubmVkUmVnaXN0
ZXJzKCkuc2l6ZVJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKENvbnN0cmFpbmVkVmFsdWUoYmFzZU1lbW9yeSwgVmFsdWVSZXA6OnJlZyhtZW1vcnktPnBp
bm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKSkpOworICAgICAgICBpZiAoISFtZW1v
cnkpIHsKKyAgICAgICAgICAgIEFTU0VSVChzaXplcy5zaXplKCkgPT0gbWVtb3J5LnBpbm5lZFJl
Z2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGJhc2VNZW1vcnksIFZhbHVlUmVwOjpyZWcobWVtb3J5
LnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKSkpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHNpemVzW2ldLCBWYWx1ZVJlcDo6
cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1tpXS5zaXplUmVnaXN0
ZXIpKSk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFs
dWUoc2l6ZXNbaV0sIFZhbHVlUmVwOjpyZWcobWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVS
ZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOwogICAgICAgICB9CiAKICAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CkBAIC03MzksNyArNzM4LDcgQEAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYQogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PENvbXBpbGF0aW9uPih2bSwgcHJvYyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNv
bXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBmdW5jdGlv
blN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIE1lbW9yeSogbWVtb3J5LCBjb25zdCBTaWdu
YXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5j
dGlvbnMsIHVuc2lnbmVkIG9wdExldmVsKQorc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGls
YXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3Rh
cnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgY29u
c3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9u
PiYgZnVuY3Rpb25zLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0
ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb25Db21waWxhdGlvbj4oKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDk0
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2Vk
dXJlKHZvaWQqKTsKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3Mg
TWVtb3J5OworY2xhc3MgTWVtb3J5SW5mb3JtYXRpb247CiAKLXN0ZDo6dW5pcXVlX3B0cjxGdW5j
dGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6
ZV90LCBNZW1vcnkqLCBjb25zdCBTaWduYXR1cmUqLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZv
cm1hdGlvbj4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworc3RkOjp1bmlxdWVfcHRyPEZ1bmN0
aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QsIE1lbW9yeUluZm9ybWF0aW9uJiwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEZ1
bmN0aW9uSW5mb3JtYXRpb24+JiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw5IEBACiAjaW5jbHVkZSAi
QjNUeXBlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21P
cHMuaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwNSw4ICsxMDcsNiBAQCBzdHJ1Y3QgRnVuY3Rpb25J
bmZvcm1hdGlvbiB7CiAgICAgc2l6ZV90IGVuZDsKIH07CiAKLWNsYXNzIE1lbW9yeTsKLQogc3Ry
dWN0IEV4cG9ydCB7CiAgICAgSWRlbnRpZmllciBmaWVsZDsKICAgICBFeHRlcm5hbDo6S2luZCBr
aW5kOwpAQCAtMTIyLDcgKzEyMiw3IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAg
VmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlczsKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRz
OwogICAgIFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiBmdW5jdGlvbnM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPE1lbW9yeT4gbWVtb3J5OworICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsK
ICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogCiAgICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2aXNp
b24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1NZW1vcnk6Ok1lbW9yeSh1aW50MzJfdCBzdGFydGluZ1NpemUsIHVp
bnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwaW5uZWRTaXplUmVnaXN0
ZXJzKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IHN0YXJ0aW5nU2l6ZSwgUGFnZUNvdW50IGNh
cGFjaXR5KQogICAgIDogbV9tb2RlKE1vZGU6OkJvdW5kc0NoZWNraW5nKQotICAgICwgbV9zaXpl
KHN0YXJ0aW5nU2l6ZSkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCisgICAgLCBtX3NpemUo
c3RhcnRpbmdTaXplLmJ5dGVzKCkpCisgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5LmJ5dGVzKCkp
CiAgICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNoZWNraW5nIHRo
ZW4gd2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KICAgICAvLyBzZWU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMKLSAgICAsIG1f
bWFwcGVkQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heFBhZ2VDb3VudCkgKiBzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocGFnZVNpemUpKQorICAgICwgbV9tYXBwZWRDYXBhY2l0eShQYWdl
Q291bnQ6Om1heCgpLmJ5dGVzKCkpCiB7CiAgICAgQVNTRVJUKHBpbm5lZFNpemVSZWdpc3RlcnMu
c2l6ZSgpID4gMCk7CiAKQEAgLTUwLDI1ICs1MCwxMiBAQCBNZW1vcnk6Ok1lbW9yeSh1aW50MzJf
dCBzdGFydGluZ1NpemUsIHVpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNT
RVJUKHN0YXJ0aW5nU2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKLSAgICBpZiAobXByb3RlY3Qo
cmVzdWx0LCBzdGFydGluZ1NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgQVNT
RVJUKG1fc2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKKyAgICBpZiAobXByb3RlY3QocmVzdWx0
LCBtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CiAgICAgICAgIG11bm1hcChyZXN1
bHQsIG1fbWFwcGVkQ2FwYWNpdHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5z
aWduZWQgcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6ZVJlZ2lzdGVycy5zaXpl
KCkgKyAxOwotICAgIGpzY0NhbGxpbmdDb252ZW50aW9uKCkubV9jYWxsZWVTYXZlUmVnaXN0ZXJz
LmZvckVhY2goWyZdIChSZWcgcmVnKSB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSByZWcuZ3ByKCk7
Ci0gICAgICAgIGlmICghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzIHx8IFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpLmdldChyZWcpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBp
ZiAocmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID09IDEpIHsKLSAgICAgICAgICAgIG1fcGlubmVk
UmVnaXN0ZXJzLmJhc2VNZW1vcnlQb2ludGVyID0gZ3ByOwotICAgICAgICAgICAgcmVtYWluaW5n
UGlubmVkUmVnaXN0ZXJzLS07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9waW5uZWRS
ZWdpc3RlcnMuc2l6ZVJlZ2lzdGVycy5hcHBlbmQoeyBncHIsIHBpbm5lZFNpemVSZWdpc3RlcnNb
LS1yZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgLSAxXSB9KTsKLSAgICB9KTsKLQotICAgIEFTU0VS
VCghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzKTsKICAgICBtX21lbW9yeSA9IHJlc3VsdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAkocmV2aXNpb24g
MjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywyOCArMjcsMTIgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IAotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1ZGUgIldhc21QYWdl
Q291bnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAotc3RydWN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8gewotICAgIEdQ
UlJlZyBzaXplUmVnaXN0ZXI7Ci0gICAgdW5zaWduZWQgc2l6ZU9mZnNldDsKLX07Ci0KLS8vIEZJ
WE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVy
LiBSaWdodCBub3cgd2UgdGFrZSBhIHZlY3RvciB3aXRoIG9ubHkgb25lCi0vLyBlbnRyeS4gU3Bl
Y2lmaWNhbGx5IGFuIGVudHJ5IHdoZXJlIHRoZSBzaXplT2Zmc2V0ID09IDAuIElmIHdlIGhhdmUg
bW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lzdGVyLAotLy8gd2UgY2FuIGhhdmUgb25lIGZvciBlYWNo
IGxvYWQgc2l6ZSBjbGFzcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYyOTUyCi1zdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJbmZvIHsKLSAgICBWZWN0b3I8UGlu
bmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKLSAgICBHUFJSZWcgYmFzZU1lbW9y
eVBvaW50ZXI7Ci19OwotCi1jb25zdGV4cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOwot
Y29uc3RleHByIHVpbnQzMl90IG1heFBhZ2VDb3VudCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pigo
MXVsbCA8PCAzMikgLyBwYWdlU2l6ZSk7Ci0KIGNsYXNzIE1lbW9yeSB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU5
LDggKzQzLDcgQEAgcHVibGljOgogICAgICAgICBCb3VuZHNDaGVja2luZwogICAgIH07CiAKLSAg
ICBNZW1vcnkoKSA9IGRlZmF1bHQ7Ci0gICAgTWVtb3J5KHVpbnQzMl90IHN0YXJ0aW5nU2l6ZSwg
dWludDMyX3QgY2FwYWNpdHksIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdp
c3RlcnMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShQYWdlQ291bnQgc3RhcnRpbmdT
aXplLCBQYWdlQ291bnQgY2FwYWNpdHkpOwogCiAgICAgfk1lbW9yeSgpCiAgICAgewpAQCAtNzAs
NyArNTMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBt
X21lbW9yeTsgfQogICAgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
LSAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fcGlubmVkUmVnaXN0ZXJzOyB9CiAKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KIApAQCAtODcsNyArNjksNiBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRl
OgogICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OwotICAgIFBpbm5lZFJlZ2lzdGVySW5m
byBtX3Bpbm5lZFJlZ2lzdGVyczsKICAgICBNb2RlIG1fbW9kZTsKICAgICB1aW50MzJfdCBtX3Np
emUgeyAwIH07CiAgICAgdWludDMyX3QgbV9jYXBhY2l0eSB7IDAgfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5m
b3JtYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCisKKyNpbmNsdWRlICJXYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKKworTWVtb3J5SW5mb3JtYXRpb246Ok1lbW9yeUluZm9ybWF0
aW9uKFBhZ2VDb3VudCBtaW5TaXplLCBQYWdlQ291bnQgbWF4U2l6ZSwgIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMpCisgICAgOiBtX21pblNpemUobWluU2l6ZSkK
KyAgICAsIG1fbWF4U2l6ZShtYXhTaXplKQoreworICAgIEFTU0VSVCghIW1fbWluU2l6ZSk7Cisg
ICAgQVNTRVJUKCEhbV9tYXhTaXplKTsKKyAgICBBU1NFUlQoISEqdGhpcyk7CisKKyAgICB1bnNp
Z25lZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplUmVnaXN0ZXJzLnNpemUo
KSArIDE7CisgICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2NhbGxlZVNhdmVSZWdpc3RlcnMu
Zm9yRWFjaChbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgR1BSUmVnIGdwciA9IHJlZy5ncHIoKTsK
KyAgICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVnaXN0ZXJTZXQ6OnN0
YWNrUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
IChyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPT0gMSkgeworICAgICAgICAgICAgbV9waW5uZWRS
ZWdpc3RlcnMuYmFzZU1lbW9yeVBvaW50ZXIgPSBncHI7CisgICAgICAgICAgICByZW1haW5pbmdQ
aW5uZWRSZWdpc3RlcnMtLTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3Bpbm5lZFJl
Z2lzdGVycy5zaXplUmVnaXN0ZXJzLmFwcGVuZCh7IGdwciwgcGlubmVkU2l6ZVJlZ2lzdGVyc1st
LXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyAtIDFdIH0pOworICAgIH0pOworCisgICAgQVNTRVJU
KCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQu
aCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CisKK3N0cnVjdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvIHsKKyAgICBHUFJSZWcgc2l6
ZVJlZ2lzdGVyOworICAgIHVuc2lnbmVkIHNpemVPZmZzZXQ7Cit9OworCisvLyBGSVhNRTogV2Ug
c2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3Rlci4gUmlnaHQg
bm93IHdlIHRha2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9uZQorLy8gZW50cnkuIFNwZWNpZmljYWxs
eSBhbiBlbnRyeSB3aGVyZSB0aGUgc2l6ZU9mZnNldCA9PSAwLiBJZiB3ZSBoYXZlIG1vcmUgdGhh
biBvbmUgc2l6ZSByZWdpc3RlciwKKy8vIHdlIGNhbiBoYXZlIG9uZSBmb3IgZWFjaCBsb2FkIHNp
emUgY2xhc3MuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
Mjk1Mgorc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7CisgICAgVmVjdG9yPFBpbm5lZFNpemVS
ZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CisgICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVy
OworfTsKKworY2xhc3MgTWVtb3J5SW5mb3JtYXRpb24geworcHVibGljOgorICAgIE1lbW9yeUlu
Zm9ybWF0aW9uKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKnRoaXMpOworICAgIH0KKworICAg
IE1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBtaW5TaXplLCBQYWdlQ291bnQgbWF4U2l6ZSwg
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMpOworCisgICAgY29u
c3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X3Bpbm5lZFJlZ2lzdGVyczsgfQorICAgIFBhZ2VDb3VudCBtaW5TaXplKCkgY29uc3QgeyByZXR1
cm4gbV9taW5TaXplOyB9CisgICAgUGFnZUNvdW50IG1heFNpemUoKSBjb25zdCB7IHJldHVybiBt
X21heFNpemU7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhIW1fbWluU2l6ZSAmJiAhIW1fbWF4U2l6ZTsgfQorCitwcml2YXRlOgorICAgIFBhZ2VDb3Vu
dCBtX21pblNpemUgeyB9OworICAgIFBhZ2VDb3VudCBtX21heFNpemUgeyB9OworICAgIFBpbm5l
ZFJlZ2lzdGVySW5mbyBtX3Bpbm5lZFJlZ2lzdGVycyB7IH07Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA5
NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklkZW50aWZpZXJJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtT3Bz
LmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAKQEAgLTMxNCwyNiArMzE0LDMxIEBAIGJv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCiAgICAgaWYgKCFwYXJzZVZhclVJbnQxKGZs
YWdzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdWludDMyX3Qgc2l6ZTsKLSAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KHNpemUgPiBtYXhQYWdlQ291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBQYWdlQ291
bnQgbWluU2l6ZTsKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHNpemU7CisgICAgICAgIGlmICgh
cGFyc2VWYXJVSW50MzIoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghUGFnZUNvdW50Ojppc1ZhbGlkKHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBtaW5TaXplID0gUGFnZUNvdW50KHNpemUpOworICAgIH0KIAotICAgIHVpbnQz
Ml90IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50OworICAgIFBhZ2VDb3VudCBtYXhTaXplID0gUGFn
ZUNvdW50OjptYXgoKTsKICAgICBpZiAoZmxhZ3MpIHsKLSAgICAgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihjYXBhY2l0eSkpCisgICAgICAgIHVpbnQzMl90IHNpemU7CisgICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghUGFnZUNvdW50Ojppc1ZhbGlkKHNpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5IHx8IGNhcGFjaXR5ID4gbWF4UGFnZUNvdW50KQor
ICAgICAgICBtYXhTaXplID0gUGFnZUNvdW50KHNpemUpOworICAgICAgICBpZiAobWluU2l6ZSA+
IG1heFNpemUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY2FwYWNp
dHkgKj0gcGFnZVNpemU7Ci0gICAgc2l6ZSAqPSBwYWdlU2l6ZTsKLQogICAgIFZlY3Rvcjx1bnNp
Z25lZD4gcGlubmVkU2l6ZXMgPSB7IDAgfTsKLSAgICBtX21vZHVsZS0+bWVtb3J5ID0gc3RkOjpt
YWtlX3VuaXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7Ci0gICAgcmV0
dXJuIG1fbW9kdWxlLT5tZW1vcnktPm1lbW9yeSgpOworICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBN
ZW1vcnlJbmZvcm1hdGlvbihtaW5TaXplLCBtYXhTaXplLCBwaW5uZWRTaXplcyk7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFBhZ2VDb3VudCB7CisKK3B1
YmxpYzoKKyAgICBQYWdlQ291bnQoKQorICAgICAgICA6IG1fcGFnZUNvdW50KFVJTlRfTUFYKQor
ICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChtYXhQYWdlQ291bnQgPCBVSU5UX01BWCwgIldl
IHJlbHkgb24gdGhpcyBoZXJlLiIpOworICAgIH0KKworICAgIFBhZ2VDb3VudCh1aW50MzJfdCBw
YWdlQ291bnQpCisgICAgICAgIDogbV9wYWdlQ291bnQocGFnZUNvdW50KQorICAgIHsgfQorCisg
ICAgc2l6ZV90IGJ5dGVzKCkgeyByZXR1cm4gbV9wYWdlQ291bnQgKiBwYWdlU2l6ZTsgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNWYWxpZCh1aW50MzJfdCBwYWdlQ291bnQpCisgICAgeworICAgICAg
ICByZXR1cm4gcGFnZUNvdW50IDw9IG1heFBhZ2VDb3VudDsKKyAgICB9CisKKyAgICBzdGF0aWMg
UGFnZUNvdW50IG1heCgpCisgICAgeworICAgICAgICByZXR1cm4gUGFnZUNvdW50KG1heFBhZ2VD
b3VudCk7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9wYWdlQ291bnQgIT0gVUlOVF9NQVg7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgUGFnZUNvdW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3BhZ2VDb3VudCA8IG90aGVyLm1fcGFnZUNvdW50OworICAgIH0KKyAgICBi
b29sIG9wZXJhdG9yPihjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fcGFnZUNvdW50ID4gb3RoZXIubV9wYWdlQ291bnQ7CisgICAgfQorCitwcml2
YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbWF4UGFnZUNvdW50ID0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KCgxdWxsIDw8IDMyKSAvIHBhZ2VTaXplKTsKKworICAgIHVpbnQzMl90IG1fcGFn
ZUNvdW50OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXQVNNKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAko
cmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBQbGFuOjpydW4oKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9jb21waWxlZEZ1bmN0
aW9ucy51bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0
LCBmdW5jdGlvbkxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmdldCgpLCBpbmZv
LnNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zKSk7CisgICAgICAgIG1f
Y29tcGlsZWRGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHBhcnNlQW5kQ29tcGlsZSgqbV92bSwg
ZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9y
eSwgaW5mby5zaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucykpOwogICAg
IH0KIAogICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9uLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCShyZXZpc2lvbiAyMDk0NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCwxMSArNjQsMTMgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVk
KCkpOwogICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbjsKICAgICB9CisgICAgLyoK
ICAgICBjb25zdCBNZW1vcnkqIG1lbW9yeSgpIGNvbnN0CiAgICAgewogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghZmFpbGVkKCkpOwogICAgICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bWVtb3J5LmdldCgpOwogICAgIH0KKyAgICAqLwogICAgIHNpemVfdCBjb21waWxlZEZ1bmN0aW9u
Q291bnQoKSBjb25zdAogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01v
ZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eU1vZHVsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc1LDYgKzc2LDcgQEAgdm9pZCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
bW9kdWxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGVOYW1lc3Bh
Y2VPYmplY3QpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiB9
CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNfaW5mbyA9IHsgIldl
YkFzc2VtYmx5Lkluc3RhbmNlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1dlYkFzc2VtYmx5SW5zdGFuY2UpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjA5
NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVs
ZTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnk7CiAKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CkBAIC01MSw2ICs1
Miw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbW9kdWxlLmdldCgpOwogICAgIH0KIAor
ICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgp
OyB9CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1v
cnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1vcnkpOyB9CisKIHByb3RlY3RlZDoKICAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0Kik7CkBAIC02MCw2ICs2NCw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxK
U01vZHVsZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CisgICAgV3Jp
dGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDkgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5
TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7
ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CisKK0pTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6
OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKIHsKLSAgICBhdXRvKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhl
YXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAgIGF1dG8qIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1lbW9yeT4odm0u
aGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShtZW1vcnkp
KTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBpbnN0YW5j
ZTsKIH0KQEAgLTQ0LDggKzQ2LDkgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpj
cmVhdGVTdAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
IH0KIAotSlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1l
bW9yeShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6
TWVtb3J5PiYmIG1lbW9yeSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fbWVt
b3J5KFdURk1vdmUobWVtb3J5KSkKIHsKIH0KIApAQCAtNjgsOCArNzEsNiBAQCB2b2lkIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1lbW9yeSIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseU1lbW9yeSkgfTsKLQogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCShy
ZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNiwxNiArMzcsMjAg
QEAgY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeSA6IHB1YmxpYyBKU0RlcwogcHVibGljOgogICAg
IHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFz
c2VtYmx5TWVtb3J5KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNXZWJB
c3NlbWJseU1lbW9yeSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdh
c206Ok1lbW9yeT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAorICAg
IFdhc206Ok1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KKwogcHJv
dGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBK
U1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVfcHRyPFdhc206
Ok1lbW9yeT4mJik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4g
bV9tZW1vcnk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZp
c2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEyIEBACiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9y
eS5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUu
aCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC05MCw2ICs5MiwxMyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgICAgIGFyZ0NvdW50ID0g
Ym94ZWRBcmdzLnNpemUoKTsKICAgICB9CiAKKyAgICAvLyBTZXR1cCB0aGUgbWVtb3J5IHRoYXQg
dGhlIGVudHJhbmNlIGxvYWRzLgorICAgIGlmIChKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkg
PSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpKSB7CisgICAgICAgIFdhc206Ok1l
bW9yeSogd2FzbU1lbW9yeSA9IG1lbW9yeS0+bWVtb3J5KCk7CisgICAgICAgIHZtLndhc21NZW1v
cnlQb2ludGVyID0gd2FzbU1lbW9yeS0+bWVtb3J5KCk7CisgICAgICAgIHZtLndhc21NZW1vcnlT
aXplID0gd2FzbU1lbW9yeS0+c2l6ZSgpOworICAgIH0KKwogICAgIC8vIE5vdGU6IHdlIHNwZWNp
ZmljYWxseSB1c2UgdGhlIFdlYkFzc2VibHlGdW5jdGlvbiBhcyB0aGUgY2FsbGVlIHRvIGJlZ2lu
IHdpdGggaW4gdGhlIFByb3RvQ2FsbEZyYW1lLgogICAgIC8vIFRoZSByZWFzb24gZm9yIHRoaXMg
aXMgdGhhdCBjYWxsaW5nIGludG8gdGhlIGxsaW50IG1heSBzdGFjayBvdmVyZmxvdywgYW5kIHRo
ZSBzdGFjayBvdmVyZmxvdwogICAgIC8vIGhhbmRsZXIgbWlnaHQgcmVhZCB0aGUgZ2xvYmFsIG9i
amVjdCBmcm9tIHRoZSBjYWxsZWUuIFRoZSBKU1dlYkFzc2VtYmx5Q2FsbGVlIGRvZXNuJ3QgaGF2
ZSBhCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3ZWJBc3NlbWJseUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUNhbGxlZS5nZXQoKTsg
fQotICAgIGNvbnN0IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX2luc3RhbmNlLmdldCgpOyB9CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KICAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUqIHNpZ25hdHVyZSgpCiAgICAgeyAKICAgICAgICAgQVNTRVJUKG1fc2lnbmF0
dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5z
dGFuY2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5
NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5j
ZVN0cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKHN0
YXRlKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKLSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoc3RhdGUsIGluc3RhbmNlKTsKKyAgICBtb2R1bGVS
ZWNvcmQtPmxpbmsoc3RhdGUsIGluc3RhbmNlLCBpbXBvcnRPYmplY3QpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICBtb2R1bGVSZWNvcmQtPmR1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRl
ICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogI2luY2x1ZGUgIldl
YkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAK
ICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmx1dC5oIgogCkBAIC00Mywx
OSArNDcsNzggQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydQogIEBl
bmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFs
KCJXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlIE1lbW9yeSBjb25zdHJ1Y3Rv
ciBwcm9wZXJ0eSIpKSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGV4YWN0bHkgb25lIGFyZ3VtZW50IikpKSk7CisK
KyAgICBhdXRvIGdldFVpbnQzMiA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gdWludDMyX3Qgewor
ICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b0ludGVnZXIoZXhlYyk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgaWYgKGRv
dWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgICAgIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIHRo
ZSAnaW5pdGlhbCcgcHJvcGVydHkgdG8gYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2U6IFswLCAy
XjMyIC0gMV0iKSkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3VibGVWYWx1ZSk7CisgICAgfTsKKworICAg
IEpTT2JqZWN0KiBtZW1vcnlEZXNjcmlwdG9yOworICAgIHsKKyAgICAgICAgSlNWYWx1ZSBhcmd1
bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgICAgICBpZiAoIWFyZ3VtZW50LmlzT2JqZWN0
KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4
ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5Lk1lbW9yeSBleGNlcHRzIGl0cyBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3Qi
KSkpKTsKKyAgICAgICAgbWVtb3J5RGVzY3JpcHRvciA9IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3Vt
ZW50KTsKKyAgICB9CisKKyAgICBXYXNtOjpQYWdlQ291bnQgbWluU2l6ZTsKKyAgICB7CisgICAg
ICAgIElkZW50aWZpZXIgaW5pdGlhbCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5p
dGlhbCIpOworICAgICAgICBKU1ZhbHVlIG1pblNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3It
PmdldChleGVjLCBpbml0aWFsKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOworICAgICAgICB1aW50MzJfdCBzaXplID0gZ2V0VWludDMyKG1pblNpemVWYWx1
ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAg
ICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQoc2l6ZSkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBpbnZhbGlk
ICdpbml0aWFsJyBwYWdlIGNvdW50IikpKSk7CisgICAgICAgIG1pblNpemUgPSBXYXNtOjpQYWdl
Q291bnQoc2l6ZSk7CisgICAgfQorCisgICAgV2FzbTo6UGFnZUNvdW50IG1heFNpemU7CisgICAg
eworICAgICAgICBJZGVudGlmaWVyIG1heGltdW0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgIm1heGltdW0iKTsKKyAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IG1lbW9yeURlc2NyaXB0
b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW0pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywg
bWF4aW11bSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CisgICAgICAgICAgICB1aW50MzJfdCBzaXplID0gZ2V0VWludDMyKG1heFNpemVWYWx1ZSk7
CisgICAgICAgICAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChzaXplKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
Lk1lbW9yeSBpbnZhbGlkICdpbml0aWFsJyBwYWdlIGNvdW50IikpKSk7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgICAgICBtYXhTaXpl
ID0gV2FzbTo6UGFnZUNvdW50KHNpemUpOworCisgICAgICAgICAgICBpZiAobWluU2l6ZSA+IG1h
eFNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBwcm92aWRlZCBhICdt
YXhpbXVtJyBwYWdlIGNvdW50IHRoYXQgc21hbGxlciB0aGFuIHRoZSAnaW5pdGlhbCcgcGFnZSBj
b3VudCIpKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gRklYTUU6IHdoYXQgZG9lcyB0aGUgc3BlYyBzYXkgdG8gZG8gaGVyZS4KKyAgICAgICAgICAg
IG1heFNpemUgPSBtaW5TaXplOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVf
cHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+
KG1pblNpemUsIG1heFNpemUpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFz
c2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2Vi
QXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CiB9CiAKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TWVtb3J5KEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsICJXZWJBc3NlbWJseS5NZW1vcnkiKSk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCAiV2ViQXNzZW1ibHkuTWVtb3J5IikpOwogfQogCiBXZWJBc3NlbWJseU1lbW9yeUNv
bnN0cnVjdG9yKiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqIHRoaXNQcm90
b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIK
ICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCkBAIC05OCw3ICs5OSw3IEBAIHZvaWQg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9pbnN0YW5jZSk7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5j
ZSkKK3ZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNPYmplY3QqIGRpY3Rpb25hcnkpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwpAQCAtMTUxLDYgKzE1Miw0MiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHB1dFJlc3VsdCk7CiAg
ICAgfQogCisgICAgYm9vbCBoYXNNZW1vcnkgPSBmYWxzZTsKKyAgICBmb3IgKGNvbnN0IFdhc206
OkltcG9ydCYgaW1wb3J0SW5mbyA6IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsKKyAgICAg
ICAgSlNWYWx1ZSBpbXBvcnRXcmFwcGVyID0gZGljdGlvbmFyeS0+Z2V0KHN0YXRlLCBpbXBvcnRJ
bmZvLm1vZHVsZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CisgICAgICAgIGlmICghaW1wb3J0V3JhcHBlci5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlM
aXRlcmFsKCJJbXBvcnQgbm90IGFuIG9iamVjdCIpKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgSlNWYWx1ZSBpbXBvcnQgPSBqc0Nhc3Q8SlNPYmplY3QqPihpbXBv
cnRXcmFwcGVyKS0+Z2V0KHN0YXRlLCBpbXBvcnRJbmZvLmZpZWxkKTsKKworICAgICAgICBzd2l0
Y2ggKGltcG9ydEluZm8ua2luZCkgeworICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpNZW1v
cnk6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNNZW1vcnkpOyAvLyBGSVhNRTog
d2hhdCB0byBkbyBpZiB3ZSBpbXBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnk/CisgICAgICAgICAg
ICBoYXNNZW1vcnkgPSB0cnVlOworICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVt
b3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4oaW1wb3J0KTsKKyAgICAg
ICAgICAgIGlmICghbWVtb3J5KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oc3Rh
dGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGlt
cG9ydCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuTWVtb3J5IikpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnN0YW5jZS0+
c2V0TWVtb3J5KHZtLCBtZW1vcnkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpGdW5jdGlvbjoKKyAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbDo6VGFibGU6CisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Okdsb2JhbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBleHBlY3Rz
TWVtb3J5ID0gISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnk7CisgICAgaWYgKGV4cGVjdHNNZW1v
cnkgJiYgIWhhc01lbW9yeSkgeworICAgICAgICB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUs
IGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJNb2R1bGUgZXhwZWN0aW5nIGEg
bWVtb3J5IGltcG9ydCBidXQgb25lIHdhcyBub3QgcHJvdmlkZWQiKSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5zdGFuY2UpOwogICAgIG1faW5z
dGFuY2Uuc2V0KHZtLCB0aGlzLCBpbnN0YW5jZSk7CiAgICAgbV9tb2R1bGVFbnZpcm9ubWVudC5z
ZXQodm0sIHRoaXMsIG1vZHVsZUVudmlyb25tZW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaAkocmV2
aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIGNyZWF0
ZShFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYpOwogCi0gICAgdm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSopOworICAgIHZvaWQgbGluayhFeGVjU3RhdGUqLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqLCBKU09iamVjdCogZGljdGlvbmFyeSk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqKTsKIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296580</attachid>
            <date>2016-12-08 15:57:15 -0800</date>
            <delta_ts>2016-12-08 18:59:48 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>62777</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCShyZXZpc2lvbiAyMDk0NjMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxNyBAQCBjb25zdCBfaW1wb3J0RnVuY3Rp
b25Db250aW51YXRpb24gPSAoYnVpCiAgICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRNZW1vcnlD
b250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICBy
ZXR1cm4gKG1vZHVsZSwgZmllbGQsIHtpbml0aWFsLCBtYXhpbXVtfSkgPT4geworICAgICAgICBh
c3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUg
YSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmll
bGQsIGBJbXBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7Zmll
bGR9ImApOworICAgICAgICAvLyBGSVhNRTogd2hhdCB2YWxpZGF0aW9uIHNob3VsZCBJIGRvIGhl
cmU/CisgICAgICAgIC8vYXNzZXJ0LmlzTnVtYmVyKGZpZWxkLCBgSW1wb3J0IGZ1bmN0aW9uIGZp
ZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAgc2VjdGlv
bi5kYXRhLnB1c2goeyBtb2R1bGUsIGZpZWxkLCBraW5kOiAiTWVtb3J5IiwgbWVtb3J5RGVzY3Jp
cHRpb246IHtpbml0aWFsLCBtYXhpbXVtfX0pOworICAgICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7
CisgICAgfTsKK307CisKIGNvbnN0IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWls
ZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoZmllbGQsIGluZGV4
LCB0eXBlKSA9PiB7CiAgICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5j
dGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CkBAIC0xMTAs
NiArMTIxLDcgQEAgY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aQogICAg
ICAgICAgICAgLy8gRXhwb3J0cyBjYW4gbGVhdmUgdGhlIHR5cGUgdW5zcGVjaWZpZWQsIGxldHRp
bmcgdGhlIENvZGUgYnVpbGRlciBwYXRjaCB0aGVtIHVwIGxhdGVyLgogICAgICAgICAgICAgdHlw
ZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCB0eXBlKTsKICAgICAgICAgfQorCiAgICAg
ICAgIC8vIFdlIGNhbid0IGNoZWNrIG11Y2ggYWJvdXQgImluZGV4IiBoZXJlIGJlY2F1c2UgdGhl
IENvZGUgc2VjdGlvbiBzdWNjZWVkcyB0aGUgRXhwb3J0IHNlY3Rpb24uIE1vcmUgd29yayBpcyBk
b25lIGF0IENvZGUoKS5FbmQoKSB0aW1lLgogICAgICAgICBzd2l0Y2ggKHR5cGVvZihpbmRleCkp
IHsKICAgICAgICAgY2FzZSAic3RyaW5nIjogYnJlYWs7IC8vIEFzc3VtZSBpdCdzIGEgZnVuY3Rp
b24gbmFtZSB3aGljaCB3aWxsIGJlIHJldmVhbGVkIGluIHRoZSBDb2RlIHNlY3Rpb24uCkBAIC0x
MjUsNiArMTM3LDcgQEAgY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgRXhw
b3J0IHNlY3Rpb24ncyBpbmRleCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBnb3QgJHtp
bmRleH1gKTsKICAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IGNvcnJlc3BvbmRpbmdJbXBvcnQg
PSBidWlsZGVyLl9nZXRGdW5jdGlvbkZyb21JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgY29u
c3QgaW1wb3J0U2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIkltcG9ydCIpOwogICAgICAg
ICBpZiAodHlwZW9mKGluZGV4KSA9PT0gIm9iamVjdCIpIHsKQEAgLTM2OCwxMCArMzgxLDEwIEBA
IGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbXBvcnRCdWlsZGVyID0gewogICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0
aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBpbXBvcnQgdGFibGVgKTsgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE1lbW9yeTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGlt
cG9ydCBtZW1vcnlgKTsgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbDogKCkgPT4g
eyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCBnbG9iYWxgKTsgfSwKICAg
ICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5G
dW5jdGlvbiA9IF9pbXBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWls
ZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5NZW1vcnkgPSBfaW1wb3J0
TWVtb3J5Q29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW1wb3J0QnVpbGRlcjsKICAgICAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNDY1LDcgKzQ3OCw4IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNz
IEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlLnR5cGUpID09PSAidW5k
ZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgbXVzdCBiZSBhIGZ1bmN0aW9uIGV4cG9ydCBmcm9tIHRoZSBDb2RlIHNlY3Rpb24gKHJlLWV4
cG9ydHMgd2VyZSBoYW5kbGVkIGVhcmxpZXIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGltcG9ydFNlY3Rp
b24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL2NvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGlt
cG9ydFNlY3Rpb24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbkluZGV4U3BhY2VPZmZz
ZXQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1
bmN0aW9uSW5kZXggPSBlLmluZGV4IC0gZnVuY3Rpb25JbmRleFNwYWNlT2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudHlwZSA9IGNvZGVTZWN0aW9uLmRh
dGFbZnVuY3Rpb25JbmRleF0udHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KSW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCShy
ZXZpc2lvbiAyMDk0NjMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFy
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsMjkgQEAgY29uc3QgZW1pdHRlcnMgPSB7
CiAgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLmV4dGVybmFsS2luZFZhbHVlW2Vu
dHJ5LmtpbmRdKTsKICAgICAgICAgICAgIHN3aXRjaCAoZW50cnkua2luZCkgewogICAgICAgICAg
ICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmV4
cGVjdGVkIGtpbmQgJHtlbnRyeS5raW5kfWApOwotICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb24i
OiBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkudHlwZSk7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAiRnVuY3Rpb24iOiB7CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIs
IGVudHJ5LnR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50
ZWRgKTsKLSAgICAgICAgICAgIGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHll
dCBpbXBsZW1lbnRlZGApOworICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjogeworICAgICAgICAg
ICAgICAgIGxldCB7aW5pdGlhbCwgbWF4aW11bX0gPSBlbnRyeS5tZW1vcnlEZXNjcmlwdGlvbjsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGNvZXJjZSB0aGlzIHRvIGEgbnVt
YmVyIG1heWJlPyBPciB2YWxpZGF0ZSBtb3JlPworICAgICAgICAgICAgICAgIGFzc2VydC50cnV0
aHkodHlwZW9mIGluaXRpYWwgPT09ICJudW1iZXIiLCAiRXhlY3B0IGEgbnVtYmVyIG9mIHVuZGVm
aW5lZCBmb3IgJ21heGltdW0nIik7CisgICAgICAgICAgICAgICAgaW5pdGlhbCB8PSAwOworICAg
ICAgICAgICAgICAgIGxldCBoYXNNYXhpbXVtID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodHlw
ZW9mIG1heGltdW0gPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgICAgIG1heGltdW0g
fD0gMDsKKyAgICAgICAgICAgICAgICAgICAgaGFzTWF4aW11bSA9IDE7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSh0eXBlb2YgbWF4
aW11bSA9PT0gInVuZGVmaW5lZCIsICJFeGVjcHQgYSBudW1iZXIgb2YgdW5kZWZpbmVkIGZvciAn
bWF4aW11bSciKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHV0KGJpbiwg
InZhcnVpbnQzMiIsIGhhc01heGltdW0pOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1
aW50MzIiLCBpbml0aWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzTWF4aW11bSkKKyAgICAg
ICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIG1heGltdW0pOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGNhc2UgIkdsb2JhbCI6
IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnkuanMJKG5vbmV4aXN0ZW50
KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21lbW9yeS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1IEBACisvL2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMn
OworaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CisKKyhmdW5jdGlvbiB0ZXN0
KCkgeworICAgIGNvbnN0IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDIwLCBtYXhpbXVt
OiAyMH07CisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwg
Im1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbImkzMiIsICJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAg
ICAgICAgICAgICAgIC5HZXRMb2NhbCgxKQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQor
ICAgICAgICAgICAgICAgIC5JMzJTdG9yZSgyLCAwKQorICAgICAgICAgICAgICAgIC5HZXRMb2Nh
bCgxKQorICAgICAgICAgICAgICAgIC5JMzJMb2FkKDIsIDApCisgICAgICAgICAgICAgICAgLlJl
dHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgY29uc3Qg
YmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5l
dyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBtZW1vcnkgPSBuZXcgV2ViQXNz
ZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5l
dyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7IG1lbW9yeTogbWVtb3J5IH0g
fSk7CisgICAgY29uc3QgZm9vID0gaW5zdGFuY2UuZXhwb3J0cy5mb287CisgICAgLy8gZm9vKHZh
bHVlLCBhZGRyZXNzKQorICAgIGZ1bmN0aW9uIGFzc2VydChiKSB7CisgICAgICAgIGlmICghYikK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIik7CisgICAgfQorCisgICAgbGV0IHZh
bHVlID0gZm9vKDQyLCAyMCk7CisgICAgYXNzZXJ0KHZhbHVlID09PSA0Mik7CisgICAgbGV0IGFy
cmF5QnVmZmVyID0gbWVtb3J5LmJ1ZmZlcjsKKyAgICBjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAy
NDsKKyAgICBhc3NlcnQoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCA9PT0gcGFnZVNpemUgKiBtZW1v
cnlEZXNjcmlwdGlvbi5pbml0aWFsKTsKKyAgICBsZXQgYnVmZmVyID0gbmV3IFVpbnQzMkFycmF5
KGFycmF5QnVmZmVyKTsKKyAgICBhc3NlcnQoYnVmZmVyWzIwIC8gNF0gPT09IDQyKTsKKyAgICBw
cmludChidWZmZXJbMV0pOworfSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lv
biAyMDk0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgogI2luY2x1
ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNp
bmNsdWRlIDxzdGRpby5oPgpAQCAtMjYyMiw2ICsyNjIzLDE3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICAgICAgICAgIH0pOwogICAgIH0KIAorICAgIHZv
aWQqIG1lbW9yeUJ5dGVzID0gbnVsbHB0cjsKKyAgICB1aW50MzJfdCBtZW1vcnlTaXplID0gMDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnk7CisgICAgaWYgKCEhcGxh
bi5nZXRNb2R1bGVJbmZvcm1hdGlvbigpLT5tZW1vcnkpIHsKKyAgICAgICAgbWVtb3J5ID0gc3Rk
OjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KHBsYW4uZ2V0TW9kdWxlSW5mb3JtYXRpb24oKS0+
bWVtb3J5Lm1pblNpemUoKSwgcGxhbi5nZXRNb2R1bGVJbmZvcm1hdGlvbigpLT5tZW1vcnkubWF4
U2l6ZSgpKTsKKyAgICAgICAgbWVtb3J5Qnl0ZXMgPSBtZW1vcnktPm1lbW9yeSgpOworICAgICAg
ICBtZW1vcnlTaXplID0gbWVtb3J5LT5zaXplKCk7CisgICAgfQorICAgIHZtLndhc21NZW1vcnlQ
b2ludGVyID0gbWVtb3J5Qnl0ZXM7CisgICAgdm0ud2FzbU1lbW9yeVNpemUgPSBtZW1vcnlTaXpl
OworCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewog
ICAgICAgICBKU0FycmF5KiB0ZXN0Q2FzZXMgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPmFyZ3Vt
ZW50KGkgKyAyKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgdGVzdEluZGV4ID0gMDsgdGVzdElu
ZGV4IDwgdGVzdENhc2VzLT5sZW5ndGgoKTsgKyt0ZXN0SW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RXYXNtLmNwcAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RXYXNtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiw4IEBAIHN0
YXRpYyB2b2lkIGNoZWNrUGxhbihQbGFuJiBwbGFuLCB1bnNpZ24KIC8vIEZvciBub3cgd2UgaW5s
aW5lIHRoZSB0ZXN0IGZpbGVzLgogc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKIHsKKyAgICBV
TlVTRURfUEFSQU0oY2hlY2tQbGFuKTsKKyAgICAvKgogICAgIHsKICAgICAgICAgLy8gR2VuZXJh
dGVkIGZyb206CiAgICAgICAgIC8vICAgIChtb2R1bGUKQEAgLTE0MzAsNiArMTQzMiw3IEBAIHN0
YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpw
bGFuLmNvbXBpbGVkRnVuY3Rpb24oMCktPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSwgYm94KDYp
IH0pLCAwKTsKICAgICB9CiAKKyAgICAqLwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTQ2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA3LDEwICsxNDA3LDEyIEBACiAJCTc5NUIx
OTk3MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NUIxOTk1MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBC
YXNlLmNwcCAqLzsgfTsKIAkJNzk1QjE5OTgxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NUIxOTk2MUQ3
OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2NDY1NkExQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dElu
Zm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2
NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk3RDQ2NkYxREY4QTg1MDAwOEI1MjlGIC8q
IFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5N0Q0NjZFMURGOEE4NTAwMDhCNTI5RiAvKiBXYXNtUGFnZUNvdW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk3RTA3QTkxQjhG
Q0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E3MUI4RkNGQjkwMDg0
MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5N0UwN0FB
MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgxQjhGQ0ZCOTAw
ODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4OTM3NzgxRENBQjU3MzAwRjhENEZC
IC8qIEpTRml4ZWRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTg5Mzc3NjFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmNwcCAq
LzsgfTsKIAkJNzk4OTM3NzkxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3
MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTc5OEY4NDU5MURGOEIxNTAwMDA5NEQxOSAvKiBXYXNtTWVt
b3J5SW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzk4Rjg0NTgxREY4QjE1MDAwMDk0RDE5IC8qIFdhc21NZW1vcnlJbmZvcm1hdGlv
bi5jcHAgKi87IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAq
LzsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1
MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTQyMyw2ICsxNDI1LDcgQEAKIAkJNzlCMDBDQkYxQzZBQjA3
RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUIwMENCQjFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUIx
Nzg4RTFEMzk5QjgwMDBCMUE1NjcgLyogSklUTWF0aElDRm9yd2FyZHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTg5OUZFMUQzODYxMkUwMEQxOEM3
MyAvKiBKSVRNYXRoSUNGb3J3YXJkcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5QjgxOTkzMUREMjVDRjUwMEREQzcxNCAvKiBKU0dsb2JhbE9i
amVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5QjgxOTkyMUREMjVDRjUwMEREQzcxNCAvKiBKU0dsb2JhbE9iamVjdElubGluZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUMwOTYy
RDFERjhBQ0Y0MDA5Qjg0OTkgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUMwOTYyQzFERjhBQ0Y0MDA5Qjg0
OTkgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlDNEIxNUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUIxQkEyMTU4RjAwRkQ1OTJFIC8qIERG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwICovOyB9OwogCQk3OUM0QjE1
RTFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIx
NUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUNGQzZGMDFDMzNCMTAwMDBDNzY4RUEgLyogTExJbnRQQ1Jhbmdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVB
IC8qIExMSW50UENSYW5nZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMzgyOCwxMCArMzgzMSwxMiBAQAogCQk3OTVCMTk5NTFENzhCRTM1MDAy
NjJGQTAgLyogTWFwQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYXBCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk1QjE5OTYxRDc4
QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWFwQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY0NjU2ODFCOTUy
RkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5N0Q0NjZF
MURGOEE4NTAwMDhCNTI5RiAvKiBXYXNtUGFnZUNvdW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21QYWdlQ291bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzk3RTA3QTcxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTgx
QjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBK
U0ZpeGVkQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNG
aXhlZEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzcxRENB
QjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0ZpeGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4
Rjg0NTgxREY4QjE1MDAwMDk0RDE5IC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQg
LyogQjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
UENUb09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1RvT3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc5QTA5MDdEMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1w
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIYXNoTWFwSW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5
QiAvKiBIYXNoTWFwSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNo
TWFwSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg0NCw2ICszODQ5LDcg
QEAKIAkJNzlCMDBDQkExQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5T2JqZWN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlCMDBDQkIxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2Jq
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5T2JqZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QjgxOTkyMUREMjVDRjUwMEREQzcxNCAvKiBK
U0dsb2JhbE9iamVjdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNHbG9iYWxPYmplY3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5
QzA5NjJDMURGOEFDRjQwMDlCODQ5OSAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QzRCMTVCMUJBMjE1OEYwMEZENTkyRSAvKiBERkdM
aXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUg
LyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNl
Lmg7IHBhdGggPSBkZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyog
TExJbnRQQ1Jhbmdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludFBD
UmFuZ2VzLmg7IHBhdGggPSBsbGludC9MTEludFBDUmFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01OTk2LDggKzYwMDIsMTEgQEAKIAkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5
OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8sCiAJCQkJNTM1NTU3MTUxRDlERkEzMjAw
NkQ1ODNCIC8qIFdhc21NZW1vcnkuY3BwICovLAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgz
QiAvKiBXYXNtTWVtb3J5LmggKi8sCisJCQkJNzlDMDk2MkMxREY4QUNGNDAwOUI4NDk5IC8qIFdh
c21NZW1vcnlJbmZvcm1hdGlvbi5oICovLAorCQkJCTc5OEY4NDU4MURGOEIxNTAwMDA5NEQxOSAv
KiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICovLAogCQkJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5
QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJCQk1M0Y0MEU5NDFENUE3QUVGMDA5
OUExQjYgLyogV2FzbU1vZHVsZVBhcnNlci5oICovLAorCQkJCTc5N0Q0NjZFMURGOEE4NTAwMDhC
NTI5RiAvKiBXYXNtUGFnZUNvdW50LmggKi8sCiAJCQkJNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBC
IC8qIFdhc21QbGFuLmNwcCAqLywKIAkJCQk1MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2Fz
bVBsYW4uaCAqLywKIAkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5o
ICovLApAQCAtNzc2MSw2ICs3NzcwLDcgQEAKIAkJCQk3OTIzM0MyQjFEMzQ3MTU3MDBDNUE4MzQg
LyogSklUTWF0aElDLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwMjFCREFDREFDMDA4MEZG
NzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MDMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3OUMwOTYyRDFERjhBQ0Y0MDA5Qjg0OTkgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmts
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTc2MjA3MURCOTI0MzMwMEI3QTJG
RCAvKiBNdXRhdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtODE4Niw2ICs4MTk2LDcgQEAK
IAkJCQlGRUI1OEMxNTE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzAyRTk4RDBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5j
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MEYwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9y
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTdENDY2RjFERjhBODUwMDA4QjUyOUYg
LyogV2FzbVBhZ2VDb3VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMUIxQkRBMDhEMTAw
MzMxQjg0IC8qIEVycm9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3
OTgwRUQxRDNBRTAwRjFGNjgxIC8qIERpcmVjdEV2YWxDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1NDk4MjA0MTg5MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3AuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTgzNyw2ICs5ODQ4LDcgQEAKIAkJCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYg
LyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDM4
NkE3ODFERDY5ODlDMDA4NjUyQzQgLyogSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjk0OTU4NzFDNTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNzk4Rjg0NTkxREY4QjE1MDAwMDk0RDE5IC8qIFdhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM1MTE1MjI4RkZEMDBD
RDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJGQ0JG
MjFEQjU4REFEMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjJCREM0QTE1MjI4MDlBMDBDRDg5MTAgLyogREZHVmFyaWFibGVF
dmVudFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDYgKzI5Myw4IEBAIHB1YmxpYzoKICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSB2b2lkKiwgYmVjYXVzZSBpdCBtaWdodCBub3QgcG9p
bnQgdG8gYSBDYWxsRnJhbWUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MDQ0MQogICAgIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOyAKKyAgICB2b2lk
KiB3YXNtTWVtb3J5UG9pbnRlcjsKKyAgICB1aW50MzJfdCB3YXNtTWVtb3J5U2l6ZTsKICAgICBT
dHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdGVy
bWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjA5NDYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCi0gICAgQjNJ
UkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBGdW5jdGlvbkNvbXBpbGF0aW9uKik7Cisg
ICAgQjNJUkdlbmVyYXRvcihNZW1vcnlJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEZ1bmN0aW9u
Q29tcGlsYXRpb24qKTsKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50
cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRM
b2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC0xNzksNyArMTc5LDYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFj
aywgUmVzdWx0TGlzdCYgc3RhY2spOwogICAgIFZhbHVlKiB6ZXJvRm9yVHlwZShUeXBlKTsKIAot
ICAgIE1lbW9yeSogbV9tZW1vcnk7CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNC
bG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CkBA
IC0xOTAsOSArMTg5LDggQEAgcHJpdmF0ZToKICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW251bVR5
cGVzXTsKIH07CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnks
IFByb2NlZHVyZSYgcHJvY2VkdXJlLCBGdW5jdGlvbkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbikK
LSAgICA6IG1fbWVtb3J5KG1lbW9yeSkKLSAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCitCM0lSR2Vu
ZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCBGdW5jdGlvbkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbikKKyAgICA6IG1f
cHJvYyhwcm9jZWR1cmUpCiAgICAgLCBtX3VubGlua2VkQ2FsbHMoY29tcGlsYXRpb24tPnVubGlu
a2VkQ2FsbHMpCiB7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKQEAg
LTIxMSwxMiArMjA5LDEyIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBt
ZW0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX21lbW9yeSkgewotICAgICAgICBtX21l
bW9yeUJhc2VHUFIgPSBtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50
ZXI7CisgICAgaWYgKCEhbWVtb3J5KSB7CisgICAgICAgIG1fbWVtb3J5QmFzZUdQUiA9IG1lbW9y
eS5waW5uZWRSZWdpc3RlcnMoKS5iYXNlTWVtb3J5UG9pbnRlcjsKICAgICAgICAgbV9wcm9jLnBp
blJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVCghbV9tZW1vcnktPnBp
bm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgIG1f
bWVtb3J5U2l6ZUdQUiA9IG1fbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJz
WzBdLnNpemVSZWdpc3RlcjsKLSAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJ
bmZvJiBpbmZvIDogbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCisg
ICAgICAgIEFTU0VSVCghbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0u
c2l6ZU9mZnNldCk7CisgICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IG1lbW9yeS5waW5uZWRSZWdp
c3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25z
dCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygp
LnNpemVSZWdpc3RlcnMpCiAgICAgICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIoaW5mby5zaXpl
UmVnaXN0ZXIpOwogCiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKQEAg
LTY2MCw3ICs2NTgsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENv
CiAgICAgZGF0YUxvZ0xuKCJcbiIpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjcmVhdGVKU1dyYXBwZXIoVk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVy
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgTWVtb3J5KiBtZW1vcnkpCitz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1dyYXBwZXIoVk0mIHZt
LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5G
dW5jdGlvbiwgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSkKIHsKICAgICBQcm9jZWR1cmUgcHJv
YzsKICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHByb2MuYWRkQmxvY2soKTsKQEAgLTY4MiwxMiAr
NjgwLDEzIEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWEKICAgICAv
LyBNb3ZlIG1lbW9yeSB2YWx1ZXMgdG8gdGhlIGFwcHJvcmlhdGUgcGxhY2VzLCBpZiBuZWVkZWQu
CiAgICAgVmFsdWUqIGJhc2VNZW1vcnkgPSBudWxscHRyOwogICAgIFZlY3RvcjxWYWx1ZSo+IHNp
emVzOwotICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgYmFzZU1lbW9yeSA9IGJsb2NrLT5hcHBl
bmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1lbW9yeS0+bWVtb3J5KCkpOwor
ICAgIGlmICghIW1lbW9yeSkgeworICAgICAgICBiYXNlTWVtb3J5ID0gYmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLAorICAgICAgICAgICAg
YmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZtLndhc21N
ZW1vcnlQb2ludGVyKSk7CiAgICAgICAgIFZhbHVlKiBzaXplID0gYmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAotICAgICAgICAgICAgYmxv
Y2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0
PGNoYXIqPihtZW1vcnkpICsgTWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOwotICAgICAgICBzaXpl
cy5yZXNlcnZlQ2FwYWNpdHkobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJz
LnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVtb3J5LT5waW5uZWRSZWdpc3Rl
cnMoKS5zaXplUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmdm0ud2FzbU1lbW9yeVNpemUpKTsKKyAgICAgICAg
c2l6ZXMucmVzZXJ2ZUNhcGFjaXR5KG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0
ZXJzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lz
dGVycygpLnNpemVSZWdpc3RlcnMpIHsKICAgICAgICAgICAgIHNpemVzLmFwcGVuZChibG9jay0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBzaXplLAogICAgICAgICAgICAg
ICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaW5mby5z
aXplT2Zmc2V0KSkpOwogICAgICAgICB9CkBAIC03MDEsMTEgKzcwMCwxMSBAQCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhCiAKICAgICAvLyBNb3ZlIHRoZSBhcmd1bWVu
dHMgaW50byBwbGFjZS4KICAgICBWYWx1ZSogcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9u
KCkuc2V0dXBDYWxsKHByb2MsIGJsb2NrLCBPcmlnaW4oKSwgYXJndW1lbnRzLCB0b0IzVHlwZShz
aWduYXR1cmUtPnJldHVyblR5cGUpLCBbJl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkg
ewotICAgICAgICBpZiAobWVtb3J5KSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZXMuc2l6ZSgp
ID09IG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycy5zaXplKCkpOwotICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYmFzZU1lbW9yeSwg
VmFsdWVSZXA6OnJlZyhtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVy
KSkpOworICAgICAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAgICAgIEFTU0VSVChzaXplcy5z
aXplKCkgPT0gbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGJhc2VNZW1v
cnksIFZhbHVlUmVwOjpyZWcobWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2lu
dGVyKSkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZh
bHVlKHNpemVzW2ldLCBWYWx1ZVJlcDo6cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6
ZVJlZ2lzdGVyc1tpXS5zaXplUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoc2l6ZXNbaV0sIFZhbHVlUmVwOjpyZWcobWVtb3J5
LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOwogICAg
ICAgICB9CiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CkBAIC03Mzks
NyArNzM4LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYQogICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJvYyk7CiB9CiAKLXN0
ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZt
LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIE1l
bW9yeSogbWVtb3J5LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPEZ1
bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMsIHVuc2lnbmVkIG9wdExldmVsKQorc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIGNv
bnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgTWVtb3J5
SW5mb3JtYXRpb24mIG1lbW9yeSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFZl
Y3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25zLCB1bnNpZ25lZCBvcHRMZXZlbCkK
IHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb25Db21waWxhdGlv
bj4oKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5oCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIGV4
dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTWVtb3J5OworY2xhc3MgTWVtb3J5SW5mb3JtYXRpb247
CiAKLXN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUo
Vk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBNZW1vcnkqLCBjb25zdCBTaWduYXR1cmUqLCBj
b25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEp
Oworc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShW
TSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIE1lbW9yeUluZm9ybWF0aW9uJiwgY29uc3QgU2ln
bmF0dXJlKiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiwgdW5zaWduZWQgb3B0
TGV2ZWwgPSAxKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjA5NDYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw5IEBACiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9u
LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1h
dGlvbi5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNvdW50Lmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwNSw4ICsx
MDcsNiBAQCBzdHJ1Y3QgRnVuY3Rpb25JbmZvcm1hdGlvbiB7CiAgICAgc2l6ZV90IGVuZDsKIH07
CiAKLWNsYXNzIE1lbW9yeTsKLQogc3RydWN0IEV4cG9ydCB7CiAgICAgSWRlbnRpZmllciBmaWVs
ZDsKICAgICBFeHRlcm5hbDo6S2luZCBraW5kOwpAQCAtMTIyLDcgKzEyMiw3IEBAIHN0cnVjdCBN
b2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlczsKICAg
ICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwogICAgIFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9u
PiBmdW5jdGlvbnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbWVtb3J5OworICAgIE1l
bW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogCiAg
ICAgfk1vZHVsZUluZm9ybWF0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5LmNwcAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1NZW1vcnk6Ok1lbW9yeSh1
aW50MzJfdCBzdGFydGluZ1NpemUsIHVpbnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5z
aWduZWQ+JiBwaW5uZWRTaXplUmVnaXN0ZXJzKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IHN0
YXJ0aW5nU2l6ZSwgUGFnZUNvdW50IGNhcGFjaXR5KQogICAgIDogbV9tb2RlKE1vZGU6OkJvdW5k
c0NoZWNraW5nKQotICAgICwgbV9zaXplKHN0YXJ0aW5nU2l6ZSkKLSAgICAsIG1fY2FwYWNpdHko
Y2FwYWNpdHkpCisgICAgLCBtX3NpemUoc3RhcnRpbmdTaXplLmJ5dGVzKCkpCisgICAgLCBtX2Nh
cGFjaXR5KGNhcGFjaXR5LmJ5dGVzKCkpCiAgICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwg
YmFzZWQgYm91bmRzIGNoZWNraW5nIHRoZW4gd2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZs
b3cgb24gbG9hZC4KICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI2OTMKLSAgICAsIG1fbWFwcGVkQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG1heFBhZ2VDb3VudCkgKiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocGFnZVNpemUpKQorICAg
ICwgbV9tYXBwZWRDYXBhY2l0eShQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCkpCiB7CiAgICAgQVNT
RVJUKHBpbm5lZFNpemVSZWdpc3RlcnMuc2l6ZSgpID4gMCk7CiAKQEAgLTUwLDI1ICs1MCwxMiBA
QCBNZW1vcnk6Ok1lbW9yeSh1aW50MzJfdCBzdGFydGluZ1NpemUsIHVpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKHN0YXJ0aW5nU2l6ZSA8PSBtX21hcHBlZENhcGFj
aXR5KTsKLSAgICBpZiAobXByb3RlY3QocmVzdWx0LCBzdGFydGluZ1NpemUsIFBST1RfUkVBRCB8
IFBST1RfV1JJVEUpKSB7CisgICAgQVNTRVJUKG1fc2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsK
KyAgICBpZiAobXByb3RlY3QocmVzdWx0LCBtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUp
KSB7CiAgICAgICAgIG11bm1hcChyZXN1bHQsIG1fbWFwcGVkQ2FwYWNpdHkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQgcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID0g
cGlubmVkU2l6ZVJlZ2lzdGVycy5zaXplKCkgKyAxOwotICAgIGpzY0NhbGxpbmdDb252ZW50aW9u
KCkubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmZvckVhY2goWyZdIChSZWcgcmVnKSB7Ci0gICAgICAg
IEdQUlJlZyBncHIgPSByZWcuZ3ByKCk7Ci0gICAgICAgIGlmICghcmVtYWluaW5nUGlubmVkUmVn
aXN0ZXJzIHx8IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLmdldChyZWcpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAocmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID09IDEp
IHsKLSAgICAgICAgICAgIG1fcGlubmVkUmVnaXN0ZXJzLmJhc2VNZW1vcnlQb2ludGVyID0gZ3By
OwotICAgICAgICAgICAgcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzLS07Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgbV9waW5uZWRSZWdpc3RlcnMuc2l6ZVJlZ2lzdGVycy5hcHBlbmQoeyBn
cHIsIHBpbm5lZFNpemVSZWdpc3RlcnNbLS1yZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgLSAxXSB9
KTsKLSAgICB9KTsKLQotICAgIEFTU0VSVCghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzKTsKICAg
ICBtX21lbW9yeSA9IHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnkuaAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyOCArMjcsMTIgQEAKIAog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlv
bi5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotc3RydWN0IFBpbm5lZFNp
emVSZWdpc3RlckluZm8gewotICAgIEdQUlJlZyBzaXplUmVnaXN0ZXI7Ci0gICAgdW5zaWduZWQg
c2l6ZU9mZnNldDsKLX07Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4g
b25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyLiBSaWdodCBub3cgd2UgdGFrZSBhIHZlY3RvciB3aXRo
IG9ubHkgb25lCi0vLyBlbnRyeS4gU3BlY2lmaWNhbGx5IGFuIGVudHJ5IHdoZXJlIHRoZSBzaXpl
T2Zmc2V0ID09IDAuIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lzdGVyLAotLy8g
d2UgY2FuIGhhdmUgb25lIGZvciBlYWNoIGxvYWQgc2l6ZSBjbGFzcy4gc2VlOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCi1zdHJ1Y3QgUGlubmVkUmVnaXN0
ZXJJbmZvIHsKLSAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVy
czsKLSAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Ci19OwotCi1jb25zdGV4cHIgdWludDMy
X3QgcGFnZVNpemUgPSA2NCAqIEtCOwotY29uc3RleHByIHVpbnQzMl90IG1heFBhZ2VDb3VudCA9
IHN0YXRpY19jYXN0PHVpbnQzMl90PigoMXVsbCA8PCAzMikgLyBwYWdlU2l6ZSk7Ci0KIGNsYXNz
IE1lbW9yeSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU5LDggKzQzLDcgQEAgcHVibGljOgogICAgICAgICBCb3Vu
ZHNDaGVja2luZwogICAgIH07CiAKLSAgICBNZW1vcnkoKSA9IGRlZmF1bHQ7Ci0gICAgTWVtb3J5
KHVpbnQzMl90IHN0YXJ0aW5nU2l6ZSwgdWludDMyX3QgY2FwYWNpdHksIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1l
bW9yeShQYWdlQ291bnQgc3RhcnRpbmdTaXplLCBQYWdlQ291bnQgY2FwYWNpdHkpOwogCiAgICAg
fk1lbW9yeSgpCiAgICAgewpAQCAtNzAsNyArNTMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkKiBt
ZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIHVpbnQzMl90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBp
bm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVkUmVnaXN0ZXJzOyB9CiAKICAg
ICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KIApAQCAtODcsNyArNjksNiBA
QCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9
OwotICAgIFBpbm5lZFJlZ2lzdGVySW5mbyBtX3Bpbm5lZFJlZ2lzdGVyczsKICAgICBNb2RlIG1f
bW9kZTsKICAgICB1aW50MzJfdCBtX3NpemUgeyAwIH07CiAgICAgdWludDMyX3QgbV9jYXBhY2l0
eSB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZv
cm1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgi
CisKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworTWVtb3J5SW5m
b3JtYXRpb246Ok1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBtaW5TaXplLCBQYWdlQ291bnQg
bWF4U2l6ZSwgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMpCisg
ICAgOiBtX21pblNpemUobWluU2l6ZSkKKyAgICAsIG1fbWF4U2l6ZShtYXhTaXplKQoreworICAg
IEFTU0VSVCghIW1fbWluU2l6ZSk7CisgICAgQVNTRVJUKCEhbV9tYXhTaXplKTsKKyAgICBBU1NF
UlQoISEqdGhpcyk7CisKKyAgICB1bnNpZ25lZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBw
aW5uZWRTaXplUmVnaXN0ZXJzLnNpemUoKSArIDE7CisgICAganNjQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2NhbGxlZVNhdmVSZWdpc3RlcnMuZm9yRWFjaChbJl0gKFJlZyByZWcpIHsKKyAgICAgICAg
R1BSUmVnIGdwciA9IHJlZy5ncHIoKTsKKyAgICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdp
c3RlcnMgfHwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkuZ2V0KHJlZykpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPT0gMSkg
eworICAgICAgICAgICAgbV9waW5uZWRSZWdpc3RlcnMuYmFzZU1lbW9yeVBvaW50ZXIgPSBncHI7
CisgICAgICAgICAgICByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMtLTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtX3Bpbm5lZFJlZ2lzdGVycy5zaXplUmVnaXN0ZXJzLmFwcGVuZCh7IGdw
ciwgcGlubmVkU2l6ZVJlZ2lzdGVyc1stLXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyAtIDFdIH0p
OworICAgIH0pOworCisgICAgQVNTRVJUKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9y
eUluZm9ybWF0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiR1BSSW5mby5oIgor
I2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0cnVjdCBQaW5uZWRTaXplUmVnaXN0
ZXJJbmZvIHsKKyAgICBHUFJSZWcgc2l6ZVJlZ2lzdGVyOworICAgIHVuc2lnbmVkIHNpemVPZmZz
ZXQ7Cit9OworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1v
cnkgc2l6ZSByZWdpc3Rlci4gUmlnaHQgbm93IHdlIHRha2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9u
ZQorLy8gZW50cnkuIFNwZWNpZmljYWxseSBhbiBlbnRyeSB3aGVyZSB0aGUgc2l6ZU9mZnNldCA9
PSAwLiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgc2l6ZSByZWdpc3RlciwKKy8vIHdlIGNhbiBo
YXZlIG9uZSBmb3IgZWFjaCBsb2FkIHNpemUgY2xhc3MuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1Mgorc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7
CisgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNpemVSZWdpc3RlcnM7CisgICAg
R1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyOworfTsKKworY2xhc3MgTWVtb3J5SW5mb3JtYXRpb24g
eworcHVibGljOgorICAgIE1lbW9yeUluZm9ybWF0aW9uKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghKnRoaXMpOworICAgIH0KKworICAgIE1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBtaW5T
aXplLCBQYWdlQ291bnQgbWF4U2l6ZSwgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNp
emVSZWdpc3RlcnMpOworCisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdp
c3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3Bpbm5lZFJlZ2lzdGVyczsgfQorICAgIFBhZ2VDb3Vu
dCBtaW5TaXplKCkgY29uc3QgeyByZXR1cm4gbV9taW5TaXplOyB9CisgICAgUGFnZUNvdW50IG1h
eFNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFNpemU7IH0KKworICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fbWluU2l6ZSAmJiAhIW1fbWF4U2l6ZTsgfQor
Citwcml2YXRlOgorICAgIFBhZ2VDb3VudCBtX21pblNpemUgeyB9OworICAgIFBhZ2VDb3VudCBt
X21heFNpemUgeyB9OworICAgIFBpbm5lZFJlZ2lzdGVySW5mbyBtX3Bpbm5lZFJlZ2lzdGVycyB7
IH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdBU00pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmNwcAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5o
IgotI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRp
b24uaCIKICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAK
QEAgLTI1NCw2ICsyNTQsOCBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5
OiB7CisgICAgICAgICAgICBpZiAoIXBhcnNlTWVtb3J5SGVscGVyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTMwMSwzOSArMzAzLDU5IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkK
K2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhlbHBlcigpCiB7Ci0gICAgdWludDhfdCBj
b3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoY291bnQpKQorICAgIC8vIFdlIGRvbid0IGFs
bG93IHJlZGVjbGFyaW5nIG1lbW9yeS4gRWl0aGVyIHZpYSBpbXBvcnQgb3IgZGVmaW5pdGlvbi4K
KyAgICBpZiAobV9tb2R1bGUtPm1lbW9yeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICB1aW50OF90IGZsYWdzOwog
ICAgIGlmICghcGFyc2VWYXJVSW50MShmbGFncykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHVpbnQzMl90IHNpemU7Ci0gICAgaWYgKCFwYXJzZVZhclVJbnQzMihzaXplKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzaXplID4gbWF4UGFnZUNvdW50KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgUGFnZUNvdW50IG1pblNpemU7CisgICAgeworICAgICAgICB1aW50
MzJfdCBzaXplOworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChzaXplKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbWluU2l6ZSA9IFBhZ2VDb3VudChz
aXplKTsKKyAgICB9CiAKLSAgICB1aW50MzJfdCBjYXBhY2l0eSA9IG1heFBhZ2VDb3VudDsKKyAg
ICBQYWdlQ291bnQgbWF4U2l6ZSA9IFBhZ2VDb3VudDo6bWF4KCk7CiAgICAgaWYgKGZsYWdzKSB7
Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoY2FwYWNpdHkpKQorICAgICAgICB1aW50MzJf
dCBzaXplOworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHNpemUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5IHx8IGNhcGFjaXR5ID4g
bWF4UGFnZUNvdW50KQorICAgICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChzaXplKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbWF4U2l6ZSA9IFBhZ2VDb3VudChzaXpl
KTsKKyAgICAgICAgaWYgKG1pblNpemUgPiBtYXhTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGNhcGFjaXR5ICo9IHBhZ2VTaXplOwotICAgIHNpemUgKj0gcGFn
ZVNpemU7Ci0KICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0geyAwIH07Ci0gICAg
bV9tb2R1bGUtPm1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVtb3J5PihzaXplLCBjYXBhY2l0
eSwgcGlubmVkU2l6ZXMpOwotICAgIHJldHVybiBtX21vZHVsZS0+bWVtb3J5LT5tZW1vcnkoKTsK
KyAgICBtX21vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24obWluU2l6ZSwgbWF4U2l6
ZSwgcGlubmVkU2l6ZXMpOworICAgIHJldHVybiB0cnVlOworCit9CisKK2Jvb2wgTW9kdWxlUGFy
c2VyOjpwYXJzZU1lbW9yeSgpCit7CisgICAgdWludDhfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNl
VmFyVUludDEoY291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKworICAgIGlmICghY291
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gV2Ugb25seSBhbGxvdyBvbmUgbWVt
b3J5IGZvciBub3cuCisgICAgaWYgKGNvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBwYXJzZU1lbW9yeUhlbHBlcigpOwogfQogCiBib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2VHbG9iYWwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuaAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw4
IEBAIHByaXZhdGU6CiAgICAgRk9SX0VBQ0hfV0FTTV9TRUNUSU9OKFdBU01fU0VDVElPTl9ERUNM
QVJFX1BBUlNFUikKICN1bmRlZiBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIKIAorICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlTWVtb3J5SGVscGVyKCk7CisKICAgICBWTSogbV92
bTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlOwogICAg
IGJvb2wgbV9mYWlsZWQgeyB0cnVlIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGFnZUNvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBhZ2VDb3VudC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QYWdlQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CisKK2NsYXNzIFBhZ2VDb3VudCB7CisKK3B1YmxpYzoKKyAgICBQYWdlQ291bnQoKQor
ICAgICAgICA6IG1fcGFnZUNvdW50KFVJTlRfTUFYKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChtYXhQYWdlQ291bnQgPCBVSU5UX01BWCwgIldlIHJlbHkgb24gdGhpcyBoZXJlLiIpOwor
ICAgIH0KKworICAgIFBhZ2VDb3VudCh1aW50MzJfdCBwYWdlQ291bnQpCisgICAgICAgIDogbV9w
YWdlQ291bnQocGFnZUNvdW50KQorICAgIHsgfQorCisgICAgc2l6ZV90IGJ5dGVzKCkgeyByZXR1
cm4gbV9wYWdlQ291bnQgKiBwYWdlU2l6ZTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZCh1
aW50MzJfdCBwYWdlQ291bnQpCisgICAgeworICAgICAgICByZXR1cm4gcGFnZUNvdW50IDw9IG1h
eFBhZ2VDb3VudDsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFnZUNvdW50IG1heCgpCisgICAgewor
ICAgICAgICByZXR1cm4gUGFnZUNvdW50KG1heFBhZ2VDb3VudCk7CisgICAgfQorCisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wYWdl
Q291bnQgIT0gVUlOVF9NQVg7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUGFn
ZUNvdW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BhZ2VDb3VudCA8
IG90aGVyLm1fcGFnZUNvdW50OworICAgIH0KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBQYWdl
Q291bnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFnZUNvdW50ID4g
b3RoZXIubV9wYWdlQ291bnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3QgbWF4UGFnZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgxdWxsIDw8IDMyKSAv
IHBhZ2VTaXplKTsKKworICAgIHVpbnQzMl90IG1fcGFnZUNvdW50OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXQVNNKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkocmV2aXNpb24gMjA5NDYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDAsNyArMTAwLDcgQEAgdm9pZCBQbGFuOjpydW4oKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgbV9jb21waWxlZEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFy
c2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmdldCgpLCBpbmZvLnNpZ25hdHVyZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25zKSk7CisgICAgICAgIG1fY29tcGlsZWRGdW5jdGlvbnMudW5jaGVj
a2VkQXBwZW5kKHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25M
ZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeSwgaW5mby5zaWduYXR1cmUsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucykpOwogICAgIH0KIAogICAgIC8vIFBhdGNoIHRoZSBj
YWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMTMgQEAgcHVibGlj
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwogICAgICAgICByZXR1cm4gbV9t
b2R1bGVJbmZvcm1hdGlvbjsKICAgICB9CisgICAgLyoKICAgICBjb25zdCBNZW1vcnkqIG1lbW9y
eSgpIGNvbnN0CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwogICAg
ICAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmdldCgpOwogICAgIH0KKyAg
ICAqLwogICAgIHNpemVfdCBjb21waWxlZEZ1bmN0aW9uQ291bnQoKSBjb25zdAogICAgIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2
aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5j
bHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTc1LDYgKzc2LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0
Q2hpbGRyZQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGVOYW1lc3BhY2VPYmplY3QpOworICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lkluc3RhbmNlIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5SW5zdGFuY2Up
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKK2NsYXNzIEpTV2ViQXNzZW1ibHlN
ZW1vcnk7CiAKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA6IHB1YmxpYyBKU0Rlc3RydWN0
aWJsZU9iamVjdCB7CiBwdWJsaWM6CkBAIC01MSw2ICs1Miw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fbW9kdWxlLmdldCgpOwogICAgIH0KIAorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CisgICAgdm9pZCBzZXRNZW1vcnko
Vk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0
aGlzLCBtZW1vcnkpOyB9CisKIHByb3RlY3RlZDoKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uo
Vk0mLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3Nl
bWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CkBAIC02MCw2ICs2NCw3IEBA
IHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlNb2R1
bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4g
bV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlN
ZW1vcnk+IG1fbWVtb3J5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNw
cAkocmV2aXNpb24gMjA5NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNiBAQAog
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgor
I2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2Vt
Ymx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8g
PSB7ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CisKK0pTV2ViQXNzZW1ibHlNZW1vcnkqIEpT
V2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
dGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKIHsKLSAgICBhdXRvKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZt
LmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAgIGF1dG8qIGlu
c3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1lbW9yeT4o
dm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShtZW1v
cnkpKTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBpbnN0
YW5jZTsKIH0KQEAgLTQ0LDExICs0OSwyOCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1v
cnk6OmNyZWF0ZVN0CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2Vt
Ymx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxX
YXNtOjpNZW1vcnk+JiYgbWVtb3J5KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwg
bV9tZW1vcnkoV1RGTW92ZShtZW1vcnkpKQogewogfQogCitKU0FycmF5QnVmZmVyKiBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQoreworICAgIGlmIChtX2J1ZmZlcldyYXBwZXIpCisgICAgICAgIHJldHVybiBtX2J1ZmZlcldy
YXBwZXIuZ2V0KCk7CisKKyAgICBhdXRvIGRlc3RydWN0b3IgPSBbXSAodm9pZCopIHsKKyAgICAg
ICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlIHRvIGRlc3Ryb3kgdGhlIG1l
bW9yeS4KKyAgICAgICAgLy8gVGhlIEFycmF5QnVmZmVyIGJhY2tpbmcgdGhlIEpTQXJyYXlCdWZm
ZXIgaXMgb25seSBvd25lZCBieSB1cywKKyAgICAgICAgLy8gc28gd2UgZ3VhcmFudGVlIGl0cyBs
aWZlY3lsY2UuCisgICAgfTsKKyAgICBtX2J1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVGcm9t
Qnl0ZXMobWVtb3J5KCktPm1lbW9yeSgpLCBtZW1vcnkoKS0+c2l6ZSgpLCBXVEZNb3ZlKGRlc3Ry
dWN0b3IpKTsKKyAgICBtX2J1ZmZlcldyYXBwZXIuc2V0KHZtLCB0aGlzLCBKU0FycmF5QnVmZmVy
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+bV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5nZXQoKSwg
bV9idWZmZXIuZ2V0KCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2J1ZmZlcldyYXBwZXIpOwor
ICAgIHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJs
eU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKQEAgLTY2LDEwICs4OCw5IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlz
aXRDaGlsZHJlbigKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2J1ZmZlcldyYXBwZXIpOwogfQogCi1j
b25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2ViQXNzZW1i
bHkuTWVtb3J5IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFz
c2VtYmx5TWVtb3J5KSB9OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDIwOTQ2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksMjMgKzI5LDM1IEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVy
OworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKKwogY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeSA6IHB1
YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBj
cmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmKTsK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCisgICAgV2FzbTo6TWVtb3J5KiBt
ZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQorICAgIEpTQXJyYXlCdWZmZXIqIGJ1
ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kik7CisKIHByb3RlY3RlZDoKLSAgICBKU1dlYkFz
c2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CisgICAgSlNXZWJBc3NlbWJseU1lbW9yeShW
TSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYpOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OworICAgIFdyaXRl
QmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CisgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAJKHJldmlzaW9uIDIwOTQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTIgQEAK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJQcm90b0Nh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2lu
Y2x1ZGUgIldhc21NZW1vcnkuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTkwLDYgKzkyLDEz
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICAgICAgYXJn
Q291bnQgPSBib3hlZEFyZ3Muc2l6ZSgpOwogICAgIH0KIAorICAgIC8vIFNldHVwIHRoZSBtZW1v
cnkgdGhhdCB0aGUgZW50cmFuY2UgbG9hZHMuCisgICAgaWYgKEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSA9IHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5KCkpIHsKKyAgICAgICAg
V2FzbTo6TWVtb3J5KiB3YXNtTWVtb3J5ID0gbWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAgdm0u
d2FzbU1lbW9yeVBvaW50ZXIgPSB3YXNtTWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAgdm0ud2Fz
bU1lbW9yeVNpemUgPSB3YXNtTWVtb3J5LT5zaXplKCk7CisgICAgfQorCiAgICAgLy8gTm90ZTog
d2Ugc3BlY2lmaWNhbGx5IHVzZSB0aGUgV2ViQXNzZWJseUZ1bmN0aW9uIGFzIHRoZSBjYWxsZWUg
dG8gYmVnaW4gd2l0aCBpbiB0aGUgUHJvdG9DYWxsRnJhbWUuCiAgICAgLy8gVGhlIHJlYXNvbiBm
b3IgdGhpcyBpcyB0aGF0IGNhbGxpbmcgaW50byB0aGUgbGxpbnQgbWF5IHN0YWNrIG92ZXJmbG93
LCBhbmQgdGhlIHN0YWNrIG92ZXJmbG93CiAgICAgLy8gaGFuZGxlciBtaWdodCByZWFkIHRoZSBn
bG9iYWwgb2JqZWN0IGZyb20gdGhlIGNhbGxlZS4gVGhlIEpTV2ViQXNzZW1ibHlDYWxsZWUgZG9l
c24ndCBoYXZlIGEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIwOTQ2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIHdlYkFzc2VtYmx5Q2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV93YXNtQ2FsbGVl
LmdldCgpOyB9Ci0gICAgY29uc3QgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQogICAgIGNv
bnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKCkKICAgICB7IAogICAgICAgICBBU1NFUlQo
bV9zaWduYXR1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0s
IGluc3RhbmNlU3RydWN0dXJlLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkLT5nZXRNb2R1bGVOYW1l
c3BhY2Uoc3RhdGUpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAotICAgIG1vZHVsZVJlY29yZC0+bGluayhzdGF0ZSwgaW5zdGFuY2UpOworICAg
IG1vZHVsZVJlY29yZC0+bGluayhzdGF0ZSwgaW5zdGFuY2UsIGltcG9ydE9iamVjdCk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgIG1vZHVsZVJlY29yZC0+ZHVtcCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwOTQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCwxMSBAQAogCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgor
I2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KIAogI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IubHV0LmgiCiAK
QEAgLTQzLDE5ICs0Nyw3OCBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlDb25z
dHJ1CiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNZW1vcnkoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJ
SUxpdGVyYWwoIldlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgTWVtb3J5IGNv
bnN0cnVjdG9yIHByb3BlcnR5IikpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgZXhhY3RseSBvbmUgYXJndW1lbnQi
KSkpKTsKKworICAgIGF1dG8gZ2V0VWludDMyID0gWyZdIChKU1ZhbHVlIHZhbHVlKSAtPiB1aW50
MzJfdCB7CisgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLnRvSW50ZWdlcihleGVj
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAg
ICBpZiAoZG91YmxlVmFsdWUgPCAwIHx8IGRvdWJsZVZhbHVlID4gVUlOVF9NQVgpIHsKKyAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAgICAgICAgICAg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IGV4
cGVjdHMgdGhlICdpbml0aWFsJyBwcm9wZXJ0eSB0byBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5n
ZTogWzAsIDJeMzIgLSAxXSIpKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRvdWJsZVZhbHVlKTsKKyAgICB9
OworCisgICAgSlNPYmplY3QqIG1lbW9yeURlc2NyaXB0b3I7CisgICAgeworICAgICAgICBKU1Zh
bHVlIGFyZ3VtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgICAgIGlmICghYXJndW1lbnQu
aXNPYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNl
cHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiV2ViQXNzZW1ibHkuTWVtb3J5IGV4Y2VwdHMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFu
IG9iamVjdCIpKSkpOworICAgICAgICBtZW1vcnlEZXNjcmlwdG9yID0ganNDYXN0PEpTT2JqZWN0
Kj4oYXJndW1lbnQpOworICAgIH0KKworICAgIFdhc206OlBhZ2VDb3VudCBtaW5TaXplOworICAg
IHsKKyAgICAgICAgSWRlbnRpZmllciBpbml0aWFsID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJpbml0aWFsIik7CisgICAgICAgIEpTVmFsdWUgbWluU2l6ZVZhbHVlID0gbWVtb3J5RGVz
Y3JpcHRvci0+Z2V0KGV4ZWMsIGluaXRpYWwpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIHVpbnQzMl90IHNpemUgPSBnZXRVaW50MzIobWlu
U2l6ZVZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0p
OworICAgICAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChzaXplKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5
IGludmFsaWQgJ2luaXRpYWwnIHBhZ2UgY291bnQiKSkpKTsKKyAgICAgICAgbWluU2l6ZSA9IFdh
c206OlBhZ2VDb3VudChzaXplKTsKKyAgICB9CisKKyAgICBXYXNtOjpQYWdlQ291bnQgbWF4U2l6
ZTsKKyAgICB7CisgICAgICAgIElkZW50aWZpZXIgbWF4aW11bSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAibWF4aW11bSIpOworICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gbWVtb3J5
RGVzY3JpcHRvci0+aGFzUHJvcGVydHkoZXhlYywgbWF4aW11bSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgaWYgKGhhc1Byb3BlcnR5KSB7
CisgICAgICAgICAgICBKU1ZhbHVlIG1heFNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdl
dChleGVjLCBtYXhpbXVtKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgeyB9KTsKKyAgICAgICAgICAgIHVpbnQzMl90IHNpemUgPSBnZXRVaW50MzIobWF4U2l6
ZVZhbHVlKTsKKyAgICAgICAgICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKHNpemUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2Vi
QXNzZW1ibHkuTWVtb3J5IGludmFsaWQgJ2luaXRpYWwnIHBhZ2UgY291bnQiKSkpKTsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgICAg
IG1heFNpemUgPSBXYXNtOjpQYWdlQ291bnQoc2l6ZSk7CisKKyAgICAgICAgICAgIGlmIChtaW5T
aXplID4gbWF4U2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkuTWVtb3J5IHByb3Zp
ZGVkIGEgJ21heGltdW0nIHBhZ2UgY291bnQgdGhhdCBzbWFsbGVyIHRoYW4gdGhlICdpbml0aWFs
JyBwYWdlIGNvdW50IikpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogd2hhdCBkb2VzIHRoZSBzcGVjIHNheSB0byBkbyBoZXJlLgorICAg
ICAgICAgICAgbWF4U2l6ZSA9IG1pblNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc206
Ok1lbW9yeT4obWluU2l6ZSwgbWF4U2l6ZSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5XZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpLCBXVEZNb3ZlKG1lbW9yeSkpKTsKIH0K
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlN
ZW1vcnkoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgIldlYkFzc2VtYmx5Lk1lbW9yeSIpKTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxlZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsICJXZWJBc3NlbWJseS5NZW1vcnkiKSk7CiB9CiAKIFdlYkFzc2VtYmx5
TWVtb3J5Q29uc3RydWN0b3IqIFdlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3I6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSog
dGhpc1Byb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIw
OTQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOSBAQAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCisjaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAKICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZS5sdXQuaCIKIApAQCAtNDIsMTAgKzQ0LDE5IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3Nl
bWJseU1lbW9yeVByb3RvdHkKICBAZW5kCiAgKi8KIAotV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5
cGUqIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJlKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIoRXhlY1N0YXRlKik7CisK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNC
dWZmZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9y
eSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KGV4ZWMtPnRoaXNWYWx1ZSgp
KTsgCisgICAgUkVMRUFTRV9BU1NFUlQoISFtZW1vcnkpOyAvLyAgRklYTUUKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKG1lbW9yeS0+YnVmZmVyKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSkpOworfQorCitXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSogV2ViQXNz
ZW1ibHlNZW1vcnlQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGF1dG8qIG9iamVjdCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlPih2bS5o
ZWFwKSkgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7Ci0gICAgb2Jq
ZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwg
Z2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gb2JqZWN0OwogfQogCkBAIC01NCw5ICs2NSwxMCBA
QCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpjCiAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit2b2lkIFdlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEpTQ19O
QVRJVkVfR0VUVEVSKCJidWZmZXIiLCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZlciwg
RG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpX
ZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX0lORk87CiAKIHBy
b3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiAKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1i
bHlNZW1vcnlQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAJKHJldmlzaW9uIDIwOTQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVF
bnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxl
LmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rp
b24uaCIKQEAgLTk4LDcgKzk5LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6dmlz
aXRDaGlsZAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKIH0K
IAotdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQordm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlLCBKU09iamVjdCogZGljdGlvbmFyeSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNTEsNiArMTUy
LDQyIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocHV0UmVzdWx0KTsKICAgICB9CiAKKyAgICBib29sIGhhc01lbW9yeSA9
IGZhbHNlOworICAgIGZvciAoY29uc3QgV2FzbTo6SW1wb3J0JiBpbXBvcnRJbmZvIDogbW9kdWxl
SW5mb3JtYXRpb24uaW1wb3J0cykgeworICAgICAgICBKU1ZhbHVlIGltcG9ydFdyYXBwZXIgPSBk
aWN0aW9uYXJ5LT5nZXQoc3RhdGUsIGltcG9ydEluZm8ubW9kdWxlKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKCFpbXBvcnRXcmFwcGVy
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwg
Y3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIkltcG9ydCBub3QgYW4gb2JqZWN0
IikpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBKU1ZhbHVlIGlt
cG9ydCA9IGpzQ2FzdDxKU09iamVjdCo+KGltcG9ydFdyYXBwZXIpLT5nZXQoc3RhdGUsIGltcG9y
dEluZm8uZmllbGQpOworCisgICAgICAgIHN3aXRjaCAoaW1wb3J0SW5mby5raW5kKSB7CisgICAg
ICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Ok1lbW9yeTogeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWhhc01lbW9yeSk7IC8vIEZJWE1FOiB3aGF0IHRvIGRvIGlmIHdlIGltcG9ydCBtb3Jl
IHRoYW4gb25lIG1lbW9yeT8KKyAgICAgICAgICAgIGhhc01lbW9yeSA9IHRydWU7CisgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNz
ZW1ibHlNZW1vcnkqPihpbXBvcnQpOworICAgICAgICAgICAgaWYgKCFtZW1vcnkpIHsKKyAgICAg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihz
dGF0ZSwgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBX
ZWJBc3NlbWJseS5NZW1vcnkiKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6
OkZ1bmN0aW9uOgorICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpUYWJsZToKKyAgICAgICAg
Y2FzZSBXYXNtOjpFeHRlcm5hbDo6R2xvYmFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBib29sIGV4cGVjdHNNZW1vcnkgPSAhIW1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeTsKKyAgICBpZiAoZXhwZWN0c01lbW9yeSAmJiAhaGFzTWVtb3J5KSB7CisgICAgICAg
IHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJ
SUxpdGVyYWwoIk1vZHVsZSBleHBlY3RpbmcgYSBtZW1vcnkgaW1wb3J0IGJ1dCBvbmUgd2FzIG5v
dCBwcm92aWRlZCIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBSRUxFQVNFX0FT
U0VSVCghbV9pbnN0YW5jZSk7CiAgICAgbV9pbnN0YW5jZS5zZXQodm0sIHRoaXMsIGluc3RhbmNl
KTsKICAgICBtX21vZHVsZUVudmlyb25tZW50LnNldCh2bSwgdGhpcywgbW9kdWxlRW52aXJvbm1l
bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyMDk0NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZCogY3JlYXRlKEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJik7CiAK
LSAgICB2b2lkIGxpbmsoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisgICAg
dm9pZCBsaW5rKEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEpTT2JqZWN0KiBk
aWN0aW9uYXJ5KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopOwogCiBwcml2YXRlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296612</attachid>
            <date>2016-12-08 18:59:48 -0800</date>
            <delta_ts>2016-12-08 19:23:32 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>69194</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCShyZXZpc2lvbiAyMDk1ODMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxNyBAQCBjb25zdCBfaW1wb3J0RnVuY3Rp
b25Db250aW51YXRpb24gPSAoYnVpCiAgICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRNZW1vcnlD
b250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICBy
ZXR1cm4gKG1vZHVsZSwgZmllbGQsIHtpbml0aWFsLCBtYXhpbXVtfSkgPT4geworICAgICAgICBh
c3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUg
YSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmll
bGQsIGBJbXBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7Zmll
bGR9ImApOworICAgICAgICAvLyBGSVhNRTogd2hhdCB2YWxpZGF0aW9uIHNob3VsZCBJIGRvIGhl
cmU/CisgICAgICAgIC8vYXNzZXJ0LmlzTnVtYmVyKGZpZWxkLCBgSW1wb3J0IGZ1bmN0aW9uIGZp
ZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAgc2VjdGlv
bi5kYXRhLnB1c2goeyBtb2R1bGUsIGZpZWxkLCBraW5kOiAiTWVtb3J5IiwgbWVtb3J5RGVzY3Jp
cHRpb246IHtpbml0aWFsLCBtYXhpbXVtfX0pOworICAgICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7
CisgICAgfTsKK307CisKIGNvbnN0IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWls
ZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoZmllbGQsIGluZGV4
LCB0eXBlKSA9PiB7CiAgICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5j
dGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CkBAIC0xMTAs
NiArMTIxLDcgQEAgY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aQogICAg
ICAgICAgICAgLy8gRXhwb3J0cyBjYW4gbGVhdmUgdGhlIHR5cGUgdW5zcGVjaWZpZWQsIGxldHRp
bmcgdGhlIENvZGUgYnVpbGRlciBwYXRjaCB0aGVtIHVwIGxhdGVyLgogICAgICAgICAgICAgdHlw
ZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCB0eXBlKTsKICAgICAgICAgfQorCiAgICAg
ICAgIC8vIFdlIGNhbid0IGNoZWNrIG11Y2ggYWJvdXQgImluZGV4IiBoZXJlIGJlY2F1c2UgdGhl
IENvZGUgc2VjdGlvbiBzdWNjZWVkcyB0aGUgRXhwb3J0IHNlY3Rpb24uIE1vcmUgd29yayBpcyBk
b25lIGF0IENvZGUoKS5FbmQoKSB0aW1lLgogICAgICAgICBzd2l0Y2ggKHR5cGVvZihpbmRleCkp
IHsKICAgICAgICAgY2FzZSAic3RyaW5nIjogYnJlYWs7IC8vIEFzc3VtZSBpdCdzIGEgZnVuY3Rp
b24gbmFtZSB3aGljaCB3aWxsIGJlIHJldmVhbGVkIGluIHRoZSBDb2RlIHNlY3Rpb24uCkBAIC0x
MjUsNiArMTM3LDcgQEAgY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgRXhw
b3J0IHNlY3Rpb24ncyBpbmRleCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBnb3QgJHtp
bmRleH1gKTsKICAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IGNvcnJlc3BvbmRpbmdJbXBvcnQg
PSBidWlsZGVyLl9nZXRGdW5jdGlvbkZyb21JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgY29u
c3QgaW1wb3J0U2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIkltcG9ydCIpOwogICAgICAg
ICBpZiAodHlwZW9mKGluZGV4KSA9PT0gIm9iamVjdCIpIHsKQEAgLTM2OCwxMCArMzgxLDEwIEBA
IGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbXBvcnRCdWlsZGVyID0gewogICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0
aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBpbXBvcnQgdGFibGVgKTsgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE1lbW9yeTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGlt
cG9ydCBtZW1vcnlgKTsgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbDogKCkgPT4g
eyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCBnbG9iYWxgKTsgfSwKICAg
ICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5G
dW5jdGlvbiA9IF9pbXBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWls
ZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5NZW1vcnkgPSBfaW1wb3J0
TWVtb3J5Q29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW1wb3J0QnVpbGRlcjsKICAgICAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNDY1LDcgKzQ3OCw4IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNz
IEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlLnR5cGUpID09PSAidW5k
ZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgbXVzdCBiZSBhIGZ1bmN0aW9uIGV4cG9ydCBmcm9tIHRoZSBDb2RlIHNlY3Rpb24gKHJlLWV4
cG9ydHMgd2VyZSBoYW5kbGVkIGVhcmxpZXIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGltcG9ydFNlY3Rp
b24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL2NvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGlt
cG9ydFNlY3Rpb24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbkluZGV4U3BhY2VPZmZz
ZXQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1
bmN0aW9uSW5kZXggPSBlLmluZGV4IC0gZnVuY3Rpb25JbmRleFNwYWNlT2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudHlwZSA9IGNvZGVTZWN0aW9uLmRh
dGFbZnVuY3Rpb25JbmRleF0udHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KSW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCShy
ZXZpc2lvbiAyMDk1ODMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFy
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsMjkgQEAgY29uc3QgZW1pdHRlcnMgPSB7
CiAgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLmV4dGVybmFsS2luZFZhbHVlW2Vu
dHJ5LmtpbmRdKTsKICAgICAgICAgICAgIHN3aXRjaCAoZW50cnkua2luZCkgewogICAgICAgICAg
ICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmV4
cGVjdGVkIGtpbmQgJHtlbnRyeS5raW5kfWApOwotICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb24i
OiBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkudHlwZSk7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAiRnVuY3Rpb24iOiB7CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIs
IGVudHJ5LnR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50
ZWRgKTsKLSAgICAgICAgICAgIGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHll
dCBpbXBsZW1lbnRlZGApOworICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjogeworICAgICAgICAg
ICAgICAgIGxldCB7aW5pdGlhbCwgbWF4aW11bX0gPSBlbnRyeS5tZW1vcnlEZXNjcmlwdGlvbjsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGNvZXJjZSB0aGlzIHRvIGEgbnVt
YmVyIG1heWJlPyBPciB2YWxpZGF0ZSBtb3JlPworICAgICAgICAgICAgICAgIGFzc2VydC50cnV0
aHkodHlwZW9mIGluaXRpYWwgPT09ICJudW1iZXIiLCAiRXhlY3B0IGEgbnVtYmVyIG9mIHVuZGVm
aW5lZCBmb3IgJ21heGltdW0nIik7CisgICAgICAgICAgICAgICAgaW5pdGlhbCB8PSAwOworICAg
ICAgICAgICAgICAgIGxldCBoYXNNYXhpbXVtID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodHlw
ZW9mIG1heGltdW0gPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgICAgIG1heGltdW0g
fD0gMDsKKyAgICAgICAgICAgICAgICAgICAgaGFzTWF4aW11bSA9IDE7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSh0eXBlb2YgbWF4
aW11bSA9PT0gInVuZGVmaW5lZCIsICJFeGVjcHQgYSBudW1iZXIgb2YgdW5kZWZpbmVkIGZvciAn
bWF4aW11bSciKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHV0KGJpbiwg
InZhcnVpbnQzMiIsIGhhc01heGltdW0pOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1
aW50MzIiLCBpbml0aWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzTWF4aW11bSkKKyAgICAg
ICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIG1heGltdW0pOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGNhc2UgIkdsb2JhbCI6
IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnkuanMJKG5vbmV4aXN0ZW50
KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21lbW9yeS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU2IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKKwor
ZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJCYWQgYXNzZXJ0aW9uIik7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KGYsIGNvdW50
ID0gMTAwMCkgeworICAgIG5vSW5saW5lKGYpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykgeworICAgICAgICBmKGkpOworICAgIH0KK30KKwordGVzdChmdW5jdGlvbigpIHsK
KyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAyMCwgbWF4aW11bTogMjB9
OworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5F
bmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5NZW1vcnkoImltcCIsICJtZW1v
cnkiLCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28i
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9u
KCJmb28iLCB7IHBhcmFtczogWyJpMzIiLCAiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAg
ICAgICAgICAgICAuSTMyU3RvcmUoMiwgMCkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkK
KyAgICAgICAgICAgICAgICAuSTMyTG9hZCgyLCAwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4o
KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9
IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5
Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pOwor
ICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOworICAgIC8vIGZvbyh2YWx1ZSwg
YWRkcmVzcykKKworICAgIGNvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworICAgIGNvbnN0IGJ5
dGVzID0gbWVtb3J5RGVzY3JpcHRpb24uaW5pdGlhbCAqIHBhZ2VTaXplOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgKGJ5dGVzLzQpOyBpKyspIHsKKyAgICAgICAgbGV0IHZhbHVlID0gaSArIDE7
CisgICAgICAgIGxldCBhZGRyZXNzID0gaSAqIDQ7CisgICAgICAgIGxldCByZXN1bHQgPSBmb28o
dmFsdWUsIGFkZHJlc3MpOworICAgICAgICBhc3NlcnQocmVzdWx0ID09PSB2YWx1ZSk7CisgICAg
ICAgIGxldCBhcnJheUJ1ZmZlciA9IG1lbW9yeS5idWZmZXI7CisgICAgICAgIGxldCBidWZmZXIg
PSBuZXcgVWludDMyQXJyYXkoYXJyYXlCdWZmZXIpOworICAgICAgICBhc3NlcnQoYnVmZmVyW2ld
ID09PSB2YWx1ZSk7CisgICAgfQorfSwgMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2
aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKICNp
bmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXNtUGxhbi5oIgorI2luY2x1
ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+
CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTI2MzIsNiArMjYzMywxOSBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgICAgICAgICB9KTsKICAgICB9CiAKKyAg
ICB2b2lkKiBtZW1vcnlCeXRlcyA9IG51bGxwdHI7CisgICAgdWludDMyX3QgbWVtb3J5U2l6ZSA9
IDA7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbW9kdWxlSW5mb3JtYXRpb24gPSBw
bGFuLnRha2VNb2R1bGVJbmZvcm1hdGlvbigpOworCisgICAgaWYgKCEhbW9kdWxlSW5mb3JtYXRp
b24tPm1lbW9yeSkgeworICAgICAgICBtZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhc206Ok1l
bW9yeT4obW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5pbml0aWFsKCksIG1vZHVsZUluZm9ybWF0
aW9uLT5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgbWVtb3J5Qnl0ZXMgPSBtZW1vcnktPm1l
bW9yeSgpOworICAgICAgICBtZW1vcnlTaXplID0gbWVtb3J5LT5zaXplKCk7CisgICAgfQorICAg
IHZtLndhc21NZW1vcnlQb2ludGVyID0gbWVtb3J5Qnl0ZXM7CisgICAgdm0ud2FzbU1lbW9yeVNp
emUgPSBtZW1vcnlTaXplOworCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGZ1bmN0aW9u
Q291bnQ7ICsraSkgewogICAgICAgICBKU0FycmF5KiB0ZXN0Q2FzZXMgPSBqc0Nhc3Q8SlNBcnJh
eSo+KGV4ZWMtPmFyZ3VtZW50KGkgKyAyKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgdGVzdElu
ZGV4ID0gMDsgdGVzdEluZGV4IDwgdGVzdENhc2VzLT5sZW5ndGgoKTsgKyt0ZXN0SW5kZXgpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAkocmV2aXNpb24gMjA5NTgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTky
LDYgKzE5Miw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrUGxhbihQbGFuJiBwbGFuLCB1bnNpZ24KIC8v
IEZvciBub3cgd2UgaW5saW5lIHRoZSB0ZXN0IGZpbGVzLgogc3RhdGljIHZvaWQgcnVuV2FzbVRl
c3RzKCkKIHsKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tQbGFuKTsKKyAgICAvKgogICAgIHsKICAg
ICAgICAgLy8gR2VuZXJhdGVkIGZyb206CiAgICAgICAgIC8vICAgIChtb2R1bGUKQEAgLTEzMjAs
NiArMTMyMiw3IEBAIHN0YXRpYyB2b2lkIHJ1bldhc21UZXN0cygpCiAgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJv
eCgxMDApLCBib3goNikgfSksIDApOwogICAgIH0KIAorICAgICovCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MjksNiArMTQyOSw5
IEBACiAJCTc5QjAwQ0JFMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUIwMENCQTFDNkFCMDdF
MDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFH
UyA9ICItZm5vLW9wdGltaXplLXNpYmxpbmctY2FsbHMiOyB9OyB9OwogCQk3OUIwMENCRjFDNkFC
MDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5QjAwQ0JCMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVj
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5
QjE3ODhFMUQzOTlCODAwMEIxQTU2NyAvKiBKSVRNYXRoSUNGb3J3YXJkcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBODk5RkUxRDM4NjEyRTAwRDE4
QzczIC8qIEpJVE1hdGhJQ0ZvcndhcmRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzlCNzU5NzQxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUI3NTk3MTFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9u
LmNwcCAqLzsgfTsKKwkJNzlCNzU5NzUxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJbmZv
cm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5Qjc1OTc2MURG
QTRDNjAwMDUyMTc0QyAvKiBXYXNtUGFnZUNvdW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUI3NTk3MzFERkE0QzYwMDA1MjE3NEMgLyogV2FzbVBh
Z2VDb3VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5QjgxOTkzMUREMjVDRjUwMEREQzcxNCAvKiBKU0dsb2JhbE9iamVjdElubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QjgxOTkyMURE
MjVDRjUwMEREQzcxNCAvKiBKU0dsb2JhbE9iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUM0QjE1RDFCQTIxNThGMDBGRDU5
MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QjFCQTIxNThGMDBG
RDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi87IH07
CiAJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNl
cnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0zODYwLDYgKzM4NjMsOSBAQAogCQk3OUIwMENCOTFDNkFCMDdFMDA4OEM2NUQg
LyogUHJveHlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
cm94eUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QjAwQ0JB
MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQcm94eU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc5QjAwQ0JCMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm94eU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3OUI3NTk3MTFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9y
bWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5Qjc1OTcy
MURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTc5Qjc1OTczMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtUGFnZUNv
dW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21QYWdlQ291bnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlCODE5OTIxREQyNUNGNTAwRERDNzE0IC8q
IEpTR2xvYmFsT2JqZWN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0dsb2JhbE9iamVjdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzlDNEIxNUIxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGl2
ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc5QzRCMTVDMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVBy
ZXNlcnZhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02MDI0LDggKzYwMzAsMTEgQEAKIAkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyog
V2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8sCiAJCQkJNTM1NTU3MTUxRDlERkEzMjAwNkQ1ODNCIC8q
IFdhc21NZW1vcnkuY3BwICovLAogCQkJCTUzNTU1NzEzMUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNt
TWVtb3J5LmggKi8sCisJCQkJNzlCNzU5NzExREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAgKi8sCisJCQkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oICovLAogCQkJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBX
YXNtTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyog
V2FzbU1vZHVsZVBhcnNlci5oICovLAorCQkJCTc5Qjc1OTczMURGQTRDNjAwMDUyMTc0QyAvKiBX
YXNtUGFnZUNvdW50LmggKi8sCiAJCQkJNTNGNDBFOEMxRDU5MDFGMjAwOTlBMUI2IC8qIFdhc21Q
YXJzZXIuaCAqLywKIAkJCQk1MzEzNzRCRTFENUNFOTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3Bw
ICovLAogCQkJCTUzMTM3NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovLApAQCAt
Nzk4Myw2ICs3OTkyLDcgQEAKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OThFRDY3NTFC
RUQ3NjhDMDBERDgwMTcgLyogUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjMzRkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5Qjc1OTc2MURGQTRDNjAwMDUyMTc0QyAvKiBX
YXNtUGFnZUNvdW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0Iy
RTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMTgxNkQw
MkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNB
NDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICov
LApAQCAtODIyMiw2ICs4MjMyLDcgQEAKIAkJCQlCQzAyRTk4RDBFMTgzRTM4MDAwRjkyOTcgLyog
RXJyb3JJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MEYwRTE4MzlEQjAwMEY5
Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxQjFCREEw
OEQxMDAzMzFCODQgLyogRXJyb3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3
OUI3NTk3NTFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NjlBMDc5ODBFRDFEM0FFMDBGMUY2ODEgLyogRGlyZWN0RXZhbENvZGVD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0OTgyMDQxODkxRDBCMDAwODFFNUI4IC8qIEV2
ZW50TG9vcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQzBGRkQxQjE5M0U5ODAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC05NjQ3LDYgKzk2NTgsNyBAQAogCQkJCUMy
RkNBRTEwMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUJhc2ljQmxvY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ4RjIxQUExMDdFQzUzQTAwNDJFQzJDIC8qIEJ5dGVjb2RlR2VuZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwOTRDNERFMUFFNDM5NTMwMDQxQTJFRSAvKiBCeXRl
Y29kZUludHJpbnNpY1JlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5Qjc1OTc0MURG
QTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzJGQ0FFMTIxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOEUwRDFCRjAyNzZDMDAxM0M4OEYgLyogQjNE
YXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUI4MzkyRjFCQUNBRDZBMDA0NEU4
MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw2ICsyOTYsOCBAQCBwdWJs
aWM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDQ0
MQogICAgIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOwogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogdG9wSlNXZWJBc3NlbWJseUluc3RhbmNlOworICAgIHZvaWQqIHdhc21NZW1vcnlQb2ludGVy
OworICAgIHVpbnQzMl90IHdhc21NZW1vcnlTaXplOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVSYXJlRGF0
YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3JTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3
ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBl
IGVtcHR5RXhwcmVzc2lvbiA9IG51bGxwdHI7CiAKLSAgICBCM0lSR2VuZXJhdG9yKE1lbW9yeSos
IFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+Jik7CisgICAgQjNJUkdlbmVyYXRvcihNZW1vcnlJbmZvcm1hdGlvbiYsIFByb2Nl
ZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+Jik7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3Qg
VmVjdG9yPFR5cGU+Jik7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOwpAQCAtMTc5LDcgKzE3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1bmlm
eVZhbHVlc1dpdGhCbG9jayhjb25zdCBFeHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3Vs
dExpc3QmIHN0YWNrKTsKICAgICBWYWx1ZSogemVyb0ZvclR5cGUoVHlwZSk7CiAKLSAgICBNZW1v
cnkqIG1fbWVtb3J5OwogICAgIFByb2NlZHVyZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1f
Y3VycmVudEJsb2NrOwogICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOwpAQCAtMTg5LDkg
KzE4OCw4IEBAIHByaXZhdGU6CiAgICAgVmFsdWUqIG1femVyb1ZhbHVlc1tudW1UeXBlc107CiB9
OwogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1
cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQotICAgIDog
bV9tZW1vcnkobWVtb3J5KQotICAgICwgbV9wcm9jKHByb2NlZHVyZSkKK0IzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKKyAgICA6IG1fcHJvYyhw
cm9jZWR1cmUpCiAgICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzKQogewogICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CkBA
IC0yMTAsMTIgKzIwOCwxMiBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1lbW9yeSog
bWVtCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9tZW1vcnkpIHsKLSAgICAgICAgbV9t
ZW1vcnlCYXNlR1BSID0gbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2lu
dGVyOworICAgIGlmICghIW1lbW9yeSkgeworICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtZW1v
cnkucGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgICAgIG1fcHJvYy5w
aW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOwotICAgICAgICBBU1NFUlQoIW1fbWVtb3J5LT5w
aW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOwotICAgICAgICBt
X21lbW9yeVNpemVHUFIgPSBtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVy
c1swXS5zaXplUmVnaXN0ZXI7Ci0gICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVy
SW5mbyYgaW5mbyA6IG1fbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKQor
ICAgICAgICBBU1NFUlQoIW1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBd
LnNpemVPZmZzZXQpOworICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBtZW1vcnkucGlubmVkUmVn
aXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7CisgICAgICAgIGZvciAoY29u
c3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgaW5mbyA6IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMo
KS5zaXplUmVnaXN0ZXJzKQogICAgICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKGluZm8uc2l6
ZVJlZ2lzdGVyKTsKIAogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkKSB7CkBA
IC02NTksNyArNjU3LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxD
bwogICAgIGRhdGFMb2dMbigiXG4iKTsKIH0KIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21w
aWxhdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgY29uc3QgU2lnbmF0dXJlKiBz
aWduYXR1cmUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtYWluRnVuY3Rpb24sIE1lbW9yeSogbWVt
b3J5KQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYXRlSlNUb1dhc21X
cmFwcGVyKFZNJiB2bSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBtYWluRnVuY3Rpb24sIE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkpCiB7CiAgICAg
UHJvY2VkdXJlIHByb2M7CiAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBwcm9jLmFkZEJsb2NrKCk7
CkBAIC02ODEsMTIgKzY3OSwxMyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9u
PiBjcmVhCiAgICAgLy8gTW92ZSBtZW1vcnkgdmFsdWVzIHRvIHRoZSBhcHByb3JpYXRlIHBsYWNl
cywgaWYgbmVlZGVkLgogICAgIFZhbHVlKiBiYXNlTWVtb3J5ID0gbnVsbHB0cjsKICAgICBWZWN0
b3I8VmFsdWUqPiBzaXplczsKLSAgICBpZiAobWVtb3J5KSB7Ci0gICAgICAgIGJhc2VNZW1vcnkg
PSBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtZW1vcnkt
Pm1lbW9yeSgpKTsKKyAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAgYmFzZU1lbW9yeSA9IGJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDY0LCBPcmlnaW4oKSwK
KyAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksICZ2bS53YXNtTWVtb3J5UG9pbnRlcikpOwogICAgICAgICBWYWx1ZSogc2l6ZSA9IGJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKLSAg
ICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGJpdHdpc2VfY2FzdDxjaGFyKj4obWVtb3J5KSArIE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsK
LSAgICAgICAgc2l6ZXMucmVzZXJ2ZUNhcGFjaXR5KG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCku
c2l6ZVJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9yeS0+
cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykgeworICAgICAgICAgICAgYmxvY2stPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZtLndhc21NZW1vcnlTaXpl
KSk7CisgICAgICAgIHNpemVzLnJlc2VydmVDYXBhY2l0eShtZW1vcnkucGlubmVkUmVnaXN0ZXJz
KCkuc2l6ZVJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IG1lbW9y
eS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKSB7CiAgICAgICAgICAgICBzaXplcy5h
cHBlbmQoYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgc2l6ZSwK
ICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGluZm8uc2l6ZU9mZnNldCkpKTsKICAgICAgICAgfQpAQCAtNzAwLDExICs2OTksMTEg
QEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYQogCiAgICAgLy8gTW92
ZSB0aGUgYXJndW1lbnRzIGludG8gcGxhY2UuCiAgICAgVmFsdWUqIHJlc3VsdCA9IHdhc21DYWxs
aW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChwcm9jLCBibG9jaywgT3JpZ2luKCksIGFyZ3VtZW50
cywgdG9CM1R5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKSwgWyZdIChQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQpIHsKLSAgICAgICAgaWYgKG1lbW9yeSkgewotICAgICAgICAgICAgQVNTRVJU
KHNpemVzLnNpemUoKSA9PSBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMu
c2l6ZSgpKTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVl
KGJhc2VNZW1vcnksIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5iYXNl
TWVtb3J5UG9pbnRlcikpKTsKKyAgICAgICAgaWYgKCEhbWVtb3J5KSB7CisgICAgICAgICAgICBB
U1NFUlQoc2l6ZXMuc2l6ZSgpID09IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0
ZXJzLnNpemUoKSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZShiYXNlTWVtb3J5LCBWYWx1ZVJlcDo6cmVnKG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5i
YXNlTWVtb3J5UG9pbnRlcikpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
Q29uc3RyYWluZWRWYWx1ZShzaXplc1tpXSwgVmFsdWVSZXA6OnJlZyhtZW1vcnktPnBpbm5lZFJl
Z2lzdGVycygpLnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOworICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHNpemVzW2ldLCBWYWx1ZVJl
cDo6cmVnKG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzW2ldLnNpemVSZWdp
c3RlcikpKTsKICAgICAgICAgfQogCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JikgewpAQCAtNzM4LDcgKzczNyw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRp
b24+IGNyZWEKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHBy
b2MpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+IHBhcnNlQW5k
Q29tcGlsZShWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5j
dGlvbkxlbmd0aCwgTWVtb3J5KiBtZW1vcnksIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBj
b25zdCBGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5kZXhTcGFjZSwgdW5zaWduZWQgb3B0
TGV2ZWwpCitzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+IHBhcnNlQW5kQ29t
cGlsZShWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgY29uc3QgU2lnbmF0dXJlKiBzaWdu
YXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIGNvbnN0IEZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCB1bnNp
Z25lZCBvcHRMZXZlbCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8V2Fz
bUludGVybmFsRnVuY3Rpb24+KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsOSArMzUsOSBAQCBleHRlcm4gIkMiIHZvaWQgZHVtcFByb2NlZHVyZSh2b2lkKik7CiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLWNsYXNzIE1lbW9yeTsKK2NsYXNzIE1l
bW9yeUluZm9ybWF0aW9uOwogCi1zdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rpb24+
IHBhcnNlQW5kQ29tcGlsZShWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIE1lbW9yeSosIGNv
bnN0IFNpZ25hdHVyZSosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IEZ1
bmN0aW9uSW5kZXhTcGFjZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitzdGQ6OnVuaXF1ZV9w
dHI8V2FzbUludGVybmFsRnVuY3Rpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYsIGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QsIE1lbW9yeUluZm9ybWF0aW9uJiwgY29uc3QgU2lnbmF0dXJlKiwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiwgdW5z
aWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAJKHJldmlzaW9uIDIw
OTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw4ICszMyw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKLU1vZHVsZUluZm9ybWF0aW9uOjp+TW9kdWxlSW5mb3JtYXRpb24oKSB7IH0KLQog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJldmlzaW9u
IDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtT3Bz
LmgiCisjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC05NSw4ICs5Nyw2IEBAIHN0cnVjdCBJbXBvcnQgewogICAg
IHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29ycmVz
cG9uZGluZyBraW5kLgogfTsKIAotY2xhc3MgTWVtb3J5OwotCiBzdHJ1Y3QgRXhwb3J0IHsKICAg
ICBJZGVudGlmaWVyIGZpZWxkOwogICAgIEV4dGVybmFsOjpLaW5kIGtpbmQ7CkBAIC0xMTksMTMg
KzExOSwxMCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gewogICAgIFZlY3RvcjxJbXBvcnQ+
IGltcG9ydHM7CiAgICAgVmVjdG9yPFNpZ25hdHVyZSo+IGltcG9ydEZ1bmN0aW9uczsKICAgICAv
LyBGSVhNRSBpbXBsZW1lbnQgaW1wb3J0IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQxMzUKLSAgICAvLyBGSVhNRSBpbXBsZW1lbnQgaW1wb3J0IE1lbW9y
eSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CiAgICAgLy8g
RklYTUUgaW1wbGVtZW50IGltcG9ydCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDEzMwogICAgIFZlY3RvcjxTaWduYXR1cmUqPiBpbnRlcm5hbEZ1bmN0
aW9uU2lnbmF0dXJlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiBtZW1vcnk7CisgICAg
TWVtb3J5SW5mb3JtYXRpb24gbWVtb3J5OwogICAgIFZlY3RvcjxFeHBvcnQ+IGV4cG9ydHM7Ci0K
LSAgICB+TW9kdWxlSW5mb3JtYXRpb24oKTsKIH07CiAKIHN0cnVjdCBVbmxpbmtlZFdhc21Ub1dh
c21DYWxsIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3Bw
CShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDE4IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLU1lbW9yeTo6TWVtb3J5KHVpbnQzMl90IHN0YXJ0aW5n
U2l6ZSwgdWludDMyX3QgY2FwYWNpdHksIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNp
emVSZWdpc3RlcnMpCitNZW1vcnk6Ok1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50
IG1heGltdW0pCiAgICAgOiBtX21vZGUoTW9kZTo6Qm91bmRzQ2hlY2tpbmcpCi0gICAgLCBtX3Np
emUoc3RhcnRpbmdTaXplKQotICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKKyAgICAsIG1fc2l6
ZShpbml0aWFsLmJ5dGVzKCkpCisgICAgLCBtX2NhcGFjaXR5KG1heGltdW0gPyBtYXhpbXVtLmJ5
dGVzKCkgOiBQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCkpCisgICAgLCBtX2luaXRpYWwoaW5pdGlh
bCkKKyAgICAsIG1fbWF4aW11bShtYXhpbXVtKQogICAgIC8vIEZJWE1FOiBJZiB3ZSBhZGQgc2ln
bmFsIGJhc2VkIGJvdW5kcyBjaGVja2luZyB0aGVuIHdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIG92
ZXJmbG93IG9uIGxvYWQuCiAgICAgLy8gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNjkzCi0gICAgLCBtX21hcHBlZENhcGFjaXR5KHN0YXRpY19jYXN0PHVp
bnQ2NF90PihtYXhQYWdlQ291bnQpICogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHBhZ2VTaXplKSkK
KyAgICAsIG1fbWFwcGVkQ2FwYWNpdHkoUGFnZUNvdW50OjptYXgoKS5ieXRlcygpKQogeworICAg
IFJFTEVBU0VfQVNTRVJUKCFtYXhpbXVtIHx8IG1heGltdW0gPj0gaW5pdGlhbCk7IC8vIFRoaXMg
c2hvdWxkIGJlIGdhdWFyYW50ZWVkIGJ5IG91ciBjYWxsZXIuCisKICAgICBBU1NFUlQocGlubmVk
U2l6ZVJlZ2lzdGVycy5zaXplKCkgPiAwKTsKIAogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBu
aWNlIGlmIHdlIGhhZCBhIFZNIHRhZyBmb3Igd2FzbSBtZW1vcnkuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2MDAKQEAgLTUwLDI1ICs1NCwxMiBAQCBNZW1vcnk6
Ok1lbW9yeSh1aW50MzJfdCBzdGFydGluZ1NpemUsIHVpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgQVNTRVJUKHN0YXJ0aW5nU2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKLSAg
ICBpZiAobXByb3RlY3QocmVzdWx0LCBzdGFydGluZ1NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJ
VEUpKSB7CisgICAgQVNTRVJUKG1fc2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKKyAgICBpZiAo
bXByb3RlY3QocmVzdWx0LCBtX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CiAgICAg
ICAgIG11bm1hcChyZXN1bHQsIG1fbWFwcGVkQ2FwYWNpdHkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6
ZVJlZ2lzdGVycy5zaXplKCkgKyAxOwotICAgIGpzY0NhbGxpbmdDb252ZW50aW9uKCkubV9jYWxs
ZWVTYXZlUmVnaXN0ZXJzLmZvckVhY2goWyZdIChSZWcgcmVnKSB7Ci0gICAgICAgIEdQUlJlZyBn
cHIgPSByZWcuZ3ByKCk7Ci0gICAgICAgIGlmICghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzIHx8
IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLmdldChyZWcpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAocmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID09IDEpIHsKLSAgICAg
ICAgICAgIG1fcGlubmVkUmVnaXN0ZXJzLmJhc2VNZW1vcnlQb2ludGVyID0gZ3ByOwotICAgICAg
ICAgICAgcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzLS07Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbV9waW5uZWRSZWdpc3RlcnMuc2l6ZVJlZ2lzdGVycy5hcHBlbmQoeyBncHIsIHBpbm5l
ZFNpemVSZWdpc3RlcnNbLS1yZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgLSAxXSB9KTsKLSAgICB9
KTsKLQotICAgIEFTU0VSVCghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzKTsKICAgICBtX21lbW9y
eSA9IHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuaAkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyOCArMjcsMTIgQEAKIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2lu
Y2x1ZGUgIldhc21QYWdlQ291bnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotc3RydWN0IFBpbm5lZFNpemVSZWdpc3Rl
ckluZm8gewotICAgIEdQUlJlZyBzaXplUmVnaXN0ZXI7Ci0gICAgdW5zaWduZWQgc2l6ZU9mZnNl
dDsKLX07Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9y
eSBzaXplIHJlZ2lzdGVyLiBSaWdodCBub3cgd2UgdGFrZSBhIHZlY3RvciB3aXRoIG9ubHkgb25l
Ci0vLyBlbnRyeS4gU3BlY2lmaWNhbGx5IGFuIGVudHJ5IHdoZXJlIHRoZSBzaXplT2Zmc2V0ID09
IDAuIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lzdGVyLAotLy8gd2UgY2FuIGhh
dmUgb25lIGZvciBlYWNoIGxvYWQgc2l6ZSBjbGFzcy4gc2VlOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCi1zdHJ1Y3QgUGlubmVkUmVnaXN0ZXJJbmZvIHsK
LSAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKLSAgICBH
UFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Ci19OwotCi1jb25zdGV4cHIgdWludDMyX3QgcGFnZVNp
emUgPSA2NCAqIEtCOwotY29uc3RleHByIHVpbnQzMl90IG1heFBhZ2VDb3VudCA9IHN0YXRpY19j
YXN0PHVpbnQzMl90PigoMXVsbCA8PCAzMikgLyBwYWdlU2l6ZSk7Ci0KIGNsYXNzIE1lbW9yeSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTU5LDggKzQzLDcgQEAgcHVibGljOgogICAgICAgICBCb3VuZHNDaGVja2lu
ZwogICAgIH07CiAKLSAgICBNZW1vcnkoKSA9IGRlZmF1bHQ7Ci0gICAgTWVtb3J5KHVpbnQzMl90
IHN0YXJ0aW5nU2l6ZSwgdWludDMyX3QgY2FwYWNpdHksIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4m
IHBpbm5lZFNpemVSZWdpc3RlcnMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeShQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0pOwogCiAgICAgfk1lbW9yeSgpCiAgICAg
ewpAQCAtNzAsMTAgKzUzLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWVtb3J5OyB9CiAgICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQotICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVnaXN0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdpc3RlcnM7IH0KIAogICAgIE1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogCisgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25z
dCB7IHJldHVybiBtX2luaXRpYWw7IH0KKyAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4aW11bTsgfQorCiAgICAgYm9vbCBncm93KHVpbnQzMl90IG5ld1NpemUpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9tZW1vcnkpOwpAQCAtODQsMTMgKzY5LDE1IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihNZW1vcnksIG1fc2l6ZSk7IH0KKwogICAgIAogcHJpdmF0ZToKICAg
ICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKLSAgICBQaW5uZWRSZWdpc3RlckluZm8gbV9w
aW5uZWRSZWdpc3RlcnM7CiAgICAgTW9kZSBtX21vZGU7CiAgICAgdWludDMyX3QgbV9zaXplIHsg
MCB9OwogICAgIHVpbnQzMl90IG1fY2FwYWNpdHkgeyAwIH07CisgICAgUGFnZUNvdW50IG1faW5p
dGlhbDsKKyAgICBQYWdlQ291bnQgbV9tYXhpbXVtOwogICAgIHVpbnQ2NF90IG1fbWFwcGVkQ2Fw
YWNpdHkgeyAwIH07CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWVtb3J5SW5mb3JtYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlJbmZv
cm1hdGlvbi5oIgorCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisK
K01lbW9yeUluZm9ybWF0aW9uOjpNZW1vcnlJbmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0sICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwaW5uZWRTaXplUmVn
aXN0ZXJzLCBib29sIGlzSW1wb3J0KQorICAgIDogbV9pbml0aWFsKGluaXRpYWwpCisgICAgLCBt
X21heGltdW0obWF4aW11bSkKKyAgICAsIG1faXNJbXBvcnQoaXNJbXBvcnQpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoISFtX2luaXRpYWwpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX21heGltdW0g
fHwgbV9tYXhpbXVtID49IG1faW5pdGlhbCk7CisgICAgQVNTRVJUKCEhKnRoaXMpOworCisgICAg
dW5zaWduZWQgcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6ZVJlZ2lzdGVycy5z
aXplKCkgKyAxOworICAgIGpzY0NhbGxpbmdDb252ZW50aW9uKCkubV9jYWxsZWVTYXZlUmVnaXN0
ZXJzLmZvckVhY2goWyZdIChSZWcgcmVnKSB7CisgICAgICAgIEdQUlJlZyBncHIgPSByZWcuZ3By
KCk7CisgICAgICAgIGlmICghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzIHx8IFJlZ2lzdGVyU2V0
OjpzdGFja1JlZ2lzdGVycygpLmdldChyZWcpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAocmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzID09IDEpIHsKKyAgICAgICAgICAgIG1fcGlu
bmVkUmVnaXN0ZXJzLmJhc2VNZW1vcnlQb2ludGVyID0gZ3ByOworICAgICAgICAgICAgcmVtYWlu
aW5nUGlubmVkUmVnaXN0ZXJzLS07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9waW5u
ZWRSZWdpc3RlcnMuc2l6ZVJlZ2lzdGVycy5hcHBlbmQoeyBncHIsIHBpbm5lZFNpemVSZWdpc3Rl
cnNbLS1yZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgLSAxXSB9KTsKKyAgICB9KTsKKworICAgIEFT
U0VSVCghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNv
dW50LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20geworCitzdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7CisgICAgR1BSUmVn
IHNpemVSZWdpc3RlcjsKKyAgICB1bnNpZ25lZCBzaXplT2Zmc2V0OworfTsKKworLy8gRklYTUU6
IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIuIFJp
Z2h0IG5vdyB3ZSB0YWtlIGEgdmVjdG9yIHdpdGggb25seSBvbmUKKy8vIGVudHJ5LiBTcGVjaWZp
Y2FsbHkgYW4gZW50cnkgd2hlcmUgdGhlIHNpemVPZmZzZXQgPT0gMC4gSWYgd2UgaGF2ZSBtb3Jl
IHRoYW4gb25lIHNpemUgcmVnaXN0ZXIsCisvLyB3ZSBjYW4gaGF2ZSBvbmUgZm9yIGVhY2ggbG9h
ZCBzaXplIGNsYXNzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI5NTIKK3N0cnVjdCBQaW5uZWRSZWdpc3RlckluZm8geworICAgIFZlY3RvcjxQaW5uZWRT
aXplUmVnaXN0ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOworICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9p
bnRlcjsKK307CisKK2NsYXNzIE1lbW9yeUluZm9ybWF0aW9uIHsKK3B1YmxpYzoKKyAgICBNZW1v
cnlJbmZvcm1hdGlvbigpCisgICAgeworICAgICAgICBBU1NFUlQoISp0aGlzKTsKKyAgICB9CisK
KyAgICBNZW1vcnlJbmZvcm1hdGlvbihQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGlt
dW0sIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMsIGJvb2wgaXNJ
bXBvcnQpOworCisgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdpc3RlcnMo
KSBjb25zdCB7IHJldHVybiBtX3Bpbm5lZFJlZ2lzdGVyczsgfQorICAgIFBhZ2VDb3VudCBpbml0
aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CisgICAgUGFnZUNvdW50IG1heGltdW0o
KSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKyAgICBib29sIGlzSW1wb3J0KCkgY29uc3Qg
eyByZXR1cm4gbV9pc0ltcG9ydDsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9pbml0aWFsOyB9CisKK3ByaXZhdGU6CisgICAgUGFnZUNvdW50IG1f
aW5pdGlhbCB7IH07CisgICAgUGFnZUNvdW50IG1fbWF4aW11bSB7IH07CisgICAgUGlubmVkUmVn
aXN0ZXJJbmZvIG1fcGlubmVkUmVnaXN0ZXJzIHsgfTsKKyAgICBib29sIG1faXNJbXBvcnQgeyBm
YWxzZSB9OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVO
QUJMRShXQVNNKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3
IEBACiAKICNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21Gb3Jt
YXQuaCIKLSNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9y
bWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21TZWN0aW9ucy5o
IgogCkBAIC0yNTYsNyArMjU2LDkgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6Ok1l
bW9yeTogewotICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDEzNAorICAgICAgICAgICAgYm9vbCBpc0ltcG9ydCA9IHRydWU7Cisg
ICAgICAgICAgICBpZiAoIXBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEV4dGVybmFsOjpHbG9iYWw6IHsKQEAgLTMwNSwzNiArMzA3LDU5IEBAIGJvb2wgTW9k
dWxlUGFyc2VyOjpwYXJzZVRhYmxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeUhl
bHBlcihib29sIGlzSW1wb3J0KQogewotICAgIHVpbnQ4X3QgY291bnQ7Ci0gICAgaWYgKCFwYXJz
ZVZhclVJbnQxKGNvdW50KSkKKyAgICAvLyBXZSBkb24ndCBhbGxvdyByZWRlY2xhcmluZyBtZW1v
cnkuIEVpdGhlciB2aWEgaW1wb3J0IG9yIGRlZmluaXRpb24uCisgICAgaWYgKG1fbW9kdWxlLT5t
ZW1vcnkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghY291bnQpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCiAgICAgdWludDhfdCBmbGFnczsKLSAgICB1aW50MzJfdCBzaXplOwot
ICAgIGlmICghcGFyc2VWYXJVSW50MShmbGFncykKLSAgICAgICAgfHwgIXBhcnNlVmFyVUludDMy
KHNpemUpCi0gICAgICAgIHx8IHNpemUgPiBtYXhQYWdlQ291bnQpCisgICAgaWYgKCFwYXJzZVZh
clVJbnQxKGZsYWdzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdWludDMyX3QgY2Fw
YWNpdHkgPSBtYXhQYWdlQ291bnQ7CisgICAgdWludDMyX3QgaW5pdGlhbDsKKyAgICBpZiAoIXBh
cnNlVmFyVUludDMyKGluaXRpYWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IVBhZ2VDb3VudDo6aXNWYWxpZChpbml0aWFsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUGFnZUNvdW50IGluaXRpYWxQYWdlQ291bnQoaW5pdGlhbCk7CisKKyAgICBQYWdlQ291bnQg
bWF4aW11bVBhZ2VDb3VudDsKICAgICBpZiAoZmxhZ3MpIHsKLSAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihjYXBhY2l0eSkKLSAgICAgICAgICAgIHx8IHNpemUgPiBjYXBhY2l0eQotICAgICAg
ICAgICAgfHwgY2FwYWNpdHkgPiBtYXhQYWdlQ291bnQpCisgICAgICAgIHVpbnQzMl90IG1heGlt
dW07CisgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIobWF4aW11bSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFQYWdlQ291bnQ6OmlzVmFsaWQobWF4aW11bSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCi0gICAgY2FwYWNpdHkgKj0gcGFn
ZVNpemU7Ci0gICAgc2l6ZSAqPSBwYWdlU2l6ZTsKKyAgICAgICAgbWF4aW11bVBhZ2VDb3VudCA9
IFBhZ2VDb3VudChtYXhpbXVtKTsKKyAgICAgICAgaWYgKGluaXRpYWxQYWdlQ291bnQgPiBtYXhp
bXVtUGFnZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gcGlubmVkU2l6ZXMgPSB7IDAgfTsKLSAgICBtX21vZHVsZS0+bWVtb3J5
ID0gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnk+KHNpemUsIGNhcGFjaXR5LCBwaW5uZWRTaXplcyk7
Ci0gICAgcmV0dXJuIG1fbW9kdWxlLT5tZW1vcnktPm1lbW9yeSgpOworICAgIG1fbW9kdWxlLT5t
ZW1vcnkgPSBNZW1vcnlJbmZvcm1hdGlvbihpbml0aWFsUGFnZUNvdW50LCBtYXhpbXVtUGFnZUNv
dW50LCBwaW5uZWRTaXplcywgaXNJbXBvcnQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnkoKQoreworICAgIHVpbnQ4X3QgY291bnQ7CisgICAg
aWYgKCFwYXJzZVZhclVJbnQxKGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFjb3VudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBXZSBvbmx5IGFsbG93
IG9uZSBtZW1vcnkgZm9yIG5vdy4KKyAgICBpZiAoY291bnQgIT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYm9vbCBpc0ltcG9ydCA9IGZhbHNlOworICAgIHJldHVybiBwYXJzZU1l
bW9yeUhlbHBlcihpc0ltcG9ydCk7CiB9CiAKIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2Jh
bCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5oCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgcHJpdmF0ZToK
ICAgICBGT1JfRUFDSF9XQVNNX1NFQ1RJT04oV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSKQog
I3VuZGVmIFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUgogCisgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gcGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CisKICAgICBWTSogbV92
bTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlOwogICAg
IEZ1bmN0aW9uSW5kZXhTcGFjZSBtX2Z1bmN0aW9uSW5kZXhTcGFjZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgUGFnZUNvdW50IHsKKworcHVibGljOgor
ICAgIFBhZ2VDb3VudCgpCisgICAgICAgIDogbV9wYWdlQ291bnQoVUlOVF9NQVgpCisgICAgewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KG1heFBhZ2VDb3VudCA8IFVJTlRfTUFYLCAiV2UgcmVseSBv
biB0aGlzIGhlcmUuIik7CisgICAgfQorCisgICAgUGFnZUNvdW50KHVpbnQzMl90IHBhZ2VDb3Vu
dCkKKyAgICAgICAgOiBtX3BhZ2VDb3VudChwYWdlQ291bnQpCisgICAgeyB9CisKKyAgICBzaXpl
X3QgYnl0ZXMoKSB7IHJldHVybiBtX3BhZ2VDb3VudCAqIHBhZ2VTaXplOyB9CisKKyAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkKHVpbnQzMl90IHBhZ2VDb3VudCkKKyAgICB7CisgICAgICAgIHJldHVy
biBwYWdlQ291bnQgPD0gbWF4UGFnZUNvdW50OworICAgIH0KKworICAgIHN0YXRpYyBQYWdlQ291
bnQgbWF4KCkKKyAgICB7CisgICAgICAgIHJldHVybiBQYWdlQ291bnQobWF4UGFnZUNvdW50KTsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3BhZ2VDb3VudCAhPSBVSU5UX01BWDsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yPChjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDb3Vu
dCA8IG90aGVyLm1fcGFnZUNvdW50OyB9CisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgUGFnZUNv
dW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wYWdlQ291bnQgPiBvdGhlci5tX3BhZ2VDb3Vu
dDsgfQorICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX3BhZ2VDb3VudCA+PSBvdGhlci5tX3BhZ2VDb3VudDsgfQorCitwcml2YXRlOgor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgcGFnZVNpemUgPSA2NCAqIEtCOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbWF4UGFnZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KCgxdWxsIDw8IDMyKSAvIHBhZ2VTaXplKTsKKworICAgIHVpbnQzMl90IG1fcGFnZUNvdW50
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShX
QVNNKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkocmV2aXNp
b24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBQbGFuOjpydW4oKQogICAgICAg
ICB9CiAKICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMudW5jaGVja2VkQXBwZW5kKFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpKTsKLSAgICAgICAgbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgZnVuY3Rpb25T
dGFydCwgZnVuY3Rpb25MZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5nZXQoKSwg
c2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy5hdChmdW5jdGlvbkluZGV4KSwgbV9m
dW5jdGlvbkluZGV4U3BhY2UpKTsKKyAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMudW5j
aGVja2VkQXBwZW5kKHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rp
b25MZW5ndGgsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeSwgc2lnbmF0dXJlLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscy5hdChmdW5jdGlvbkluZGV4KSwgbV9mdW5jdGlvbkluZGV4U3BhY2Up
KTsKICAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2VbZnVuY3Rpb25JbmRleFNwYWNlXS5jb2Rl
ID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmNvZGUtPmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtUGxhbi5oCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw2IEBAIGNsYXNzIEpT
V2ViQXNzZW1ibHlDYWxsZWU7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgTWVtb3J5Owot
CiBjbGFzcyBQbGFuIHsKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBQbGFuKFZNKiwg
VmVjdG9yPHVpbnQ4X3Q+KTsKQEAgLTY3LDE3ICs2NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5leHBvcnRzOwogICAgIH0KIAotICAgIGNvbnN0IE1l
bW9yeSogbWVtb3J5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWls
ZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkuZ2V0KCk7
Ci0gICAgfQotCiAgICAgc2l6ZV90IGludGVybmFsRnVuY3Rpb25Db3VudCgpIGNvbnN0CiAgICAg
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwogICAgICAgICByZXR1cm4gbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOwogICAgIH0KKwogICAgIEIzOjpDb21waWxhdGlv
bioganNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oc2l6ZV90IGkpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoaSA+IG1fd2FzbVRvSlNTdHVicy5zaXplKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1l
bnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC03OCw2ICs3OSw3IEBAIHZvaWQgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmUKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X21vZHVsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlTmFtZXNw
YWNlT2JqZWN0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tZW1vcnkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUltcG9ydEZ1bmN0
aW9uczsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5j
dGlvbihpKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKK2NsYXNzIEpTV2Vi
QXNzZW1ibHlNZW1vcnk7CiAKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA6IHB1YmxpYyBK
U0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CkBAIC02NywzMCArNjgsMzQgQEAgcHVibGlj
OgogICAgICAgICBpbXBvcnRGdW5jdGlvbihpZHgpLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFy
cmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOwotICAgIH0KKyAg
ICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsg
fQorICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVtb3J5
KSB7IG1fbWVtb3J5LnNldCh2bSwgdGhpcywgbWVtb3J5KTsgfQogCiAgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHVuc2lnbmVkIGlkeCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0Nl
bGw+KSAqIGlkeDsKICAgICB9CiAKLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVu
c2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBvZmZzZXRP
ZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIG51bUlt
cG9ydEZ1bmN0aW9uczsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1bGUqLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCopOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCisgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZkltcG9ydEZ1bmN0aW9ucygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPik+KHNpemVvZihKU1dlYkFz
c2VtYmx5SW5zdGFuY2UpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25T
aXplKHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAq
IG51bUltcG9ydEZ1bmN0aW9uczsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVy
PEpTV2ViQXNzZW1ibHlNb2R1bGU+IG1fbW9kdWxlOwogICAgIFdyaXRlQmFycmllcjxKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CisgICAgV3JpdGVCYXJy
aWVyPEpTV2ViQXNzZW1ibHlNZW1vcnk+IG1fbWVtb3J5OwogICAgIHVuc2lnbmVkIG1fbnVtSW1w
b3J0RnVuY3Rpb25zOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHJldmlzaW9uIDIwOTU4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTYgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5o
IgorCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNXZWJBc3NlbWJseU1lbW9yeSogSlNXZWJBc3NlbWJs
eU1lbW9yeTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitjb25zdCBDbGFz
c0luZm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTWVtb3J5
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TWVt
b3J5KSB9OworCitKU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1l
bW9yeT4mJiBtZW1vcnkpCiB7Ci0gICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TWVtb3J5Pih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1l
bW9yeSh2bSwgc3RydWN0dXJlKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5
TWVtb3J5KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUobWVtb3J5KSk7CiAgICAgaW5zdGFuY2UtPmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC00NCwxMSArNDks
MjggQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGVTdAogICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJs
eU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorSlNXZWJBc3NlbWJseU1lbW9yeTo6SlNXZWJBc3NlbWJseU1lbW9yeShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkK
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fbWVtb3J5KFdURk1vdmUobWVtb3J5
KSkKIHsKIH0KIAorSlNBcnJheUJ1ZmZlciogSlNXZWJBc3NlbWJseU1lbW9yeTo6YnVmZmVyKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBpZiAobV9idWZmZXJX
cmFwcGVyKQorICAgICAgICByZXR1cm4gbV9idWZmZXJXcmFwcGVyLmdldCgpOworCisgICAgYXV0
byBkZXN0cnVjdG9yID0gW10gKHZvaWQqKSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
ZG8gYW55dGhpbmcgaGVyZSB0byBkZXN0cm95IHRoZSBtZW1vcnkuCisgICAgICAgIC8vIFRoZSBB
cnJheUJ1ZmZlciBiYWNraW5nIHRoZSBKU0FycmF5QnVmZmVyIGlzIG9ubHkgb3duZWQgYnkgdXMs
CisgICAgICAgIC8vIHNvIHdlIGd1YXJhbnRlZSBpdHMgbGlmZWN5bGNlLgorICAgIH07CisgICAg
bV9idWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlRnJvbUJ5dGVzKG1lbW9yeSgpLT5tZW1vcnko
KSwgbWVtb3J5KCktPnNpemUoKSwgV1RGTW92ZShkZXN0cnVjdG9yKSk7CisgICAgbV9idWZmZXJX
cmFwcGVyLnNldCh2bSwgdGhpcywgSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QtPm1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUuZ2V0KCksIG1fYnVmZmVyLmdldCgpKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9idWZmZXJXcmFwcGVyKTsKKyAgICByZXR1cm4gbV9idWZmZXJXcmFw
cGVyLmdldCgpOworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CkBAIC02NiwxMCArODgs
OSBAQCB2b2lkIEpTV2ViQXNzZW1ibHlNZW1vcnk6OnZpc2l0Q2hpbGRyZW4oCiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9idWZmZXJXcmFwcGVyKTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlNZW1vcnk6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1lbW9yeSIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseU1lbW9yeSkgfTsKLQogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9y
eS5oCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIzICsyOSwzNSBAQAog
CiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBBcnJheUJ1ZmZlcjsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7
CisKIGNsYXNzIEpTV2ViQXNzZW1ibHlNZW1vcnkgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAot
ICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsK
KyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1lbW9yeSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwg
c3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4mJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERF
Q0xBUkVfSU5GTzsKIAorICAgIFdhc206Ok1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1v
cnkuZ2V0KCk7IH0KKyAgICBKU0FycmF5QnVmZmVyKiBidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCopOworCiBwcm90ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVj
dHVyZSopOworICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVu
aXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKKyAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4g
bV9idWZmZXJXcmFwcGVyOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXI7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDk1ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEyIEBACiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUg
IkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUuaCIKICNpbmNsdWRlICJW
TS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC05MCw2ICs5MiwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgICAgIGFyZ0NvdW50ID0gYm94ZWRBcmdzLnNpemUo
KTsKICAgICB9CiAKKyAgICAvLyBTZXR1cCB0aGUgbWVtb3J5IHRoYXQgdGhlIGVudHJhbmNlIGxv
YWRzLgorICAgIGlmIChKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSB3YXNtRnVuY3Rpb24t
Pmluc3RhbmNlKCktPm1lbW9yeSgpKSB7CisgICAgICAgIFdhc206Ok1lbW9yeSogd2FzbU1lbW9y
eSA9IG1lbW9yeS0+bWVtb3J5KCk7CisgICAgICAgIHZtLndhc21NZW1vcnlQb2ludGVyID0gd2Fz
bU1lbW9yeS0+bWVtb3J5KCk7CisgICAgICAgIHZtLndhc21NZW1vcnlTaXplID0gd2FzbU1lbW9y
eS0+c2l6ZSgpOworICAgIH0KKwogICAgIC8vIE5vdGU6IHdlIHNwZWNpZmljYWxseSB1c2UgdGhl
IFdlYkFzc2VibHlGdW5jdGlvbiBhcyB0aGUgY2FsbGVlIHRvIGJlZ2luIHdpdGggaW4gdGhlIFBy
b3RvQ2FsbEZyYW1lLgogICAgIC8vIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBjYWxsaW5n
IGludG8gdGhlIGxsaW50IG1heSBzdGFjayBvdmVyZmxvdywgYW5kIHRoZSBzdGFjayBvdmVyZmxv
dwogICAgIC8vIGhhbmRsZXIgbWlnaHQgcmVhZCB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHRoZSBj
YWxsZWUuIFRoZSBKU1dlYkFzc2VtYmx5Q2FsbGVlIGRvZXNuJ3QgaGF2ZSBhCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU01vZHVsZUVudmly
b25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5
LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5RnVuY3Rpb24uaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlUHJvdG90eXBlLmgi
CkBAIC01MSw2NCArNTIsNjYgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdAogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogZ2xvYmFsT2Jq
ZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCiAg
ICAgLy8gSWYgbW9kdWxlT2JqZWN0IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1vZHVsZSBpbnN0YW5j
ZSwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9k
dWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oc3RhdGUtPmFyZ3VtZW50
KDApKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBqc01vZHVsZSA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWJBc3NlbWJseU1vZHVsZSo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIWpzTW9k
dWxlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRl
LCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoImZpcnN0IGFyZ3Vt
ZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUi
KSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHN0YXRlLT5hcmd1
bWVudCgwKSkpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
Zmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2Vt
Ymx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUo
ZXhlYy0+YXJndW1lbnQoMCkpKSkpOwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9u
JiBtb2R1bGVJbmZvcm1hdGlvbiA9IGpzTW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOwogCiAg
ICAgLy8gSWYgdGhlIGltcG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQg
VHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4K
LSAgICBKU1ZhbHVlIGltcG9ydEFyZ3VtZW50ID0gc3RhdGUtPmFyZ3VtZW50KDEpOworICAgIEpT
VmFsdWUgaW1wb3J0QXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICBKU09iamVjdCog
aW1wb3J0T2JqZWN0ID0gaW1wb3J0QXJndW1lbnQuZ2V0T2JqZWN0KCk7CiAgICAgaWYgKCFpbXBv
cnRBcmd1bWVudC5pc1VuZGVmaW5lZCgpICYmICFpbXBvcnRPYmplY3QpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBl
RXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5
Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIpLCBkZWZhdWx0U291cmNl
QXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1lbnQpKSkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoInNlY29uZCBhcmd1bWVudCB0byBX
ZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QiKSwgZGVm
YXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkp
KTsKIAogICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5vdCBlbXB0eSBh
bmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93
bi4KICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkgJiYgIWltcG9ydE9i
amVjdCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0
ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJn
dW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBPYmplY3QgYmVjYXVzZSB0aGUg
V2ViQXNzZW1ibHkuTW9kdWxlIGhhcyBpbXBvcnRzIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwg
cnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5
Lkluc3RhbmNlIG11c3QgYmUgT2JqZWN0IGJlY2F1c2UgdGhlIFdlYkFzc2VtYmx5Lk1vZHVsZSBo
YXMgaW1wb3J0cyIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUo
aW1wb3J0QXJndW1lbnQpKSkpOwogCiAgICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBJZGVudGlm
aWVyOjpmcm9tVWlkKFByaXZhdGVOYW1lKFByaXZhdGVOYW1lOjpEZXNjcmlwdGlvbiwgIldlYkFz
c2VtYmx5SW5zdGFuY2UiKSk7Ci0gICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJl
Y29yZCA9IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpjcmVhdGUoc3RhdGUsIHZtLCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwgbW9k
dWxlSW5mb3JtYXRpb24pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCA9IFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgU3RydWN0dXJlKiBp
bnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlJ
bnN0YW5jZVN0cnVjdHVyZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworICAgIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpj
cmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2Jq
ZWN0LT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKIAotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1
cmUsIGpzTW9kdWxlLCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShzdGF0ZSksIG1v
ZHVsZUluZm9ybWF0aW9uLmltcG9ydHMuc2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UgPSBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIGpzTW9kdWxl
LCBtb2R1bGVSZWNvcmQtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKSwgbW9kdWxlSW5mb3JtYXRp
b24uaW1wb3J0cy5zaXplKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKIAogICAgIC8vIExldCBmdW5jcywgbWVtb3JpZXMgYW5kIHRhYmxlcyBiZSBpbml0aWFs
bHktZW1wdHkgbGlzdHMgb2YgY2FsbGFibGUgSmF2YVNjcmlwdCBvYmplY3RzLCBXZWJBc3NlbWJs
eS5NZW1vcnkgb2JqZWN0cyBhbmQgV2ViQXNzZW1ibHkuVGFibGUgb2JqZWN0cywgcmVzcGVjdGl2
ZWx5LgogICAgIC8vIExldCBpbXBvcnRzIGJlIGFuIGluaXRpYWxseS1lbXB0eSBsaXN0IG9mIGV4
dGVybmFsIHZhbHVlcy4KICAgICB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMgPSAwOwogCiAg
ICAgLy8gRklYTUUgaW1wbGVtZW50IFRhYmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjQxMzUKLSAgICAvLyBGSVhNRSBpbXBsZW1lbnQgTWVtb3J5IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKICAgICAvLyBGSVhNRSBpbXBs
ZW1lbnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQx
MzMKIAorICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7CiAgICAgLy8gRm9yIGVhY2gg
aW1wb3J0IGkgaW4gbW9kdWxlLmltcG9ydHM6CiAgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7CiAgICAgICAgIC8vIDEuIExldCBvIGJlIHRoZSByZXN1
bHRhbnQgdmFsdWUgb2YgcGVyZm9ybWluZyBHZXQoaW1wb3J0T2JqZWN0LCBpLm1vZHVsZV9uYW1l
KS4KLSAgICAgICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVjdC0+Z2V0
KHN0YXRlLCBpbXBvcnQubW9kdWxlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICAgICAgSlNWYWx1ZSBpbXBvcnRNb2R1bGVWYWx1ZSA9IGltcG9ydE9iamVj
dC0+Z2V0KGV4ZWMsIGltcG9ydC5tb2R1bGUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CiAgICAgICAgIC8vIDIuIElmIFR5cGUobykgaXMgbm90IE9iamVj
dCwgdGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAgIGlmICghaW1wb3J0TW9kdWxlVmFsdWUuaXNP
YmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRp
b24oc3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiaW1w
b3J0IG11c3QgYmUgYW4gb2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5
cGVGb3JWYWx1ZShpbXBvcnRNb2R1bGVWYWx1ZSkpKSk7CisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBtdXN0IGJlIGFuIG9iamVjdCIpLCBkZWZh
dWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0TW9kdWxlVmFsdWUp
KSkpOworCiAgICAgICAgIC8vIDMuIExldCB2IGJlIHRoZSB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdl
dChvLCBpLml0ZW1fbmFtZSkKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGltcG9ydE1vZHVsZVZhbHVlKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVj
dC0+Z2V0KHN0YXRlLCBpbXBvcnQuZmllbGQpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywg
aW1wb3J0LmZpZWxkKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOworCiAgICAgICAgIHN3aXRjaCAoaW1wb3J0LmtpbmQpIHsKICAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbDo6RnVuY3Rpb246IHsKICAgICAgICAgICAgIC8vIDQuIElmIGkgaXMgYSBmdW5j
dGlvbiBpbXBvcnQ6CiAgICAgICAgICAgICAvLyBpLiBJZiBJc0NhbGxhYmxlKHYpIGlzIGZhbHNl
LCB0aHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigp
KQotICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
c3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0
IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50
aW1lVHlwZUZvclZhbHVlKHZhbHVlKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoImltcG9ydCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxhYmxlIiks
IGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSkpKSk7CiAg
ICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKICAgICAgICAgICAgIC8v
IGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CiAgICAgICAg
ICAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiogaW1wb3J0ZWRFeHBvcnRzID0ganNEeW5hbWlj
Q2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4ob2JqZWN0KSkgewpAQCAtMTM4LDExICsxNDEsMzQg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Ok1lbW9yeTogewogICAgICAgICAgICAgLy8gNi4g
SWYgaSBpcyBhIG1lbW9yeSBpbXBvcnQ6Ci0gICAgICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQg
TWVtb3J5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNNZW1vcnlJbXBvcnQpOyAvLyBUaGlzIHNob3Vs
ZCBiZSBndWFyYW50ZWVkIGJ5IGEgdmFsaWRhdGlvbiBmYWlsdXJlLgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5KTsKKyAgICAgICAgICAgIGhhc01l
bW9yeUltcG9ydCA9IHRydWU7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1v
cnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1vcnkqPih2YWx1ZSk7CiAgICAgICAg
ICAgICAvLyBpLiBJZiB2IGlzIG5vdCBhIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3QsIHRocm93
IGEgVHlwZUVycm9yLgorICAgICAgICAgICAgaWYgKCFtZW1vcnkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGlzIG5vdCBh
biBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5NZW1vcnkiKSkpKTsKKworICAgICAgICAgICAgV2Fz
bTo6UGFnZUNvdW50IGV4cGVjdGVkSW5pdGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5p
bml0aWFsKCk7CisgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsSW5pdGlhbCA9IG1l
bW9yeS0+bWVtb3J5KCktPmluaXRpYWwoKTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxJbml0aWFs
IDwgZXhwZWN0ZWRJbml0aWFsKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBp
cyB0b28gc21hbGwuIikpKSk7CisKKyAgICAgICAgICAgIGlmIChXYXNtOjpQYWdlQ291bnQgZXhw
ZWN0ZWRNYXhpbXVtID0gbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSkgeworICAg
ICAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxNYXhpbXVtID0gbWVtb3J5LT5tZW1v
cnkoKS0+bWF4aW11bSgpOworICAgICAgICAgICAgICAgIGlmICghYWN0dWFsTWF4aW11bSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydCBkaWQgbm90IGhhdmUgYSAnbWF4
aW11bScgYnV0IHRoZSBtb2R1bGUgcmVxdWlyZXMgdGhhdCBpdCBkb2VzIikpKSk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGFjdHVhbE1heGltdW0gPiBleHBlY3Rl
ZE1heGltdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnRzICdtYXhp
bXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0iKSkpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBpaS4gQXBw
ZW5kIHYgdG8gbWVtb3JpZXMuCiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCB2LltbTWVtb3J5
XV0gdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0TWVtb3J5KHZtLCBtZW1vcnkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6R2xvYmFs
OiB7CkBAIC0xNTcsMTMgKzE4MywyOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtb2R1bGVSZWNvcmQtPmxpbmsoc3Rh
dGUsIGluc3RhbmNlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
IHsKKyAgICAgICAgYm9vbCBleHBlY3RzTWVtb3J5SW1wb3J0ID0gISFtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkgJiYgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmlzSW1wb3J0KCk7CisgICAgICAg
IGlmIChleHBlY3RzTWVtb3J5SW1wb3J0ICYmICFoYXNNZW1vcnlJbXBvcnQpIHsKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
TW9kdWxlIGlzIGV4cGVjdGluZyBhIG1lbW9yeSBpbXBvcnQgYnV0IG9uZSB3YXMgbm90IHByb3Zp
ZGVkIikpKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5ICYmICFoYXNNZW1vcnlJbXBvcnQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSk7CisgICAgICAgICAgICAvLyBXZSBj
cmVhdGUgYSBtZW1vcnkgd2hlbiBpdCdzIGEgbWVtb3J5IGRlZmluaXRpb24uCisgICAgICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdhc206Ok1lbW9yeT4obW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRpYWwoKSwgbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAgICAgICBpbnN0YW5jZS0+c2V0
TWVtb3J5KHZtLAorICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZt
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJl
KCksIFdURk1vdmUobWVtb3J5KSkpOworICAgICAgICB9CisgICAgfQorCisgICAgbW9kdWxlUmVj
b3JkLT5saW5rKGV4ZWMsIGluc3RhbmNlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIG1vZHVsZVJlY29yZC0+ZHVt
cCgpOwotICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKHN0
YXRlKTsKKyAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxlUmVjb3JkLT5ldmFsdWF0ZShl
eGVjKTsKICAgICBVTlVTRURfUEFSQU0oc3RhcnRSZXN1bHQpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpbnN0YW5jZSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDExIEBACiAKICNpbmNsdWRlICJGdW5jdGlvblByb3Rv
dHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
TWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291
bnQuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rv
ci5sdXQuaCIKIApAQCAtNDMsMTkgKzQ3LDc1IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJs
eU1lbW9yeUNvbnN0cnUKICBAZW5kCiAgKi8KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIHN0YXRlKQor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJs
eU1lbW9yeShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIC8vIEZJWE1FIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlRXJyb3Io
c3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRo
ZSBNZW1vcnkgY29uc3RydWN0b3IgcHJvcGVydHkiKSkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgZXhwZWN0cyBleGFjdGx5IG9u
ZSBhcmd1bWVudCIpKSkpOworCisgICAgYXV0byBnZXRVaW50MzIgPSBbJl0gKEpTVmFsdWUgdmFs
dWUpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUudG9J
bnRlZ2VyKGV4ZWMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CisgICAgICAgIGlmIChkb3VibGVWYWx1ZSA8IDAgfHwgZG91YmxlVmFsdWUgPiBVSU5UX01B
WCkgeworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwKKyAgICAg
ICAgICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJs
eS5NZW1vcnkgZXhwZWN0cyB0aGUgJ2luaXRpYWwnIHByb3BlcnR5IHRvIGJlIGFuIGludGVnZXIg
aW4gdGhlIHJhbmdlOiBbMCwgMl4zMiAtIDFdIikpKTsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZG91YmxlVmFs
dWUpOworICAgIH07CisKKyAgICBKU09iamVjdCogbWVtb3J5RGVzY3JpcHRvcjsKKyAgICB7Cisg
ICAgICAgIEpTVmFsdWUgYXJndW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICAgICAgaWYg
KCFhcmd1bWVudC5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgZXhjZXB0cyBpdHMgZmlyc3QgYXJndW1l
bnQgdG8gYmUgYW4gb2JqZWN0IikpKSk7CisgICAgICAgIG1lbW9yeURlc2NyaXB0b3IgPSBqc0Nh
c3Q8SlNPYmplY3QqPihhcmd1bWVudCk7CisgICAgfQorCisgICAgV2FzbTo6UGFnZUNvdW50IG1p
blNpemU7CisgICAgeworICAgICAgICBJZGVudGlmaWVyIGluaXRpYWwgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImluaXRpYWwiKTsKKyAgICAgICAgSlNWYWx1ZSBtaW5TaXplVmFsdWUg
PSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgaW5pdGlhbCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgdWludDMyX3Qgc2l6ZSA9IGdl
dFVpbnQzMihtaW5TaXplVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHsgfSk7CisgICAgICAgIGlmICghV2FzbTo6UGFnZUNvdW50Ojppc1ZhbGlkKHNpemUp
KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3Nl
bWJseS5NZW1vcnkgaW52YWxpZCAnaW5pdGlhbCcgcGFnZSBjb3VudCIpKSkpOworICAgICAgICBt
aW5TaXplID0gV2FzbTo6UGFnZUNvdW50KHNpemUpOworICAgIH0KKworICAgIFdhc206OlBhZ2VD
b3VudCBtYXhTaXplOworICAgIHsKKyAgICAgICAgSWRlbnRpZmllciBtYXhpbXVtID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtIik7CisgICAgICAgIGJvb2wgaGFzUHJvcGVy
dHkgPSBtZW1vcnlEZXNjcmlwdG9yLT5oYXNQcm9wZXJ0eShleGVjLCBtYXhpbXVtKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICBpZiAoaGFz
UHJvcGVydHkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgbWF4U2l6ZVZhbHVlID0gbWVtb3J5RGVz
Y3JpcHRvci0+Z2V0KGV4ZWMsIG1heGltdW0pOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSA9IGdldFVp
bnQzMihtYXhTaXplVmFsdWUpOworICAgICAgICAgICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6Omlz
VmFsaWQoc2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgaW52YWxpZCAnaW5pdGlhbCcgcGFnZSBjb3VudCIp
KSkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwor
ICAgICAgICAgICAgbWF4U2l6ZSA9IFdhc206OlBhZ2VDb3VudChzaXplKTsKKworICAgICAgICAg
ICAgaWYgKG1pblNpemUgPiBtYXhTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5N
ZW1vcnkgcHJvdmlkZWQgYSAnbWF4aW11bScgcGFnZSBjb3VudCB0aGF0IHNtYWxsZXIgdGhhbiB0
aGUgJ2luaXRpYWwnIHBhZ2UgY291bnQiKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6
bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5PihtaW5TaXplLCBtYXhTaXplKTsKKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlKHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksIFdURk1v
dmUobWVtb3J5KSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsSlNXZWJBc3NlbWJseU1lbW9yeShFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93Q29uc3RydWN0b3JDYW5ub3RCZUNhbGxl
ZEFzRnVuY3Rpb25UeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAiV2ViQXNzZW1ibHkuTWVtb3J5Iikp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5j
dGlvblR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgIldlYkFzc2VtYmx5Lk1lbW9yeSIpKTsK
IH0KIAogV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3RvciogV2ViQXNzZW1ibHlNZW1vcnlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlKiB0aGlzUHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw5IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90
b3R5cGUuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKIAogI2luY2x1ZGUgIldlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlLmx1dC5oIgogCkBAIC00MiwxMCArNDQsMTkgQEAgY29uc3Qg
Q2xhc3NJbmZvIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eQogIEBlbmQKICAqLwogCi1XZWJBc3Nl
bWJseU1lbW9yeVByb3RvdHlwZSogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OmNyZWF0ZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1ZmZl
cihFeGVjU3RhdGUqKTsKKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJs
eU1lbW9yeVByb3RvRnVuY0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNXZWJBc3Nl
bWJseU1lbW9yeSogbWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4o
ZXhlYy0+dGhpc1ZhbHVlKCkpOyAKKyAgICBSRUxFQVNFX0FTU0VSVCghIW1lbW9yeSk7IC8vICBG
SVhNRQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobWVtb3J5LT5idWZmZXIoZXhlYy0+dm0o
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7Cit9CisKK1dlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlKiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
YXV0byogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlNZW1v
cnlQcm90b3R5cGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZSh2bSwgc3Ry
dWN0dXJlKTsKLSAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBvYmplY3QtPmZp
bmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAK
QEAgLTU0LDkgKzY1LDEwIEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6
OmMKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAK
LXZvaWQgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3ZvaWQgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CisgICAgSlNDX05BVElWRV9HRVRURVIoImJ1ZmZlciIsIHdlYkFzc2VtYmx5TWVtb3J5
UHJvdG9GdW5jQnVmZmVyLCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAogV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGU6OldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgJKHJldmlzaW9uIDIwOTU4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJv
dG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIERF
Q0xBUkVfSU5GTzsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIAogcHJpdmF0
ZToKICAgICBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296617</attachid>
            <date>2016-12-08 19:23:32 -0800</date>
            <delta_ts>2016-12-08 19:42:39 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>75184</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCShyZXZpc2lvbiAyMDk1ODMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxNyBAQCBjb25zdCBfaW1wb3J0RnVuY3Rp
b25Db250aW51YXRpb24gPSAoYnVpCiAgICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRNZW1vcnlD
b250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICBy
ZXR1cm4gKG1vZHVsZSwgZmllbGQsIHtpbml0aWFsLCBtYXhpbXVtfSkgPT4geworICAgICAgICBh
c3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUg
YSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmll
bGQsIGBJbXBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7Zmll
bGR9ImApOworICAgICAgICAvLyBGSVhNRTogd2hhdCB2YWxpZGF0aW9uIHNob3VsZCBJIGRvIGhl
cmU/CisgICAgICAgIC8vYXNzZXJ0LmlzTnVtYmVyKGZpZWxkLCBgSW1wb3J0IGZ1bmN0aW9uIGZp
ZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAgc2VjdGlv
bi5kYXRhLnB1c2goeyBtb2R1bGUsIGZpZWxkLCBraW5kOiAiTWVtb3J5IiwgbWVtb3J5RGVzY3Jp
cHRpb246IHtpbml0aWFsLCBtYXhpbXVtfX0pOworICAgICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7
CisgICAgfTsKK307CisKIGNvbnN0IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWls
ZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoZmllbGQsIGluZGV4
LCB0eXBlKSA9PiB7CiAgICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5j
dGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CkBAIC0xMTAs
NiArMTIxLDcgQEAgY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aQogICAg
ICAgICAgICAgLy8gRXhwb3J0cyBjYW4gbGVhdmUgdGhlIHR5cGUgdW5zcGVjaWZpZWQsIGxldHRp
bmcgdGhlIENvZGUgYnVpbGRlciBwYXRjaCB0aGVtIHVwIGxhdGVyLgogICAgICAgICAgICAgdHlw
ZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCB0eXBlKTsKICAgICAgICAgfQorCiAgICAg
ICAgIC8vIFdlIGNhbid0IGNoZWNrIG11Y2ggYWJvdXQgImluZGV4IiBoZXJlIGJlY2F1c2UgdGhl
IENvZGUgc2VjdGlvbiBzdWNjZWVkcyB0aGUgRXhwb3J0IHNlY3Rpb24uIE1vcmUgd29yayBpcyBk
b25lIGF0IENvZGUoKS5FbmQoKSB0aW1lLgogICAgICAgICBzd2l0Y2ggKHR5cGVvZihpbmRleCkp
IHsKICAgICAgICAgY2FzZSAic3RyaW5nIjogYnJlYWs7IC8vIEFzc3VtZSBpdCdzIGEgZnVuY3Rp
b24gbmFtZSB3aGljaCB3aWxsIGJlIHJldmVhbGVkIGluIHRoZSBDb2RlIHNlY3Rpb24uCkBAIC0x
MjUsNiArMTM3LDcgQEAgY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgRXhw
b3J0IHNlY3Rpb24ncyBpbmRleCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBnb3QgJHtp
bmRleH1gKTsKICAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IGNvcnJlc3BvbmRpbmdJbXBvcnQg
PSBidWlsZGVyLl9nZXRGdW5jdGlvbkZyb21JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgY29u
c3QgaW1wb3J0U2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIkltcG9ydCIpOwogICAgICAg
ICBpZiAodHlwZW9mKGluZGV4KSA9PT0gIm9iamVjdCIpIHsKQEAgLTM2OCwxMCArMzgxLDEwIEBA
IGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbXBvcnRCdWlsZGVyID0gewogICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0
aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBpbXBvcnQgdGFibGVgKTsgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE1lbW9yeTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGlt
cG9ydCBtZW1vcnlgKTsgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbDogKCkgPT4g
eyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCBnbG9iYWxgKTsgfSwKICAg
ICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5G
dW5jdGlvbiA9IF9pbXBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWls
ZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5NZW1vcnkgPSBfaW1wb3J0
TWVtb3J5Q29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW1wb3J0QnVpbGRlcjsKICAgICAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNDY1LDcgKzQ3OCw4IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNz
IEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlLnR5cGUpID09PSAidW5k
ZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgbXVzdCBiZSBhIGZ1bmN0aW9uIGV4cG9ydCBmcm9tIHRoZSBDb2RlIHNlY3Rpb24gKHJlLWV4
cG9ydHMgd2VyZSBoYW5kbGVkIGVhcmxpZXIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGltcG9ydFNlY3Rp
b24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL2NvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGlt
cG9ydFNlY3Rpb24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbkluZGV4U3BhY2VPZmZz
ZXQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1
bmN0aW9uSW5kZXggPSBlLmluZGV4IC0gZnVuY3Rpb25JbmRleFNwYWNlT2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudHlwZSA9IGNvZGVTZWN0aW9uLmRh
dGFbZnVuY3Rpb25JbmRleF0udHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KSW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCShy
ZXZpc2lvbiAyMDk1ODMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFy
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsMjkgQEAgY29uc3QgZW1pdHRlcnMgPSB7
CiAgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLmV4dGVybmFsS2luZFZhbHVlW2Vu
dHJ5LmtpbmRdKTsKICAgICAgICAgICAgIHN3aXRjaCAoZW50cnkua2luZCkgewogICAgICAgICAg
ICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmV4
cGVjdGVkIGtpbmQgJHtlbnRyeS5raW5kfWApOwotICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb24i
OiBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkudHlwZSk7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAiRnVuY3Rpb24iOiB7CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIs
IGVudHJ5LnR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50
ZWRgKTsKLSAgICAgICAgICAgIGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHll
dCBpbXBsZW1lbnRlZGApOworICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjogeworICAgICAgICAg
ICAgICAgIGxldCB7aW5pdGlhbCwgbWF4aW11bX0gPSBlbnRyeS5tZW1vcnlEZXNjcmlwdGlvbjsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGNvZXJjZSB0aGlzIHRvIGEgbnVt
YmVyIG1heWJlPyBPciB2YWxpZGF0ZSBtb3JlPworICAgICAgICAgICAgICAgIGFzc2VydC50cnV0
aHkodHlwZW9mIGluaXRpYWwgPT09ICJudW1iZXIiLCAiRXhlY3B0IGEgbnVtYmVyIG9mIHVuZGVm
aW5lZCBmb3IgJ21heGltdW0nIik7CisgICAgICAgICAgICAgICAgaW5pdGlhbCB8PSAwOworICAg
ICAgICAgICAgICAgIGxldCBoYXNNYXhpbXVtID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodHlw
ZW9mIG1heGltdW0gPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgICAgIG1heGltdW0g
fD0gMDsKKyAgICAgICAgICAgICAgICAgICAgaGFzTWF4aW11bSA9IDE7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSh0eXBlb2YgbWF4
aW11bSA9PT0gInVuZGVmaW5lZCIsICJFeGVjcHQgYSBudW1iZXIgb2YgdW5kZWZpbmVkIGZvciAn
bWF4aW11bSciKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHV0KGJpbiwg
InZhcnVpbnQzMiIsIGhhc01heGltdW0pOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1
aW50MzIiLCBpbml0aWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzTWF4aW11bSkKKyAgICAg
ICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIG1heGltdW0pOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGNhc2UgIkdsb2JhbCI6
IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnkuanMJKG5vbmV4aXN0ZW50
KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21lbW9yeS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE1MiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CisK
K2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKSB7CisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIGFzc2VydGlvbiIpOworICAgIH0KK30KKworcHJpbnQoKTsKK2Z1bmN0aW9uIGJp
bmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIpIHsKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAg
ICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIH0g
Y2F0Y2goZSkgeworICAgICAgICBwcmludChlKTsKKyAgICAgICAgcHJpbnQoKTsKKyAgICAgICAg
dGhyZXcgPSB0cnVlOworICAgIH0KKyAgICBhc3NlcnQodGhyZXcpOworfQorCit7CisgICAgLy8g
Q2FuJ3QgZGVjbGFyZSBtb3JlIHRoYW4gb25lIG1lbW9yeS4KKyAgICBjb25zdCBidWlsZGVyID0g
KG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgp
Lk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIHtpbml0aWFsOiAyMH0pLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
LkVuZCgpOworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIpOworfQorCit7CisgICAg
Ly8gQ2FuJ3QgZGVjbGFyZSBtb3JlIHRoYW4gb25lIG1lbW9yeS4KKyAgICBjb25zdCBidWlsZGVy
ID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9y
dCgpCisgICAgICAgICAgICAuTWVtb3J5KCJpbXAiLCAibWVtb3J5Iiwge2luaXRpYWw6IDIwfSkK
KyAgICAgICAgICAgIC5NZW1vcnkoImltcCIsICJtZW1vcnkiLCB7aW5pdGlhbDogMzB9KQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgLkVuZCgpOworICAgIGJpbmFyeVNob3Vs
ZE5vdFBhcnNlKGJ1aWxkZXIpOworfQorCit7CisgICAgLy8gaW5pdGlhbCBtdXN0IGJlIDw9IG1h
eGltdW0uCisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwg
Im1lbW9yeSIsIHtpbml0aWFsOiAyMCwgbWF4aW11bTogMTl9KQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisgICAgICAg
IC5Db2RlKCkKKyAgICAgICAgLkVuZCgpOworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxk
ZXIpOworfQorCit7CisgICAgLy8gTm8gbG9hZHMgd2hlbiBubyBtZW1vcnkgZGVmaW5lZC4KKyAg
ICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiZm9vIikuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9
KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5JMzJMb2Fk
KDIsIDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlcik7Cit9CisK
K3sKKyAgICAvLyBObyBzdG9yZXMgd2hlbiBubyBtZW1vcnkgZGVmaW5lZC4KKyAgICBjb25zdCBi
dWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImZvbyIpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFsiaTMyIl0gfSkKKyAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAg
ICAgICAgICAgICAuSTMyU3RvcmUoMiwgMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQ
YXJzZShidWlsZGVyKTsKK30KKworCitmdW5jdGlvbiB0ZXN0KGYsIGNvdW50ID0gMTAwMCkgewor
ICAgIHJldHVybjsKKworICAgIG5vSW5saW5lKGYpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykgeworICAgICAgICBmKGkpOworICAgIH0KK30KKwordGVzdChmdW5jdGlvbigp
IHsKKyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAyMCwgbWF4aW11bTog
MjB9OworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5
RGVzY3JpcHRpb24pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogWyJp
MzIiLCAiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkK
KyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuSTMyU3RvcmUo
MiwgMCkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkKKyAgICAgICAgICAgICAgICAuSTMy
TG9hZCgyLCAwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlw
dGlvbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IGltcDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pOworICAgIGNvbnN0IGZvbyA9IGluc3Rh
bmNlLmV4cG9ydHMuZm9vOworICAgIC8vIGZvbyh2YWx1ZSwgYWRkcmVzcykKKworICAgIGNvbnN0
IHBhZ2VTaXplID0gNjQgKiAxMDI0OworICAgIGNvbnN0IGJ5dGVzID0gbWVtb3J5RGVzY3JpcHRp
b24uaW5pdGlhbCAqIHBhZ2VTaXplOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGJ5dGVzLzQp
OyBpKyspIHsKKyAgICAgICAgbGV0IHZhbHVlID0gaSArIDE7CisgICAgICAgIGxldCBhZGRyZXNz
ID0gaSAqIDQ7CisgICAgICAgIGxldCByZXN1bHQgPSBmb28odmFsdWUsIGFkZHJlc3MpOworICAg
ICAgICBhc3NlcnQocmVzdWx0ID09PSB2YWx1ZSk7CisgICAgICAgIGxldCBhcnJheUJ1ZmZlciA9
IG1lbW9yeS5idWZmZXI7CisgICAgICAgIGxldCBidWZmZXIgPSBuZXcgVWludDMyQXJyYXkoYXJy
YXlCdWZmZXIpOworICAgICAgICBhc3NlcnQoYnVmZmVyW2ldID09PSB2YWx1ZSk7CisgICAgfQor
fSwgMik7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjks
NyBAQAogI2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ckxvZy5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgog
I2luY2x1ZGUgPGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5o
PgpAQCAtMjYzMiw2ICsyNjMzLDE5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmMKICAgICAgICAgICAgIH0pOwogICAgIH0KIAorICAgIHZvaWQqIG1lbW9yeUJ5dGVz
ID0gbnVsbHB0cjsKKyAgICB1aW50MzJfdCBtZW1vcnlTaXplID0gMDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9y
bWF0aW9uKCk7CisKKyAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5KSB7CisgICAg
ICAgIG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1h
dGlvbi0+bWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tYXhpbXVt
KCkpOworICAgICAgICBtZW1vcnlCeXRlcyA9IG1lbW9yeS0+bWVtb3J5KCk7CisgICAgICAgIG1l
bW9yeVNpemUgPSBtZW1vcnktPnNpemUoKTsKKyAgICB9CisgICAgdm0ud2FzbU1lbW9yeVBvaW50
ZXIgPSBtZW1vcnlCeXRlczsKKyAgICB2bS53YXNtTWVtb3J5U2l6ZSA9IG1lbW9yeVNpemU7CisK
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7CiAgICAg
ICAgIEpTQXJyYXkqIHRlc3RDYXNlcyA9IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+YXJndW1lbnQo
aSArIDIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCB0ZXN0SW5kZXggPSAwOyB0ZXN0SW5kZXgg
PCB0ZXN0Q2FzZXMtPmxlbmd0aCgpOyArK3Rlc3RJbmRleCkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdFdhc20uY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdFdhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNiArMTkyLDggQEAgc3RhdGlj
IHZvaWQgY2hlY2tQbGFuKFBsYW4mIHBsYW4sIHVuc2lnbgogLy8gRm9yIG5vdyB3ZSBpbmxpbmUg
dGhlIHRlc3QgZmlsZXMuCiBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogeworICAgIFVOVVNF
RF9QQVJBTShjaGVja1BsYW4pOworICAgIC8qCiAgICAgewogICAgICAgICAvLyBHZW5lcmF0ZWQg
ZnJvbToKICAgICAgICAgLy8gICAgKG1vZHVsZQpAQCAtMTMyMCw2ICsxMzIyLDcgQEAgc3RhdGlj
IHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
anNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEwMCksIGJveCg2KSB9KSwg
MCk7CiAgICAgfQogCisgICAgKi8KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDk1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyOSw2ICsxNDI5LDkgQEAKIAkJNzlCMDBDQkUxQzZB
QjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QjAwQ0JBMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9i
amVjdC5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tb3B0aW1pemUt
c2libGluZy1jYWxscyI7IH07IH07CiAJCTc5QjAwQ0JGMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94
eU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlCMDBDQkIxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlCMTc4OEUxRDM5OUI4MDAwQjFB
NTY3IC8qIEpJVE1hdGhJQ0ZvcndhcmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElDRm9y
d2FyZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3OUI3NTk3NDFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5Qjc1OTcxMURG
QTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICovOyB9OworCQk3OUI3
NTk3NTFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUI3NTk3MjFERkE0QzYwMDA1
MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8qIFdh
c21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5Qjc1OTczMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtUGFnZUNvdW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlCODE5OTMxREQyNUNG
NTAwRERDNzE0IC8qIEpTR2xvYmFsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlCODE5OTIxREQyNUNGNTAwRERDNzE0IC8qIEpT
R2xvYmFsT2JqZWN0SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5QzRCMTVEMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVCMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJNzlDNEIxNUUxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVDMUJBMjE1
OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM4NjAsNiAr
Mzg2Myw5IEBACiAJCTc5QjAwQ0I5MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5Q29uc3RydWN0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlCMDBDQkExQzZBQjA3RTAwODhDNjVEIC8q
IFByb3h5T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBy
b3h5T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlCMDBDQkIxQzZB
QjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByb3h5T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5Qjc1
OTcxMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8q
IFdhc21NZW1vcnlJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzlCNzU5NzMxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVBhZ2VDb3VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OUI4MTk5MjFERDI1Q0Y1MDBEREM3MTQgLyogSlNHbG9iYWxPYmplY3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBG
RDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNl
cnZhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEy
MTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYwMjQsOCArNjAzMCwx
MSBAQAogCQkJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIu
aCAqLywKIAkJCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8s
CiAJCQkJNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLywKKwkJCQk3
OUI3NTk3MTFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCAqLywK
KwkJCQk3OUI3NTk3MjFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgg
Ki8sCiAJCQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3Bw
ICovLAogCQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmgg
Ki8sCisJCQkJNzlCNzU5NzMxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLywK
IAkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovLAogCQkJCTUz
MTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCiAJCQkJNTMxMzc0QkMx
RDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8sCkBAIC03OTgzLDYgKzc5OTIsNyBAQAog
CQkJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5OEVENjc1MUJFRDc2OEMwMEREODAxNyAvKiBS
ZW1vdGVDb250cm9sbGFibGVUYXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0Y4MUMx
MzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZH
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYg
LyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjIyLDYgKzgyMzIs
NyBAQAogCQkJCUJDMDJFOThEMEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3RhbmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzAyRTkwRjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzFCMUJEQTA4RDEwMDMzMUI4NCAvKiBFcnJv
clByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5Qjc1OTc1MURGQTRDNjAwMDUy
MTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEw
Nzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTQ5ODIwNDE4OTFEMEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTk2NDcsNiArOTY1OCw3IEBACiAJCQkJQzJGQ0FFMTAxN0E5QzI0RTAwMzRD
NzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFB
QTEwN0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNzA5NEM0REUxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzlCNzU5NzQxREZBNEM2MDAwNTIxNzRDIC8qIFdh
c21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkZDQUUxMjE3QTlD
MjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMzM4RTBEMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTY1QjgzOTJGMUJBQ0FENkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVy
eS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
cmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBAIHB1YmxpYzoKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNDQxCiAgICAgRXhlY1N0YXRlKiB0
b3BDYWxsRnJhbWU7CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB0b3BKU1dlYkFzc2VtYmx5
SW5zdGFuY2U7CisgICAgdm9pZCogd2FzbU1lbW9yeVBvaW50ZXI7CisgICAgdWludDMyX3Qgd2Fz
bU1lbW9yeVNpemU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0g
bnVsbHB0cjsKIAotICAgIEIzSVJHZW5lcmF0b3IoTWVtb3J5KiwgUHJvY2VkdXJlJiwgV2FzbUlu
dGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mKTsKKyAgICBC
M0lSR2VuZXJhdG9yKE1lbW9yeUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFs
RnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mKTsKIAogICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKICAg
ICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC0x
NzksNyArMTc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNv
bnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgc3RhY2spOwogICAg
IFZhbHVlKiB6ZXJvRm9yVHlwZShUeXBlKTsKIAotICAgIE1lbW9yeSogbV9tZW1vcnk7CiAgICAg
UHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAg
VmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CkBAIC0xODksOSArMTg4LDggQEAgcHJpdmF0ZToK
ICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW251bVR5cGVzXTsKIH07CiAKLUIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNt
SW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCi0gICAgOiBtX21lbW9yeShtZW1vcnkpCi0g
ICAgLCBtX3Byb2MocHJvY2VkdXJlKQorQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1v
cnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFs
RnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgIDogbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CiAgICAg
bV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKQEAgLTIxMCwxMiArMjA4LDEyIEBA
IEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW0KICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtX21lbW9yeSkgewotICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtX21l
bW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgaWYgKCEhbWVt
b3J5KSB7CisgICAgICAgIG1fbWVtb3J5QmFzZUdQUiA9IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMo
KS5iYXNlTWVtb3J5UG9pbnRlcjsKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5
QmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVCghbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNp
emVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IG1f
bWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsK
LSAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiBpbmZvIDogbV9tZW1v
cnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCisgICAgICAgIEFTU0VSVCghbWVt
b3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CisgICAg
ICAgIG1fbWVtb3J5U2l6ZUdQUiA9IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0
ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0
ZXJJbmZvJiBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCiAg
ICAgICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIoaW5mby5zaXplUmVnaXN0ZXIpOwogCiAgICAg
ICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKQEAgLTY1OSw3ICs2NTcsNyBAQCB2
b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvCiAgICAgZGF0YUxvZ0xuKCJc
biIpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1Rv
V2FzbVdyYXBwZXIoVk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgTWVtb3J5KiBtZW1vcnkpCitzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZtLCBjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5GdW5jdGlv
biwgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IHByb2MuYWRkQmxvY2soKTsKQEAgLTY4MSwxMiArNjc5LDEz
IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWEKICAgICAvLyBNb3Zl
IG1lbW9yeSB2YWx1ZXMgdG8gdGhlIGFwcHJvcmlhdGUgcGxhY2VzLCBpZiBuZWVkZWQuCiAgICAg
VmFsdWUqIGJhc2VNZW1vcnkgPSBudWxscHRyOwogICAgIFZlY3RvcjxWYWx1ZSo+IHNpemVzOwot
ICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgYmFzZU1lbW9yeSA9IGJsb2NrLT5hcHBlbmROZXc8
Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1lbW9yeS0+bWVtb3J5KCkpOworICAgIGlm
ICghIW1lbW9yeSkgeworICAgICAgICBiYXNlTWVtb3J5ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLAorICAgICAgICAgICAgYmxvY2st
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZtLndhc21NZW1vcnlQ
b2ludGVyKSk7CiAgICAgICAgIFZhbHVlKiBzaXplID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAotICAgICAgICAgICAgYmxvY2stPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PGNoYXIq
PihtZW1vcnkpICsgTWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOwotICAgICAgICBzaXplcy5yZXNl
cnZlQ2FwYWNpdHkobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUo
KSk7Ci0gICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5z
aXplUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAmdm0ud2FzbU1lbW9yeVNpemUpKTsKKyAgICAgICAgc2l6ZXMu
cmVzZXJ2ZUNhcGFjaXR5KG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNp
emUoKSk7CisgICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygp
LnNpemVSZWdpc3RlcnMpIHsKICAgICAgICAgICAgIHNpemVzLmFwcGVuZChibG9jay0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBzaXplLAogICAgICAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaW5mby5zaXplT2Zm
c2V0KSkpOwogICAgICAgICB9CkBAIC03MDAsMTEgKzY5OSwxMSBAQCBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhCiAKICAgICAvLyBNb3ZlIHRoZSBhcmd1bWVudHMgaW50
byBwbGFjZS4KICAgICBWYWx1ZSogcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0
dXBDYWxsKHByb2MsIGJsb2NrLCBPcmlnaW4oKSwgYXJndW1lbnRzLCB0b0IzVHlwZShzaWduYXR1
cmUtPnJldHVyblR5cGUpLCBbJl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewotICAg
ICAgICBpZiAobWVtb3J5KSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZXMuc2l6ZSgpID09IG1l
bW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYmFzZU1lbW9yeSwgVmFsdWVS
ZXA6OnJlZyhtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKSkpOwor
ICAgICAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAgICAgIEFTU0VSVChzaXplcy5zaXplKCkg
PT0gbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGJhc2VNZW1vcnksIFZh
bHVlUmVwOjpyZWcobWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKSkp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHNp
emVzW2ldLCBWYWx1ZVJlcDo6cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lz
dGVyc1tpXS5zaXplUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKENvbnN0cmFpbmVkVmFsdWUoc2l6ZXNbaV0sIFZhbHVlUmVwOjpyZWcobWVtb3J5LnBpbm5l
ZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOwogICAgICAgICB9
CiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CkBAIC03MzgsNyArNzM3
LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYQogICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJvYyk7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgY29u
c3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBNZW1vcnkq
IG1lbW9yeSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IEZ1bmN0aW9uSW5kZXhT
cGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCB1bnNpZ25lZCBvcHRMZXZlbCkKK3N0ZDo6dW5pcXVl
X3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgY29uc3Qg
dWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBNZW1vcnlJbmZv
cm1hdGlvbiYgbWVtb3J5LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgRnVuY3Rp
b25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIHVuc2lnbmVkIG9wdExldmVsKQogewog
ICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtSW50ZXJuYWxGdW5jdGlvbj4o
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5oCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIGV4dGVy
biAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAotY2xhc3MgTWVtb3J5OworY2xhc3MgTWVtb3J5SW5mb3JtYXRpb247CiAK
LXN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZN
JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgTWVtb3J5KiwgY29uc3QgU2lnbmF0dXJlKiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiwg
dW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK3N0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5j
dGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgTWVtb3J5
SW5mb3JtYXRpb24mLCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCBjb25zdCBGdW5jdGlvbkluZGV4U3BhY2UmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEp
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcAkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDgg
KzMzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotTW9kdWxlSW5m
b3JtYXRpb246On5Nb2R1bGVJbmZvcm1hdGlvbigpIHsgfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw5IEBACiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRlICJXYXNt
UGFnZUNvdW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTk1LDggKzk3LDYgQEAgc3RydWN0IEltcG9ydCB7CiAgICAgdW5zaWduZWQga2luZEluZGV4
OyAvLyBJbmRleCBpbiB0aGUgdmVjdG9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGtpbmQuCiB9Owog
Ci1jbGFzcyBNZW1vcnk7Ci0KIHN0cnVjdCBFeHBvcnQgewogICAgIElkZW50aWZpZXIgZmllbGQ7
CiAgICAgRXh0ZXJuYWw6OktpbmQga2luZDsKQEAgLTExOSwxMyArMTE5LDEwIEBAIHN0cnVjdCBN
b2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgVmVjdG9yPEltcG9ydD4gaW1wb3J0czsKICAgICBWZWN0
b3I8U2lnbmF0dXJlKj4gaW1wb3J0RnVuY3Rpb25zOwogICAgIC8vIEZJWE1FIGltcGxlbWVudCBp
bXBvcnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEz
NQotICAgIC8vIEZJWE1FIGltcGxlbWVudCBpbXBvcnQgTWVtb3J5IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgaW1w
b3J0IEdsb2JhbCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMz
CiAgICAgVmVjdG9yPFNpZ25hdHVyZSo+IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVzOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1lbW9yeTsKKyAgICBNZW1vcnlJbmZvcm1hdGlvbiBt
ZW1vcnk7CiAgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKLQotICAgIH5Nb2R1bGVJbmZvcm1h
dGlvbigpOwogfTsKIAogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGwgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJKHJldmlzaW9uIDIwOTU4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxNCArMzAsMTggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAotTWVtb3J5OjpNZW1vcnkodWludDMyX3Qgc3RhcnRpbmdTaXplLCB1aW50MzJfdCBjYXBh
Y2l0eSwgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcGlubmVkU2l6ZVJlZ2lzdGVycykKK01lbW9y
eTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICA6IG1f
bW9kZShNb2RlOjpCb3VuZHNDaGVja2luZykKLSAgICAsIG1fc2l6ZShzdGFydGluZ1NpemUpCi0g
ICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5KQorICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkK
KyAgICAsIG1fY2FwYWNpdHkobWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6
bWF4KCkuYnl0ZXMoKSkKKyAgICAsIG1faW5pdGlhbChpbml0aWFsKQorICAgICwgbV9tYXhpbXVt
KG1heGltdW0pCiAgICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNo
ZWNraW5nIHRoZW4gd2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KICAg
ICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMK
LSAgICAsIG1fbWFwcGVkQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heFBhZ2VDb3Vu
dCkgKiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocGFnZVNpemUpKQorICAgICwgbV9tYXBwZWRDYXBh
Y2l0eShQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCkpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1h
eGltdW0gfHwgbWF4aW11bSA+PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ2F1YXJhbnRl
ZWQgYnkgb3VyIGNhbGxlci4KKwogICAgIEFTU0VSVChwaW5uZWRTaXplUmVnaXN0ZXJzLnNpemUo
KSA+IDApOwogCiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0g
dGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzYwMApAQCAtNTAsMjUgKzU0LDEyIEBAIE1lbW9yeTo6TWVtb3J5KHVpbnQzMl90IHN0
YXJ0aW5nU2l6ZSwgdWkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBBU1NFUlQo
c3RhcnRpbmdTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIGlmIChtcHJvdGVjdChyZXN1
bHQsIHN0YXJ0aW5nU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICBBU1NFUlQo
bV9zaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOworICAgIGlmIChtcHJvdGVjdChyZXN1bHQsIG1f
c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKICAgICAgICAgbXVubWFwKHJlc3VsdCwg
bV9tYXBwZWRDYXBhY2l0eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB1bnNpZ25l
ZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplUmVnaXN0ZXJzLnNpemUoKSAr
IDE7Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2NhbGxlZVNhdmVSZWdpc3RlcnMuZm9y
RWFjaChbJl0gKFJlZyByZWcpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlZy5ncHIoKTsKLSAg
ICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCkuZ2V0KHJlZykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChy
ZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPT0gMSkgewotICAgICAgICAgICAgbV9waW5uZWRSZWdp
c3RlcnMuYmFzZU1lbW9yeVBvaW50ZXIgPSBncHI7Ci0gICAgICAgICAgICByZW1haW5pbmdQaW5u
ZWRSZWdpc3RlcnMtLTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Bpbm5lZFJlZ2lz
dGVycy5zaXplUmVnaXN0ZXJzLmFwcGVuZCh7IGdwciwgcGlubmVkU2l6ZVJlZ2lzdGVyc1stLXJl
bWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyAtIDFdIH0pOwotICAgIH0pOwotCi0gICAgQVNTRVJUKCFy
ZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMpOwogICAgIG1fbWVtb3J5ID0gcmVzdWx0OwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCShyZXZpc2lvbiAyMDk1
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI4ICsyNywxMiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0j
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbVBhZ2VDb3Vu
dC5oIgogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCi1zdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7Ci0gICAgR1BSUmVn
IHNpemVSZWdpc3RlcjsKLSAgICB1bnNpZ25lZCBzaXplT2Zmc2V0OwotfTsKLQotLy8gRklYTUU6
IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIuIFJp
Z2h0IG5vdyB3ZSB0YWtlIGEgdmVjdG9yIHdpdGggb25seSBvbmUKLS8vIGVudHJ5LiBTcGVjaWZp
Y2FsbHkgYW4gZW50cnkgd2hlcmUgdGhlIHNpemVPZmZzZXQgPT0gMC4gSWYgd2UgaGF2ZSBtb3Jl
IHRoYW4gb25lIHNpemUgcmVnaXN0ZXIsCi0vLyB3ZSBjYW4gaGF2ZSBvbmUgZm9yIGVhY2ggbG9h
ZCBzaXplIGNsYXNzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI5NTIKLXN0cnVjdCBQaW5uZWRSZWdpc3RlckluZm8gewotICAgIFZlY3RvcjxQaW5uZWRT
aXplUmVnaXN0ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOwotICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9p
bnRlcjsKLX07Ci0KLWNvbnN0ZXhwciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7Ci1jb25z
dGV4cHIgdWludDMyX3QgbWF4UGFnZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgxdWxs
IDw8IDMyKSAvIHBhZ2VTaXplKTsKLQogY2xhc3MgTWVtb3J5IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTksOCAr
NDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIEJvdW5kc0NoZWNraW5nCiAgICAgfTsKIAotICAgIE1l
bW9yeSgpID0gZGVmYXVsdDsKLSAgICBNZW1vcnkodWludDMyX3Qgc3RhcnRpbmdTaXplLCB1aW50
MzJfdCBjYXBhY2l0eSwgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcGlubmVkU2l6ZVJlZ2lzdGVy
cyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdl
Q291bnQgbWF4aW11bSk7CiAKICAgICB+TWVtb3J5KCkKICAgICB7CkBAIC03MCwxMCArNTMsMTIg
QEAgcHVibGljOgogCiAgICAgdm9pZCogbWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnk7
IH0KICAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29u
c3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X3Bpbm5lZFJlZ2lzdGVyczsgfQogCiAgICAgTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlOyB9CiAKKyAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlh
bDsgfQorICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9
CisKICAgICBib29sIGdyb3codWludDMyX3QgbmV3U2l6ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX21lbW9yeSk7CkBAIC04NCwxMyArNjksMTUgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1l
bW9yeSwgbV9zaXplKTsgfQorCiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQqIG1fbWVtb3J5IHsg
bnVsbHB0ciB9OwotICAgIFBpbm5lZFJlZ2lzdGVySW5mbyBtX3Bpbm5lZFJlZ2lzdGVyczsKICAg
ICBNb2RlIG1fbW9kZTsKICAgICB1aW50MzJfdCBtX3NpemUgeyAwIH07CiAgICAgdWludDMyX3Qg
bV9jYXBhY2l0eSB7IDAgfTsKKyAgICBQYWdlQ291bnQgbV9pbml0aWFsOworICAgIFBhZ2VDb3Vu
dCBtX21heGltdW07CiAgICAgdWludDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCisKKyNpbmNs
dWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworTWVtb3J5SW5mb3JtYXRpb246
Ok1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMsIGJvb2wgaXNJbXBv
cnQpCisgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKKyAgICAsIG1fbWF4aW11bShtYXhpbXVtKQor
ICAgICwgbV9pc0ltcG9ydChpc0ltcG9ydCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghIW1faW5p
dGlhbCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWF4aW11bSB8fCBtX21heGltdW0gPj0gbV9p
bml0aWFsKTsKKyAgICBBU1NFUlQoISEqdGhpcyk7CisKKyAgICB1bnNpZ25lZCByZW1haW5pbmdQ
aW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplUmVnaXN0ZXJzLnNpemUoKSArIDE7CisgICAganNj
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2NhbGxlZVNhdmVSZWdpc3RlcnMuZm9yRWFjaChbJl0gKFJl
ZyByZWcpIHsKKyAgICAgICAgR1BSUmVnIGdwciA9IHJlZy5ncHIoKTsKKyAgICAgICAgaWYgKCFy
ZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCku
Z2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChyZW1haW5pbmdQaW5u
ZWRSZWdpc3RlcnMgPT0gMSkgeworICAgICAgICAgICAgbV9waW5uZWRSZWdpc3RlcnMuYmFzZU1l
bW9yeVBvaW50ZXIgPSBncHI7CisgICAgICAgICAgICByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMt
LTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3Bpbm5lZFJlZ2lzdGVycy5zaXplUmVn
aXN0ZXJzLmFwcGVuZCh7IGdwciwgcGlubmVkU2l6ZVJlZ2lzdGVyc1stLXJlbWFpbmluZ1Bpbm5l
ZFJlZ2lzdGVycyAtIDFdIH0pOworICAgIH0pOworCisgICAgQVNTRVJUKCFyZW1haW5pbmdQaW5u
ZWRSZWdpc3RlcnMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0cnVj
dCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvIHsKKyAgICBHUFJSZWcgc2l6ZVJlZ2lzdGVyOworICAg
IHVuc2lnbmVkIHNpemVPZmZzZXQ7Cit9OworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQg
bW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3Rlci4gUmlnaHQgbm93IHdlIHRha2UgYSB2
ZWN0b3Igd2l0aCBvbmx5IG9uZQorLy8gZW50cnkuIFNwZWNpZmljYWxseSBhbiBlbnRyeSB3aGVy
ZSB0aGUgc2l6ZU9mZnNldCA9PSAwLiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgc2l6ZSByZWdp
c3RlciwKKy8vIHdlIGNhbiBoYXZlIG9uZSBmb3IgZWFjaCBsb2FkIHNpemUgY2xhc3MuIHNlZTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1Mgorc3RydWN0IFBp
bm5lZFJlZ2lzdGVySW5mbyB7CisgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNp
emVSZWdpc3RlcnM7CisgICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyOworfTsKKworY2xhc3Mg
TWVtb3J5SW5mb3JtYXRpb24geworcHVibGljOgorICAgIE1lbW9yeUluZm9ybWF0aW9uKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghKnRoaXMpOworICAgIH0KKworICAgIE1lbW9yeUluZm9ybWF0
aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgY29uc3QgVmVjdG9yPHVu
c2lnbmVkPiYgcGlubmVkU2l6ZVJlZ2lzdGVycywgYm9vbCBpc0ltcG9ydCk7CisKKyAgICBjb25z
dCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
cGlubmVkUmVnaXN0ZXJzOyB9CisgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVy
biBtX2luaXRpYWw7IH0KKyAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4aW11bTsgfQorICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW1wb3J0
OyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2lu
aXRpYWw7IH0KKworcHJpdmF0ZToKKyAgICBQYWdlQ291bnQgbV9pbml0aWFsIHsgfTsKKyAgICBQ
YWdlQ291bnQgbV9tYXhpbXVtIHsgfTsKKyAgICBQaW5uZWRSZWdpc3RlckluZm8gbV9waW5uZWRS
ZWdpc3RlcnMgeyB9OworICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZhbHNlIH07Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2
aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklk
ZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgIldh
c21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRl
ICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAKQEAgLTI1Niw3ICsyNTYs
OSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0
CisgICAgICAgICAgICBib29sIGlzSW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghcGFy
c2VNZW1vcnlIZWxwZXIoaXNJbXBvcnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6Okds
b2JhbDogewpAQCAtMzA1LDM2ICszMDcsNTkgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVGFi
bGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1v
cnkoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQp
CiB7Ci0gICAgdWludDhfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoY291bnQpKQor
ICAgIC8vIFdlIGRvbid0IGFsbG93IHJlZGVjbGFyaW5nIG1lbW9yeS4gRWl0aGVyIHZpYSBpbXBv
cnQgb3IgZGVmaW5pdGlvbi4KKyAgICBpZiAobV9tb2R1bGUtPm1lbW9yeSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAg
ICB1aW50OF90IGZsYWdzOwotICAgIHVpbnQzMl90IHNpemU7Ci0gICAgaWYgKCFwYXJzZVZhclVJ
bnQxKGZsYWdzKQotICAgICAgICB8fCAhcGFyc2VWYXJVSW50MzIoc2l6ZSkKLSAgICAgICAgfHwg
c2l6ZSA+IG1heFBhZ2VDb3VudCkKKyAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1aW50MzJfdCBjYXBhY2l0eSA9IG1heFBhZ2VDb3Vu
dDsKKyAgICB1aW50MzJfdCBpbml0aWFsOworICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5pdGlh
bCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlk
KGluaXRpYWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQYWdlQ291bnQgaW5pdGlh
bFBhZ2VDb3VudChpbml0aWFsKTsKKworICAgIFBhZ2VDb3VudCBtYXhpbXVtUGFnZUNvdW50Owog
ICAgIGlmIChmbGFncykgewotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNhcGFjaXR5KQot
ICAgICAgICAgICAgfHwgc2l6ZSA+IGNhcGFjaXR5Ci0gICAgICAgICAgICB8fCBjYXBhY2l0eSA+
IG1heFBhZ2VDb3VudCkKKyAgICAgICAgdWludDMyX3QgbWF4aW11bTsKKyAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihtYXhpbXVtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChtYXhpbXVtKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CiAKLSAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKLSAgICBzaXplICo9
IHBhZ2VTaXplOworICAgICAgICBtYXhpbXVtUGFnZUNvdW50ID0gUGFnZUNvdW50KG1heGltdW0p
OworICAgICAgICBpZiAoaW5pdGlhbFBhZ2VDb3VudCA+IG1heGltdW1QYWdlQ291bnQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5u
ZWRTaXplcyA9IHsgMCB9OwotICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVl
PE1lbW9yeT4oc2l6ZSwgY2FwYWNpdHksIHBpbm5lZFNpemVzKTsKLSAgICByZXR1cm4gbV9tb2R1
bGUtPm1lbW9yeS0+bWVtb3J5KCk7CisgICAgbV9tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9y
bWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIHBpbm5lZFNpemVzLCBp
c0ltcG9ydCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJz
ZU1lbW9yeSgpCit7CisgICAgdWludDhfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDEo
Y291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNvdW50KQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdlIG9ubHkgYWxsb3cgb25lIG1lbW9yeSBmb3Igbm93
LgorICAgIGlmIChjb3VudCAhPSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29s
IGlzSW1wb3J0ID0gZmFsc2U7CisgICAgcmV0dXJuIHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0
KTsKIH0KIAogYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgJKHJldmlzaW9uIDIwOTU4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBwcml2YXRlOgogICAgIEZPUl9FQUNIX1dBU01f
U0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIpCiAjdW5kZWYgV0FTTV9TRUNUSU9O
X0RFQ0xBUkVfUEFSU0VSCiAKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9y
eUhlbHBlcihib29sIGlzSW1wb3J0KTsKKwogICAgIFZNKiBtX3ZtOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7CiAgICAgRnVuY3Rpb25JbmRleFNwYWNl
IG1fZnVuY3Rpb25JbmRleFNwYWNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBhZ2VDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QYWdlQ291bnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGFnZUNvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20geworCitjbGFzcyBQYWdlQ291bnQgeworCitwdWJsaWM6CisgICAgUGFnZUNvdW50KCkKKyAg
ICAgICAgOiBtX3BhZ2VDb3VudChVSU5UX01BWCkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQobWF4UGFnZUNvdW50IDwgVUlOVF9NQVgsICJXZSByZWx5IG9uIHRoaXMgaGVyZS4iKTsKKyAg
ICB9CisKKyAgICBQYWdlQ291bnQodWludDMyX3QgcGFnZUNvdW50KQorICAgICAgICA6IG1fcGFn
ZUNvdW50KHBhZ2VDb3VudCkKKyAgICB7IH0KKworICAgIHNpemVfdCBieXRlcygpIHsgcmV0dXJu
IG1fcGFnZUNvdW50ICogcGFnZVNpemU7IH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWQodWlu
dDMyX3QgcGFnZUNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQ
YWdlQ291bnQ7CisgICAgfQorCisgICAgc3RhdGljIFBhZ2VDb3VudCBtYXgoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFBhZ2VDb3VudChtYXhQYWdlQ291bnQpOworICAgIH0KKworICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFnZUNv
dW50ICE9IFVJTlRfTUFYOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBhZ2VD
b3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50IDwgb3RoZXIubV9wYWdlQ291
bnQ7IH0KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX3BhZ2VDb3VudCA+IG90aGVyLm1fcGFnZUNvdW50OyB9CisgICAgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50
ID49IG90aGVyLm1fcGFnZUNvdW50OyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
MzJfdCBtYXhQYWdlQ291bnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oKDF1bGwgPDwgMzIpIC8g
cGFnZVNpemUpOworCisgICAgdWludDMyX3QgbV9wYWdlQ291bnQ7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Niw3ICsxMTYsNyBAQCB2b2lkIFBsYW46OnJ1bigpCiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbVRvSlNTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4OwogICAg
ICAgICBBU1NFUlQobV9mdW5jdGlvbkluZGV4U3BhY2VbZnVuY3Rpb25JbmRleFNwYWNlXS5zaWdu
YXR1cmUgPT0gc2lnbmF0dXJlKTsKIAotICAgICAgICBTdHJpbmcgZXJyb3IgPSB2YWxpZGF0ZUZ1
bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fZnVuY3Rp
b25JbmRleFNwYWNlKTsKKyAgICAgICAgU3RyaW5nIGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihm
dW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX2Z1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5KTsKICAgICAgICAgaWYgKCFlcnJvci5p
c051bGwoKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVuY3Rpb25MZW5ndGg7ICsraSkKQEAgLTEyOCw3ICsx
MjgsNyBAQCB2b2lkIFBsYW46OnJ1bigpCiAgICAgICAgIH0KIAogICAgICAgICB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscy51bmNoZWNrZWRBcHBlbmQoVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+KCkpOwotICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQo
cGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmdldCgpLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLmF0KGZ1bmN0aW9uSW5kZXgpLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSkpOworICAg
ICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21w
aWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bWVtb3J5LCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0
aW9uSW5kZXgpLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSkpOwogICAgICAgICBtX2Z1bmN0aW9uSW5k
ZXhTcGFjZVtmdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
c1tmdW5jdGlvbkluZGV4XS0+Y29kZS0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHJldmlzaW9uIDIw
OTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDggKzQyLDYgQEAgY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZTsKIAogbmFt
ZXNwYWNlIFdhc20gewogCi1jbGFzcyBNZW1vcnk7Ci0KIGNsYXNzIFBsYW4gewogcHVibGljOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0qLCBWZWN0b3I8dWludDhfdD4pOwpAQCAtNjcs
MTcgKzY1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24t
PmV4cG9ydHM7CiAgICAgfQogCi0gICAgY29uc3QgTWVtb3J5KiBtZW1vcnkoKSBjb25zdAotICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5nZXQoKTsKLSAgICB9Ci0KICAgICBzaXplX3QgaW50
ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmYWlsZWQoKSk7CiAgICAgICAgIHJldHVybiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXpl
KCk7CiAgICAgfQorCiAgICAgQjM6OkNvbXBpbGF0aW9uKiBqc1RvV2FzbUVudHJ5UG9pbnRGb3JG
dW5jdGlvbihzaXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpID4gbV93YXNt
VG9KU1N0dWJzLnNpemUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21WYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwxMCArMTE1LDEz
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYg
Y29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAor
ICAgIGJvb2wgaGFzTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQorCiAgICAg
dm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYgbWVzc2FnZSkgeyBBU1NFUlQobV9lcnJvck1l
c3NhZ2UuaXNOdWxsKCkpOyBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSk7IH0KICAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0K
LSAgICBWYWxpZGF0ZShFeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQorICAgIFZhbGlkYXRlKEV4
cHJlc3Npb25UeXBlIHJldHVyblR5cGUsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkp
CiAgICAgICAgIDogbV9yZXR1cm5UeXBlKHJldHVyblR5cGUpCisgICAgICAgICwgbV9tZW1vcnko
bWVtb3J5KQogICAgIHsKICAgICB9CiAKQEAgLTEzMSw2ICsxMzQsNyBAQCBwcml2YXRlOgogICAg
IEV4cHJlc3Npb25UeXBlIG1fcmV0dXJuVHlwZTsKICAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbHM7
CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOworICAgIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9u
JiBtX21lbW9yeTsKIH07CiAKIGJvb2wgVmFsaWRhdGU6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0
b3I8VHlwZT4mIGFyZ3MpCkBAIC0zNjcsOSArMzcxLDkgQEAgdm9pZCBWYWxpZGF0ZTo6ZHVtcChj
b25zdCBWZWN0b3I8Q29udHJvbAogICAgIC8vIFRoaW5rIG9mIHRoaXMgYXMgcGVuYW5jZSBmb3Ig
dGhlIHNpbiBvZiBiYWQgZXJyb3IgbWVzc2FnZXMuCiB9CiAKLVN0cmluZyB2YWxpZGF0ZUZ1bmN0
aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJl
KiBzaWduYXR1cmUsIGNvbnN0IEZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNl
KQorU3RyaW5nIHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qg
bGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgRnVuY3Rpb25JbmRleFNw
YWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkp
CiB7Ci0gICAgVmFsaWRhdGUgY29udGV4dChzaWduYXR1cmUtPnJldHVyblR5cGUpOworICAgIFZh
bGlkYXRlIGNvbnRleHQoc2lnbmF0dXJlLT5yZXR1cm5UeXBlLCBtZW1vcnkpOwogICAgIEZ1bmN0
aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0b3IoY29udGV4dCwgc291cmNlLCBsZW5ndGgsIHNp
Z25hdHVyZSwgZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICBpZiAoIXZhbGlkYXRvci5wYXJzZSgp
KSB7CiAgICAgICAgIC8vIEZJWE1FOiBhZGQgYmV0dGVyIGxvY2F0aW9uIGluZm9ybWF0aW9uIGhl
cmUuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDI4OApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgJKHJldmlzaW9u
IDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKLVN0cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IEZ1bmN0aW9uSW5kZXhTcGFjZSYpOworU3RyaW5n
IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJl
KiwgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5l
c0hlYWRlci5weQkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xNDMsNiArMTQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogYm9v
bCBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCkKIHsKKyAgICBpZiAoIWhhc01lbW9yeSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzd2l0Y2ggKG9wKSB7CiAiIiIgKyBsb2Fk
Q2FzZXMgKyAiIiIKICAgICB9CkBAIC0xNTAsNiArMTUzLDkgQEAgYm9vbCBWYWxpZGF0ZTo6bG9h
ZChMb2FkT3BUeXBlIG9wLCBFeHByZQogCiBib29sIFZhbGlkYXRlOjpzdG9yZShTdG9yZU9wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQz
Ml90KQogeworICAgIGlmICghaGFzTWVtb3J5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHN3aXRjaCAob3ApIHsKICIiIiArIHN0b3JlQ2FzZXMgKyAiIiIKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5jcHAJKHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZp
cm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUu
aCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTc4LDYgKzc5LDcgQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fbW9kdWxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGVO
YW1lc3BhY2VPYmplY3QpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21lbW9y
eSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0
RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9y
dEZ1bmN0aW9uKGkpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyMDk1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOworY2xhc3Mg
SlNXZWJBc3NlbWJseU1lbW9yeTsKIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIDogcHVi
bGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTY3LDMwICs2OCwzNCBAQCBw
dWJsaWM6CiAgICAgICAgIGltcG9ydEZ1bmN0aW9uKGlkeCktPnNldCh2bSwgdGhpcywgdmFsdWUp
OwogICAgIH0KIAotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3Jp
dGVCYXJyaWVyPEpTQ2VsbD4pPihzaXplb2YoSlNXZWJBc3NlbWJseUluc3RhbmNlKSk7Ci0gICAg
fQorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5Lmdl
dCgpOyB9CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBt
ZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1vcnkpOyB9CiAKICAgICBzdGF0aWMg
c2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVy
PEpTQ2VsbD4pICogaWR4OwogICAgIH0KIAotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNp
emUodW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9m
ZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICog
bnVtSW1wb3J0RnVuY3Rpb25zOwotICAgIH0KLQogcHJvdGVjdGVkOgogICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkKTsKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKKyAgICBzdGF0aWMgc2l6ZV90
IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSkpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUodW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2Vs
bD4pICogbnVtSW1wb3J0RnVuY3Rpb25zOworICAgIH0KKwogcHJpdmF0ZToKICAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKKyAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7CiAgICAgdW5zaWduZWQgbV9u
dW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjA5NTgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNiBAQAogCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2NvbnN0
IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5N
ZW1vcnkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1i
bHlNZW1vcnkpIH07CisKK0pTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6
OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bTo6TWVtb3J5PiYmIG1lbW9yeSkKIHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1lbW9yeT4odm0uaGVhcCkpIEpTV2ViQXNz
ZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShtZW1vcnkpKTsKICAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTQ0LDEx
ICs0OSwyOCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZVN0CiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFz
c2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYgbWVt
b3J5KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9tZW1vcnkoV1RGTW92ZSht
ZW1vcnkpKQogewogfQogCitKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZm
ZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIGlmIChtX2J1
ZmZlcldyYXBwZXIpCisgICAgICAgIHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7CisKKyAg
ICBhdXRvIGRlc3RydWN0b3IgPSBbXSAodm9pZCopIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byBkbyBhbnl0aGluZyBoZXJlIHRvIGRlc3Ryb3kgdGhlIG1lbW9yeS4KKyAgICAgICAgLy8g
VGhlIEFycmF5QnVmZmVyIGJhY2tpbmcgdGhlIEpTQXJyYXlCdWZmZXIgaXMgb25seSBvd25lZCBi
eSB1cywKKyAgICAgICAgLy8gc28gd2UgZ3VhcmFudGVlIGl0cyBsaWZlY3lsY2UuCisgICAgfTsK
KyAgICBtX2J1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVGcm9tQnl0ZXMobWVtb3J5KCktPm1l
bW9yeSgpLCBtZW1vcnkoKS0+c2l6ZSgpLCBXVEZNb3ZlKGRlc3RydWN0b3IpKTsKKyAgICBtX2J1
ZmZlcldyYXBwZXIuc2V0KHZtLCB0aGlzLCBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdC0+bV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5nZXQoKSwgbV9idWZmZXIuZ2V0KCkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChtX2J1ZmZlcldyYXBwZXIpOworICAgIHJldHVybiBtX2J1ZmZl
cldyYXBwZXIuZ2V0KCk7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTY2LDEw
ICs4OCw5IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbigKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX2J1ZmZlcldyYXBwZXIpOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTWVtb3J5IiwgJkJhc2U6
OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TWVtb3J5KSB9Owot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmgJKHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMjMgKzI5LDM1
IEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOworY2xhc3MgSlNBcnJheUJ1
ZmZlcjsKKwogY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJs
ZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNl
OwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShWTSYsIFN0cnVjdHVy
ZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmKTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAg
ICAgREVDTEFSRV9JTkZPOwogCisgICAgV2FzbTo6TWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBt
X21lbW9yeS5nZXQoKTsgfQorICAgIEpTQXJyYXlCdWZmZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0Kik7CisKIHByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwg
U3RydWN0dXJlKik7CisgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSosIHN0
ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OworICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVm
ZmVyPiBtX2J1ZmZlcldyYXBwZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwOTU4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTIgQEAKICNpbmNsdWRlICJKU09iamVj
dC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5j
bHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgogI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTkwLDYgKzkyLDEzIEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICAgICAgYXJnQ291bnQgPSBib3hlZEFyZ3Mu
c2l6ZSgpOwogICAgIH0KIAorICAgIC8vIFNldHVwIHRoZSBtZW1vcnkgdGhhdCB0aGUgZW50cmFu
Y2UgbG9hZHMuCisgICAgaWYgKEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IHdhc21GdW5j
dGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5KCkpIHsKKyAgICAgICAgV2FzbTo6TWVtb3J5KiB3YXNt
TWVtb3J5ID0gbWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAgdm0ud2FzbU1lbW9yeVBvaW50ZXIg
PSB3YXNtTWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAgdm0ud2FzbU1lbW9yeVNpemUgPSB3YXNt
TWVtb3J5LT5zaXplKCk7CisgICAgfQorCiAgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNhbGx5IHVz
ZSB0aGUgV2ViQXNzZWJseUZ1bmN0aW9uIGFzIHRoZSBjYWxsZWUgdG8gYmVnaW4gd2l0aCBpbiB0
aGUgUHJvdG9DYWxsRnJhbWUuCiAgICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGNh
bGxpbmcgaW50byB0aGUgbGxpbnQgbWF5IHN0YWNrIG92ZXJmbG93LCBhbmQgdGhlIHN0YWNrIG92
ZXJmbG93CiAgICAgLy8gaGFuZGxlciBtaWdodCByZWFkIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20g
dGhlIGNhbGxlZS4gVGhlIEpTV2ViQXNzZW1ibHlDYWxsZWUgZG9lc24ndCBoYXZlIGEKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5NTgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxl
RW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlN
ZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5
cGUuaCIKQEAgLTUxLDY0ICs1Miw2NiBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0CiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIHN0YXRlKQorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUlu
c3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9i
YWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CiAKICAgICAvLyBJZiBtb2R1bGVPYmplY3QgaXMgbm90IGEgV2ViQXNzZW1ibHkuTW9kdWxlIGlu
c3RhbmNlLCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSog
anNNb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihzdGF0ZS0+YXJn
dW1lbnQoMCkpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlID0ganNEeW5hbWlj
Q2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICgh
anNNb2R1bGUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
c3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiZmlyc3Qg
YXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1v
ZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoc3RhdGUt
PmFyZ3VtZW50KDApKSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIGEgV2Vi
QXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3Jt
YXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7
CiAKICAgICAvLyBJZiB0aGUgaW1wb3J0T2JqZWN0IHBhcmFtZXRlciBpcyBub3QgdW5kZWZpbmVk
IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhy
b3duLgotICAgIEpTVmFsdWUgaW1wb3J0QXJndW1lbnQgPSBzdGF0ZS0+YXJndW1lbnQoMSk7Cisg
ICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIEpTT2Jq
ZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsKICAgICBpZiAo
IWltcG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0
ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNz
ZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IiksIGRlZmF1bHRT
b3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50
IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIp
LCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1l
bnQpKSkpOwogCiAgICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMgaXMgbm90IGVt
cHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMg
dGhyb3duLgogICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSAmJiAhaW1w
b3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoInNlY29u
ZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIE9iamVjdCBiZWNhdXNl
IHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgaGFzIGltcG9ydHMiKSwgZGVmYXVsdFNvdXJjZUFwcGVu
ZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNz
ZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBPYmplY3QgYmVjYXVzZSB0aGUgV2ViQXNzZW1ibHkuTW9k
dWxlIGhhcyBpbXBvcnRzIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CiAKICAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElk
ZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAi
V2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKLSAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9k
dWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShzdGF0ZSwgdm0sIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5
LCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKLSAgICBTdHJ1Y3R1
cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3Nl
bWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rp
b246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9i
YWxPYmplY3QtPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0
cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKHN0YXRl
KSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwganNN
b2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpLCBtb2R1bGVJbmZv
cm1hdGlvbi5pbXBvcnRzLnNpemUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogCiAgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVzIGJlIGlu
aXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMsIFdlYkFz
c2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3RzLCByZXNw
ZWN0aXZlbHkuCiAgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qg
b2YgZXh0ZXJuYWwgdmFsdWVzLgogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyA9IDA7
CiAKICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDEzNQotICAgIC8vIEZJWE1FIGltcGxlbWVudCBNZW1vcnkgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAogICAgIC8vIEZJWE1F
IGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDEzMwogCisgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKICAgICAvLyBGb3Ig
ZWFjaCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0czoKICAgICBmb3IgKGF1dG8mIGltcG9ydCA6
IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsKICAgICAgICAgLy8gMS4gTGV0IG8gYmUgdGhl
IHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmplY3QsIGkubW9kdWxl
X25hbWUpLgotICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0gaW1wb3J0T2JqZWN0
LT5nZXQoc3RhdGUsIGltcG9ydC5tb2R1bGUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0gaW1wb3J0
T2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0Lm1vZHVsZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBub3Qg
T2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1
ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFs
KCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50
aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4gb2JqZWN0Iiks
IGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRNb2R1bGVW
YWx1ZSkpKSk7CisKICAgICAgICAgLy8gMy4gTGV0IHYgYmUgdGhlIHZhbHVlIG9mIHBlcmZvcm1p
bmcgR2V0KG8sIGkuaXRlbV9uYW1lKQogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
b2JqZWN0LT5nZXQoc3RhdGUsIGltcG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChl
eGVjLCBpbXBvcnQuZmllbGQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CisKICAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewogICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsOjpGdW5jdGlvbjogewogICAgICAgICAgICAgLy8gNC4gSWYgaSBpcyBh
IGZ1bmN0aW9uIGltcG9ydDoKICAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFibGUodikgaXMg
ZmFsc2UsIHRocm93IGEgVHlwZUVycm9yLgogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0
aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJp
bXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIs
IHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsdWUpKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFi
bGUiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHZhbHVlKSkp
KTsKICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwogICAgICAgICAg
ICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKICAg
ICAgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBpbXBvcnRlZEV4cG9ydHMgPSBqc0R5
bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihvYmplY3QpKSB7CkBAIC0xMzgsMTEgKzE0
MSwzNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7CiAgICAgICAgICAgICAv
LyA2LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKLSAgICAgICAgICAgIC8vIEZJWE1FIGltcGxl
bWVudCBNZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEz
NAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMg
c2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOworICAgICAgICAgICAg
aGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZhbHVlKTsKICAg
ICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdCwg
dGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMg
bm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSkpOworCisgICAgICAgICAg
ICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5LmluaXRpYWwoKTsKKyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJbml0aWFs
ID0gbWVtb3J5LT5tZW1vcnkoKS0+aW5pdGlhbCgpOworICAgICAgICAgICAgaWYgKGFjdHVhbElu
aXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0
aGF0IGlzIHRvbyBzbWFsbC4iKSkpKTsKKworICAgICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3Vu
dCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7
CisgICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnkt
Pm1lbW9yeSgpLT5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVt
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBh
ICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4
cGVjdGVkTWF4aW11bSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydHMg
J21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSIp
KSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGlp
LiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tN
ZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpH
bG9iYWw6IHsKQEAgLTE1NywxMyArMTgzLDI5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIG1vZHVsZVJlY29yZC0+bGlu
ayhzdGF0ZSwgaW5zdGFuY2UpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgeworICAgICAgICBib29sIGV4cGVjdHNNZW1vcnlJbXBvcnQgPSAhIW1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKTsKKyAg
ICAgICAgaWYgKGV4cGVjdHNNZW1vcnlJbXBvcnQgJiYgIWhhc01lbW9yeUltcG9ydCkgeworICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKKyAgICAgICAgICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJNb2R1bGUgaXMgZXhwZWN0aW5nIGEgbWVtb3J5IGltcG9ydCBidXQgb25lIHdhcyBub3Qg
cHJvdmlkZWQiKSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKyAgICAgICAgICAgIC8v
IFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KKyAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91
bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgICAgIGluc3RhbmNl
LT5zZXRNZW1vcnkodm0sCisgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVh
dGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1
Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtb2R1
bGVSZWNvcmQtPmxpbmsoZXhlYywgaW5zdGFuY2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgbW9kdWxlUmVjb3Jk
LT5kdW1wKCk7Ci0gICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVh
dGUoc3RhdGUpOworICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1
YXRlKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkZ1bmN0aW9u
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVBh
Z2VDb3VudC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0
cnVjdG9yLmx1dC5oIgogCkBAIC00MywxOSArNDcsNzUgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFz
c2VtYmx5TWVtb3J5Q29uc3RydQogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3Rh
dGUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFz
c2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVF
cnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1l
bnQgdGhlIE1lbW9yeSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGV4YWN0
bHkgb25lIGFyZ3VtZW50IikpKSk7CisKKyAgICBhdXRvIGdldFVpbnQzMiA9IFsmXSAoSlNWYWx1
ZSB2YWx1ZSkgLT4gdWludDMyX3QgeworICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1
ZS50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJ
TlRfTUFYKSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAor
ICAgICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5Lk1lbW9yeSBleHBlY3RzIHRoZSAnaW5pdGlhbCcgcHJvcGVydHkgdG8gYmUgYW4gaW50
ZWdlciBpbiB0aGUgcmFuZ2U6IFswLCAyXjMyIC0gMV0iKSkpOworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3Vi
bGVWYWx1ZSk7CisgICAgfTsKKworICAgIEpTT2JqZWN0KiBtZW1vcnlEZXNjcmlwdG9yOworICAg
IHsKKyAgICAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgICAg
ICBpZiAoIWFyZ3VtZW50LmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleGNlcHRzIGl0cyBmaXJzdCBh
cmd1bWVudCB0byBiZSBhbiBvYmplY3QiKSkpKTsKKyAgICAgICAgbWVtb3J5RGVzY3JpcHRvciA9
IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3VtZW50KTsKKyAgICB9CisKKyAgICBXYXNtOjpQYWdlQ291
bnQgbWluU2l6ZTsKKyAgICB7CisgICAgICAgIElkZW50aWZpZXIgaW5pdGlhbCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgICAgICBKU1ZhbHVlIG1pblNpemVW
YWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBpbml0aWFsKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICB1aW50MzJfdCBzaXpl
ID0gZ2V0VWludDMyKG1pblNpemVWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQo
c2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5Lk1lbW9yeSBpbnZhbGlkICdpbml0aWFsJyBwYWdlIGNvdW50IikpKSk7CisgICAg
ICAgIG1pblNpemUgPSBXYXNtOjpQYWdlQ291bnQoc2l6ZSk7CisgICAgfQorCisgICAgV2FzbTo6
UGFnZUNvdW50IG1heFNpemU7CisgICAgeworICAgICAgICBJZGVudGlmaWVyIG1heGltdW0gPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW0iKTsKKyAgICAgICAgYm9vbCBoYXNQ
cm9wZXJ0eSA9IG1lbW9yeURlc2NyaXB0b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW0pOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIGlm
IChoYXNQcm9wZXJ0eSkgeworICAgICAgICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1v
cnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgbWF4aW11bSk7CisgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgICAgICB1aW50MzJfdCBzaXplID0g
Z2V0VWludDMyKG1heFNpemVWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIVdhc206OlBhZ2VDb3Vu
dDo6aXNWYWxpZChzaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBpbnZhbGlkICdpbml0aWFsJyBwYWdlIGNv
dW50IikpKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CisgICAgICAgICAgICBtYXhTaXplID0gV2FzbTo6UGFnZUNvdW50KHNpemUpOworCisgICAg
ICAgICAgICBpZiAobWluU2l6ZSA+IG1heFNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2Vt
Ymx5Lk1lbW9yeSBwcm92aWRlZCBhICdtYXhpbXVtJyBwYWdlIGNvdW50IHRoYXQgc21hbGxlciB0
aGFuIHRoZSAnaW5pdGlhbCcgcGFnZSBjb3VudCIpKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0g
c3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KG1pblNpemUsIG1heFNpemUpOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwg
V1RGTW92ZShtZW1vcnkpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJl
Q2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJXZWJBc3NlbWJseS5NZW1v
cnkiKSk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRB
c0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiV2ViQXNzZW1ibHkuTWVtb3J5
IikpOwogfQogCiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNz
ZW1ibHlNZW1vcnlQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDkgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJGdW5jdGlv
blByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogCiAjaW5jbHVkZSAi
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUubHV0LmgiCiAKQEAgLTQyLDEwICs0NCwxOSBAQCBj
b25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5CiAgQGVuZAogICovCiAKLVdl
YkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6Y3Jl
YXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5j
QnVmZmVyKEV4ZWNTdGF0ZSopOworCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFz
c2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1v
cnkqPihleGVjLT50aGlzVmFsdWUoKSk7IAorICAgIFJFTEVBU0VfQVNTRVJUKCEhbWVtb3J5KTsg
Ly8gIEZJWE1FCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtZW1vcnktPmJ1ZmZlcihleGVj
LT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKK30KKworV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGUqIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsK
ICAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJs
eU1lbW9yeVByb3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKHZt
LCBzdHJ1Y3R1cmUpOwotICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG9iamVj
dC0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIG9iamVjdDsK
IH0KIApAQCAtNTQsOSArNjUsMTAgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZTo6YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
IH0KIAotdm9pZCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQordm9pZCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBKU0NfTkFUSVZFX0dFVFRFUigiYnVmZmVyIiwgd2ViQXNzZW1ibHlN
ZW1vcnlQcm90b0Z1bmNCdWZmZXIsIERvbnRFbnVtIHwgQWNjZXNzb3IpOwogfQogCiBXZWJBc3Nl
bWJseU1lbW9yeVByb3RvdHlwZTo6V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaAkocmV2aXNpb24g
MjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAg
ICAgREVDTEFSRV9JTkZPOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwogCiBw
cml2YXRlOgogICAgIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296623</attachid>
            <date>2016-12-08 19:42:29 -0800</date>
            <delta_ts>2016-12-09 12:43:45 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>75184</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCShyZXZpc2lvbiAyMDk1ODMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxNyBAQCBjb25zdCBfaW1wb3J0RnVuY3Rp
b25Db250aW51YXRpb24gPSAoYnVpCiAgICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRNZW1vcnlD
b250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICBy
ZXR1cm4gKG1vZHVsZSwgZmllbGQsIHtpbml0aWFsLCBtYXhpbXVtfSkgPT4geworICAgICAgICBh
c3NlcnQuaXNTdHJpbmcobW9kdWxlLCBgSW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUg
YSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmll
bGQsIGBJbXBvcnQgZnVuY3Rpb24gZmllbGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7Zmll
bGR9ImApOworICAgICAgICAvLyBGSVhNRTogd2hhdCB2YWxpZGF0aW9uIHNob3VsZCBJIGRvIGhl
cmU/CisgICAgICAgIC8vYXNzZXJ0LmlzTnVtYmVyKGZpZWxkLCBgSW1wb3J0IGZ1bmN0aW9uIGZp
ZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKKyAgICAgICAgc2VjdGlv
bi5kYXRhLnB1c2goeyBtb2R1bGUsIGZpZWxkLCBraW5kOiAiTWVtb3J5IiwgbWVtb3J5RGVzY3Jp
cHRpb246IHtpbml0aWFsLCBtYXhpbXVtfX0pOworICAgICAgICByZXR1cm4gbmV4dEJ1aWxkZXI7
CisgICAgfTsKK307CisKIGNvbnN0IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWls
ZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoZmllbGQsIGluZGV4
LCB0eXBlKSA9PiB7CiAgICAgICAgIGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEV4cG9ydCBmdW5j
dGlvbiBmaWVsZCBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHtmaWVsZH0iYCk7CkBAIC0xMTAs
NiArMTIxLDcgQEAgY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aQogICAg
ICAgICAgICAgLy8gRXhwb3J0cyBjYW4gbGVhdmUgdGhlIHR5cGUgdW5zcGVjaWZpZWQsIGxldHRp
bmcgdGhlIENvZGUgYnVpbGRlciBwYXRjaCB0aGVtIHVwIGxhdGVyLgogICAgICAgICAgICAgdHlw
ZSA9IF9tYXliZVJlZ2lzdGVyVHlwZShidWlsZGVyLCB0eXBlKTsKICAgICAgICAgfQorCiAgICAg
ICAgIC8vIFdlIGNhbid0IGNoZWNrIG11Y2ggYWJvdXQgImluZGV4IiBoZXJlIGJlY2F1c2UgdGhl
IENvZGUgc2VjdGlvbiBzdWNjZWVkcyB0aGUgRXhwb3J0IHNlY3Rpb24uIE1vcmUgd29yayBpcyBk
b25lIGF0IENvZGUoKS5FbmQoKSB0aW1lLgogICAgICAgICBzd2l0Y2ggKHR5cGVvZihpbmRleCkp
IHsKICAgICAgICAgY2FzZSAic3RyaW5nIjogYnJlYWs7IC8vIEFzc3VtZSBpdCdzIGEgZnVuY3Rp
b24gbmFtZSB3aGljaCB3aWxsIGJlIHJldmVhbGVkIGluIHRoZSBDb2RlIHNlY3Rpb24uCkBAIC0x
MjUsNiArMTM3LDcgQEAgY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgRXhw
b3J0IHNlY3Rpb24ncyBpbmRleCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBnb3QgJHtp
bmRleH1gKTsKICAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IGNvcnJlc3BvbmRpbmdJbXBvcnQg
PSBidWlsZGVyLl9nZXRGdW5jdGlvbkZyb21JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgY29u
c3QgaW1wb3J0U2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIkltcG9ydCIpOwogICAgICAg
ICBpZiAodHlwZW9mKGluZGV4KSA9PT0gIm9iamVjdCIpIHsKQEAgLTM2OCwxMCArMzgxLDEwIEBA
IGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbXBvcnRCdWlsZGVyID0gewogICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0
aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3IEVy
cm9yKGBVbmltcGxlbWVudGVkOiBpbXBvcnQgdGFibGVgKTsgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE1lbW9yeTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGlt
cG9ydCBtZW1vcnlgKTsgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbDogKCkgPT4g
eyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCBnbG9iYWxgKTsgfSwKICAg
ICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5G
dW5jdGlvbiA9IF9pbXBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWls
ZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0QnVpbGRlci5NZW1vcnkgPSBfaW1wb3J0
TWVtb3J5Q29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaW1wb3J0QnVpbGRlcjsKICAgICAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNDY1LDcgKzQ3OCw4IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNz
IEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlLnR5cGUpID09PSAidW5k
ZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgbXVzdCBiZSBhIGZ1bmN0aW9uIGV4cG9ydCBmcm9tIHRoZSBDb2RlIHNlY3Rpb24gKHJlLWV4
cG9ydHMgd2VyZSBoYW5kbGVkIGVhcmxpZXIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGltcG9ydFNlY3Rp
b24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL2NvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGlt
cG9ydFNlY3Rpb24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbkluZGV4U3BhY2VPZmZz
ZXQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1
bmN0aW9uSW5kZXggPSBlLmluZGV4IC0gZnVuY3Rpb25JbmRleFNwYWNlT2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudHlwZSA9IGNvZGVTZWN0aW9uLmRh
dGFbZnVuY3Rpb25JbmRleF0udHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KSW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCShy
ZXZpc2lvbiAyMDk1ODMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFy
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsMjkgQEAgY29uc3QgZW1pdHRlcnMgPSB7
CiAgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLmV4dGVybmFsS2luZFZhbHVlW2Vu
dHJ5LmtpbmRdKTsKICAgICAgICAgICAgIHN3aXRjaCAoZW50cnkua2luZCkgewogICAgICAgICAg
ICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmV4
cGVjdGVkIGtpbmQgJHtlbnRyeS5raW5kfWApOwotICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb24i
OiBwdXQoYmluLCAidmFydWludDMyIiwgZW50cnkudHlwZSk7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAiRnVuY3Rpb24iOiB7CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIs
IGVudHJ5LnR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50
ZWRgKTsKLSAgICAgICAgICAgIGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHll
dCBpbXBsZW1lbnRlZGApOworICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjogeworICAgICAgICAg
ICAgICAgIGxldCB7aW5pdGlhbCwgbWF4aW11bX0gPSBlbnRyeS5tZW1vcnlEZXNjcmlwdGlvbjsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGNvZXJjZSB0aGlzIHRvIGEgbnVt
YmVyIG1heWJlPyBPciB2YWxpZGF0ZSBtb3JlPworICAgICAgICAgICAgICAgIGFzc2VydC50cnV0
aHkodHlwZW9mIGluaXRpYWwgPT09ICJudW1iZXIiLCAiRXhlY3B0IGEgbnVtYmVyIG9mIHVuZGVm
aW5lZCBmb3IgJ21heGltdW0nIik7CisgICAgICAgICAgICAgICAgaW5pdGlhbCB8PSAwOworICAg
ICAgICAgICAgICAgIGxldCBoYXNNYXhpbXVtID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodHlw
ZW9mIG1heGltdW0gPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgICAgIG1heGltdW0g
fD0gMDsKKyAgICAgICAgICAgICAgICAgICAgaGFzTWF4aW11bSA9IDE7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSh0eXBlb2YgbWF4
aW11bSA9PT0gInVuZGVmaW5lZCIsICJFeGVjcHQgYSBudW1iZXIgb2YgdW5kZWZpbmVkIGZvciAn
bWF4aW11bSciKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHV0KGJpbiwg
InZhcnVpbnQzMiIsIGhhc01heGltdW0pOworICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1
aW50MzIiLCBpbml0aWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzTWF4aW11bSkKKyAgICAg
ICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIG1heGltdW0pOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGNhc2UgIkdsb2JhbCI6
IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnkuanMJKG5vbmV4aXN0ZW50
KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21lbW9yeS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE1MiBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CisK
K2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKSB7CisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIGFzc2VydGlvbiIpOworICAgIH0KK30KKworcHJpbnQoKTsKK2Z1bmN0aW9uIGJp
bmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIpIHsKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldl
YkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAg
ICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIH0g
Y2F0Y2goZSkgeworICAgICAgICBwcmludChlKTsKKyAgICAgICAgcHJpbnQoKTsKKyAgICAgICAg
dGhyZXcgPSB0cnVlOworICAgIH0KKyAgICBhc3NlcnQodGhyZXcpOworfQorCit7CisgICAgLy8g
Q2FuJ3QgZGVjbGFyZSBtb3JlIHRoYW4gb25lIG1lbW9yeS4KKyAgICBjb25zdCBidWlsZGVyID0g
KG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgp
Lk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIHtpbml0aWFsOiAyMH0pLkVuZCgpCisgICAgICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMSwgMSku
RW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAg
LkVuZCgpOworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIpOworfQorCit7CisgICAg
Ly8gQ2FuJ3QgZGVjbGFyZSBtb3JlIHRoYW4gb25lIG1lbW9yeS4KKyAgICBjb25zdCBidWlsZGVy
ID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9y
dCgpCisgICAgICAgICAgICAuTWVtb3J5KCJpbXAiLCAibWVtb3J5Iiwge2luaXRpYWw6IDIwfSkK
KyAgICAgICAgICAgIC5NZW1vcnkoImltcCIsICJtZW1vcnkiLCB7aW5pdGlhbDogMzB9KQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgp
LkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgLkVuZCgpOworICAgIGJpbmFyeVNob3Vs
ZE5vdFBhcnNlKGJ1aWxkZXIpOworfQorCit7CisgICAgLy8gaW5pdGlhbCBtdXN0IGJlIDw9IG1h
eGltdW0uCisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwg
Im1lbW9yeSIsIHtpbml0aWFsOiAyMCwgbWF4aW11bTogMTl9KQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpLkVuZCgpCisgICAgICAg
IC5Db2RlKCkKKyAgICAgICAgLkVuZCgpOworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxk
ZXIpOworfQorCit7CisgICAgLy8gTm8gbG9hZHMgd2hlbiBubyBtZW1vcnkgZGVmaW5lZC4KKyAg
ICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5GdW5jdGlvbigiZm9vIikuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9
KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5JMzJMb2Fk
KDIsIDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlcik7Cit9CisK
K3sKKyAgICAvLyBObyBzdG9yZXMgd2hlbiBubyBtZW1vcnkgZGVmaW5lZC4KKyAgICBjb25zdCBi
dWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAg
LkltcG9ydCgpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAg
ICAgICAuRXhwb3J0KCkuRnVuY3Rpb24oImZvbyIpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFsiaTMyIl0gfSkKKyAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAg
ICAgICAgICAgICAuSTMyU3RvcmUoMiwgMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBiaW5hcnlTaG91bGROb3RQ
YXJzZShidWlsZGVyKTsKK30KKworCitmdW5jdGlvbiB0ZXN0KGYsIGNvdW50ID0gMTAwMCkgewor
ICAgIHJldHVybjsKKworICAgIG5vSW5saW5lKGYpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykgeworICAgICAgICBmKGkpOworICAgIH0KK30KKwordGVzdChmdW5jdGlvbigp
IHsKKyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAyMCwgbWF4aW11bTog
MjB9OworICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5
RGVzY3JpcHRpb24pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAg
ICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogWyJp
MzIiLCAiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkK
KyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuSTMyU3RvcmUo
MiwgMCkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkKKyAgICAgICAgICAgICAgICAuSTMy
TG9hZCgyLCAwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgp
CisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHko
KS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7
CisgICAgY29uc3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlw
dGlvbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7IGltcDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pOworICAgIGNvbnN0IGZvbyA9IGluc3Rh
bmNlLmV4cG9ydHMuZm9vOworICAgIC8vIGZvbyh2YWx1ZSwgYWRkcmVzcykKKworICAgIGNvbnN0
IHBhZ2VTaXplID0gNjQgKiAxMDI0OworICAgIGNvbnN0IGJ5dGVzID0gbWVtb3J5RGVzY3JpcHRp
b24uaW5pdGlhbCAqIHBhZ2VTaXplOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGJ5dGVzLzQp
OyBpKyspIHsKKyAgICAgICAgbGV0IHZhbHVlID0gaSArIDE7CisgICAgICAgIGxldCBhZGRyZXNz
ID0gaSAqIDQ7CisgICAgICAgIGxldCByZXN1bHQgPSBmb28odmFsdWUsIGFkZHJlc3MpOworICAg
ICAgICBhc3NlcnQocmVzdWx0ID09PSB2YWx1ZSk7CisgICAgICAgIGxldCBhcnJheUJ1ZmZlciA9
IG1lbW9yeS5idWZmZXI7CisgICAgICAgIGxldCBidWZmZXIgPSBuZXcgVWludDMyQXJyYXkoYXJy
YXlCdWZmZXIpOworICAgICAgICBhc3NlcnQoYnVmZmVyW2ldID09PSB2YWx1ZSk7CisgICAgfQor
fSwgMik7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjks
NyBAQAogI2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ckxvZy5oIgogI2luY2x1ZGUgIldhc21QbGFuLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgog
I2luY2x1ZGUgPGxvY2FsZS5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5o
PgpAQCAtMjYzMiw2ICsyNjMzLDE5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmMKICAgICAgICAgICAgIH0pOwogICAgIH0KIAorICAgIHZvaWQqIG1lbW9yeUJ5dGVz
ID0gbnVsbHB0cjsKKyAgICB1aW50MzJfdCBtZW1vcnlTaXplID0gMDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2FzbTo6TWVtb3J5PiBtZW1vcnk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1v
ZHVsZUluZm9ybWF0aW9uPiBtb2R1bGVJbmZvcm1hdGlvbiA9IHBsYW4udGFrZU1vZHVsZUluZm9y
bWF0aW9uKCk7CisKKyAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5KSB7CisgICAg
ICAgIG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1h
dGlvbi0+bWVtb3J5LmluaXRpYWwoKSwgbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5tYXhpbXVt
KCkpOworICAgICAgICBtZW1vcnlCeXRlcyA9IG1lbW9yeS0+bWVtb3J5KCk7CisgICAgICAgIG1l
bW9yeVNpemUgPSBtZW1vcnktPnNpemUoKTsKKyAgICB9CisgICAgdm0ud2FzbU1lbW9yeVBvaW50
ZXIgPSBtZW1vcnlCeXRlczsKKyAgICB2bS53YXNtTWVtb3J5U2l6ZSA9IG1lbW9yeVNpemU7CisK
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7CiAgICAg
ICAgIEpTQXJyYXkqIHRlc3RDYXNlcyA9IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+YXJndW1lbnQo
aSArIDIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCB0ZXN0SW5kZXggPSAwOyB0ZXN0SW5kZXgg
PCB0ZXN0Q2FzZXMtPmxlbmd0aCgpOyArK3Rlc3RJbmRleCkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RXYXNtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdFdhc20uY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdFdhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNiArMTkyLDggQEAgc3RhdGlj
IHZvaWQgY2hlY2tQbGFuKFBsYW4mIHBsYW4sIHVuc2lnbgogLy8gRm9yIG5vdyB3ZSBpbmxpbmUg
dGhlIHRlc3QgZmlsZXMuCiBzdGF0aWMgdm9pZCBydW5XYXNtVGVzdHMoKQogeworICAgIFVOVVNF
RF9QQVJBTShjaGVja1BsYW4pOworICAgIC8qCiAgICAgewogICAgICAgICAvLyBHZW5lcmF0ZWQg
ZnJvbToKICAgICAgICAgLy8gICAgKG1vZHVsZQpAQCAtMTMyMCw2ICsxMzIyLDcgQEAgc3RhdGlj
IHZvaWQgcnVuV2FzbVRlc3RzKCkKICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
anNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEwMCksIGJveCg2KSB9KSwg
MCk7CiAgICAgfQogCisgICAgKi8KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDk1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyOSw2ICsxNDI5LDkgQEAKIAkJNzlCMDBDQkUxQzZB
QjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QjAwQ0JBMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9i
amVjdC5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tb3B0aW1pemUt
c2libGluZy1jYWxscyI7IH07IH07CiAJCTc5QjAwQ0JGMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94
eU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlCMDBDQkIxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlCMTc4OEUxRDM5OUI4MDAwQjFB
NTY3IC8qIEpJVE1hdGhJQ0ZvcndhcmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElDRm9y
d2FyZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3OUI3NTk3NDFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5Qjc1OTcxMURG
QTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICovOyB9OworCQk3OUI3
NTk3NTFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUI3NTk3MjFERkE0QzYwMDA1
MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8qIFdh
c21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5Qjc1OTczMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtUGFnZUNvdW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlCODE5OTMxREQyNUNG
NTAwRERDNzE0IC8qIEpTR2xvYmFsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlCODE5OTIxREQyNUNGNTAwRERDNzE0IC8qIEpT
R2xvYmFsT2JqZWN0SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5QzRCMTVEMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVCMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJNzlDNEIxNUUxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QzRCMTVDMUJBMjE1
OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM4NjAsNiAr
Mzg2Myw5IEBACiAJCTc5QjAwQ0I5MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5Q29uc3RydWN0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlCMDBDQkExQzZBQjA3RTAwODhDNjVEIC8q
IFByb3h5T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBy
b3h5T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlCMDBDQkIxQzZB
QjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByb3h5T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5Qjc1
OTcxMURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8q
IFdhc21NZW1vcnlJbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzlCNzU5NzMxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVBhZ2VDb3VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OUI4MTk5MjFERDI1Q0Y1MDBEREM3MTQgLyogSlNHbG9iYWxPYmplY3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBG
RDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNl
cnZhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEy
MTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYwMjQsOCArNjAzMCwx
MSBAQAogCQkJCTUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIu
aCAqLywKIAkJCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8s
CiAJCQkJNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLywKKwkJCQk3
OUI3NTk3MTFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCAqLywK
KwkJCQk3OUI3NTk3MjFERkE0QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgg
Ki8sCiAJCQkJNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3Bw
ICovLAogCQkJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmgg
Ki8sCisJCQkJNzlCNzU5NzMxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLywK
IAkJCQk1M0Y0MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovLAogCQkJCTUz
MTM3NEJFMUQ1Q0U5NTAwMEFGN0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCiAJCQkJNTMxMzc0QkMx
RDVDRTY3NjAwQUY3QTBCIC8qIFdhc21QbGFuLmggKi8sCkBAIC03OTgzLDYgKzc5OTIsNyBAQAog
CQkJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5OEVENjc1MUJFRDc2OEMwMEREODAxNyAvKiBS
ZW1vdGVDb250cm9sbGFibGVUYXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0Y4MUMx
MzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzlCNzU5NzYxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZH
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYg
LyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjIyLDYgKzgyMzIs
NyBAQAogCQkJCUJDMDJFOThEMEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3RhbmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzAyRTkwRjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzFCMUJEQTA4RDEwMDMzMUI4NCAvKiBFcnJv
clByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5Qjc1OTc1MURGQTRDNjAwMDUy
MTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEw
Nzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTQ5ODIwNDE4OTFEMEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTk2NDcsNiArOTY1OCw3IEBACiAJCQkJQzJGQ0FFMTAxN0E5QzI0RTAwMzRD
NzM1IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFB
QTEwN0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNzA5NEM0REUxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzlCNzU5NzQxREZBNEM2MDAwNTIxNzRDIC8qIFdh
c21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkZDQUUxMjE3QTlD
MjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMzM4RTBEMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTY1QjgzOTJGMUJBQ0FENkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVy
eS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
cmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBAIHB1YmxpYzoKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNDQxCiAgICAgRXhlY1N0YXRlKiB0
b3BDYWxsRnJhbWU7CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB0b3BKU1dlYkFzc2VtYmx5
SW5zdGFuY2U7CisgICAgdm9pZCogd2FzbU1lbW9yeVBvaW50ZXI7CisgICAgdWludDMyX3Qgd2Fz
bU1lbW9yeVNpemU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0g
bnVsbHB0cjsKIAotICAgIEIzSVJHZW5lcmF0b3IoTWVtb3J5KiwgUHJvY2VkdXJlJiwgV2FzbUlu
dGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mKTsKKyAgICBC
M0lSR2VuZXJhdG9yKE1lbW9yeUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFs
RnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mKTsKIAogICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mKTsKICAg
ICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC0x
NzksNyArMTc5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNv
bnN0IEV4cHJlc3Npb25MaXN0JiByZXN1bHRTdGFjaywgUmVzdWx0TGlzdCYgc3RhY2spOwogICAg
IFZhbHVlKiB6ZXJvRm9yVHlwZShUeXBlKTsKIAotICAgIE1lbW9yeSogbV9tZW1vcnk7CiAgICAg
UHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAg
VmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CkBAIC0xODksOSArMTg4LDggQEAgcHJpdmF0ZToK
ICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW251bVR5cGVzXTsKIH07CiAKLUIzSVJHZW5lcmF0b3I6
OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNt
SW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCi0gICAgOiBtX21lbW9yeShtZW1vcnkpCi0g
ICAgLCBtX3Byb2MocHJvY2VkdXJlKQorQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1v
cnlJbmZvcm1hdGlvbiYgbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFs
RnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgIDogbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CiAgICAg
bV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKQEAgLTIxMCwxMiArMjA4LDEyIEBA
IEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW0KICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtX21lbW9yeSkgewotICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtX21l
bW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgaWYgKCEhbWVt
b3J5KSB7CisgICAgICAgIG1fbWVtb3J5QmFzZUdQUiA9IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMo
KS5iYXNlTWVtb3J5UG9pbnRlcjsKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5
QmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVCghbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNp
emVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IG1f
bWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsK
LSAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiBpbmZvIDogbV9tZW1v
cnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCisgICAgICAgIEFTU0VSVCghbWVt
b3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CisgICAg
ICAgIG1fbWVtb3J5U2l6ZUdQUiA9IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0
ZXJzWzBdLnNpemVSZWdpc3RlcjsKKyAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0
ZXJJbmZvJiBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCiAg
ICAgICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIoaW5mby5zaXplUmVnaXN0ZXIpOwogCiAgICAg
ICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKQEAgLTY1OSw3ICs2NTcsNyBAQCB2
b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvCiAgICAgZGF0YUxvZ0xuKCJc
biIpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1Rv
V2FzbVdyYXBwZXIoVk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgTWVtb3J5KiBtZW1vcnkpCitzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZtLCBjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1haW5GdW5jdGlv
biwgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IHByb2MuYWRkQmxvY2soKTsKQEAgLTY4MSwxMiArNjc5LDEz
IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWEKICAgICAvLyBNb3Zl
IG1lbW9yeSB2YWx1ZXMgdG8gdGhlIGFwcHJvcmlhdGUgcGxhY2VzLCBpZiBuZWVkZWQuCiAgICAg
VmFsdWUqIGJhc2VNZW1vcnkgPSBudWxscHRyOwogICAgIFZlY3RvcjxWYWx1ZSo+IHNpemVzOwot
ICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgYmFzZU1lbW9yeSA9IGJsb2NrLT5hcHBlbmROZXc8
Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1lbW9yeS0+bWVtb3J5KCkpOworICAgIGlm
ICghIW1lbW9yeSkgeworICAgICAgICBiYXNlTWVtb3J5ID0gYmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50NjQsIE9yaWdpbigpLAorICAgICAgICAgICAgYmxvY2st
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZtLndhc21NZW1vcnlQ
b2ludGVyKSk7CiAgICAgICAgIFZhbHVlKiBzaXplID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAotICAgICAgICAgICAgYmxvY2stPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PGNoYXIq
PihtZW1vcnkpICsgTWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOwotICAgICAgICBzaXplcy5yZXNl
cnZlQ2FwYWNpdHkobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNpemUo
KSk7Ci0gICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5z
aXplUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAmdm0ud2FzbU1lbW9yeVNpemUpKTsKKyAgICAgICAgc2l6ZXMu
cmVzZXJ2ZUNhcGFjaXR5KG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzLnNp
emUoKSk7CisgICAgICAgIGZvciAoYXV0byBpbmZvIDogbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygp
LnNpemVSZWdpc3RlcnMpIHsKICAgICAgICAgICAgIHNpemVzLmFwcGVuZChibG9jay0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBzaXplLAogICAgICAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaW5mby5zaXplT2Zm
c2V0KSkpOwogICAgICAgICB9CkBAIC03MDAsMTEgKzY5OSwxMSBAQCBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhCiAKICAgICAvLyBNb3ZlIHRoZSBhcmd1bWVudHMgaW50
byBwbGFjZS4KICAgICBWYWx1ZSogcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0
dXBDYWxsKHByb2MsIGJsb2NrLCBPcmlnaW4oKSwgYXJndW1lbnRzLCB0b0IzVHlwZShzaWduYXR1
cmUtPnJldHVyblR5cGUpLCBbJl0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewotICAg
ICAgICBpZiAobWVtb3J5KSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZXMuc2l6ZSgpID09IG1l
bW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYmFzZU1lbW9yeSwgVmFsdWVS
ZXA6OnJlZyhtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKSkpOwor
ICAgICAgICBpZiAoISFtZW1vcnkpIHsKKyAgICAgICAgICAgIEFTU0VSVChzaXplcy5zaXplKCkg
PT0gbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGJhc2VNZW1vcnksIFZh
bHVlUmVwOjpyZWcobWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyKSkp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHNp
emVzW2ldLCBWYWx1ZVJlcDo6cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lz
dGVyc1tpXS5zaXplUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKENvbnN0cmFpbmVkVmFsdWUoc2l6ZXNbaV0sIFZhbHVlUmVwOjpyZWcobWVtb3J5LnBpbm5l
ZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOwogICAgICAgICB9
CiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CkBAIC03MzgsNyArNzM3
LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYQogICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJvYyk7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgY29u
c3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBNZW1vcnkq
IG1lbW9yeSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IEZ1bmN0aW9uSW5kZXhT
cGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCB1bnNpZ25lZCBvcHRMZXZlbCkKK3N0ZDo6dW5pcXVl
X3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgY29uc3Qg
dWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBNZW1vcnlJbmZv
cm1hdGlvbiYgbWVtb3J5LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgRnVuY3Rp
b25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIHVuc2lnbmVkIG9wdExldmVsKQogewog
ICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtSW50ZXJuYWxGdW5jdGlvbj4o
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5oCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIGV4dGVy
biAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAotY2xhc3MgTWVtb3J5OworY2xhc3MgTWVtb3J5SW5mb3JtYXRpb247CiAK
LXN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZN
JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgTWVtb3J5KiwgY29uc3QgU2lnbmF0dXJlKiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiwg
dW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKK3N0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5j
dGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgTWVtb3J5
SW5mb3JtYXRpb24mLCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCBjb25zdCBGdW5jdGlvbkluZGV4U3BhY2UmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEp
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRm9ybWF0LmNwcAkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDgg
KzMzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotTW9kdWxlSW5m
b3JtYXRpb246On5Nb2R1bGVJbmZvcm1hdGlvbigpIHsgfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw5IEBACiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIldhc21N
ZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKKyNpbmNsdWRlICJXYXNt
UGFnZUNvdW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTk1LDggKzk3LDYgQEAgc3RydWN0IEltcG9ydCB7CiAgICAgdW5zaWduZWQga2luZEluZGV4
OyAvLyBJbmRleCBpbiB0aGUgdmVjdG9yIG9mIHRoZSBjb3JyZXNwb25kaW5nIGtpbmQuCiB9Owog
Ci1jbGFzcyBNZW1vcnk7Ci0KIHN0cnVjdCBFeHBvcnQgewogICAgIElkZW50aWZpZXIgZmllbGQ7
CiAgICAgRXh0ZXJuYWw6OktpbmQga2luZDsKQEAgLTExOSwxMyArMTE5LDEwIEBAIHN0cnVjdCBN
b2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgVmVjdG9yPEltcG9ydD4gaW1wb3J0czsKICAgICBWZWN0
b3I8U2lnbmF0dXJlKj4gaW1wb3J0RnVuY3Rpb25zOwogICAgIC8vIEZJWE1FIGltcGxlbWVudCBp
bXBvcnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEz
NQotICAgIC8vIEZJWE1FIGltcGxlbWVudCBpbXBvcnQgTWVtb3J5IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgaW1w
b3J0IEdsb2JhbCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMz
CiAgICAgVmVjdG9yPFNpZ25hdHVyZSo+IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVzOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1lbW9yeTsKKyAgICBNZW1vcnlJbmZvcm1hdGlvbiBt
ZW1vcnk7CiAgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKLQotICAgIH5Nb2R1bGVJbmZvcm1h
dGlvbigpOwogfTsKIAogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGwgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJKHJldmlzaW9uIDIwOTU4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxNCArMzAsMTggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAotTWVtb3J5OjpNZW1vcnkodWludDMyX3Qgc3RhcnRpbmdTaXplLCB1aW50MzJfdCBjYXBh
Y2l0eSwgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcGlubmVkU2l6ZVJlZ2lzdGVycykKK01lbW9y
eTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSkKICAgICA6IG1f
bW9kZShNb2RlOjpCb3VuZHNDaGVja2luZykKLSAgICAsIG1fc2l6ZShzdGFydGluZ1NpemUpCi0g
ICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5KQorICAgICwgbV9zaXplKGluaXRpYWwuYnl0ZXMoKSkK
KyAgICAsIG1fY2FwYWNpdHkobWF4aW11bSA/IG1heGltdW0uYnl0ZXMoKSA6IFBhZ2VDb3VudDo6
bWF4KCkuYnl0ZXMoKSkKKyAgICAsIG1faW5pdGlhbChpbml0aWFsKQorICAgICwgbV9tYXhpbXVt
KG1heGltdW0pCiAgICAgLy8gRklYTUU6IElmIHdlIGFkZCBzaWduYWwgYmFzZWQgYm91bmRzIGNo
ZWNraW5nIHRoZW4gd2UgbmVlZCBleHRyYSBzcGFjZSBmb3Igb3ZlcmZsb3cgb24gbG9hZC4KICAg
ICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2OTMK
LSAgICAsIG1fbWFwcGVkQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heFBhZ2VDb3Vu
dCkgKiBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocGFnZVNpemUpKQorICAgICwgbV9tYXBwZWRDYXBh
Y2l0eShQYWdlQ291bnQ6Om1heCgpLmJ5dGVzKCkpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1h
eGltdW0gfHwgbWF4aW11bSA+PSBpbml0aWFsKTsgLy8gVGhpcyBzaG91bGQgYmUgZ2F1YXJhbnRl
ZWQgYnkgb3VyIGNhbGxlci4KKwogICAgIEFTU0VSVChwaW5uZWRTaXplUmVnaXN0ZXJzLnNpemUo
KSA+IDApOwogCiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIGEgVk0g
dGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MzYwMApAQCAtNTAsMjUgKzU0LDEyIEBAIE1lbW9yeTo6TWVtb3J5KHVpbnQzMl90IHN0
YXJ0aW5nU2l6ZSwgdWkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBBU1NFUlQo
c3RhcnRpbmdTaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOwotICAgIGlmIChtcHJvdGVjdChyZXN1
bHQsIHN0YXJ0aW5nU2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKKyAgICBBU1NFUlQo
bV9zaXplIDw9IG1fbWFwcGVkQ2FwYWNpdHkpOworICAgIGlmIChtcHJvdGVjdChyZXN1bHQsIG1f
c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsKICAgICAgICAgbXVubWFwKHJlc3VsdCwg
bV9tYXBwZWRDYXBhY2l0eSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB1bnNpZ25l
ZCByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplUmVnaXN0ZXJzLnNpemUoKSAr
IDE7Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2NhbGxlZVNhdmVSZWdpc3RlcnMuZm9y
RWFjaChbJl0gKFJlZyByZWcpIHsKLSAgICAgICAgR1BSUmVnIGdwciA9IHJlZy5ncHIoKTsKLSAg
ICAgICAgaWYgKCFyZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCkuZ2V0KHJlZykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChy
ZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgPT0gMSkgewotICAgICAgICAgICAgbV9waW5uZWRSZWdp
c3RlcnMuYmFzZU1lbW9yeVBvaW50ZXIgPSBncHI7Ci0gICAgICAgICAgICByZW1haW5pbmdQaW5u
ZWRSZWdpc3RlcnMtLTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Bpbm5lZFJlZ2lz
dGVycy5zaXplUmVnaXN0ZXJzLmFwcGVuZCh7IGdwciwgcGlubmVkU2l6ZVJlZ2lzdGVyc1stLXJl
bWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyAtIDFdIH0pOwotICAgIH0pOwotCi0gICAgQVNTRVJUKCFy
ZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMpOwogICAgIG1fbWVtb3J5ID0gcmVzdWx0OwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCShyZXZpc2lvbiAyMDk1
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI4ICsyNywxMiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0j
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbVBhZ2VDb3Vu
dC5oIgogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCi1zdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7Ci0gICAgR1BSUmVn
IHNpemVSZWdpc3RlcjsKLSAgICB1bnNpZ25lZCBzaXplT2Zmc2V0OwotfTsKLQotLy8gRklYTUU6
IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIuIFJp
Z2h0IG5vdyB3ZSB0YWtlIGEgdmVjdG9yIHdpdGggb25seSBvbmUKLS8vIGVudHJ5LiBTcGVjaWZp
Y2FsbHkgYW4gZW50cnkgd2hlcmUgdGhlIHNpemVPZmZzZXQgPT0gMC4gSWYgd2UgaGF2ZSBtb3Jl
IHRoYW4gb25lIHNpemUgcmVnaXN0ZXIsCi0vLyB3ZSBjYW4gaGF2ZSBvbmUgZm9yIGVhY2ggbG9h
ZCBzaXplIGNsYXNzLiBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI5NTIKLXN0cnVjdCBQaW5uZWRSZWdpc3RlckluZm8gewotICAgIFZlY3RvcjxQaW5uZWRT
aXplUmVnaXN0ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOwotICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9p
bnRlcjsKLX07Ci0KLWNvbnN0ZXhwciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7Ci1jb25z
dGV4cHIgdWludDMyX3QgbWF4UGFnZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgxdWxs
IDw8IDMyKSAvIHBhZ2VTaXplKTsKLQogY2xhc3MgTWVtb3J5IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNZW1vcnkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTksOCAr
NDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIEJvdW5kc0NoZWNraW5nCiAgICAgfTsKIAotICAgIE1l
bW9yeSgpID0gZGVmYXVsdDsKLSAgICBNZW1vcnkodWludDMyX3Qgc3RhcnRpbmdTaXplLCB1aW50
MzJfdCBjYXBhY2l0eSwgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgcGlubmVkU2l6ZVJlZ2lzdGVy
cyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdl
Q291bnQgbWF4aW11bSk7CiAKICAgICB+TWVtb3J5KCkKICAgICB7CkBAIC03MCwxMCArNTMsMTIg
QEAgcHVibGljOgogCiAgICAgdm9pZCogbWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnk7
IH0KICAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29u
c3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X3Bpbm5lZFJlZ2lzdGVyczsgfQogCiAgICAgTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlOyB9CiAKKyAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlh
bDsgfQorICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9
CisKICAgICBib29sIGdyb3codWludDMyX3QgbmV3U2l6ZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX21lbW9yeSk7CkBAIC04NCwxMyArNjksMTUgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1l
bW9yeSwgbV9zaXplKTsgfQorCiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQqIG1fbWVtb3J5IHsg
bnVsbHB0ciB9OwotICAgIFBpbm5lZFJlZ2lzdGVySW5mbyBtX3Bpbm5lZFJlZ2lzdGVyczsKICAg
ICBNb2RlIG1fbW9kZTsKICAgICB1aW50MzJfdCBtX3NpemUgeyAwIH07CiAgICAgdWludDMyX3Qg
bV9jYXBhY2l0eSB7IDAgfTsKKyAgICBQYWdlQ291bnQgbV9pbml0aWFsOworICAgIFBhZ2VDb3Vu
dCBtX21heGltdW07CiAgICAgdWludDY0X3QgbV9tYXBwZWRDYXBhY2l0eSB7IDAgfTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUlu
Zm9ybWF0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCisKKyNpbmNs
dWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworTWVtb3J5SW5mb3JtYXRpb246
Ok1lbW9yeUluZm9ybWF0aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwg
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHBpbm5lZFNpemVSZWdpc3RlcnMsIGJvb2wgaXNJbXBv
cnQpCisgICAgOiBtX2luaXRpYWwoaW5pdGlhbCkKKyAgICAsIG1fbWF4aW11bShtYXhpbXVtKQor
ICAgICwgbV9pc0ltcG9ydChpc0ltcG9ydCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghIW1faW5p
dGlhbCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWF4aW11bSB8fCBtX21heGltdW0gPj0gbV9p
bml0aWFsKTsKKyAgICBBU1NFUlQoISEqdGhpcyk7CisKKyAgICB1bnNpZ25lZCByZW1haW5pbmdQ
aW5uZWRSZWdpc3RlcnMgPSBwaW5uZWRTaXplUmVnaXN0ZXJzLnNpemUoKSArIDE7CisgICAganNj
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2NhbGxlZVNhdmVSZWdpc3RlcnMuZm9yRWFjaChbJl0gKFJl
ZyByZWcpIHsKKyAgICAgICAgR1BSUmVnIGdwciA9IHJlZy5ncHIoKTsKKyAgICAgICAgaWYgKCFy
ZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMgfHwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCku
Z2V0KHJlZykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChyZW1haW5pbmdQaW5u
ZWRSZWdpc3RlcnMgPT0gMSkgeworICAgICAgICAgICAgbV9waW5uZWRSZWdpc3RlcnMuYmFzZU1l
bW9yeVBvaW50ZXIgPSBncHI7CisgICAgICAgICAgICByZW1haW5pbmdQaW5uZWRSZWdpc3RlcnMt
LTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3Bpbm5lZFJlZ2lzdGVycy5zaXplUmVn
aXN0ZXJzLmFwcGVuZCh7IGdwciwgcGlubmVkU2l6ZVJlZ2lzdGVyc1stLXJlbWFpbmluZ1Bpbm5l
ZFJlZ2lzdGVycyAtIDFdIH0pOworICAgIH0pOworCisgICAgQVNTRVJUKCFyZW1haW5pbmdQaW5u
ZWRSZWdpc3RlcnMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK3N0cnVj
dCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvIHsKKyAgICBHUFJSZWcgc2l6ZVJlZ2lzdGVyOworICAg
IHVuc2lnbmVkIHNpemVPZmZzZXQ7Cit9OworCisvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQg
bW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3Rlci4gUmlnaHQgbm93IHdlIHRha2UgYSB2
ZWN0b3Igd2l0aCBvbmx5IG9uZQorLy8gZW50cnkuIFNwZWNpZmljYWxseSBhbiBlbnRyeSB3aGVy
ZSB0aGUgc2l6ZU9mZnNldCA9PSAwLiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgc2l6ZSByZWdp
c3RlciwKKy8vIHdlIGNhbiBoYXZlIG9uZSBmb3IgZWFjaCBsb2FkIHNpemUgY2xhc3MuIHNlZTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1Mgorc3RydWN0IFBp
bm5lZFJlZ2lzdGVySW5mbyB7CisgICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3RlckluZm8+IHNp
emVSZWdpc3RlcnM7CisgICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyOworfTsKKworY2xhc3Mg
TWVtb3J5SW5mb3JtYXRpb24geworcHVibGljOgorICAgIE1lbW9yeUluZm9ybWF0aW9uKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghKnRoaXMpOworICAgIH0KKworICAgIE1lbW9yeUluZm9ybWF0
aW9uKFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgY29uc3QgVmVjdG9yPHVu
c2lnbmVkPiYgcGlubmVkU2l6ZVJlZ2lzdGVycywgYm9vbCBpc0ltcG9ydCk7CisKKyAgICBjb25z
dCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
cGlubmVkUmVnaXN0ZXJzOyB9CisgICAgUGFnZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVy
biBtX2luaXRpYWw7IH0KKyAgICBQYWdlQ291bnQgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4aW11bTsgfQorICAgIGJvb2wgaXNJbXBvcnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW1wb3J0
OyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2lu
aXRpYWw7IH0KKworcHJpdmF0ZToKKyAgICBQYWdlQ291bnQgbV9pbml0aWFsIHsgfTsKKyAgICBQ
YWdlQ291bnQgbV9tYXhpbXVtIHsgfTsKKyAgICBQaW5uZWRSZWdpc3RlckluZm8gbV9waW5uZWRS
ZWdpc3RlcnMgeyB9OworICAgIGJvb2wgbV9pc0ltcG9ydCB7IGZhbHNlIH07Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2
aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklk
ZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgIldh
c21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKICNpbmNsdWRl
ICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25zLmgiCiAKQEAgLTI1Niw3ICsyNTYs
OSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVtb3J5OiB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0
CisgICAgICAgICAgICBib29sIGlzSW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICghcGFy
c2VNZW1vcnlIZWxwZXIoaXNJbXBvcnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWw6Okds
b2JhbDogewpAQCAtMzA1LDM2ICszMDcsNTkgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlVGFi
bGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1v
cnkoKQorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQp
CiB7Ci0gICAgdWludDhfdCBjb3VudDsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoY291bnQpKQor
ICAgIC8vIFdlIGRvbid0IGFsbG93IHJlZGVjbGFyaW5nIG1lbW9yeS4gRWl0aGVyIHZpYSBpbXBv
cnQgb3IgZGVmaW5pdGlvbi4KKyAgICBpZiAobV9tb2R1bGUtPm1lbW9yeSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAg
ICB1aW50OF90IGZsYWdzOwotICAgIHVpbnQzMl90IHNpemU7Ci0gICAgaWYgKCFwYXJzZVZhclVJ
bnQxKGZsYWdzKQotICAgICAgICB8fCAhcGFyc2VWYXJVSW50MzIoc2l6ZSkKLSAgICAgICAgfHwg
c2l6ZSA+IG1heFBhZ2VDb3VudCkKKyAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3MpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB1aW50MzJfdCBjYXBhY2l0eSA9IG1heFBhZ2VDb3Vu
dDsKKyAgICB1aW50MzJfdCBpbml0aWFsOworICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5pdGlh
bCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghUGFnZUNvdW50Ojppc1ZhbGlk
KGluaXRpYWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQYWdlQ291bnQgaW5pdGlh
bFBhZ2VDb3VudChpbml0aWFsKTsKKworICAgIFBhZ2VDb3VudCBtYXhpbXVtUGFnZUNvdW50Owog
ICAgIGlmIChmbGFncykgewotICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGNhcGFjaXR5KQot
ICAgICAgICAgICAgfHwgc2l6ZSA+IGNhcGFjaXR5Ci0gICAgICAgICAgICB8fCBjYXBhY2l0eSA+
IG1heFBhZ2VDb3VudCkKKyAgICAgICAgdWludDMyX3QgbWF4aW11bTsKKyAgICAgICAgaWYgKCFw
YXJzZVZhclVJbnQzMihtYXhpbXVtKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAoIVBhZ2VDb3VudDo6aXNWYWxpZChtYXhpbXVtKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CiAKLSAgICBjYXBhY2l0eSAqPSBwYWdlU2l6ZTsKLSAgICBzaXplICo9
IHBhZ2VTaXplOworICAgICAgICBtYXhpbXVtUGFnZUNvdW50ID0gUGFnZUNvdW50KG1heGltdW0p
OworICAgICAgICBpZiAoaW5pdGlhbFBhZ2VDb3VudCA+IG1heGltdW1QYWdlQ291bnQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgVmVjdG9yPHVuc2lnbmVkPiBwaW5u
ZWRTaXplcyA9IHsgMCB9OwotICAgIG1fbW9kdWxlLT5tZW1vcnkgPSBzdGQ6Om1ha2VfdW5pcXVl
PE1lbW9yeT4oc2l6ZSwgY2FwYWNpdHksIHBpbm5lZFNpemVzKTsKLSAgICByZXR1cm4gbV9tb2R1
bGUtPm1lbW9yeS0+bWVtb3J5KCk7CisgICAgbV9tb2R1bGUtPm1lbW9yeSA9IE1lbW9yeUluZm9y
bWF0aW9uKGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1QYWdlQ291bnQsIHBpbm5lZFNpemVzLCBp
c0ltcG9ydCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTW9kdWxlUGFyc2VyOjpwYXJz
ZU1lbW9yeSgpCit7CisgICAgdWludDhfdCBjb3VudDsKKyAgICBpZiAoIXBhcnNlVmFyVUludDEo
Y291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNvdW50KQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdlIG9ubHkgYWxsb3cgb25lIG1lbW9yeSBmb3Igbm93
LgorICAgIGlmIChjb3VudCAhPSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29s
IGlzSW1wb3J0ID0gZmFsc2U7CisgICAgcmV0dXJuIHBhcnNlTWVtb3J5SGVscGVyKGlzSW1wb3J0
KTsKIH0KIAogYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgJKHJldmlzaW9uIDIwOTU4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBwcml2YXRlOgogICAgIEZPUl9FQUNIX1dBU01f
U0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIpCiAjdW5kZWYgV0FTTV9TRUNUSU9O
X0RFQ0xBUkVfUEFSU0VSCiAKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9y
eUhlbHBlcihib29sIGlzSW1wb3J0KTsKKwogICAgIFZNKiBtX3ZtOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGU7CiAgICAgRnVuY3Rpb25JbmRleFNwYWNl
IG1fZnVuY3Rpb25JbmRleFNwYWNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBhZ2VDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QYWdlQ291bnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtUGFnZUNvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20geworCitjbGFzcyBQYWdlQ291bnQgeworCitwdWJsaWM6CisgICAgUGFnZUNvdW50KCkKKyAg
ICAgICAgOiBtX3BhZ2VDb3VudChVSU5UX01BWCkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQobWF4UGFnZUNvdW50IDwgVUlOVF9NQVgsICJXZSByZWx5IG9uIHRoaXMgaGVyZS4iKTsKKyAg
ICB9CisKKyAgICBQYWdlQ291bnQodWludDMyX3QgcGFnZUNvdW50KQorICAgICAgICA6IG1fcGFn
ZUNvdW50KHBhZ2VDb3VudCkKKyAgICB7IH0KKworICAgIHNpemVfdCBieXRlcygpIHsgcmV0dXJu
IG1fcGFnZUNvdW50ICogcGFnZVNpemU7IH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWQodWlu
dDMyX3QgcGFnZUNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQ
YWdlQ291bnQ7CisgICAgfQorCisgICAgc3RhdGljIFBhZ2VDb3VudCBtYXgoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFBhZ2VDb3VudChtYXhQYWdlQ291bnQpOworICAgIH0KKworICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFnZUNv
dW50ICE9IFVJTlRfTUFYOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBhZ2VD
b3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50IDwgb3RoZXIubV9wYWdlQ291
bnQ7IH0KKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX3BhZ2VDb3VudCA+IG90aGVyLm1fcGFnZUNvdW50OyB9CisgICAgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50
ID49IG90aGVyLm1fcGFnZUNvdW50OyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
MzJfdCBtYXhQYWdlQ291bnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oKDF1bGwgPDwgMzIpIC8g
cGFnZVNpemUpOworCisgICAgdWludDMyX3QgbV9wYWdlQ291bnQ7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Niw3ICsxMTYsNyBAQCB2b2lkIFBsYW46OnJ1bigpCiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fd2FzbVRvSlNTdHVicy5zaXplKCkgKyBmdW5jdGlvbkluZGV4OwogICAg
ICAgICBBU1NFUlQobV9mdW5jdGlvbkluZGV4U3BhY2VbZnVuY3Rpb25JbmRleFNwYWNlXS5zaWdu
YXR1cmUgPT0gc2lnbmF0dXJlKTsKIAotICAgICAgICBTdHJpbmcgZXJyb3IgPSB2YWxpZGF0ZUZ1
bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fZnVuY3Rp
b25JbmRleFNwYWNlKTsKKyAgICAgICAgU3RyaW5nIGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihm
dW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX2Z1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5KTsKICAgICAgICAgaWYgKCFlcnJvci5p
c051bGwoKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVuY3Rpb25MZW5ndGg7ICsraSkKQEAgLTEyOCw3ICsx
MjgsNyBAQCB2b2lkIFBsYW46OnJ1bigpCiAgICAgICAgIH0KIAogICAgICAgICB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscy51bmNoZWNrZWRBcHBlbmQoVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+KCkpOwotICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQo
cGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbV9t
b2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmdldCgpLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLmF0KGZ1bmN0aW9uSW5kZXgpLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSkpOworICAg
ICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21w
aWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bWVtb3J5LCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0
aW9uSW5kZXgpLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSkpOwogICAgICAgICBtX2Z1bmN0aW9uSW5k
ZXhTcGFjZVtmdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
c1tmdW5jdGlvbkluZGV4XS0+Y29kZS0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHJldmlzaW9uIDIw
OTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDggKzQyLDYgQEAgY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZTsKIAogbmFt
ZXNwYWNlIFdhc20gewogCi1jbGFzcyBNZW1vcnk7Ci0KIGNsYXNzIFBsYW4gewogcHVibGljOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0qLCBWZWN0b3I8dWludDhfdD4pOwpAQCAtNjcs
MTcgKzY1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24t
PmV4cG9ydHM7CiAgICAgfQogCi0gICAgY29uc3QgTWVtb3J5KiBtZW1vcnkoKSBjb25zdAotICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5nZXQoKTsKLSAgICB9Ci0KICAgICBzaXplX3QgaW50
ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmYWlsZWQoKSk7CiAgICAgICAgIHJldHVybiBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXpl
KCk7CiAgICAgfQorCiAgICAgQjM6OkNvbXBpbGF0aW9uKiBqc1RvV2FzbUVudHJ5UG9pbnRGb3JG
dW5jdGlvbihzaXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpID4gbV93YXNt
VG9KU1N0dWJzLnNpemUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21WYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwxMCArMTE1LDEz
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYg
Y29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAor
ICAgIGJvb2wgaGFzTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gISFtX21lbW9yeTsgfQorCiAgICAg
dm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYgbWVzc2FnZSkgeyBBU1NFUlQobV9lcnJvck1l
c3NhZ2UuaXNOdWxsKCkpOyBtX2Vycm9yTWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSk7IH0KICAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0K
LSAgICBWYWxpZGF0ZShFeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQorICAgIFZhbGlkYXRlKEV4
cHJlc3Npb25UeXBlIHJldHVyblR5cGUsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkp
CiAgICAgICAgIDogbV9yZXR1cm5UeXBlKHJldHVyblR5cGUpCisgICAgICAgICwgbV9tZW1vcnko
bWVtb3J5KQogICAgIHsKICAgICB9CiAKQEAgLTEzMSw2ICsxMzQsNyBAQCBwcml2YXRlOgogICAg
IEV4cHJlc3Npb25UeXBlIG1fcmV0dXJuVHlwZTsKICAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbHM7
CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOworICAgIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9u
JiBtX21lbW9yeTsKIH07CiAKIGJvb2wgVmFsaWRhdGU6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0
b3I8VHlwZT4mIGFyZ3MpCkBAIC0zNjcsOSArMzcxLDkgQEAgdm9pZCBWYWxpZGF0ZTo6ZHVtcChj
b25zdCBWZWN0b3I8Q29udHJvbAogICAgIC8vIFRoaW5rIG9mIHRoaXMgYXMgcGVuYW5jZSBmb3Ig
dGhlIHNpbiBvZiBiYWQgZXJyb3IgbWVzc2FnZXMuCiB9CiAKLVN0cmluZyB2YWxpZGF0ZUZ1bmN0
aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJl
KiBzaWduYXR1cmUsIGNvbnN0IEZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNl
KQorU3RyaW5nIHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3Qg
bGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgY29uc3QgRnVuY3Rpb25JbmRleFNw
YWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkp
CiB7Ci0gICAgVmFsaWRhdGUgY29udGV4dChzaWduYXR1cmUtPnJldHVyblR5cGUpOworICAgIFZh
bGlkYXRlIGNvbnRleHQoc2lnbmF0dXJlLT5yZXR1cm5UeXBlLCBtZW1vcnkpOwogICAgIEZ1bmN0
aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0b3IoY29udGV4dCwgc291cmNlLCBsZW5ndGgsIHNp
Z25hdHVyZSwgZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICBpZiAoIXZhbGlkYXRvci5wYXJzZSgp
KSB7CiAgICAgICAgIC8vIEZJWE1FOiBhZGQgYmV0dGVyIGxvY2F0aW9uIGluZm9ybWF0aW9uIGhl
cmUuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDI4OApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmgJKHJldmlzaW9u
IDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKLVN0cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IEZ1bmN0aW9uSW5kZXhTcGFjZSYpOworU3RyaW5n
IHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJl
KiwgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5l
c0hlYWRlci5weQkocmV2aXNpb24gMjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xNDMsNiArMTQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogYm9v
bCBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCkKIHsKKyAgICBpZiAoIWhhc01lbW9yeSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBzd2l0Y2ggKG9wKSB7CiAiIiIgKyBsb2Fk
Q2FzZXMgKyAiIiIKICAgICB9CkBAIC0xNTAsNiArMTUzLDkgQEAgYm9vbCBWYWxpZGF0ZTo6bG9h
ZChMb2FkT3BUeXBlIG9wLCBFeHByZQogCiBib29sIFZhbGlkYXRlOjpzdG9yZShTdG9yZU9wVHlw
ZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQz
Ml90KQogeworICAgIGlmICghaGFzTWVtb3J5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHN3aXRjaCAob3ApIHsKICIiIiArIHN0b3JlQ2FzZXMgKyAiIiIKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5jcHAJKHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZp
cm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUu
aCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTc4LDYgKzc5LDcgQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZQogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fbW9kdWxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGVO
YW1lc3BhY2VPYmplY3QpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21lbW9y
eSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0
RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9y
dEZ1bmN0aW9uKGkpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyMDk1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3Q7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOworY2xhc3Mg
SlNXZWJBc3NlbWJseU1lbW9yeTsKIAogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlIDogcHVi
bGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTY3LDMwICs2OCwzNCBAQCBw
dWJsaWM6CiAgICAgICAgIGltcG9ydEZ1bmN0aW9uKGlkeCktPnNldCh2bSwgdGhpcywgdmFsdWUp
OwogICAgIH0KIAotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3Jp
dGVCYXJyaWVyPEpTQ2VsbD4pPihzaXplb2YoSlNXZWJBc3NlbWJseUluc3RhbmNlKSk7Ci0gICAg
fQorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5Lmdl
dCgpOyB9CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBt
ZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1vcnkpOyB9CiAKICAgICBzdGF0aWMg
c2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaWR4KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVy
PEpTQ2VsbD4pICogaWR4OwogICAgIH0KIAotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNp
emUodW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9m
ZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICog
bnVtSW1wb3J0RnVuY3Rpb25zOwotICAgIH0KLQogcHJvdGVjdGVkOgogICAgIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkKTsKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKKyAgICBzdGF0aWMgc2l6ZV90
IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSkpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUodW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2Vs
bD4pICogbnVtSW1wb3J0RnVuY3Rpb25zOworICAgIH0KKwogcHJpdmF0ZToKICAgICBXcml0ZUJh
cnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdDsKKyAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1vcnk7CiAgICAgdW5zaWduZWQgbV9u
dW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkocmV2aXNpb24gMjA5NTgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNiBAQAogCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFz
c2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2NvbnN0
IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5N
ZW1vcnkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1i
bHlNZW1vcnkpIH07CisKK0pTV2ViQXNzZW1ibHlNZW1vcnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6
OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bTo6TWVtb3J5PiYmIG1lbW9yeSkKIHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+KHZtLmhlYXApKSBKU1dlYkFzc2Vt
Ymx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1lbW9yeT4odm0uaGVhcCkpIEpTV2ViQXNz
ZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShtZW1vcnkpKTsKICAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTQ0LDEx
ICs0OSwyOCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZVN0CiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFz
c2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYgbWVt
b3J5KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9tZW1vcnkoV1RGTW92ZSht
ZW1vcnkpKQogewogfQogCitKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZm
ZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIGlmIChtX2J1
ZmZlcldyYXBwZXIpCisgICAgICAgIHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7CisKKyAg
ICBhdXRvIGRlc3RydWN0b3IgPSBbXSAodm9pZCopIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byBkbyBhbnl0aGluZyBoZXJlIHRvIGRlc3Ryb3kgdGhlIG1lbW9yeS4KKyAgICAgICAgLy8g
VGhlIEFycmF5QnVmZmVyIGJhY2tpbmcgdGhlIEpTQXJyYXlCdWZmZXIgaXMgb25seSBvd25lZCBi
eSB1cywKKyAgICAgICAgLy8gc28gd2UgZ3VhcmFudGVlIGl0cyBsaWZlY3lsY2UuCisgICAgfTsK
KyAgICBtX2J1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVGcm9tQnl0ZXMobWVtb3J5KCktPm1l
bW9yeSgpLCBtZW1vcnkoKS0+c2l6ZSgpLCBXVEZNb3ZlKGRlc3RydWN0b3IpKTsKKyAgICBtX2J1
ZmZlcldyYXBwZXIuc2V0KHZtLCB0aGlzLCBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdC0+bV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5nZXQoKSwgbV9idWZmZXIuZ2V0KCkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChtX2J1ZmZlcldyYXBwZXIpOworICAgIHJldHVybiBtX2J1ZmZl
cldyYXBwZXIuZ2V0KCk7Cit9CisKIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKQEAgLTY2LDEw
ICs4OCw5IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6dmlzaXRDaGlsZHJlbigKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX2J1ZmZlcldyYXBwZXIpOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTWVtb3J5IiwgJkJhc2U6
OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TWVtb3J5KSB9Owot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TWVtb3J5LmgJKHJldmlzaW9uIDIwOTU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMjMgKzI5LDM1
IEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOworY2xhc3MgSlNBcnJheUJ1
ZmZlcjsKKwogY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJs
ZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNl
OwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGNyZWF0ZShWTSYsIFN0cnVjdHVy
ZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmKTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAg
ICAgREVDTEFSRV9JTkZPOwogCisgICAgV2FzbTo6TWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBt
X21lbW9yeS5nZXQoKTsgfQorICAgIEpTQXJyYXlCdWZmZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0Kik7CisKIHByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwg
U3RydWN0dXJlKik7CisgICAgSlNXZWJBc3NlbWJseU1lbW9yeShWTSYsIFN0cnVjdHVyZSosIHN0
ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OworICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVm
ZmVyPiBtX2J1ZmZlcldyYXBwZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwOTU4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTIgQEAKICNpbmNsdWRlICJKU09iamVj
dC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5j
bHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgogI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTkwLDYgKzkyLDEzIEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICAgICAgYXJnQ291bnQgPSBib3hlZEFyZ3Mu
c2l6ZSgpOwogICAgIH0KIAorICAgIC8vIFNldHVwIHRoZSBtZW1vcnkgdGhhdCB0aGUgZW50cmFu
Y2UgbG9hZHMuCisgICAgaWYgKEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSA9IHdhc21GdW5j
dGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5KCkpIHsKKyAgICAgICAgV2FzbTo6TWVtb3J5KiB3YXNt
TWVtb3J5ID0gbWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAgdm0ud2FzbU1lbW9yeVBvaW50ZXIg
PSB3YXNtTWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAgdm0ud2FzbU1lbW9yeVNpemUgPSB3YXNt
TWVtb3J5LT5zaXplKCk7CisgICAgfQorCiAgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNhbGx5IHVz
ZSB0aGUgV2ViQXNzZWJseUZ1bmN0aW9uIGFzIHRoZSBjYWxsZWUgdG8gYmVnaW4gd2l0aCBpbiB0
aGUgUHJvdG9DYWxsRnJhbWUuCiAgICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGNh
bGxpbmcgaW50byB0aGUgbGxpbnQgbWF5IHN0YWNrIG92ZXJmbG93LCBhbmQgdGhlIHN0YWNrIG92
ZXJmbG93CiAgICAgLy8gaGFuZGxlciBtaWdodCByZWFkIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20g
dGhlIGNhbGxlZS4gVGhlIEpTV2ViQXNzZW1ibHlDYWxsZWUgZG9lc24ndCBoYXZlIGEKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5NTgzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTTW9kdWxl
RW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlN
ZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQcm90b3R5
cGUuaCIKQEAgLTUxLDY0ICs1Miw2NiBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0CiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIHN0YXRlKQorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUlu
c3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBnbG9i
YWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CiAKICAgICAvLyBJZiBtb2R1bGVPYmplY3QgaXMgbm90IGEgV2ViQXNzZW1ibHkuTW9kdWxlIGlu
c3RhbmNlLCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCi0gICAgSlNXZWJBc3NlbWJseU1vZHVsZSog
anNNb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihzdGF0ZS0+YXJn
dW1lbnQoMCkpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlID0ganNEeW5hbWlj
Q2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICgh
anNNb2R1bGUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
c3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiZmlyc3Qg
YXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1v
ZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoc3RhdGUt
PmFyZ3VtZW50KDApKSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIGEgV2Vi
QXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3Jt
YXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7
CiAKICAgICAvLyBJZiB0aGUgaW1wb3J0T2JqZWN0IHBhcmFtZXRlciBpcyBub3QgdW5kZWZpbmVk
IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhy
b3duLgotICAgIEpTVmFsdWUgaW1wb3J0QXJndW1lbnQgPSBzdGF0ZS0+YXJndW1lbnQoMSk7Cisg
ICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAgIEpTT2Jq
ZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsKICAgICBpZiAo
IWltcG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0
ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNz
ZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IiksIGRlZmF1bHRT
b3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFyZ3VtZW50
IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9iamVjdCIp
LCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0QXJndW1l
bnQpKSkpOwogCiAgICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMgaXMgbm90IGVt
cHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMg
dGhyb3duLgogICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSAmJiAhaW1w
b3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoInNlY29u
ZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIE9iamVjdCBiZWNhdXNl
IHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgaGFzIGltcG9ydHMiKSwgZGVmYXVsdFNvdXJjZUFwcGVu
ZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNz
ZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBPYmplY3QgYmVjYXVzZSB0aGUgV2ViQXNzZW1ibHkuTW9k
dWxlIGhhcyBpbXBvcnRzIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CiAKICAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IElk
ZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAi
V2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKLSAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9k
dWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShzdGF0ZSwgdm0sIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5
LCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0aW9uKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKLSAgICBTdHJ1Y3R1
cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3Nl
bWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rp
b246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9i
YWxPYmplY3QtPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0
cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKHN0YXRl
KSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVyZSwganNN
b2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpLCBtb2R1bGVJbmZv
cm1hdGlvbi5pbXBvcnRzLnNpemUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCB7IH0pOwogCiAgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVzIGJlIGlu
aXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMsIFdlYkFz
c2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3RzLCByZXNw
ZWN0aXZlbHkuCiAgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qg
b2YgZXh0ZXJuYWwgdmFsdWVzLgogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyA9IDA7
CiAKICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDEzNQotICAgIC8vIEZJWE1FIGltcGxlbWVudCBNZW1vcnkgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAogICAgIC8vIEZJWE1F
IGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDEzMwogCisgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKICAgICAvLyBGb3Ig
ZWFjaCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0czoKICAgICBmb3IgKGF1dG8mIGltcG9ydCA6
IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsKICAgICAgICAgLy8gMS4gTGV0IG8gYmUgdGhl
IHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmplY3QsIGkubW9kdWxl
X25hbWUpLgotICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0gaW1wb3J0T2JqZWN0
LT5nZXQoc3RhdGUsIGltcG9ydC5tb2R1bGUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0gaW1wb3J0
T2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0Lm1vZHVsZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBpcyBub3Qg
T2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgaWYgKCFpbXBvcnRNb2R1bGVWYWx1
ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFs
KCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50
aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4gb2JqZWN0Iiks
IGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRNb2R1bGVW
YWx1ZSkpKSk7CisKICAgICAgICAgLy8gMy4gTGV0IHYgYmUgdGhlIHZhbHVlIG9mIHBlcmZvcm1p
bmcgR2V0KG8sIGkuaXRlbV9uYW1lKQogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
b2JqZWN0LT5nZXQoc3RhdGUsIGltcG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChl
eGVjLCBpbXBvcnQuZmllbGQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CisKICAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewogICAgICAgICBjYXNl
IFdhc206OkV4dGVybmFsOjpGdW5jdGlvbjogewogICAgICAgICAgICAgLy8gNC4gSWYgaSBpcyBh
IGZ1bmN0aW9uIGltcG9ydDoKICAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFibGUodikgaXMg
ZmFsc2UsIHRocm93IGEgVHlwZUVycm9yLgogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0
aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2Vw
dGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJp
bXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIs
IHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsdWUpKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFi
bGUiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHZhbHVlKSkp
KTsKICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwogICAgICAgICAg
ICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKICAg
ICAgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBpbXBvcnRlZEV4cG9ydHMgPSBqc0R5
bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihvYmplY3QpKSB7CkBAIC0xMzgsMTEgKzE0
MSwzNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7CiAgICAgICAgICAgICAv
LyA2LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKLSAgICAgICAgICAgIC8vIEZJWE1FIGltcGxl
bWVudCBNZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEz
NAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8vIFRoaXMg
c2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOworICAgICAgICAgICAg
aGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZhbHVlKTsKICAg
ICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9iamVjdCwg
dGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgaXMg
bm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSkpOworCisgICAgICAgICAg
ICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRpb24ubWVt
b3J5LmluaXRpYWwoKTsKKyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJbml0aWFs
ID0gbWVtb3J5LT5tZW1vcnkoKS0+aW5pdGlhbCgpOworICAgICAgICAgICAgaWYgKGFjdHVhbElu
aXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0
aGF0IGlzIHRvbyBzbWFsbC4iKSkpKTsKKworICAgICAgICAgICAgaWYgKFdhc206OlBhZ2VDb3Vu
dCBleHBlY3RlZE1heGltdW0gPSBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKSB7
CisgICAgICAgICAgICAgICAgV2FzbTo6UGFnZUNvdW50IGFjdHVhbE1heGltdW0gPSBtZW1vcnkt
Pm1lbW9yeSgpLT5tYXhpbXVtKCk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxNYXhpbXVt
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IGRpZCBub3QgaGF2ZSBh
ICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMiKSkpKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsTWF4aW11bSA+IGV4
cGVjdGVkTWF4aW11bSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IGltcG9ydHMg
J21heGltdW0nIGlzIGxhcmdlciB0aGFuIHRoZSBtb2R1bGUncyBleHBlY3RlZCAnbWF4aW11bSIp
KSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGlp
LiBBcHBlbmQgdiB0byBtZW1vcmllcy4KICAgICAgICAgICAgIC8vIGlpaS4gQXBwZW5kIHYuW1tN
ZW1vcnldXSB0byBpbXBvcnRzLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0sIG1lbW9yeSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpH
bG9iYWw6IHsKQEAgLTE1NywxMyArMTgzLDI5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIG1vZHVsZVJlY29yZC0+bGlu
ayhzdGF0ZSwgaW5zdGFuY2UpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgeworICAgICAgICBib29sIGV4cGVjdHNNZW1vcnlJbXBvcnQgPSAhIW1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeSAmJiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKTsKKyAg
ICAgICAgaWYgKGV4cGVjdHNNZW1vcnlJbXBvcnQgJiYgIWhhc01lbW9yeUltcG9ydCkgeworICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKKyAgICAgICAgICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJNb2R1bGUgaXMgZXhwZWN0aW5nIGEgbWVtb3J5IGltcG9ydCBidXQgb25lIHdhcyBub3Qg
cHJvdmlkZWQiKSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkgJiYgIWhhc01lbW9yeUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKyAgICAgICAgICAgIC8v
IFdlIGNyZWF0ZSBhIG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KKyAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91
bmlxdWU8V2FzbTo6TWVtb3J5Pihtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgICAgIGluc3RhbmNl
LT5zZXRNZW1vcnkodm0sCisgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVh
dGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1
Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtb2R1
bGVSZWNvcmQtPmxpbmsoZXhlYywgaW5zdGFuY2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgbW9kdWxlUmVjb3Jk
LT5kdW1wKCk7Ci0gICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVh
dGUoc3RhdGUpOworICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1
YXRlKGV4ZWMpOwogICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHsgfSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkZ1bmN0aW9u
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlNZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVBh
Z2VDb3VudC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0
cnVjdG9yLmx1dC5oIgogCkBAIC00MywxOSArNDcsNzUgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFz
c2VtYmx5TWVtb3J5Q29uc3RydQogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3Rh
dGUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFz
c2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVF
cnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1l
bnQgdGhlIE1lbW9yeSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGV4YWN0
bHkgb25lIGFyZ3VtZW50IikpKSk7CisKKyAgICBhdXRvIGdldFVpbnQzMiA9IFsmXSAoSlNWYWx1
ZSB2YWx1ZSkgLT4gdWludDMyX3QgeworICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1
ZS50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgeyB9KTsKKyAgICAgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJ
TlRfTUFYKSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAor
ICAgICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFz
c2VtYmx5Lk1lbW9yeSBleHBlY3RzIHRoZSAnaW5pdGlhbCcgcHJvcGVydHkgdG8gYmUgYW4gaW50
ZWdlciBpbiB0aGUgcmFuZ2U6IFswLCAyXjMyIC0gMV0iKSkpOworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3Vi
bGVWYWx1ZSk7CisgICAgfTsKKworICAgIEpTT2JqZWN0KiBtZW1vcnlEZXNjcmlwdG9yOworICAg
IHsKKyAgICAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgICAg
ICBpZiAoIWFyZ3VtZW50LmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleGNlcHRzIGl0cyBmaXJzdCBh
cmd1bWVudCB0byBiZSBhbiBvYmplY3QiKSkpKTsKKyAgICAgICAgbWVtb3J5RGVzY3JpcHRvciA9
IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3VtZW50KTsKKyAgICB9CisKKyAgICBXYXNtOjpQYWdlQ291
bnQgbWluU2l6ZTsKKyAgICB7CisgICAgICAgIElkZW50aWZpZXIgaW5pdGlhbCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgICAgICBKU1ZhbHVlIG1pblNpemVW
YWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBpbml0aWFsKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICB1aW50MzJfdCBzaXpl
ID0gZ2V0VWludDMyKG1pblNpemVWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQo
c2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldl
YkFzc2VtYmx5Lk1lbW9yeSBpbnZhbGlkICdpbml0aWFsJyBwYWdlIGNvdW50IikpKSk7CisgICAg
ICAgIG1pblNpemUgPSBXYXNtOjpQYWdlQ291bnQoc2l6ZSk7CisgICAgfQorCisgICAgV2FzbTo6
UGFnZUNvdW50IG1heFNpemU7CisgICAgeworICAgICAgICBJZGVudGlmaWVyIG1heGltdW0gPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW0iKTsKKyAgICAgICAgYm9vbCBoYXNQ
cm9wZXJ0eSA9IG1lbW9yeURlc2NyaXB0b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW0pOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIGlm
IChoYXNQcm9wZXJ0eSkgeworICAgICAgICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1v
cnlEZXNjcmlwdG9yLT5nZXQoZXhlYywgbWF4aW11bSk7CisgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgICAgICB1aW50MzJfdCBzaXplID0g
Z2V0VWludDMyKG1heFNpemVWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIVdhc206OlBhZ2VDb3Vu
dDo6aXNWYWxpZChzaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBpbnZhbGlkICdpbml0aWFsJyBwYWdlIGNv
dW50IikpKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CisgICAgICAgICAgICBtYXhTaXplID0gV2FzbTo6UGFnZUNvdW50KHNpemUpOworCisgICAg
ICAgICAgICBpZiAobWluU2l6ZSA+IG1heFNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsCisgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2Vt
Ymx5Lk1lbW9yeSBwcm92aWRlZCBhICdtYXhpbXVtJyBwYWdlIGNvdW50IHRoYXQgc21hbGxlciB0
aGFuIHRoZSAnaW5pdGlhbCcgcGFnZSBjb3VudCIpKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0g
c3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KG1pblNpemUsIG1heFNpemUpOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwg
V1RGTW92ZShtZW1vcnkpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dDb25zdHJ1Y3RvckNhbm5vdEJl
Q2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsICJXZWJBc3NlbWJseS5NZW1v
cnkiKSk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVjdG9yQ2Fubm90QmVDYWxsZWRB
c0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAiV2ViQXNzZW1ibHkuTWVtb3J5
IikpOwogfQogCiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yKiBXZWJBc3NlbWJseU1lbW9y
eUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNz
ZW1ibHlNZW1vcnlQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyMDk1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDkgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJGdW5jdGlv
blByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogCiAjaW5jbHVkZSAi
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUubHV0LmgiCiAKQEAgLTQyLDEwICs0NCwxOSBAQCBj
b25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5CiAgQGVuZAogICovCiAKLVdl
YkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6Y3Jl
YXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5j
QnVmZmVyKEV4ZWNTdGF0ZSopOworCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFz
c2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNZW1v
cnkqPihleGVjLT50aGlzVmFsdWUoKSk7IAorICAgIFJFTEVBU0VfQVNTRVJUKCEhbWVtb3J5KTsg
Ly8gIEZJWE1FCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtZW1vcnktPmJ1ZmZlcihleGVj
LT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKK30KKworV2ViQXNzZW1ibHlN
ZW1vcnlQcm90b3R5cGUqIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsK
ICAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJs
eU1lbW9yeVByb3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKHZt
LCBzdHJ1Y3R1cmUpOwotICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG9iamVj
dC0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIG9iamVjdDsK
IH0KIApAQCAtNTQsOSArNjUsMTAgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZTo6YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
IH0KIAotdm9pZCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQordm9pZCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBKU0NfTkFUSVZFX0dFVFRFUigiYnVmZmVyIiwgd2ViQXNzZW1ibHlN
ZW1vcnlQcm90b0Z1bmNCdWZmZXIsIERvbnRFbnVtIHwgQWNjZXNzb3IpOwogfQogCiBXZWJBc3Nl
bWJseU1lbW9yeVByb3RvdHlwZTo6V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaAkocmV2aXNpb24g
MjA5NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1v
cnlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAg
ICAgREVDTEFSRV9JTkZPOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwogCiBw
cml2YXRlOgogICAgIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296675</attachid>
            <date>2016-12-09 12:43:45 -0800</date>
            <delta_ts>2016-12-09 13:27:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>171706</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk2MjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDM1IEBACisyMDE2LTEyLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IGltcG9ydGluZyBh
bmQgZGVmaW5pbmcgTWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjQxMzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHdhc20vQnVpbGRlci5qczoKKyAgICAgICAgKGNvbnN0Ll9pbXBvcnRNZW1v
cnlDb250aW51YXRpb24uc2VjdGlvbik6CisgICAgICAgIChjb25zdC5faW1wb3J0TWVtb3J5Q29u
dGludWF0aW9uLmFzc2VydCk6CisgICAgICAgIChjb25zdC5faW1wb3J0TWVtb3J5Q29udGludWF0
aW9uKToKKyAgICAgICAgKGNvbnN0Ll9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbi5jb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChjb25zdC5fZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qczoKKyAg
ICAgICAgKGNvbnN0LmVtaXR0ZXJzLkltcG9ydCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVz
dF9iYXNpY19hcGkuanM6CisgICAgICAgIChjb25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGll
cy5zd2l0Y2gpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfbWVtb3J5LmpzOiBBZGRlZC4K
KyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChiaW5hcnlTaG91bGROb3RQYXJzZSk6CisgICAg
ICAgICh0ZXN0KToKKyAgICAgICAgKHRlc3QudGVzdE1lbUltcG9ydEVycm9yKToKKyAgICAgICAg
KiB3YXNtL2pzLWFwaS90ZXN0X21lbW9yeV9jb25zdHJ1Y3Rvci5qczogQWRkZWQuCisgICAgICAg
IChhc3NlcnQpOgorICAgICAgICAodGhyb3cubmV3LkVycm9yKToKKyAgICAgICAgKHRlc3RJbnZh
bGlkU2l6ZSk6CisgICAgICAgIChhc3NlcnQudGVzdEludmFsaWRJbml0aWFsKToKKyAgICAgICAg
KHRlc3RJbnZhbGlkSW5pdGlhbC50ZXN0SW52YWxpZE1heGltdW0pOgorICAgICAgICAodGVzdElu
dmFsaWRJbml0aWFsKToKKyAgICAgICAgKHRlc3RJbnZhbGlkTWF4aW11bSk6CisgICAgICAgICog
d2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qczoKKwogMjAxNi0xMi0wOCAgSkYgQmFz
dGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IEpTQzo6
bGluayogc2hvdWxkbid0IG5lZWQgYSBDb2RlQmxvY2sKSW5kZXg6IEpTVGVzdHMvd2FzbS9CdWls
ZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCShyZXZpc2lvbiAy
MDk2MjMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAy
LDYgKzEwMiwxNSBAQCBjb25zdCBfaW1wb3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpCiAg
ICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRNZW1vcnlDb250aW51YXRpb24gPSAoYnVpbGRlciwg
c2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHtp
bml0aWFsLCBtYXhpbXVtfSkgPT4geworICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBg
SW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9
ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgZnVuY3Rpb24gZmll
bGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBzZWN0aW9u
LmRhdGEucHVzaCh7IG1vZHVsZSwgZmllbGQsIGtpbmQ6ICJNZW1vcnkiLCBtZW1vcnlEZXNjcmlw
dGlvbjoge2luaXRpYWwsIG1heGltdW19fSk7CisgICAgICAgIHJldHVybiBuZXh0QnVpbGRlcjsK
KyAgICB9OworfTsKKwogY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aWxk
ZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgcmV0dXJuIChmaWVsZCwgaW5kZXgs
IHR5cGUpID0+IHsKICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgRXhwb3J0IGZ1bmN0
aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKQEAgLTExMCw2
ICsxMTksNyBAQCBjb25zdCBfZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpCiAgICAg
ICAgICAgICAvLyBFeHBvcnRzIGNhbiBsZWF2ZSB0aGUgdHlwZSB1bnNwZWNpZmllZCwgbGV0dGlu
ZyB0aGUgQ29kZSBidWlsZGVyIHBhdGNoIHRoZW0gdXAgbGF0ZXIuCiAgICAgICAgICAgICB0eXBl
ID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIsIHR5cGUpOwogICAgICAgICB9CisKICAgICAg
ICAgLy8gV2UgY2FuJ3QgY2hlY2sgbXVjaCBhYm91dCAiaW5kZXgiIGhlcmUgYmVjYXVzZSB0aGUg
Q29kZSBzZWN0aW9uIHN1Y2NlZWRzIHRoZSBFeHBvcnQgc2VjdGlvbi4gTW9yZSB3b3JrIGlzIGRv
bmUgYXQgQ29kZSgpLkVuZCgpIHRpbWUuCiAgICAgICAgIHN3aXRjaCAodHlwZW9mKGluZGV4KSkg
ewogICAgICAgICBjYXNlICJzdHJpbmciOiBicmVhazsgLy8gQXNzdW1lIGl0J3MgYSBmdW5jdGlv
biBuYW1lIHdoaWNoIHdpbGwgYmUgcmV2ZWFsZWQgaW4gdGhlIENvZGUgc2VjdGlvbi4KQEAgLTEy
NSw2ICsxMzUsNyBAQCBjb25zdCBfZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBFeHBv
cnQgc2VjdGlvbidzIGluZGV4IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIGdvdCAke2lu
ZGV4fWApOwogICAgICAgICB9CisKICAgICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0ltcG9ydCA9
IGJ1aWxkZXIuX2dldEZ1bmN0aW9uRnJvbUluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICBjb25z
dCBpbXBvcnRTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiSW1wb3J0Iik7CiAgICAgICAg
IGlmICh0eXBlb2YoaW5kZXgpID09PSAib2JqZWN0IikgewpAQCAtMzY4LDEwICszNzksMTAgQEAg
ZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGltcG9ydEJ1aWxkZXIgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRo
aXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZTogKCkgPT4geyB0aHJvdyBuZXcgRXJy
b3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCB0YWJsZWApOyB9LAotICAgICAgICAgICAgICAgICAg
ICAgICAgTWVtb3J5OiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1w
b3J0IG1lbW9yeWApOyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsOiAoKSA9PiB7
IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1wb3J0IGdsb2JhbGApOyB9LAogICAg
ICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLkZ1
bmN0aW9uID0gX2ltcG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxk
ZXIpOworICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLk1lbW9yeSA9IF9pbXBvcnRN
ZW1vcnlDb250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpbXBvcnRCdWlsZGVyOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC00NjUsNyArNDc2LDEzIEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNz
IEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlLnR5cGUpID09PSAidW5k
ZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgbXVzdCBiZSBhIGZ1bmN0aW9uIGV4cG9ydCBmcm9tIHRoZSBDb2RlIHNlY3Rpb24gKHJlLWV4
cG9ydHMgd2VyZSBoYW5kbGVkIGVhcmxpZXIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGltcG9ydFNlY3Rp
b24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25JbmRleFNwYWNlT2Zmc2V0ID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1wb3J0U2VjdGlvbikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0
IHtraW5kfSBvZiBpbXBvcnRTZWN0aW9uLmRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAiRnVuY3Rpb24iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrZnVuY3Rpb25J
bmRleFNwYWNlT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXggPSBl
LmluZGV4IC0gZnVuY3Rpb25JbmRleFNwYWNlT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGUudHlwZSA9IGNvZGVTZWN0aW9uLmRhdGFbZnVuY3Rpb25JbmRl
eF0udHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IEpT
VGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCShyZXZpc2lvbiAyMDk2MjMp
CisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwkod29ya2luZyBj
b3B5KQpAQCAtNTMsOSArNTMsMjkgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICBw
dXQoYmluLCAidWludDgiLCBXQVNNLmV4dGVybmFsS2luZFZhbHVlW2VudHJ5LmtpbmRdKTsKICAg
ICAgICAgICAgIHN3aXRjaCAoZW50cnkua2luZCkgewogICAgICAgICAgICAgZGVmYXVsdDogdGhy
b3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmV4cGVjdGVkIGtpbmQgJHtl
bnRyeS5raW5kfWApOwotICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb24iOiBwdXQoYmluLCAidmFy
dWludDMyIiwgZW50cnkudHlwZSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb24i
OiB7CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGVudHJ5LnR5cGUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSAi
VGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKLSAgICAgICAg
ICAgIGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGAp
OworICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjogeworICAgICAgICAgICAgICAgIGxldCB7aW5p
dGlhbCwgbWF4aW11bX0gPSBlbnRyeS5tZW1vcnlEZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBpbml0aWFsID09PSAibnVtYmVyIiwgIldlIGV4cGVjdCAn
aW5pdGlhbCcgdG8gYmUgYSBudW1iZXIiKTsKKyAgICAgICAgICAgICAgICBpbml0aWFsIHw9IDA7
CisgICAgICAgICAgICAgICAgbGV0IGhhc01heGltdW0gPSAwOworICAgICAgICAgICAgICAgIGlm
ICh0eXBlb2YgbWF4aW11bSA9PT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4
aW11bSB8PSAwOworICAgICAgICAgICAgICAgICAgICBoYXNNYXhpbXVtID0gMTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHR5cGVv
ZiBtYXhpbXVtID09PSAidW5kZWZpbmVkIiwgIldlIGV4cGVjdCAnbWF4aW11bScgdG8gYmUgYSBu
dW1iZXIgaWYgaXQncyBkZWZpbmVkIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgcHV0KGJpbiwgInZhcnVpbnQxIiwgaGFzTWF4aW11bSk7CisgICAgICAgICAgICAgICAg
cHV0KGJpbiwgInZhcnVpbnQzMiIsIGluaXRpYWwpOworICAgICAgICAgICAgICAgIGlmIChoYXNN
YXhpbXVtKQorICAgICAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgbWF4aW11
bSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9OwogICAgICAgICAgICAg
Y2FzZSAiR2xvYmFsIjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9i
YXNpY19hcGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2lj
X2FwaS5qcwkocmV2aXNpb24gMjA5NjIzKQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jh
c2ljX2FwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsNyBAQCBmb3IgKGNvbnN0IGMg
aW4gY29uc3RydWN0b3JQcm9wZXJ0aWVzKSB7CiAgICAgICAgIC8vIGFzc2VydC5lcShTeW1ib2wu
dG9TdHJpbmdUYWcgaW4gaW5zdGFuY2UuZXhwb3J0cywgdHJ1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgIk1lbW9yeSI6Ci0gICAgICAgIC8vIEZJWE1FIEltcGxlbWVudCBhbmQgdGVzdCB0
aGVzZSBBUElzIGZ1cnRoZXIuIEZvciBub3cgdGhleSBqdXN0IHRocm93LiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Nzc1Ci0gICAgICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKCksIEVycm9yLCBgV2ViQXNzZW1ibHkgZG9lc24ndCB5
ZXQgaW1wbGVtZW50IHRoZSAke2N9IGNvbnN0cnVjdG9yIHByb3BlcnR5YCk7CisgICAgICAgIG5l
dyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6IDIwfSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgIlRhYmxlIjoKICAgICAgICAgLy8gRklYTUUgSW1wbGVtZW50IGFuZCB0ZXN0IHRoZXNl
IEFQSXMgZnVydGhlci4gRm9yIG5vdyB0aGV5IGp1c3QgdGhyb3cuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3NzUKSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkv
dGVzdF9tZW1vcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21l
bW9yeS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzg0IEBACitpbXBvcnQgQnVpbGRlciBmcm9t
ICcuLi9CdWlsZGVyLmpzJzsKKworZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIik7CisgICAgfQorfQorCitj
b25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKK2NvbnN0IG1heFBhZ2VDb3VudCA9ICgyKiozMikg
LyBwYWdlU2l6ZTsKKworZnVuY3Rpb24gYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlcikgewor
ICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBsZXQgdGhy
ZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHRocmV3ID0gdHJ1
ZTsKKyAgICB9CisgICAgYXNzZXJ0KHRocmV3KTsKK30KKworeworICAgIC8vIENhbid0IGRlY2xh
cmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRl
cigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImlt
cCIsICJtZW1vcnkiLCB7aW5pdGlhbDogMjB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBhZ2VzKDEsIDEpLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsKKyAg
ICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyKTsKK30KKworeworICAgIC8vIENhbid0IGRl
Y2xhcmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVp
bGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIHtpbml0aWFsOiAyMH0pCisgICAgICAgICAg
ICAuTWVtb3J5KCJpbXAiLCAibWVtb3J5Iiwge2luaXRpYWw6IDMwfSkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShi
dWlsZGVyKTsKK30KKworeworICAgIC8vIGluaXRpYWwgbXVzdCBiZSA8PSBtYXhpbXVtLgorICAg
IGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQor
ICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5NZW1vcnkoImltcCIsICJtZW1vcnkiLCB7
aW5pdGlhbDogMjAsIG1heGltdW06IDE5fSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgIC5FbmQoKTsKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyKTsKK30KKwor
eworICAgIC8vIE5vIGxvYWRzIHdoZW4gbm8gbWVtb3J5IGRlZmluZWQuCisgICAgY29uc3QgYnVp
bGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5J
bXBvcnQoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkuRnVuY3Rpb24oImZvbyIpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuSTMyTG9hZCgyLCAwKQorICAg
ICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KTsKKworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIpOworfQorCit7CisgICAgLy8g
Tm8gc3RvcmVzIHdoZW4gbm8gbWVtb3J5IGRlZmluZWQuCisgICAgY29uc3QgYnVpbGRlciA9IChu
ZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpLkZ1bmN0aW9uKCJmb28iKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pCisgICAgICAgICAgICAgICAgLkdl
dExvY2FsKDApCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAg
LkkzMlN0b3JlKDIsIDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRl
cik7Cit9CisKK3sKKyAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBu
ZXcgV2ViQXNzZW1ibHkuTWVtb3J5KDIwKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgYXNz
ZXJ0KGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpOworICAgICAgICBhc3NlcnQoZS5tZXNzYWdlID09
PSAiV2ViQXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFu
IG9iamVjdCIpOworICAgICAgICB0aHJldyA9IHRydWU7CisgICAgfQorICAgIGFzc2VydCh0aHJl
dyk7Cit9CisKK3sKKyAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBu
ZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHt9LCB7fSk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAg
IGFzc2VydChlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKKyAgICAgICAgYXNzZXJ0KGUubWVzc2Fn
ZSA9PT0gIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iik7
CisgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICB9CisgICAgYXNzZXJ0KHRocmV3KTsKK30KKwor
ZnVuY3Rpb24gdGVzdChmKSB7CisgICAgbm9JbmxpbmUoZik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAyOyBpKyspIHsKKyAgICAgICAgZihpKTsKKyAgICB9Cit9CisKK3Rlc3QoZnVuY3Rpb24o
KSB7CisgICAgY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMjAsIG1heGltdW06
IDIwfTsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9y
eURlc2NyaXB0aW9uKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFsi
aTMyIiwgImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEp
CisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkkzMlN0b3Jl
KDIsIDApCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAgICAgICAgLkkz
MkxvYWQoMiwgMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVzY3Jp
cHRpb24pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSwgeyBpbXA6IHsgbWVtb3J5OiBtZW1vcnkgfSB9KTsKKyAgICBjb25zdCBmb28gPSBpbnN0
YW5jZS5leHBvcnRzLmZvbzsKKyAgICAvLyBmb28odmFsdWUsIGFkZHJlc3MpCisKKyAgICBjb25z
dCBieXRlcyA9IG1lbW9yeURlc2NyaXB0aW9uLmluaXRpYWwgKiBwYWdlU2l6ZTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IChieXRlcy80KTsgaSsrKSB7CisgICAgICAgIGxldCB2YWx1ZSA9IGkg
KyAxOworICAgICAgICBsZXQgYWRkcmVzcyA9IGkgKiA0OworICAgICAgICBsZXQgcmVzdWx0ID0g
Zm9vKHZhbHVlLCBhZGRyZXNzKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCA9PT0gdmFsdWUpOwor
ICAgICAgICBsZXQgYXJyYXlCdWZmZXIgPSBtZW1vcnkuYnVmZmVyOworICAgICAgICBsZXQgYnVm
ZmVyID0gbmV3IFVpbnQzMkFycmF5KGFycmF5QnVmZmVyKTsKKyAgICAgICAgYXNzZXJ0KGJ1ZmZl
cltpXSA9PT0gdmFsdWUpOworICAgIH0KK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGNv
bnN0IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDIwLCBtYXhpbXVtOiAyMH07CisgICAg
Y29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZXNjcmlwdGlv
bikuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29k
ZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbImkzMiIsICJpMzIi
XSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAg
ICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkkzMlN0b3JlOCgwLCAwKQorICAg
ICAgICAgICAgICAgIC5HZXRMb2NhbCgxKQorICAgICAgICAgICAgICAgIC5JMzJMb2FkOFUoMCwg
MCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNv
bnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pOwor
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBp
bXA6IHsgbWVtb3J5OiBtZW1vcnkgfSB9KTsKKyAgICBjb25zdCBmb28gPSBpbnN0YW5jZS5leHBv
cnRzLmZvbzsKKyAgICAvLyBmb28odmFsdWUsIGFkZHJlc3MpCisKKyAgICBjb25zdCBieXRlcyA9
IG1lbW9yeURlc2NyaXB0aW9uLmluaXRpYWwgKiBwYWdlU2l6ZTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGJ5dGVzOyBpKyspIHsKKyAgICAgICAgbGV0IHZhbHVlID0gKGkgKyAxKTsKKyAgICAg
ICAgbGV0IGFkZHJlc3MgPSBpOworICAgICAgICBsZXQgcmVzdWx0ID0gZm9vKHZhbHVlLCBhZGRy
ZXNzKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkVmFsdWUgPSAodmFsdWUgJiAoKDIqKjgpIC0gMSkp
OyAKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCA9PT0gZXhwZWN0ZWRWYWx1ZSk7CisgICAgICAgIGxl
dCBhcnJheUJ1ZmZlciA9IG1lbW9yeS5idWZmZXI7CisgICAgICAgIGxldCBidWZmZXIgPSBuZXcg
VWludDhBcnJheShhcnJheUJ1ZmZlcik7CisgICAgICAgIGFzc2VydChidWZmZXJbaV0gPT09IGV4
cGVjdGVkVmFsdWUpOworICAgIH0KK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGNvbnN0
IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDIwLCBtYXhpbXVtOiAyMH07CisgICAgY29u
c3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZXNjcmlwdGlvbiku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbImYzMiIsICJpMzIiXSwg
cmV0OiAiZjMyIn0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAgICAg
ICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkYzMlN0b3JlKDIsIDApCisgICAgICAg
ICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAgICAgICAgLkYzMkxvYWQoMiwgMCkKKyAg
ICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IG1l
bW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pOworICAgIGNv
bnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsg
bWVtb3J5OiBtZW1vcnkgfSB9KTsKKyAgICBjb25zdCBmb28gPSBpbnN0YW5jZS5leHBvcnRzLmZv
bzsKKyAgICAvLyBmb28odmFsdWUsIGFkZHJlc3MpCisKKyAgICBjb25zdCBieXRlcyA9IG1lbW9y
eURlc2NyaXB0aW9uLmluaXRpYWwgKiBwYWdlU2l6ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IChieXRlcy80KTsgaSsrKSB7CisgICAgICAgIGxldCB2YWx1ZSA9IGkgKyAxICsgLjAxMjgyMTM3
ODEyODk7CisgICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gTWF0aC5mcm91bmQodmFsdWUpKTsKKyAg
ICAgICAgbGV0IGFkZHJlc3MgPSBpICogNDsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGZvbyh2YWx1
ZSwgYWRkcmVzcyk7CisgICAgICAgIGxldCBleHBlY3RlZFZhbHVlID0gTWF0aC5mcm91bmQocmVz
dWx0KTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCA9PT0gZXhwZWN0ZWRWYWx1ZSk7CisgICAgICAg
IGxldCBhcnJheUJ1ZmZlciA9IG1lbW9yeS5idWZmZXI7CisgICAgICAgIGxldCBidWZmZXIgPSBu
ZXcgRmxvYXQzMkFycmF5KGFycmF5QnVmZmVyKTsKKyAgICAgICAgYXNzZXJ0KGJ1ZmZlcltpXSA9
PT0gZXhwZWN0ZWRWYWx1ZSk7CisgICAgfQorfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAg
Y29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMjAsIG1heGltdW06IDIwfTsKKyAg
ICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0
aW9uKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFsiZjY0IiwgImkz
MiJdLCByZXQ6ICJmNjQifSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkKKyAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuRjY0U3RvcmUoMywgMCkKKyAg
ICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkKKyAgICAgICAgICAgICAgICAuRjY0TG9hZCgzLCAw
KQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGlt
cDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pOworICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9y
dHMuZm9vOworICAgIC8vIGZvbyh2YWx1ZSwgYWRkcmVzcykKKworICAgIGNvbnN0IGJ5dGVzID0g
bWVtb3J5RGVzY3JpcHRpb24uaW5pdGlhbCAqIHBhZ2VTaXplOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgKGJ5dGVzLzgpOyBpKyspIHsKKyAgICAgICAgbGV0IHZhbHVlID0gaSArIDEgKyAuMDEy
ODIxMzc4MTI4OTsKKyAgICAgICAgbGV0IGFkZHJlc3MgPSBpICogODsKKyAgICAgICAgbGV0IHJl
c3VsdCA9IGZvbyh2YWx1ZSwgYWRkcmVzcyk7CisgICAgICAgIGxldCBleHBlY3RlZFZhbHVlID0g
cmVzdWx0OworICAgICAgICBhc3NlcnQocmVzdWx0ID09PSBleHBlY3RlZFZhbHVlKTsKKyAgICAg
ICAgbGV0IGFycmF5QnVmZmVyID0gbWVtb3J5LmJ1ZmZlcjsKKyAgICAgICAgbGV0IGJ1ZmZlciA9
IG5ldyBGbG9hdDY0QXJyYXkoYXJyYXlCdWZmZXIpOworICAgICAgICBhc3NlcnQoYnVmZmVyW2ld
ID09PSBleHBlY3RlZFZhbHVlKTsKKyAgICB9Cit9KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAg
ICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAyMCwgbWF4aW11bTogMjV9Owor
ICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQo
KQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3Jp
cHRpb24pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogWyJmNjQiLCAi
aTMyIl0sIHJldDogImY2NCJ9KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKQorICAgICAg
ICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5GNjRTdG9yZSgzLCAwKQor
ICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKQorICAgICAgICAgICAgICAgIC5GNjRMb2FkKDMs
IDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKworICAg
IGZ1bmN0aW9uIHRlc3RNZW1JbXBvcnRFcnJvcihpbnN0YW5jZU9iaiwgZXhwZWN0ZWRFcnJvcikg
eworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGluc3RhbmNlT2JqKTsKKyAgICAgICAg
fSBjYXRjaChlKSB7CisgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcik7
CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRFcnJv
cikgeworICAgICAgICAgICAgICAgIGFzc2VydChlLm1lc3NhZ2UgPT09IGV4cGVjdGVkRXJyb3Ip
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAg
fQorCisgICAgdGVzdE1lbUltcG9ydEVycm9yKDIwKTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJyb3Io
eyB9KTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJyb3Ioe2ltcDogeyB9IH0pOworICAgIHRlc3RNZW1J
bXBvcnRFcnJvcih7aW1wOiB7IG1lbW9yeTogMjAgfSB9KTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJy
b3Ioe2ltcDogeyBtZW1vcnk6IFtdIH0gfSk7CisgICAgdGVzdE1lbUltcG9ydEVycm9yKHtpbXA6
IHsgbWVtb3J5OiBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOiAxOSwgbWF4aW11bTog
MjV9KSB9IH0sICJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRv
byBzbWFsbCIpOworICAgIHRlc3RNZW1JbXBvcnRFcnJvcih7aW1wOiB7IG1lbW9yeTogbmV3IFdl
YkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMjB9KSB9IH0sICJNZW1vcnkgaW1wb3J0IGRpZCBu
b3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMi
KTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJyb3Ioe2ltcDogeyBtZW1vcnk6IG5ldyBXZWJBc3NlbWJs
eS5NZW1vcnkoe2luaXRpYWw6IDIwLCBtYXhpbXVtOiAyNn0pIH0gfSwgIk1lbW9yeSBpbXBvcnRz
ICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0i
KTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGNvbnN0IG1lbW9yeURlc2NyaXB0aW9u
ID0ge2luaXRpYWw6IDIwfTsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisg
ICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1l
bW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwg
eyBwYXJhbXM6IFsiZjY0IiwgImkzMiJdLCByZXQ6ICJmNjQifSkKKyAgICAgICAgICAgICAgICAu
R2V0TG9jYWwoMSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAg
ICAuRjY0U3RvcmUoMywgMCkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkKKyAgICAgICAg
ICAgICAgICAuRjY0TG9hZCgzLCAwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisKKyAgICBmdW5jdGlvbiB0ZXN0TWVtSW1wb3J0RXJyb3IoaW5zdGFuY2VP
YmosIGV4cGVjdGVkRXJyb3IpIHsKKyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCBpbnN0
YW5jZU9iaik7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0KGUgaW5z
dGFuY2VvZiBUeXBlRXJyb3IpOworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICAg
ICAgaWYgKGV4cGVjdGVkRXJyb3IpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoZS5tZXNzYWdl
ID09PSBleHBlY3RlZEVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBh
c3NlcnQodGhyZXcpOworICAgIH0KKworICAgIHRlc3RNZW1JbXBvcnRFcnJvcih7aW1wOiB7IG1l
bW9yeTogbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMTksIG1heGltdW06IDI1fSkg
fSB9LCAiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21h
bGwiKTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJyb3Ioe2ltcDogeyBtZW1vcnk6IG5ldyBXZWJBc3Nl
bWJseS5NZW1vcnkoe2luaXRpYWw6IDE5fSkgfSB9LCAiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBh
biAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKTsKKworICAgIC8vIFRoaXMgc2hvdWxkIG5v
dCB0aHJvdy4KKyAgICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7bWVt
b3J5OiBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOjIwfSl9fSk7CisgICAgbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge21lbW9yeTogbmV3IFdlYkFzc2VtYmx5
Lk1lbW9yeSh7aW5pdGlhbDoyMCwgbWF4aW11bToyMH0pfX0pOworfSk7CkluZGV4OiBKU1Rlc3Rz
L3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5X2NvbnN0cnVjdG9yLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnlfY29uc3RydWN0b3IuanMJKG5vbmV4aXN0ZW50
KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21lbW9yeV9jb25zdHJ1Y3Rvci5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWls
ZGVyLmpzJzsKKworZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpIHsKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIik7CisgICAgfQorfQorCit7CisgICAgbGV0
IHRocmV3ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lk1lbW9y
eSh7aW5pdGlhbDogMjAsIG1heGltdW06IDE5fSk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAg
IGFzc2VydChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcik7CisgICAgICAgIGFzc2VydChlLm1lc3Nh
Z2UgPT09ICInbWF4aW11bScgcGFnZSBjb3VudCBtdXN0IGJlIHRoYW4gZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvIHRoZSAnaW5pdGlhbCcgcGFnZSBjb3VudCIpOworICAgICAgICB0aHJldyA9IHRy
dWU7CisgICAgfQorICAgIGFzc2VydCh0aHJldyk7Cit9CisKK2NvbnN0IHBhZ2VTaXplID0gNjQg
KiAxMDI0OworY29uc3QgbWF4UGFnZUNvdW50ID0gKDIqKjMyKSAvIHBhZ2VTaXplOworCitmdW5j
dGlvbiB0ZXN0SW52YWxpZFNpemUoZGVzY3JpcHRpb24sIHByb3BOYW1lKSB7CisgICAgbGV0IHRo
cmV3ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShk
ZXNjcmlwdGlvbik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAg
ICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBSYW5nZUVycm9yKTsKKyAgICAgICAgYXNzZXJ0KGUu
bWVzc2FnZSA9PT0gYFdlYkFzc2VtYmx5Lk1lbW9yeSAnJHtwcm9wTmFtZX0nIHBhZ2UgY291bnQg
aXMgdG9vIGxhcmdlYCk7CisgICAgfQorICAgIGFzc2VydCh0aHJldyk7Cit9CisKK3sKKyAgICBm
dW5jdGlvbiB0ZXN0SW52YWxpZEluaXRpYWwodikgeworICAgICAgICB0ZXN0SW52YWxpZFNpemUo
e2luaXRpYWw6IHZ9LCAiaW5pdGlhbCIpOworICAgIH0KKworICAgIC8vIFRoZXNlIHNob3VsZCBu
b3QgdGhyb3cuCisgICAgbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogbWF4UGFnZUNv
dW50fSk7CisgICAgbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogbWF4UGFnZUNvdW50
LCBtYXhpbXVtOiBtYXhQYWdlQ291bnR9KTsKKworICAgIHRlc3RJbnZhbGlkSW5pdGlhbCgyKioz
MSk7CisgICAgdGVzdEludmFsaWRJbml0aWFsKG1heFBhZ2VDb3VudCArIDEpOworfQorCit7Cisg
ICAgZnVuY3Rpb24gdGVzdEludmFsaWRNYXhpbXVtKHYpIHsKKyAgICAgICAgdGVzdEludmFsaWRT
aXplKHtpbml0aWFsOiAxLCBtYXhpbXVtOiB2fSwgIm1heGltdW0iKTsKKyAgICB9CisKKyAgICB0
ZXN0SW52YWxpZE1heGltdW0oMioqMzEpOworICAgIHRlc3RJbnZhbGlkTWF4aW11bShtYXhQYWdl
Q291bnQgKyAxKTsKK30KKworeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7Cisg
ICAgICAgIGxldCB4ID0gTWF0aC5yYW5kb20oKSAqICgyKioxMCk7CisgICAgICAgIHggfD0gMDsK
KyAgICAgICAgY29uc3QgbWVtID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogeCwg
bWF4aW11bTogeCArIDEwMH0pOworICAgICAgICBhc3NlcnQobWVtLmJ1ZmZlci5ieXRlTGVuZ3Ro
ID09PSB4ICogcGFnZVNpemUpOworICAgIH0KK30KKworeworICAgIGxldCBidWZmZXJHZXR0ZXIg
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKChuZXcgV2ViQXNzZW1ibHkuTWVtb3J5
KHtpbml0aWFsOjF9KSkuX19wcm90b19fLCAiYnVmZmVyIikuZ2V0OworICAgIGxldCB0aHJldyA9
IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGJ1ZmZlckdldHRlci5jYWxsKHt9KTsKKyAgICB9
IGNhdGNoKGUpIHsKKyAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpOworICAg
ICAgICBhc3NlcnQoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5i
dWZmZXIgZ2V0dGVyIGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZh
bHVlIik7CisgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICB9CisgICAgYXNzZXJ0KHRocmV3KTsK
K30KSW5kZXg6IEpTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMJKHJl
dmlzaW9uIDIwOTYyMykKKysrIEpTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNP
Ti5qcwkod29ya2luZyBjb3B5KQpAQCAtNTY5LDQgKzU2OSwyMyBAQCBjb25zdCBhc3NlcnRPcFRo
cm93cyA9IChvcEZuLCBtZXNzYWdlKSA9CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRh
WzBdLmNvZGVbM10ubmFtZSwgInNlbGVjdCIpOwogfSkoKTsKIAorKGZ1bmN0aW9uIE1lbW9yeUlt
cG9ydCgpIHsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJfX21v
ZHVsZV9fIiwgIl9fZmllbGRfXyIsIHtpbml0aWFsOiAzMCwgbWF4aW11bTogMzF9KQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKS5FbmQoKTsKKworICAgIGNvbnN0IGpzb24gPSBKU09O
LnBhcnNlKGJ1aWxkZXIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uLmxlbmd0
aCwgMyk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvblsxXS5uYW1lLCAiSW1wb3J0Iik7Cisg
ICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0
LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhWzBdLm1vZHVsZSwgIl9fbW9kdWxlX18iKTsKKyAgICBh
c3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMF0uZmllbGQsICJfX2ZpZWxkX18iKTsKKyAg
ICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMF0ua2luZCwgIk1lbW9yeSIpOworICAg
IGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVswXS5tZW1vcnlEZXNjcmlwdGlvbi5pbml0
aWFsLCAzMCk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhWzBdLm1lbW9yeURl
c2NyaXB0aW9uLm1heGltdW0sIDMxKTsKK30pKCk7CisKIC8vIEZJWE1FIHRlc3QgdHlwZSBtaXNt
YXRjaCB3aXRoIHNlbGVjdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzI2NwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDk2MjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTExIEBACisyMDE2LTEyLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IGltcG9ydGluZyBhbmQgZGVm
aW5pbmcgTWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQxMzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhlIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3Qu
IEl0IHJlZmFjdG9ycworICAgICAgICB0aGUgY29kZSB0byBub3cgYXNzb2NpYXRlIGEgTWVtb3J5
IHdpdGggdGhlIGluc3RhbmNlIGluc3RlYWQgb2YKKyAgICAgICAgdGhlIE1vZHVsZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9u
VGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAg
ICAgKiBzaGVsbC9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB0ZXN0V2FzbS5jcHA6IFJlbW92
ZWQuCisgICAgICAgIFRoaXMgaGFzIGJpdHJvdHRlZC4gSSdtIHJlbW92aW5nIGl0LgorCisgICAg
ICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpzaXplT2ZM
b2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21NZW1v
cnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgICog
d2FzbS9XYXNtTWVtb3J5Lmg6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6aW5pdGlhbCk6CisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeTo6bWF4aW11bSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6cGlubmVkUmVn
aXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5
SW5mb3JtYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3Jt
YXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6cGlubmVkUmVn
aXN0ZXJzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OmluaXRpYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6bWF4aW11bSk6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjppc0ltcG9ydCk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKiB3
YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJz
ZXI6OnBhcnNlSW1wb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJz
ZU1lbW9yeUhlbHBlcik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VN
ZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KToK
KyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Q
YWdlQ291bnQuaDogQWRkZWQuIEltcGxlbWVudCBhIG5ldyB3YXkgb2YgZGVzY3JpYmluZyBXYXNt
CisgICAgICAgIHBhZ2VzIGFuZCB0aGVuIGFza2luZyBmb3IgaG93IG1hbnkgYnl0ZXMgYSBxdWFu
dGl0eSBvZiBwYWdlcyBpcy4gVGhpcworICAgICAgICBjbGFzcyBhbHNvIG1ha2VzIGl0IGNsZWFy
IHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBieXRlcyBvciBwYWdlcy4KKworICAgICAgICAoSlND
OjpXYXNtOjpQYWdlQ291bnQ6OlBhZ2VDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206OlBhZ2VD
b3VudDo6Ynl0ZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQYWdlQ291bnQ6Om1heCk6CisgICAgICAgIChKU0M6Oldhc206
OlBhZ2VDb3VudDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6Oldhc206OlBhZ2VDb3Vu
dDo6b3BlcmF0b3I8KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50OjpvcGVyYXRvcj4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpQYWdlQ291bnQ6Om9wZXJhdG9yPj0pOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOgorICAg
ICAgICAqIHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bWVtb3J5
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlZhbGlkYXRlOjpoYXNNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxp
ZGF0ZTo6VmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp2YWxpZGF0ZUZ1bmN0aW9uKToK
KyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5oOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVX
YXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5OgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1lbW9yeSk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucyk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6
OkpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5
OjpidWZmZXIpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6bWVtb3J5KToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICBIYW5kbGUgaW1wb3J0aW5nIGFuZCBjcmVhdGluZyBvZiBtZW1vcnkgYWNj
b3JkaW5nCisgICAgICAgIHRvIHRoZSBzcGVjLiBUaGlzIGFsc28gZG9lcyB0aGUgbmVlZGVkIHZh
bGlkYXRpb24KKyAgICAgICAgb2YgbWFraW5nIHN1cmUgdGhlIG1lbW9yeSBkZWZpbmVkIGluIHRo
ZSBtb2R1bGUKKyAgICAgICAgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbXBvcnRlZCBtZW1vcnku
CisKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKEpTQzo6Y2FsbEpT
V2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1
ZmZlcik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorCiAyMDE2LTEyLTA5ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZGlzYWJsZSBj
b25jdXJyZW50IEdDIGZvciByZWFsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05MDIsNiArOTAyLDcgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICB3YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAKICAgICB3YXNt
L1dhc21Gb3JtYXQuY3BwCiAgICAgd2FzbS9XYXNtTWVtb3J5LmNwcAorICAgIHdhc20vV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmNwcAogICAgIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKICAgICB3
YXNtL1dhc21QbGFuLmNwcAogICAgIHdhc20vV2FzbVZhbGlkYXRlLmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAiVGVzdFJ1
bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2Fz
bVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAj
aW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0yNjMyLDYgKzI2MzMsMTkg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgICAgICAgICAg
fSk7CiAgICAgfQogCisgICAgdm9pZCogbWVtb3J5Qnl0ZXMgPSBudWxscHRyOworICAgIHVpbnQz
Ml90IG1lbW9yeVNpemUgPSAwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1l
bW9yeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVs
ZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKKworICAgIGlmICgh
IW1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpIHsKKyAgICAgICAgbWVtb3J5ID0gc3RkOjptYWtl
X3VuaXF1ZTxXYXNtOjpNZW1vcnk+KG1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkuaW5pdGlhbCgp
LCBtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAgIG1lbW9yeUJ5
dGVzID0gbWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAgbWVtb3J5U2l6ZSA9IG1lbW9yeS0+c2l6
ZSgpOworICAgIH0KKyAgICB2bS50b3BXYXNtTWVtb3J5UG9pbnRlciA9IG1lbW9yeUJ5dGVzOwor
ICAgIHZtLnRvcFdhc21NZW1vcnlTaXplID0gbWVtb3J5U2l6ZTsKKwogICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBmdW5jdGlvbkNvdW50OyArK2kpIHsKICAgICAgICAgSlNBcnJheSogdGVz
dENhc2VzID0ganNDYXN0PEpTQXJyYXkqPihleGVjLT5hcmd1bWVudChpICsgMikpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIHRlc3RJbmRleCA9IDA7IHRlc3RJbmRleCA8IHRlc3RDYXNlcy0+bGVu
Z3RoKCk7ICsrdGVzdEluZGV4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdh
c20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAJ
KHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxMzQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJC
M0NvbW1vbi5oIgotI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCi0jaW5jbHVkZSAiUHJvdG9D
YWxsRnJhbWUuaCIKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKLSNp
bmNsdWRlICJXYXNtUGxhbi5oIgotCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNsdWRl
IDx3dGYvTEVCRGVjb2Rlci5oPgotCi1jbGFzcyBDb21tYW5kTGluZSB7Ci1wdWJsaWM6Ci0gICAg
Q29tbWFuZExpbmUoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotICAgIHsKLSAgICAgICAgcGFyc2VB
cmd1bWVudHMoYXJnYywgYXJndik7Ci0gICAgfQotCi0gICAgYm9vbCBtX3J1bldhc21UZXN0cyB7
IGZhbHNlIH07Ci0KLSAgICB2b2lkIHBhcnNlQXJndW1lbnRzKGludCwgY2hhcioqKTsKLX07Ci0K
LXN0YXRpYyBOT19SRVRVUk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW50KGJvb2wgaGVscCA9IGZh
bHNlKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IHRlc3RXYXNtIFtvcHRpb25zXVxu
Iik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIC1ofC0taGVscCAgUHJpbnRzIHRoaXMgaGVscCBt
ZXNzYWdlXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXd8LS13ZWIgICBSdW4gdGhlIFdh
c20gdGVzdHNcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQotICAgIGV4aXQoaGVs
cCA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRSk7Ci19Ci0KLXZvaWQgQ29tbWFuZExpbmU6
OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBpbnQgaSA9IDE7
Ci0KLSAgICBpZiAoYXJnYyA9PSBpKQotICAgICAgICBwcmludFVzYWdlU3RhdGVtZW50KGZhbHNl
KTsKLQotICAgIGZvciAoOyBpIDwgYXJnYzsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGFy
ZyA9IGFyZ3ZbaV07Ci0KLSAgICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLWgiKSB8fCAhc3RyY21w
KGFyZywgIi0taGVscCIpKSB7Ci0gICAgICAgICAgICBwcmludFVzYWdlU3RhdGVtZW50KHRydWUp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghc3RyY21wKGFyZywgIi13IikgfHwgIXN0cmNtcChhcmcsICItLXdlYiIp
KSB7Ci0gICAgICAgICAgICBtX3J1bldhc21UZXN0cyA9IHRydWU7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRp
b24gJXNcbiIsIGFyZyk7Ci0gICAgICAgIHByaW50VXNhZ2VTdGF0ZW1lbnQoZmFsc2UpOwotICAg
IH0KLX0KLQotU3RhdGljTG9jayBjcmFzaExvY2s7Ci0KLSNkZWZpbmUgQ0hFQ0tfRVEoeCwgeSkg
ZG8geyBcCi0gICAgICAgIGF1dG8gX194ID0gKHgpOyBcCi0gICAgICAgIGF1dG8gX195ID0gKHkp
OyBcCi0gICAgICAgIGlmIChfX3ggPT0gX195KSBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgICAg
IGNyYXNoTG9jay5sb2NrKCk7IFwKLSAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShf
X0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIHRvQ1N0cmluZygjeCAiID09
ICIgI3ksICIgKCIgI3ggIiA9PSAiLCBfX3gsICIsICIgI3kgIiA9PSAiLCBfX3ksICIpIikuZGF0
YSgpKTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZp
bmUgQ0hFQ0soeCkgQ0hFQ0tfRVEoeCwgdHJ1ZSkKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LQotc3RhdGljIEpTQzo6Vk0qIHZtOwotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcgbmFt
ZXNwYWNlIFdhc207Ci11c2luZyBuYW1lc3BhY2UgQjM7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1UIGNhc3QoRW5jb2RlZEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8PgotZG91YmxlIGNhc3QoRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKTsKLX0KLQot
dGVtcGxhdGU8PgotZmxvYXQgY2FzdChFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gYml0d2lzZV9jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIGludm9rZShNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcHRyLCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZT4gYXJncykKLXsKLSAgICBKU1ZhbHVlIGZpcnN0
QXJndW1lbnQ7Ci0gICAgLy8gU2luY2Ugdm1FbnRyeVRvSmF2YVNjcmlwdCBleHBlY3RzIGEgdGhp
cyB2YWx1ZSB3ZSBjbGFpbSB0aGVyZSBpcyBvbmUuLi4gdGhlcmUgaXNuJ3QuCi0gICAgaW50IGFy
Z0NvdW50ID0gMTsKLSAgICBKU1ZhbHVlKiByZW1haW5pbmdBcmd1bWVudHMgPSBudWxscHRyOwot
ICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICByZW1haW5pbmdBcmd1bWVudHMgPSBjb25z
dF9jYXN0PEpTVmFsdWUqPihhcmdzLmJlZ2luKCkpOwotICAgICAgICBmaXJzdEFyZ3VtZW50ID0g
KnJlbWFpbmluZ0FyZ3VtZW50czsKLSAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzKys7Ci0gICAg
ICAgIGFyZ0NvdW50ID0gYXJncy5zaXplKCk7Ci0gICAgfQotCi0gICAgUHJvdG9DYWxsRnJhbWUg
cHJvdG9DYWxsRnJhbWU7Ci0gICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBudWxscHRy
LCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJndW1lbnRzKTsKLQotICAgIHJl
dHVybiBjYXN0PFQ+KHZtRW50cnlUb1dhc20ocHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHZtLCAm
cHJvdG9DYWxsRnJhbWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgaW52b2tlKGNv
bnN0IENvbXBpbGF0aW9uJiBjb2RlLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZT4gYXJn
cykKLXsKLSAgICByZXR1cm4gaW52b2tlPFQ+KGNvZGUuY29kZSgpLCBhcmdzKTsKLX0KLQotaW5s
aW5lIEpTVmFsdWUgYm94KHVpbnQ2NF90IHZhbHVlKQotewotICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUodmFsdWUpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBib3hmKGZsb2F0IHZhbHVlKQotewot
ICAgIHJldHVybiBib3goYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi1pbmxp
bmUgSlNWYWx1ZSBib3hkKGRvdWJsZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYm94KGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4odmFsdWUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tQbGFuKFBsYW4m
IHBsYW4sIHVuc2lnbmVkIGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMpCi17Ci0gICAgcGxhbi5y
dW4oKTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkgewotICAgICAgICBkYXRhTG9nTG4oIk1vZHVs
ZSBmYWlsZWQgdG8gY29tcGlsZSB3aXRoIGVycm9yOiAiLCBwbGFuLmVycm9yTWVzc2FnZSgpKTsK
LSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0KLSAgICBpZiAocGxhbi5pbnRlcm5hbEZ1bmN0aW9u
Q291bnQoKSAhPSBleHBlY3RlZE51bWJlck9mRnVuY3Rpb25zKSB7Ci0gICAgICAgIGRhdGFMb2dM
bigiSW5jb3JyZWN0IG51bWJlciBvZiBmdW5jdGlvbnMiKTsKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwZWN0ZWROdW1iZXJPZkZ1bmN0
aW9uczsgKytpKSB7Ci0gICAgICAgIGlmICghcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5j
dGlvbihpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJGdW5jdGlvbiBhdCBpbmRleCwgIiAs
IGksICIgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICBDUkFTSCgp
OwotICAgICAgICB9Ci0gICAgfQotCi19Ci0KLS8vIEZvciBub3cgd2UgaW5saW5lIHRoZSB0ZXN0
IGZpbGVzLgotc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKLXsKLSAgICB7Ci0gICAgICAgIC8v
IEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAo
ZnVuYyAoZXhwb3J0ICJicl90YWJsZS13aXRoLWxvb3AiKSAocGFyYW0gJHggaTMyKSAocmVzdWx0
IGkzMikKLSAgICAgICAgLy8gICAgICAobG9jYWwgJGkgaTMyKQotICAgICAgICAvLyAgICAgIChs
b29wCi0gICAgICAgIC8vICAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAgKGdldF9sb2Nh
bCAkeCkKLSAgICAgICAgLy8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGdldF9sb2Nh
bCAkaSkgKGkzMi5jb25zdCAxKSkpCi0gICAgICAgIC8vICAgICAgICAoc2V0X2xvY2FsICR4IChp
MzIuc3ViIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMSkpKQotICAgICAgICAvLyAgICAgICAg
KGJyX3RhYmxlIDAgMSkKLSAgICAgICAgLy8gICAgICAgICkKLSAgICAgICAgLy8gICAgICAgKQot
ICAgICAgICAvLyAgICAgIChnZXRfbG9jYWwgJGkpCi0gICAgICAgIC8vICAgICAgKQotICAgICAg
ICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAg
ICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwg
MHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAw
eDAwLCAweDAxLCAweDEyLCAweDYyLCAweDcyLCAweDVmLCAweDc0LCAweDYxLCAweDYyLCAweDZj
LCAweDY1LCAweDJkLCAweDc3LCAweDY5LCAweDc0LAotICAgICAgICAgICAgMHg2OCwgMHgyZCwg
MHg2YywgMHg2ZiwgMHg2ZiwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhNiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHhhMCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4
MDAsIDB4MTQsIDB4MDEsIDB4MTAsCi0gICAgICAgICAgICAweDAxLCAweDQwLCAweDE1LCAweDAx
LCAweDE0LCAweDAwLCAweDEwLCAweDAxLCAweDQxLCAweDE1LCAweDAwLCAweDA4LCAweDAxLCAw
eDAwLCAweDAxLCAweDBmLAotICAgICAgICAgICAgMHgwZiwgMHgxNCwgMHgwMSwgMHgwZgotICAg
ICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQ
bGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5j
dGlvbigwKSwgeyBib3goMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSkgfSksIDIpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JG
dW5jdGlvbigwKSwgeyBib3goMTAwKSB9KSwgMTAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEyMikg
fSksIDEyMyk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAg
ICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAibXVsdGlw
bGUtdmFsdWUiKSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAobG9j
YWwgaTMyKQotICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgMSAoYmxvY2sgaTMyCi0gICAgICAg
IC8vICAgICAgICAoc2V0X2xvY2FsIDEgKGJsb2NrIGkzMgotICAgICAgICAvLyAgICAgICAgICAo
c2V0X2xvY2FsIDEgKGJsb2NrIGkzMgotICAgICAgICAvLyAgICAgICAgICAgIChzZXRfbG9jYWwg
MSAoYmxvY2sgaTMyCi0gICAgICAgIC8vICAgICAgICAgICAgICAoc2V0X2xvY2FsIDEgKGJsb2Nr
IGkzMgotICAgICAgICAvLyAgICAgICAgICAgICAgICAoYnJfdGFibGUgMyAyIDEgMCA0IChpMzIu
Y29uc3QgMjAwKSAoZ2V0X2xvY2FsIDApKQotICAgICAgICAvLyAgICAgICAgICAgICAgICAocmV0
dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgMSkgKGkzMi5jb25zdCA5OSkpKQotICAgICAgICAvLyAg
ICAgICAgICAgICAgICApKQotICAgICAgICAvLyAgICAgICAgICAgICAgKHJldHVybiAoaTMyLmFk
ZCAoZ2V0X2xvY2FsIDEpIChpMzIuY29uc3QgMTApKSkKLSAgICAgICAgLy8gICAgICAgICAgICAg
ICkpCi0gICAgICAgIC8vICAgICAgICAgICAgKHJldHVybiAoaTMyLmFkZCAoZ2V0X2xvY2FsIDEp
IChpMzIuY29uc3QgMTEpKSkKLSAgICAgICAgLy8gICAgICAgICAgICApKQotICAgICAgICAvLyAg
ICAgICAgICAocmV0dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgMSkgKGkzMi5jb25zdCAxMikpKQot
ICAgICAgICAvLyAgICAgICAgICApKQotICAgICAgICAvLyAgICAgICAgKHJldHVybiAoaTMyLmFk
ZCAoZ2V0X2xvY2FsIDEpIChpMzIuY29uc3QgMTMpKSkKLSAgICAgICAgLy8gICAgICAgICkpCi0g
ICAgICAgIC8vICAgICAgKGkzMi5hZGQgKGdldF9sb2NhbCAxKSAoaTMyLmNvbnN0IDE0KSkKLSAg
ICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90
PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAw
eDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg2LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4Miwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwgMHg4
MCwKLSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NmQsIDB4NzUsIDB4NmMs
IDB4NzQsIDB4NjksIDB4NzAsIDB4NmMsIDB4NjUsIDB4MmQsIDB4NzYsIDB4NjEsIDB4NmMsCi0g
ICAgICAgICAgICAweDc1LCAweDY1LCAweDAwLCAweDAwLCAweDBhLCAweGQzLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweGNkLCAweDgwLCAweDgwLCAweDgwLCAweDAwLAotICAgICAg
ICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgxMCwgMHhjOCwgMHgwMSwKLSAgICAgICAgICAg
IDB4MTQsIDB4MDAsIDB4MDgsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4
MTQsIDB4MDEsIDB4MTAsIDB4ZTMsIDB4MDAsIDB4NDAsIDB4MDksCi0gICAgICAgICAgICAweDBm
LCAweDE1LCAweDAxLCAweDE0LCAweDAxLCAweDEwLCAweDBhLCAweDQwLCAweDA5LCAweDBmLCAw
eDE1LCAweDAxLCAweDE0LCAweDAxLCAweDEwLCAweDBiLAotICAgICAgICAgICAgMHg0MCwgMHgw
OSwgMHgwZiwgMHgxNSwgMHgwMSwgMHgxNCwgMHgwMSwgMHgxMCwgMHgwYywgMHg0MCwgMHgwOSwg
MHgwZiwgMHgxNSwgMHgwMSwgMHgxNCwgMHgwMSwKLSAgICAgICAgICAgIDB4MTAsIDB4MGQsIDB4
NDAsIDB4MDksIDB4MGYsIDB4MTUsIDB4MDEsIDB4MTQsIDB4MDEsIDB4MTAsIDB4MGUsIDB4NDAs
IDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAg
ICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBv
aW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApIH0pLCAyMTMpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3go
MSkgfSksIDIxMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNt
RW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgyKSB9KSwgMjExKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCks
IHsgYm94KDMpIH0pLCAyMTApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5q
c1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMykgfSksIDIxMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0
aW9uKDApLCB7IGJveCg0KSB9KSwgMjE0KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDUpIH0pLCAyMTQp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRG
b3JGdW5jdGlvbigwKSwgeyBib3goLTEpIH0pLCAyMTQpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goLTEw
MDApIH0pLCAyMTQpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206
Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgInNp
bmdsZXRvbiIpIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAgICAgIChibG9j
awotICAgICAgICAvLyAgICAgICAoYmxvY2sKLSAgICAgICAgLy8gICAgICAgIChicl90YWJsZSAx
IDAgKGdldF9sb2NhbCAwKSkKLSAgICAgICAgLy8gICAgICAgIChyZXR1cm4gKGkzMi5jb25zdCAy
MSkpCi0gICAgICAgIC8vICAgICAgICApCi0gICAgICAgIC8vICAgICAgIChyZXR1cm4gKGkzMi5j
b25zdCAyMCkpCi0gICAgICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICAoaTMyLmNvbnN0
IDIyKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQs
IDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAz
LCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhkLCAw
eDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwOSwgMHg3MywgMHg2
OSwgMHg2ZSwgMHg2NywgMHg2YywgMHg2NSwgMHg3NCwgMHg2ZiwgMHg2ZSwgMHgwMCwgMHgwMCwg
MHgwYSwKLSAgICAgICAgICAgIDB4OWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
OTYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAs
Ci0gICAgICAgICAgICAweDE0LCAweDAwLCAweDA4LCAweDAxLCAweDAxLCAweDAwLCAweDEwLCAw
eDE1LCAweDA5LCAweDBmLCAweDEwLCAweDE0LCAweDA5LCAweDBmLCAweDEwLCAweDE2LAotICAg
ICAgICAgICAgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9y
KTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2Fz
bUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCkgfSksIDIyKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCks
IHsgYm94KDEpIH0pLCAyMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpz
VG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMSkgfSksIDIwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rp
b24oMCksIHsgYm94KC0xMDApIH0pLCAyMCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1
bmMgKGV4cG9ydCAiaWYtdGhlbi1ib3RoLWZhbGx0aHJvdWdoIikgKHBhcmFtICR4IGkzMikgKHBh
cmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGJsb2NrICRibG9jayBp
MzIKLSAgICAgICAgLy8gICAgICAgKGlmIGkzMiAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIu
Y29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgICAodGhlbiAoaTMyLmNvbnN0IDEpKQotICAgICAg
ICAvLyAgICAgICAgKGVsc2UKLSAgICAgICAgLy8gICAgICAgICAoaTMyLmNvbnN0IDIpCi0gICAg
ICAgIC8vICAgICAgICAgKGJyICRibG9jaykpCi0gICAgICAgIC8vICAgICAgICApCi0gICAgICAg
IC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAg
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDcz
LCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwg
MHgwNywgMHg5YywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MTgsIDB4NjksIDB4NjYsIDB4MmQsIDB4NzQsIDB4NjgsIDB4NjUsIDB4NmUsIDB4MmQsIDB4NjIs
IDB4NmYsIDB4NzQsCi0gICAgICAgICAgICAweDY4LCAweDJkLCAweDY2LCAweDYxLCAweDZjLCAw
eDZjLCAweDc0LCAweDY4LCAweDcyLCAweDZmLCAweDc1LCAweDY3LCAweDY4LCAweDAwLCAweDAw
LCAweDBhLAotICAgICAgICAgICAgMHg5YSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHg5NCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgxNCwgMHgw
MCwKLSAgICAgICAgICAgIDB4MTAsIDB4MDAsIDB4NGQsIDB4MDMsIDB4MDEsIDB4MTAsIDB4MDEs
IDB4MDQsIDB4MTAsIDB4MDIsIDB4MDYsIDB4MDEsIDB4MGYsIDB4MGYsIDB4MGYKLSAgICAgICAg
fTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNrUGxhbihw
bGFuLCAxKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24o
MCksIHsgYm94KDApLCBib3goMzIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3go
MzIpIH0pLCAyKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgot
ICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpZi10
aGVuLWJvdGgtZmFsbHRocm91Z2giKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVz
dWx0IGkzMikKLSAgICAgICAgLy8gICAgICAoaWYgaTMyIChpMzIuZXEgKGdldF9sb2NhbCAkeCkg
KGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAgICAgKHRoZW4gKGkzMi5jb25zdCAxKSkKLSAg
ICAgICAgLy8gICAgICAgKGVsc2UgKGkzMi5jb25zdCAyKSkKLSAgICAgICAgLy8gICAgICAgKQot
ICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAz
LCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDljLCAw
eDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxOCwgMHg2OSwgMHg2
NiwgMHgyZCwgMHg3NCwgMHg2OCwgMHg2NSwgMHg2ZSwgMHgyZCwgMHg2MiwgMHg2ZiwgMHg3NCwK
LSAgICAgICAgICAgIDB4NjgsIDB4MmQsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NmMsIDB4NzQsIDB4
NjgsIDB4NzIsIDB4NmYsIDB4NzUsIDB4NjcsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MGEsCi0gICAg
ICAgICAgICAweDk1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDhmLCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDEwLCAweDAwLAotICAgICAgICAg
ICAgMHg0ZCwgMHgwMywgMHgwMSwgMHgxMCwgMHgwMSwgMHgwNCwgMHgxMCwgMHgwMiwgMHgwZiwg
MHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAg
ICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNy
YXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9p
bnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgzMikgfSksIDEpOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwg
eyBib3goMSksIGJveCgzMikgfSksIDIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2Vu
ZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChmdW5j
IChleHBvcnQgImR1bWItbGVzcy10aGFuIikgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikg
KHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGxvb3AgJGxvb3AgaTMyCi0gICAgICAgIC8v
ICAgICAgIChpMzIuZXEgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkpCi0gICAgICAgIC8v
ICAgICAgIChpZiBpMzIKLSAgICAgICAgLy8gICAgICAgICh0aGVuIChyZXR1cm4gKGkzMi5jb25z
dCAwKSkpCi0gICAgICAgIC8vICAgICAgICAoZWxzZQotICAgICAgICAvLyAgICAgICAgIChnZXRf
bG9jYWwgJHgpCi0gICAgICAgIC8vICAgICAgICAgKHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0
X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAgICAgICAoaTMyLmNvbnN0
IDApCi0gICAgICAgIC8vICAgICAgICAgKGkzMi5uZSkKLSAgICAgICAgLy8gICAgICAgICAoYnJf
aWYgJGxvb3ApCi0gICAgICAgIC8vICAgICAgICAgKGkzMi5jb25zdCAxKQotICAgICAgICAvLyAg
ICAgICAgICkKLSAgICAgICAgLy8gICAgICAgICkKLSAgICAgICAgLy8gICAgICAgKQotICAgICAg
ICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
NDAsCi0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgy
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDkyLCAweDgwLAot
ICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwZSwgMHg2NCwgMHg3NSwgMHg2
ZCwgMHg2MiwgMHgyZCwgMHg2YywgMHg2NSwgMHg3MywgMHg3MywgMHgyZCwgMHg3NCwKLSAgICAg
ICAgICAgIDB4NjgsIDB4NjEsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4YTcsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YTEsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAg
ICAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDRkLCAw
eDAzLCAweDAxLCAweDEwLCAweDAwLCAweDA5LCAweDA0LCAweDE0LAotICAgICAgICAgICAgMHgw
MCwgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MSwgMHgxNSwgMHgwMCwgMHgxMCwgMHgwMCwg
MHg0ZSwgMHgwNywgMHgwMSwgMHgxMCwgMHgwMSwgMHgwZiwKLSAgICAgICAgICAgIDB4MGYsIDB4
MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAg
IGNoZWNrUGxhbihwbGFuLCAxKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFz
aC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBi
b3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgyKSwgYm94KDEpIH0pLCAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3goMikgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBi
b3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxKSwgYm94KDEpIH0pLCAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBi
b3goMTAwKSwgYm94KDYpIH0pLCAwKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVy
YXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAoZnVuYyAk
ZjMyLXN1YiAoZXhwb3J0ICJmMzItc3ViIikgKHBhcmFtIGYzMikgKHBhcmFtIGYzMikgKHJlc3Vs
dCBmMzIpIChyZXR1cm4gKGYzMi5zdWIgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDEpKSkpCi0g
ICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpbmRpcmVjdC1mMzItc3ViIikgKHBhcmFtIGYz
MikgKHBhcmFtIGYzMikgKHJlc3VsdCBmMzIpIChyZXR1cm4gKGNhbGwgJGYzMi1zdWIgKGdldF9s
b2NhbCAwKSAoZ2V0X2xvY2FsIDEpKSkpCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZk
LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMywgMHgwMywgMHgwMSwgMHgw
MywgMHgwMywgMHg4MywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwg
MHgwNywgMHg5ZSwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4
MDcsIDB4NjYsIDB4MzMsIDB4MzIsIDB4MmQsIDB4NzMsIDB4NzUsIDB4NjIsIDB4MDAsIDB4MDAs
IDB4MTAsCi0gICAgICAgICAgICAweDY5LCAweDZlLCAweDY0LCAweDY5LCAweDcyLCAweDY1LCAw
eDYzLCAweDc0LCAweDJkLCAweDY2LCAweDMzLCAweDMyLCAweDJkLCAweDczLCAweDc1LCAweDYy
LAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg5YywgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMiwgMHg4OCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwKLSAg
ICAgICAgICAgIDB4MDAsIDB4MTQsIDB4MDEsIDB4NzYsIDB4MDksIDB4MGYsIDB4ODksIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsCi0gICAgICAg
ICAgICAweDE2LCAweDAwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBw
bGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7Ci0KLSAgICAgICAg
Ly8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGlu
dm9rZTxmbG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsgYm94
ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGludm9rZTxmbG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsg
Ym94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7Ci0gICAgICAgIENIRUNL
KGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVu
Y3Rpb24oMCksIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAgICAgIENI
RUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9y
RnVuY3Rpb24oMCksIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7
Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8g
ICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMgJGYzMi1hZGQgKGV4cG9ydCAiZjMyLWFk
ZCIpIChwYXJhbSBmMzIpIChwYXJhbSBmMzIpIChyZXN1bHQgZjMyKSAocmV0dXJuIChmMzIuYWRk
IChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAxKSkpKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4
cG9ydCAiaW5kaXJlY3QtZjMyLWFkZCIpIChwYXJhbSBmMzIpIChwYXJhbSBmMzIpIChyZXN1bHQg
ZjMyKSAocmV0dXJuIChjYWxsICRmMzItYWRkIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAxKSkp
KQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewot
ICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAg
ICAgICAgIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4ODMsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OWUsCi0gICAgICAgICAg
ICAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDA3LCAweDY2LCAweDMzLCAweDMyLCAw
eDJkLCAweDYxLCAweDY0LCAweDY0LCAweDAwLCAweDAwLCAweDEwLAotICAgICAgICAgICAgMHg2
OSwgMHg2ZSwgMHg2NCwgMHg2OSwgMHg3MiwgMHg2NSwgMHg2MywgMHg3NCwgMHgyZCwgMHg2Niwg
MHgzMywgMHgzMiwgMHgyZCwgMHg2MSwgMHg2NCwgMHg2NCwKLSAgICAgICAgICAgIDB4MDAsIDB4
MDEsIDB4MGEsIDB4OWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4ODgsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAwLCAweDE0LCAw
eDAxLCAweDc1LCAweDA5LCAweDBmLCAweDg5LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAw
LCAweDE0LCAweDAwLCAweDE0LCAweDAxLAotICAgICAgICAgICAgMHgxNiwgMHgwMCwgMHgwOSwg
MHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAg
ICAgY2hlY2tQbGFuKHBsYW4sIDIpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNy
YXNoLgotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmpzVG9X
YXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDEpLCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAx
LjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIu
NSkgfSksIDExMi42MjM0ZikpOwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8Zmxv
YXQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveGYoMC4wKSwg
Ym94ZigxLjUpIH0pLCAxLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxm
bG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94ZigxMDAu
MTIzNCksIGJveGYoMTIuNSkgfSksIDExMi42MjM0ZikpOwotICAgIH0KLQotICAgIHsKLSAgICAg
ICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8g
ICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jICRzdW0xMiAocGFyYW0gaTMyKSAo
cGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMy
KSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0g
aTMyKSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikgKHJldHVybiAoaTMyLmFkZCAoZ2V0X2xvY2Fs
IDApIChpMzIuYWRkIChnZXRfbG9jYWwgMSkgKGkzMi5hZGQgKGdldF9sb2NhbCAyKSAoaTMyLmFk
ZCAoZ2V0X2xvY2FsIDMpIChpMzIuYWRkIChnZXRfbG9jYWwgNCkgKGkzMi5hZGQgKGdldF9sb2Nh
bCA1KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDYpIChpMzIuYWRkIChnZXRfbG9jYWwgNykgKGkzMi5h
ZGQgKGdldF9sb2NhbCA4KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDkpIChpMzIuYWRkIChnZXRfbG9j
YWwgMTApIChnZXRfbG9jYWwgMTEpKSkpKSkpKSkpKSkpKQotICAgICAgICAvLyAgICAgKGZ1bmMg
KGV4cG9ydCAibXVsdDEyIikgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGNhbGwg
JHN1bTEyIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9j
YWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2Nh
bCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2Fs
IDApKSkpCi0gICAgICAgIC8vICAgICApCi0KLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4OTYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4NDAs
Ci0gICAgICAgICAgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDQwLAotICAg
ICAgICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MywgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAg
ICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDcsIDB4OGEsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4NmQsIDB4NzUsCi0gICAgICAgICAgICAw
eDZjLCAweDc0LCAweDMxLCAweDMyLCAweDAwLCAweDAxLCAweDBhLCAweGNlLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAyLCAweGE2LCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwg
MHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMiwgMHgxNCwgMHgw
MywgMHgxNCwgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNCwKLSAgICAgICAgICAgIDB4MDYsIDB4MTQs
IDB4MDcsIDB4MTQsIDB4MDgsIDB4MTQsIDB4MDksIDB4MTQsIDB4MGEsIDB4MTQsIDB4MGIsIDB4
NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsCi0gICAgICAgICAgICAweDQwLCAweDQwLCAweDQw
LCAweDQwLCAweDQwLCAweDQwLCAweDA5LCAweDBmLCAweDlkLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAwLCAweDE0LCAweDAwLAotICAgICAgICAgICAgMHgxNCwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwg
MHgwMCwgMHgxNCwgMHgwMCwKLSAgICAgICAgICAgIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4
MTQsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQ
bGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNrUGxhbihwbGFuLCAyKTsKLQotICAg
ICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsgYm94KDApIH0p
LCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBv
aW50Rm9yRnVuY3Rpb24oMSksIHsgYm94KDEwMCkgfSksIDEyMDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigxKSwgeyBi
b3goMSkgfSksIDEyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dh
c21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94
KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94
KDExKSwgYm94KDEyKSB9KSwgNzgpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgyKSwgYm94
KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94KDkpLCBib3go
MTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2KTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg
IC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAg
ICAobWVtb3J5IDEpCi0gICAgICAgIC8vICAgICAoZnVuYyAkZmFjIChleHBvcnQgImZhYyIpIChw
YXJhbSBpNjQpIChyZXN1bHQgaTY0KQotICAgICAgICAvLyAgICAgIChpZiAoaTY0LmVxeiAoZ2V0
X2xvY2FsIDApKQotICAgICAgICAvLyAgICAgICAocmV0dXJuIChpNjQuY29uc3QgMSkpCi0gICAg
ICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChpNjQubXVsIChnZXRfbG9j
YWwgMCkgKGNhbGwgJGZhYyAoaTY0LnN1YiAoZ2V0X2xvY2FsIDApIChpNjQuY29uc3QgMSkpKSkp
Ci0gICAgICAgIC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgw
YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDMsIDB4
ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAs
IDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDA3LCAw
eDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAzLCAweDY2LCAweDYxLCAweDYz
LAotICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwYSwgMHg5ZSwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHg5OCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwKLSAg
ICAgICAgICAgIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjgsIDB4MDMsIDB4MDAsIDB4MTEsIDB4MDEs
IDB4MDksIDB4MGYsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTEsIDB4MDEsCi0gICAgICAg
ICAgICAweDVjLCAweDE2LCAweDAwLCAweDVkLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAg
ICAgICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7
Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJv
eCgwKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNt
RW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7
IGJveCgyKSB9KSwgMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9X
YXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCg0KSB9KSwgMjQpOwotICAgIH0KLQot
ICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUK
LSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQg
ImRvdWJsZSIpIChwYXJhbSBpNjQpIChyZXN1bHQgaTY0KSAocmV0dXJuIChjYWxsIDEgKGdldF9s
b2NhbCAwKSAoZ2V0X2xvY2FsIDApKSkpCi0gICAgICAgIC8vICAgICAoZnVuYyAkc3VtIChwYXJh
bSBpNjQpIChwYXJhbSBpNjQpIChyZXN1bHQgaTY0KSAocmV0dXJuIChpNjQuYWRkIChnZXRfbG9j
YWwgMCkgKGdldF9sb2NhbCAxKSkpKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8
dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwg
MHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMiwgMHg0MCwKLSAgICAgICAgICAgIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDIsIDB4NDAs
IDB4MDIsIDB4MDIsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDMsIDB4ODMsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsCi0gICAgICAgICAgICAweDAyLCAweDAwLCAweDAxLCAweDA1LCAweDgzLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDA3LCAweDhhLCAweDgwLCAw
eDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2NCwgMHg2ZiwgMHg3
NSwgMHg2MiwgMHg2YywgMHg2NSwgMHgwMCwgMHgwMCwgMHgwYSwgMHg5YywgMHg4MCwgMHg4MCwK
LSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDIsIDB4ODksIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTYsIDB4MDEsIDB4MDksCi0gICAg
ICAgICAgICAweDBmLCAweDg4LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAw
eDAwLCAweDE0LCAweDAxLCAweDViLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAg
UGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7Ci0KLSAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDEpLCB7IGJveCgwKSwg
Ym94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dh
c21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsgYm94KDEwMCksIGJveCgwKSB9KSwgMTAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9y
RnVuY3Rpb24oMSksIHsgYm94KDEpLCBib3goMTUpIH0pLCAxNik7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJv
eCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNt
RW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApIH0pLCAyMDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigw
KSwgeyBib3goMSkgfSksIDIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVk
IGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkK
LSAgICAgICAgLy8gICAgIChmdW5jICRpZCAocGFyYW0gJHZhbHVlIGkzMikgKHJlc3VsdCBpMzIp
IChyZXR1cm4gKGdldF9sb2NhbCAkdmFsdWUpKSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBv
cnQgImlkLWNhbGwiKSAocGFyYW0gJHZhbHVlIGkzMikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGNh
bGwgJGlkIChnZXRfbG9jYWwgJHZhbHVlKSkpKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBW
ZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3Mywg
MHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDMsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4
MDUsIDB4ODMsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAx
LCAweDAxLCAweDA3LCAweDhiLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDA3LCAw
eDY5LCAweDY0LAotICAgICAgICAgICAgMHgyZCwgMHg2MywgMHg2MSwgMHg2YywgMHg2YywgMHgw
MCwgMHgwMSwgMHgwYSwgMHg5NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHg4NSwg
MHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4
MDksIDB4MGYsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAs
Ci0gICAgICAgICAgICAweDE2LCAweDAwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAg
ICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7Ci0K
LSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDEpLCB7IGJveCgw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50
cnlQb2ludEZvckZ1bmN0aW9uKDEpLCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigxKSwg
eyBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1Rv
V2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCkgfSksIDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigw
KSwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpIH0pLCAxKTsKLSAg
ICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAo
bW9kdWxlCi0gICAgICAgIC8vICAgICAobWVtb3J5IDEpCi0gICAgICAgIC8vICAgICAoZnVuYyAo
ZXhwb3J0ICJpNjQiKSAocGFyYW0gJGkgaTY0KSAocGFyYW0gJHB0ciBpMzIpIChyZXN1bHQgaTY0
KQotICAgICAgICAvLyAgICAgIChpNjQuc3RvcmUgKGdldF9sb2NhbCAkcHRyKSAoZ2V0X2xvY2Fs
ICRpKSkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChpNjQubG9hZCAoZ2V0X2xvY2FsICRwdHIp
KSkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAw
eDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMiwg
MHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4
MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDcsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4NjksIDB4
MzYsCi0gICAgICAgICAgICAweDM0LCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLAot
ICAgICAgICAgICAgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgx
NCwgMHgwMSwgMHgyYiwgMHgwMywgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAg
ICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwot
Ci0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3go
MCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5q
c1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAx
MDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9p
bnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKLSAgICB9Ci0KLSAg
ICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAobW9kdWxlCi0gICAg
ICAgIC8vICAobWVtb3J5IDEpCi0gICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhf
cyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAg
IC8vICAgKGkzMi5zdG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAg
ICAvLyAgIChyZXR1cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAvLyAg
ICkKLSAgICAgICAgLy8gICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAg
ICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAg
ICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAgICAgIDB4MzIs
IDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4
MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAx
LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAw
eDAwLCAweDMzLCAweDAyLCAweDAwLCAweDE0LAotICAgICAgICAgICAgMHgwMSwgMHgyYSwgMHgw
MiwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwg
dmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3Qg
dGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5q
c1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgxMCkgfSksIDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRG
b3JGdW5jdGlvbigwKSwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwg
eyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdl
bmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAobWVt
b3J5IDEpCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJ3cml0ZV9hcnJheSIpIChwYXJh
bSAkeCBpMzIpIChwYXJhbSAkcCBpMzIpIChwYXJhbSAkbGVuZ3RoIGkzMikgKGxvY2FsICRpIGkz
MikKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkpCi0gICAgICAg
IC8vICAgICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgIChsb29wCi0gICAgICAgIC8vICAgICAg
ICAoYnJfaWYgMSAoaTMyLmdlX3UgKGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAkbGVuZ3RoKSkp
Ci0gICAgICAgIC8vICAgICAgICAoaTMyLnN0b3JlIChpMzIuYWRkIChnZXRfbG9jYWwgJHApIChp
MzIubXVsIChnZXRfbG9jYWwgJGkpIChpMzIuY29uc3QgNCkpKSAoZ2V0X2xvY2FsICR4KSkKLSAg
ICAgICAgLy8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGkzMi5jb25zdCAxKSAoZ2V0
X2xvY2FsICRpKSkpCi0gICAgICAgIC8vICAgICAgICAoYnIgMCkKLSAgICAgICAgLy8gICAgICAg
ICkKLSAgICAgICAgLy8gICAgICAgKQotICAgICAgICAvLyAgICAgIChyZXR1cm4pCi0gICAgICAg
IC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0
MCwKLSAgICAgICAgICAgIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODIs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0g
ICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhm
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDc3LCAweDcyLAotICAgICAg
ICAgICAgMHg2OSwgMHg3NCwgMHg2NSwgMHg1ZiwgMHg2MSwgMHg3MiwgMHg3MiwgMHg2MSwgMHg3
OSwgMHgwMCwgMHgwMCwgMHgwYSwgMHhiMiwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAg
IDB4MDAsIDB4MDEsIDB4YWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDEsIDB4MDAsCi0gICAgICAgICAgICAweDAy
LCAweDAwLCAweDE0LCAweDAzLCAweDE0LCAweDAyLCAweDU2LCAweDA3LCAweDAxLCAweDE0LCAw
eDAxLCAweDE0LCAweDAzLCAweDEwLCAweDA0LCAweDQyLAotICAgICAgICAgICAgMHg0MCwgMHgx
NCwgMHgwMCwgMHgzMywgMHgwMiwgMHgwMCwgMHgxMCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwg
MHgxNSwgMHgwMywgMHgwNiwgMHgwMCwgMHgwZiwKLSAgICAgICAgICAgIDB4MGYsIDB4MDksIDB4
MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAg
IGNoZWNrUGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUo
KSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IDU7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVvZih1aW50MzJf
dCk7Ci0gICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBs
YW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmpzVG9X
YXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94
KGxlbmd0aCkgfSk7Ci0gICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOwotICAgICAg
ICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVt
b3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRd
LCAxMDB1KTsKLQotICAgICAgICBsZW5ndGggPSAxMDsKLSAgICAgICAgb2Zmc2V0ID0gNSAqIHNp
emVvZih1aW50MzJfdCk7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9
KTsKLSAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIENIRUNLX0VR
KG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAwdSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZz
ZXQgKyBsZW5ndGhdLCAwdSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKLSAgICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgNXUpOwot
ICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAg
IChtb2R1bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5j
IChleHBvcnQgIndyaXRlX2FycmF5IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICRwIGkzMikgKHBh
cmFtICRsZW5ndGggaTMyKSAobG9jYWwgJGkgaTMyKQotICAgICAgICAvLyAgICAgIChzZXRfbG9j
YWwgJGkgKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAgICAoYmxvY2sKLSAgICAgICAgLy8g
ICAgICAgKGxvb3AKLSAgICAgICAgLy8gICAgICAgIChicl9pZiAxIChpMzIuZ2VfdSAoZ2V0X2xv
Y2FsICRpKSAoZ2V0X2xvY2FsICRsZW5ndGgpKSkKLSAgICAgICAgLy8gICAgICAgIChpMzIuc3Rv
cmU4IChpMzIuYWRkIChnZXRfbG9jYWwgJHApIChnZXRfbG9jYWwgJGkpKSAoZ2V0X2xvY2FsICR4
KSkKLSAgICAgICAgLy8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGkzMi5jb25zdCAx
KSAoZ2V0X2xvY2FsICRpKSkpCi0gICAgICAgIC8vICAgICAgICAoYnIgMCkKLSAgICAgICAgLy8g
ICAgICAgICkKLSAgICAgICAgLy8gICAgICAgKQotICAgICAgICAvLyAgICAgIChyZXR1cm4pCi0g
ICAgICAgIC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhf
dD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDMs
IDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4
ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3
LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDc3LCAweDcyLAot
ICAgICAgICAgICAgMHg2OSwgMHg3NCwgMHg2NSwgMHg1ZiwgMHg2MSwgMHg3MiwgMHg3MiwgMHg2
MSwgMHg3OSwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhZiwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAg
ICAgICAgIDB4MDAsIDB4MDEsIDB4YTksIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDEsIDB4MDAsCi0gICAgICAgICAg
ICAweDAyLCAweDAwLCAweDE0LCAweDAzLCAweDE0LCAweDAyLCAweDU2LCAweDA3LCAweDAxLCAw
eDE0LCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE0LCAweDAwLAotICAgICAgICAgICAgMHgy
ZSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwgMHgxNSwgMHgwMywg
MHgwNiwgMHgwMCwgMHgwZiwgMHgwZiwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAg
IFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAg
ICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBUZXN0IHRo
aXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKLSAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gMTsKLSAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZv
aWQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBi
b3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZz
ZXQgLSAxXSwgMHUpOwotICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwg
MHUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDEwMHUpOwotCi0gICAgICAgIGxl
bmd0aCA9IDEwOwotICAgICAgICBvZmZzZXQgPSA1OwotICAgICAgICBpbnZva2U8dm9pZD4oKnBs
YW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDUpLCBib3gob2Zmc2V0
KSwgYm94KGxlbmd0aCkgfSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwg
MTAwdSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgNXUpOwotICAgIH0KLQotICAgIHsKLSAgICAg
ICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8g
ICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9z
IikgKHBhcmFtICRpIGkzMikgKHBhcmFtICRwdHIgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAg
Ly8gICAgICAoaTMyLnN0b3JlOCAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAg
ICAgICAvLyAgICAgIChyZXR1cm4gKGkzMi5sb2FkOF9zIChnZXRfbG9jYWwgJHB0cikpKQotICAg
ICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4NDAsCi0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAw
eDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgw
LAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywg
MHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAg
ICAgICAgICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYs
IDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAg
ICAgICAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0
LCAweDAxLCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDE0LAotICAgICAgICAgICAg
MHgwMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAg
IFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAg
ICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBUZXN0IHRo
aXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9y
RnVuY3Rpb24oMCksIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsg
Ym94KDEpLCBib3goMTAwKSB9KSwgMSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9y
eSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0g
JGkgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAoaTMyLnN0b3JlOCAoaTMyLmNv
bnN0IDgpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAgICAgIChyZXR1cm4gKGkzMi5sb2Fk
OF9zIChpMzIuY29uc3QgOCkpKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4
NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAw
eDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAw
LCAweDA1LCAweDgzLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
YiwgMHg2OSwgMHgzMywgMHgzMiwKLSAgICAgICAgICAgIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEs
IDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsCi0gICAgICAgICAgICAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAw
eDEwLCAweDA4LAotICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgotICAg
ICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQ
bGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5j
dGlvbigwKSwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMTAwKSB9KSwgMTAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg
IC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAobW9kdWxlCi0gICAgICAgIC8vICAobWVt
b3J5IDEpCi0gICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAk
aSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgKGkzMi5z
dG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAgIChyZXR1
cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAvLyAgICkKLSAgICAgICAg
Ly8gICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4
MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAw
eDAyLCAweDAxLCAweDAxLCAweDAyLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAgICAgIDB4MzIsIDB4NWYsIDB4NmMs
IDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4
OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDhmLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAweDM0LCAw
eDAzLCAweDAwLCAweDE0LAotICAgICAgICAgICAgMHgwMSwgMHgyYiwgMHgwMywgMHgwMCwgMHgw
OSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAg
ICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigw
KSwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJv
eCgxMDApIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dh
c21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KC0xMiksIGJveChwbGFuLm1lbW9yeSgp
LT5zaXplKCkgLSBzaXplb2YodWludDY0X3QpKSB9KSwgLTEyKTsKLSAgICB9Ci0KLSAgICB7Ci0g
ICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAobW9kdWxlCi0gICAgICAgIC8v
ICAobWVtb3J5IDEpCi0gICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChw
YXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAg
KGkzMi5zdG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAg
IChyZXR1cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAvLyAgICkKLSAg
ICAgICAgLy8gICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAg
ICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEs
IDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAw
eDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAgICAgIDB4MzIsIDB4NWYs
IDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4
MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDhm
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAw
eDMzLCAweDAyLCAweDAwLCAweDE0LAotICAgICAgICAgICAgMHgwMSwgMHgyYSwgMHgwMiwgMHgw
MCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9y
KTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2Fz
bUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5j
dGlvbigwKSwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3go
MSksIGJveCgxMDApIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRl
ZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAobWVtb3J5IDEp
Ci0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJ3cml0ZV9hcnJheSIpIChwYXJhbSAkeCBp
MzIpIChwYXJhbSAkcCBpMzIpIChwYXJhbSAkbGVuZ3RoIGkzMikgKGxvY2FsICRpIGkzMikKLSAg
ICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAg
ICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgIChsb29wCi0gICAgICAgIC8vICAgICAgICAoYnJf
aWYgMSAoaTMyLmdlX3UgKGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAkbGVuZ3RoKSkpCi0gICAg
ICAgIC8vICAgICAgICAoaTMyLnN0b3JlIChpMzIuYWRkIChnZXRfbG9jYWwgJHApIChpMzIubXVs
IChnZXRfbG9jYWwgJGkpIChpMzIuY29uc3QgNCkpKSAoZ2V0X2xvY2FsICR4KSkKLSAgICAgICAg
Ly8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGkzMi5jb25zdCAxKSAoZ2V0X2xvY2Fs
ICRpKSkpCi0gICAgICAgIC8vICAgICAgICAoYnIgMCkKLSAgICAgICAgLy8gICAgICAgICkKLSAg
ICAgICAgLy8gICAgICAgKQotICAgICAgICAvLyAgICAgIChyZXR1cm4pCi0gICAgICAgIC8vICAg
ICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0g
ewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAg
ICAgICAgICAgIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODIsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAgICAg
ICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDc3LCAweDcyLAotICAgICAgICAgICAg
MHg2OSwgMHg3NCwgMHg2NSwgMHg1ZiwgMHg2MSwgMHg3MiwgMHg3MiwgMHg2MSwgMHg3OSwgMHgw
MCwgMHgwMCwgMHgwYSwgMHhiMiwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAs
IDB4MDEsIDB4YWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4
MTAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDEsIDB4MDAsCi0gICAgICAgICAgICAweDAyLCAweDAw
LCAweDE0LCAweDAzLCAweDE0LCAweDAyLCAweDU2LCAweDA3LCAweDAxLCAweDE0LCAweDAxLCAw
eDE0LCAweDAzLCAweDEwLCAweDA0LCAweDQyLAotICAgICAgICAgICAgMHg0MCwgMHgxNCwgMHgw
MCwgMHgzMywgMHgwMiwgMHgwMCwgMHgxMCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwgMHgxNSwg
MHgwMywgMHgwNiwgMHgwMCwgMHgwZiwKLSAgICAgICAgICAgIDB4MGYsIDB4MDksIDB4MGYKLSAg
ICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNr
UGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUoKSk7Ci0K
LSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDU7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVvZih1aW50MzJfdCk7Ci0g
ICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVt
b3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmpzVG9XYXNtRW50
cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0
aCkgfSk7Ci0gICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICBDSEVD
S19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29m
ZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCAxMDB1
KTsKLQotICAgICAgICBsZW5ndGggPSAxMDsKLSAgICAgICAgb2Zmc2V0ID0gNSAqIHNpemVvZih1
aW50MzJfdCk7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRG
b3JGdW5jdGlvbigwKSwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAg
ICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9y
eVtvZmZzZXQgLSAxXSwgMTAwdSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBs
ZW5ndGhdLCAwdSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgNXUpOwotICAgIH0K
LQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1
bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBv
cnQgIndyaXRlX2FycmF5IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICRwIGkzMikgKHBhcmFtICRs
ZW5ndGggaTMyKSAobG9jYWwgJGkgaTMyKQotICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgJGkg
KGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAgICAoYmxvY2sKLSAgICAgICAgLy8gICAgICAg
KGxvb3AKLSAgICAgICAgLy8gICAgICAgIChicl9pZiAxIChpMzIuZ2VfdSAoZ2V0X2xvY2FsICRp
KSAoZ2V0X2xvY2FsICRsZW5ndGgpKSkKLSAgICAgICAgLy8gICAgICAgIChpMzIuc3RvcmU4IChp
MzIuYWRkIChnZXRfbG9jYWwgJHApIChnZXRfbG9jYWwgJGkpKSAoZ2V0X2xvY2FsICR4KSkKLSAg
ICAgICAgLy8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGkzMi5jb25zdCAxKSAoZ2V0
X2xvY2FsICRpKSkpCi0gICAgICAgIC8vICAgICAgICAoYnIgMCkKLSAgICAgICAgLy8gICAgICAg
ICkKLSAgICAgICAgLy8gICAgICAgKQotICAgICAgICAvLyAgICAgIChyZXR1cm4pCi0gICAgICAg
IC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0
MCwKLSAgICAgICAgICAgIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODIs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0g
ICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhm
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDc3LCAweDcyLAotICAgICAg
ICAgICAgMHg2OSwgMHg3NCwgMHg2NSwgMHg1ZiwgMHg2MSwgMHg3MiwgMHg3MiwgMHg2MSwgMHg3
OSwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhZiwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAg
IDB4MDAsIDB4MDEsIDB4YTksIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDEsIDB4MDAsCi0gICAgICAgICAgICAweDAy
LCAweDAwLCAweDE0LCAweDAzLCAweDE0LCAweDAyLCAweDU2LCAweDA3LCAweDAxLCAweDE0LCAw
eDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE0LCAweDAwLAotICAgICAgICAgICAgMHgyZSwgMHgw
MCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwgMHgxNSwgMHgwMywgMHgwNiwg
MHgwMCwgMHgwZiwgMHgwZiwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4g
cGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAgICAgICBB
U1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKLSAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gMTsKLSAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpw
bGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBib3gob2Zm
c2V0KSwgYm94KGxlbmd0aCkgfSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAx
XSwgMHUpOwotICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDEwMHUpOwotCi0gICAgICAgIGxlbmd0aCA9
IDEwOwotICAgICAgICBvZmZzZXQgPSA1OwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94
KGxlbmd0aCkgfSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAwdSk7
Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIENIRUNL
X0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgNXUpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8g
R2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgICht
ZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBh
cmFtICRpIGkzMikgKHBhcmFtICRwdHIgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAg
ICAoaTMyLnN0b3JlOCAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAv
LyAgICAgIChyZXR1cm4gKGkzMi5sb2FkOF9zIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAv
LyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAs
Ci0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAotICAg
ICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4Ziwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAg
ICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMs
IDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAw
eDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAx
LCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDE0LAotICAgICAgICAgICAgMHgwMSwg
MHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4g
cGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAgICAgICBB
U1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21F
bnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rp
b24oMCksIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEp
LCBib3goMTAwKSB9KSwgMSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQg
ZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQot
ICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMy
KSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAoaTMyLnN0b3JlOCAoaTMyLmNvbnN0IDgp
IChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAgICAgIChyZXR1cm4gKGkzMi5sb2FkOF9zIChp
MzIuY29uc3QgOCkpKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4
NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1
LCAweDgzLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2
OSwgMHgzMywgMHgzMiwKLSAgICAgICAgICAgIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQs
IDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsCi0gICAgICAgICAgICAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAwLCAweDEwLCAweDA4LCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDEwLCAw
eDA4LAotICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9
OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBs
YW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigw
KSwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5q
c1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVu
Y3Rpb24oMCksIHsgYm94KDEpIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdl
bmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAoZnVu
YyAiZHVtYi1lcSIgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCi0g
ICAgICAgIC8vICAgICAgKGlmIChpMzIuZXEgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkp
Ci0gICAgICAgIC8vICAgICAgICh0aGVuIChiciAwKSkKLSAgICAgICAgLy8gICAgICAgKGVsc2Ug
KHJldHVybiAoaTMyLmNvbnN0IDEpKSkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoaTMyLmNv
bnN0IDApKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4
NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3
LCAweDhiLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNywg
MHg2NCwgMHg3NSwgMHg2ZCwgMHg2MiwgMHgyZCwgMHg2NSwgMHg3MSwgMHgwMCwgMHgwMCwgMHgw
YSwgMHg5OSwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4OTMs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4
NGQsCi0gICAgICAgICAgICAweDAzLCAweDAwLCAweDA2LCAweDAwLCAweDA0LCAweDEwLCAweDAx
LCAweDA5LCAweDBmLCAweDEwLCAweDAwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAg
ICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0K
LSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgw
KSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3goMCkgfSksIDEpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JG
dW5jdGlvbigwKSwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgx
KSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDIpLCBib3goMikgfSksIDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JG
dW5jdGlvbigwKSwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgy
KSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMSk7
Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8g
ICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiZHVtYi1sZXNzLXRoYW4i
KSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8g
ICAgICAobG9vcAotICAgICAgICAvLyAgICAgICAoaWYgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAo
Z2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAgICAgICh0aGVuIChyZXR1cm4gKGkzMi5jb25z
dCAwKSkpCi0gICAgICAgIC8vICAgICAgICAoZWxzZSAoaWYgKGkzMi5lcSAoZ2V0X2xvY2FsICR4
KSAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgICAgICAgICAgIChyZXR1cm4gKGkzMi5j
b25zdCAxKSkpKSkKLSAgICAgICAgLy8gICAgICAgKHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0
X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAgICAgKGJyIDApCi0gICAg
ICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAg
ICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAw
eDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwNywgMHg5MiwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NmMsIDB4NjUsIDB4NzMsIDB4
NzMsIDB4MmQsIDB4NzQsCi0gICAgICAgICAgICAweDY4LCAweDYxLCAweDZlLCAweDAwLCAweDAw
LCAweDBhLCAweGFjLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweGE2LCAweDgwLCAw
eDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwOSwgMHgwNCwg
MHgxNCwKLSAgICAgICAgICAgIDB4MDAsIDB4MTAsIDB4MDAsIDB4NGQsIDB4MDMsIDB4MDAsIDB4
MTAsIDB4MDEsIDB4MDksIDB4MGYsIDB4MGYsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDEs
Ci0gICAgICAgICAgICAweDE1LCAweDAwLCAweDA2LCAweDAwLCAweDBmLCAweDAwLCAweDBmCi0g
ICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVj
a1BsYW4ocGxhbiwgMSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1
bmN0aW9uKDApLCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEp
LCBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1Rv
V2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1
bmN0aW9uKDApLCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDIp
LCBib3goMikgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1Rv
V2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1
bmN0aW9uKDApLCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEw
MCksIGJveCg2KSB9KSwgMCk7Ci0gICAgfQotCi0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRl
ZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikg
KHJldHVybiAoaTMyLmNvbnN0IDUpKSkgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9y
ID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwK
LSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAg
ICAgICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcyLCAw
eDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBhLAotICAgICAgICAg
ICAgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0g
ICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEp
OwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyB9
KSwgNSk7Ci0gICAgfQotCi0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOiAobW9k
dWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikgKHJldHVybiAoaTMy
LmFkZCAoaTMyLmNvbnN0IDUpIChpMzIuY29uc3QgNikpKSkgKQotICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgw
YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAs
IDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAw
eDc1LCAweDcyLCAweDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBh
LAotICAgICAgICAgICAgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4OCwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgxMCwgMHgwNiwKLSAg
ICAgICAgICAgIDB4NDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBs
YW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLQotICAgICAgICAv
LyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgfSksIDExKTsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBv
cnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikgKHJldHVybiAoaTMyLmFkZCAoaTMyLmFkZCAo
aTMyLmNvbnN0IDUpIChpMzIuY29uc3QgMykpIChpMzIuY29uc3QgMykpKSkgKQotICAgICAgICBW
ZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3Mywg
MHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMs
IDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4
ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1
LCAweDc0LCAweDc1LCAweDcyLCAweDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAw
eDAwLCAweDBhLAotICAgICAgICAgICAgMHg5MSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgxMCwg
MHgwMywKLSAgICAgICAgICAgIDB4NDAsIDB4MTAsIDB4MDMsIDB4NDAsIDB4MDksIDB4MGYKLSAg
ICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNr
UGxhbihwbGFuLCAxKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVu
Y3Rpb24oMCksIHsgfSksIDExKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRl
ZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikg
KGJsb2NrIChyZXR1cm4gKGkzMi5hZGQgKGkzMi5hZGQgKGkzMi5jb25zdCA1KSAoaTMyLmNvbnN0
IDMpKSAoaTMyLmNvbnN0IDMpKSkpICh1bnJlYWNoYWJsZSkpICkKLSAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4
MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAweDgwLCAweDgw
LCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg3MiwgMHg2NSwgMHg3NCwg
MHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgwMCwgMHgwMCwgMHgw
YSwKLSAgICAgICAgICAgIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4OGYs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDUsCi0g
ICAgICAgICAgICAweDEwLCAweDAzLCAweDQwLCAweDEwLCAweDAzLCAweDQwLCAweDA5LCAweDBm
LCAweDAwLCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3Ip
OwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNt
RW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IH0pLCAxMSk7Ci0gICAgfQotCi0gICAgewotICAg
ICAgICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJhZGQiKSAocGFy
YW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikgKHJldHVybiAoaTMyLmFkZCAo
Z2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkpKSApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90
PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAw
eDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywg
MHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NywgMHg4
MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4NjEsIDB4NjQs
IDB4NjQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsCi0g
ICAgICAgICAgICAweDAxLCAweDg4LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0
LCAweDAwLCAweDE0LCAweDAxLCAweDQwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAg
ICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0K
LSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgw
KSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEwMCksIGJveCgxKSB9KSwgMTAx
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KC0xKSwgYm94KDEpfSksIDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBi
b3goc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSksIGJveCgxKSB9KSwgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMg
KGV4cG9ydCAibG9jYWxzIikgKHBhcmFtICR4IGkzMikgKHJlc3VsdCBpMzIpIChsb2NhbCAkbnVt
IGkzMikKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRudW0gKGdldF9sb2NhbCAkeCkpCi0g
ICAgICAgIC8vICAgICAgKHJldHVybiAoZ2V0X2xvY2FsICRudW0pKQotICAgICAgICAvLyAgICAg
ICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsK
LSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAg
ICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhhLCAweDgwLCAweDgwLAotICAgICAgICAg
ICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2YywgMHg2ZiwgMHg2MywgMHg2MSwgMHg2Yywg
MHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5MSwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4
ODAsIDB4MDAsIDB4MDEsIDB4OGIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MTQsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MTQsCi0gICAgICAgICAgICAweDAxLCAw
eDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwot
ICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50
cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJv
eCgxMCkgfSksIDEwKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJz
dW0iKSAocGFyYW0gJHggaTMyKSAocmVzdWx0IGkzMikgKGxvY2FsICR5IGkzMikKLSAgICAgICAg
Ly8gICAgICAoc2V0X2xvY2FsICR5IChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgKGxv
b3AKLSAgICAgICAgLy8gICAgICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgICAoYnJfaWYgMCAo
aTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpKQotICAgICAgICAvLyAgICAgICAg
KHNldF9sb2NhbCAkeSAoaTMyLmFkZCAoZ2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkpCi0g
ICAgICAgIC8vICAgICAgICAoc2V0X2xvY2FsICR4IChpMzIuc3ViIChnZXRfbG9jYWwgJHgpIChp
MzIuY29uc3QgMSkpKQotICAgICAgICAvLyAgICAgICAgKGJyIDEpCi0gICAgICAgIC8vICAgICAg
ICApCi0gICAgICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9j
YWwgJHkpKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4
NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw
eDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDg3
LCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg3Mywg
MHg3NSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwKLSAgICAgICAgICAgIDB4YTgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDEsIDB4
MDAsCi0gICAgICAgICAgICAweDE0LCAweDAwLCAweDEwLCAweDAwLCAweDRkLCAweDA3LCAweDAw
LCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDQwLCAweDE1LCAweDAxLCAweDE0LCAweDAwLAot
ICAgICAgICAgICAgMHgxMCwgMHgwMSwgMHg0MSwgMHgxNSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgw
ZiwgMHgwZiwgMHgxNCwgMHgwMSwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBs
YW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAg
ICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCkgfSks
IDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9p
bnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMil9
KSwgMyk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQ
b2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApIH0pLCA1MDUwKTsKLSAgICB9Ci0KLSAgICB7
Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAg
ICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJkdW1iLW11bHQiKSAocGFyYW0gJHggaTMyKSAocGFy
YW0gJHkgaTMyKSAocmVzdWx0IGkzMikgKGxvY2FsICR0b3RhbCBpMzIpIChsb2NhbCAkaSBpMzIp
IChsb2NhbCAkaiBpMzIpCi0gICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkdG90YWwgKGkzMi5j
b25zdCAwKSkKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkpCi0g
ICAgICAgIC8vICAgICAgKGJsb2NrIChsb29wCi0gICAgICAgIC8vICAgICAgICAgICAgICAoYnJf
aWYgMSAoaTMyLmVxIChnZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwgJHgpKSkKLSAgICAgICAgLy8g
ICAgICAgICAgICAgIChzZXRfbG9jYWwgJGogKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAg
ICAgICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGdldF9sb2NhbCAkaSkgKGkzMi5jb25z
dCAxKSkpCi0gICAgICAgIC8vICAgICAgICAgICAgICAobG9vcAotICAgICAgICAvLyAgICAgICAg
ICAgICAgIChicl9pZiAxIChpMzIuZXEgKGdldF9sb2NhbCAkaikgKGdldF9sb2NhbCAkeSkpKQot
ICAgICAgICAvLyAgICAgICAgICAgICAgIChzZXRfbG9jYWwgJHRvdGFsIChpMzIuYWRkIChnZXRf
bG9jYWwgJHRvdGFsKSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAgICAgICAgICAgICAo
c2V0X2xvY2FsICRqIChpMzIuYWRkIChnZXRfbG9jYWwgJGopIChpMzIuY29uc3QgMSkpKQotICAg
ICAgICAvLyAgICAgICAgICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAgICAgICAgICkK
LSAgICAgICAgLy8gICAgICAgICAgICAgICkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoZ2V0
X2xvY2FsICR0b3RhbCkpCi0gICAgICAgIC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAg
ICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwg
MHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDAsIDB4MDcsIDB4OGQsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDA5LCAweDY0LCAweDc1LCAweDZkLCAweDYyLCAweDJkLCAweDZkLCAweDc1LCAweDZjLCAw
eDc0LCAweDAwLCAweDAwLAotICAgICAgICAgICAgMHgwYSwgMHhjNywgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHhjMSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywg
MHgwMSwgMHgxMCwKLSAgICAgICAgICAgIDB4MDAsIDB4MTUsIDB4MDIsIDB4MTAsIDB4MDAsIDB4
MTUsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDAs
IDB4NGQsCi0gICAgICAgICAgICAweDA3LCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAweDA0LCAw
eDE0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweDE1LCAweDAzLCAweDAyLCAweDAwLCAweDE0
LAotICAgICAgICAgICAgMHgwNCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwNywgMHgwMSwgMHgxNCwg
MHgwMiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgxNSwgMHgwMiwgMHgxNCwgMHgwNCwgMHgxMCwKLSAg
ICAgICAgICAgIDB4MDEsIDB4NDAsIDB4MTUsIDB4MDQsIDB4MDYsIDB4MDAsIDB4MGYsIDB4MGYs
IDB4MGYsIDB4MTQsIDB4MDIsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFu
IHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLQotICAgICAg
ICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApLCBib3go
MSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVu
dHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9u
KDApLCB7IGJveCgyKSwgYm94KDEpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3go
MikgfSksIDIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVu
dHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMiksIGJveCgyKSB9KSwgNCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9u
KDApLCB7IGJveCgyKSwgYm94KDYpIH0pLCAxMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBi
b3goNikgfSksIDYwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9X
YXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBib3goMTAwKSB9KSwgMTAw
MDApOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAg
IC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChmdW5jICJkdW1iLWxlc3MtdGhhbiIgKHBh
cmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAg
KGxvb3AKLSAgICAgICAgLy8gICAgICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgICAoYmxvY2sK
LSAgICAgICAgLy8gICAgICAgICAoYnJfaWYgMCAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChnZXRf
bG9jYWwgJHkpKSkKLSAgICAgICAgLy8gICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAgICAg
ICApCi0gICAgICAgIC8vICAgICAgICAocmV0dXJuIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8v
ICAgICAgICApCi0gICAgICAgIC8vICAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAgKGJs
b2NrCi0gICAgICAgIC8vICAgICAgICAgKGJyX2lmIDAgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAo
aTMyLmNvbnN0IDApKSkKLSAgICAgICAgLy8gICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAg
ICAgICApCi0gICAgICAgIC8vICAgICAgICAocmV0dXJuIChpMzIuY29uc3QgMSkpCi0gICAgICAg
IC8vICAgICAgICApCi0gICAgICAgIC8vICAgICAgIChzZXRfbG9jYWwgJHggKGkzMi5zdWIgKGdl
dF9sb2NhbCAkeCkgKGkzMi5jb25zdCAxKSkpCi0gICAgICAgIC8vICAgICAgIChiciAwKQotICAg
ICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgICh1bnJlYWNoYWJsZSkKLSAgICAgICAg
Ly8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0
b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAw
eDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQw
LAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4Miwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKLSAg
ICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQs
IDB4NjIsIDB4MmQsIDB4NmMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCi0gICAgICAg
ICAgICAweDY4LCAweDYxLCAweDZlLCAweDAwLCAweDAwLCAweDBhLCAweGI5LCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweGIzLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAg
MHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwNywgMHgwMCwgMHgwNiwKLSAgICAgICAgICAgIDB4MDEs
IDB4MGYsIDB4MTAsIDB4MDAsIDB4MDksIDB4MGYsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4
MTQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NGQsIDB4MDcsCi0gICAgICAgICAgICAweDAwLCAweDA2
LCAweDAxLCAweDBmLCAweDEwLCAweDAxLCAweDA5LCAweDBmLCAweDE0LCAweDAwLCAweDEwLCAw
eDAxLCAweDQxLCAweDE1LCAweDAwLCAweDA2LAotICAgICAgICAgICAgMHgwMCwgMHgwZiwgMHgw
MCwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAg
ICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDAp
LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDIpLCBib3goMSkg
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDAp
LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3goMSkg
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDAp
LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwotICAgIH0KLQotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0g
ICAgQ29tbWFuZExpbmUgb3B0aW9ucyhhcmdjLCBhcmd2KTsKLQotICAgIGlmIChvcHRpb25zLm1f
cnVuV2FzbVRlc3RzKSB7Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgICAgICBKU0M6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICAgICAgdm0gPSAmSlNDOjpWTTo6Y3JlYXRlKEpTQzo6
TGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgICAgIHJ1bldhc21UZXN0cygpOwotI2Vsc2UKLSAg
ICAgICAgZGF0YUxvZ0xuKCJXYXNtIGlzIG5vdCBlbmFibGVkISIpOwotICAgICAgICByZXR1cm4g
RVhJVF9GQUlMVVJFOwotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRVhJVF9TVUNDRVNTOwotfQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcg
KzI1LDYgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgK
LQkJCQk1MzlFQjA4MzFENTU2MEY0MDBDODJFRjcgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
QEAgLTEyODcsOSArMTI4Niw2IEBACiAJCTUzNzBCNEY1MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNzBCNEYzMUJGMjVFQTIwMDVDNDBG
QyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCAqLzsg
fTsKIAkJNTM3MEI0RjYxQkYyNjIwNTAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi87IH07CiAJCTUzOTE3RTdCMUI3OTA2RkEw
MDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5MTdFN0ExQjc5
MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25z
LmggKi87IH07Ci0JCTUzOUVCMDc5MUQ1NTYwNzAwMEM4MkVGNyAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
RjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKLQkJ
NTM5RUIwN0ExRDU1NjA3MDAwQzgyRUY3IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgy
MkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07Ci0JCTUzOUVC
MDgxMUQ1NTYwOEEwMEM4MkVGNyAvKiB0ZXN0V2FzbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA3MTFENTUzREY4MDBDODJFRjcgLyogdGVz
dFdhc20uY3BwICovOyB9OwogCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
OUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovOyB9OwogCQk1M0Q0
NDREQzFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Q0NDREQjFEQUYwOEFCMDBCOTI3
ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi87IH07CiAJCTUzRDQ0NERFMURBRjA5QTAwMEI5
Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REQxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFk
ZHJlc3NWYWx1ZS5jcHAgKi87IH07CkBAIC0xNDI5LDYgKzE0MjUsOSBAQAogCQk3OUIwMENCRTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlCMDBDQkExQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5
T2JqZWN0LmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1vcHRpbWl6
ZS1zaWJsaW5nLWNhbGxzIjsgfTsgfTsKIAkJNzlCMDBDQkYxQzZBQjA3RTAwODhDNjVEIC8qIFBy
b3h5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUIwMENCQjFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUIxNzg4RTFEMzk5QjgwMDBC
MUE1NjcgLyogSklUTWF0aElDRm9yd2FyZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTg5OUZFMUQzODYxMkUwMEQxOEM3MyAvKiBKSVRNYXRoSUNG
b3J3YXJkcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTc5Qjc1OTc0MURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlCNzU5NzEx
REZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgKi87IH07CisJCTc5
Qjc1OTc1MURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5Qjc1OTcyMURGQTRDNjAw
MDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUI3NTk3NjFERkE0QzYwMDA1MjE3NEMgLyog
V2FzbVBhZ2VDb3VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlCNzU5NzMxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUI4MTk5MzFERDI1
Q0Y1MDBEREM3MTQgLyogSlNHbG9iYWxPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUI4MTk5MjFERDI1Q0Y1MDBEREM3MTQgLyog
SlNHbG9iYWxPYmplY3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzlDNEIxNUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRj
aFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUIxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwICovOyB9OwogCQk3OUM0QjE1RTFCQTIx
NThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUMxQkEy
MTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM3OSwx
MyArMjM3OCw2IEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGNDY4MEE5MTRCQTdGRDkw
MEJGRTI3MjsKIAkJCXJlbW90ZUluZm8gPSAiTExJbnQgT2Zmc2V0cyI7CiAJCX07Ci0JCTUzOUVC
MDgyMUQ1NTYwRjQwMEM4MkVGNyAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5
MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAx
OwotCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSA1MzlFQjA3NTFENTU2MDcwMDBDODJFRjc7Ci0J
CQlyZW1vdGVJbmZvID0gdGVzdFdBU007Ci0JCX07CiAJCTVENjlFOTExMTUyQkU1NDcwMDI4RDcy
MCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWluZXJJ
dGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcg
LyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0zNjgzLDcgKzM2NzUsNiBAQAogCQk1MzkxN0U3QzFC
NzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBl
ZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1l
ID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90
b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNTM5RUIwNzExRDU1M0RG
ODAwQzgyRUY3IC8qIHRlc3RXYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IHRlc3RXYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTM5RUIw
ODAxRDU1NjA3MDAwQzgyRUY3IC8qIHRlc3RXQVNNICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0V0FTTTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0NERCMURBRjA4QUIwMEI5Mjc4NCAvKiBC
M1dhc21BZGRyZXNzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNX
YXNtQWRkcmVzc1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21BZGRyZXNzVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNENDQ0REQxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2Fz
bUFkZHJlc3NWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1dhc21BZGRyZXNzVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NjAsNiArMzg1MSw5IEBACiAJCTc5QjAw
Q0I5MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzlCMDBDQkExQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5T2JqZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlCMDBDQkIxQzZBQjA3RTAwODhDNjVEIC8qIFBy
b3h5T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5T2JqZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5Qjc1OTcxMURGQTRDNjAwMDUyMTc0
QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJbmZvcm1h
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTWVtb3J5SW5mb3Jt
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlCNzU5NzMxREZBNEM2MDAw
NTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2FzbVBhZ2VDb3VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUI4MTk5
MjFERDI1Q0Y1MDBEREM3MTQgLyogSlNHbG9iYWxPYmplY3RJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0SW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5MTEsMTUgKzQ5MDUsNiBAQAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwotCQk1MzlFQjA3ODFE
NTU2MDcwMDBDODJFRjcgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJCTUzOUVCMDc5MUQ1NTYwNzAwMEM4MkVGNyAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAotCQkJCTUzOUVCMDdBMUQ1NTYwNzAwMEM4MkVGNyAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJNjUxMTIyRkMxNDA0NkE0
QzAwMkIxMDFEIC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00OTY3LDcgKzQ5
NTIsNiBAQAogCQkJCTY1MTEyMzA1MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAog
CQkJCTBGOTMyNzU5MUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLywKIAkJCQkwRjYxODM0
MzFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLywKLQkJCQk1MzlFQjA4MDFENTU2MDcwMDBD
ODJFRjcgLyogdGVzdFdBU00gKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTYwMjQsOCArNjAwOCwxMSBAQAogCQkJCTUzRjQwRThB
MUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQk1MzU1NTcx
NTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8sCiAJCQkJNTM1NTU3MTMxRDlE
OUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLywKKwkJCQk3OUI3NTk3MTFERkE0QzYwMDA1
MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCAqLywKKwkJCQk3OUI3NTk3MjFERkE0
QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggKi8sCiAJCQkJNTNGNDBFOTYx
RDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUzRjQwRTk0
MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi8sCisJCQkJNzlCNzU5NzMx
REZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLywKIAkJCQk1M0Y0MEU4QzFENTkw
MUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovLAogCQkJCTUzMTM3NEJFMUQ1Q0U5NTAwMEFG
N0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCiAJCQkJNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8q
IFdhc21QbGFuLmggKi8sCkBAIC03OTgzLDYgKzc5NzAsNyBAQAogCQkJCTBGMThEM0QwMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk5OEVENjc1MUJFRDc2OEMwMEREODAxNyAvKiBSZW1vdGVDb250cm9sbGFibGVU
YXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0Y4MUMxMzZFMjUwMDMyM0Y2NyAvKiBC
M1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlCNzU5NzYx
REZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3Np
dGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjIyLDYgKzgyMTAsNyBAQAogCQkJCUJDMDJFOThE
MEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzAyRTkwRjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk5NkI3MzFCMUJEQTA4RDEwMDMzMUI4NCAvKiBFcnJvclByb3RvdHlwZS5sdXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTc5Qjc1OTc1MURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5
SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk4MEVEMUQzQUUwMEYxRjY4
MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTQ5ODIwNDE4
OTFEMEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTFDMEZG
RDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTkxNDYs
MjIgKzkxMzUsNiBAQAogCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDE0QkQ1OUJGMEEzRThGOTAwMEJB
RjU5QyAvKiB0ZXN0YXBpICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3Qt
dHlwZS50b29sIjsKIAkJfTsKLQkJNTM5RUIwNzUxRDU1NjA3MDAwQzgyRUY3IC8qIHRlc3RXQVNN
ICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDUzOUVCMDdCMUQ1NTYwNzAwMEM4MkVGNyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdFdBU00iICovOwotCQkJYnVpbGRQaGFzZXMgPSAo
Ci0JCQkJNTM5RUIwNzYxRDU1NjA3MDAwQzgyRUY3IC8qIFNvdXJjZXMgKi8sCi0JCQkJNTM5RUIw
NzgxRDU1NjA3MDAwQzgyRUY3IC8qIEZyYW1ld29ya3MgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxl
cyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IHRlc3RX
QVNNOwotCQkJcHJvZHVjdE5hbWUgPSB0ZXN0YXBpOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDUz
OUVCMDgwMUQ1NTYwNzAwMEM4MkVGNyAvKiB0ZXN0V0FTTSAqLzsKLQkJCXByb2R1Y3RUeXBlID0g
ImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7Ci0JCX07CiAJCTY1MTEyMkY3MTQwNDZBNEMw
MDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owog
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDY1MTEyMzAwMTQwNDZBNEMwMDJCMTAxRCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdFJlZ0V4cCIg
Ki87CkBAIC05MjYzLDcgKzkyMzYsNiBAQAogCQkJCTVENkIyQTQ3MTUyQjlFMTcwMDUyMzFERSAv
KiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5j
aCAqLywKIAkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLywKLQkJCQk1
MzlFQjA3NTFENTU2MDcwMDBDODJFRjcgLyogdGVzdFdBU00gKi8sCiAJCQkpOwogCQl9OwogLyog
RW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAtOTUzNCwxNCArOTUwNiw2IEBACiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0JCTUzOUVC
MDc2MUQ1NTYwNzAwMEM4MkVGNyAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMg
PSAoCi0JCQkJNTM5RUIwODExRDU1NjA4QTAwQzgyRUY3IC8qIHRlc3RXYXNtLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwotCQl9OwogCQk2NTExMjJGQTE0MDQ2QTRDMDAyQjEwMUQgLyogU291cmNlcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTk2NDcsNiArOTYxMSw3IEBACiAJCQkJQzJGQ0FFMTAxN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFBQTEw
N0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzA5NEM0REUxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzlCNzU5NzQxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21N
ZW1vcnlJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkZDQUUxMjE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMzM4RTBEMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTY1QjgzOTJGMUJBQ0FENkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDcxLDExICsxMDQzNiw2IEBACiAJCQl0YXJnZXQgPSAw
RjQ2ODBBOTE0QkE3RkQ5MDBCRkUyNzIgLyogTExJbnQgT2Zmc2V0cyAqLzsKIAkJCXRhcmdldFBy
b3h5ID0gMEZGOTIyRDIxNEY0NkIyRjAwNDFBMjRFIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAq
LzsKIAkJfTsKLQkJNTM5RUIwODMxRDU1NjBGNDAwQzgyRUY3IC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0gNTM5
RUIwNzUxRDU1NjA3MDAwQzgyRUY3IC8qIHRlc3RXQVNNICovOwotCQkJdGFyZ2V0UHJveHkgPSA1
MzlFQjA4MjFENTU2MEY0MDBDODJFRjcgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwotCQl9
OwogCQk1RDY5RTkxMjE1MkJFNTQ3MDAyOEQ3MjAgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSA5MzJGNUJEQTA4
MjJBMUM3MDA3MzY5NzUgLyoganNjICovOwpAQCAtMTA4MTEsMzggKzEwNzcxLDYgQEAKIAkJCX07
CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJNTM5RUIwN0MxRDU1NjA3MDAwQzgyRUY3
IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29s
RXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVD
VF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07
Ci0JCTUzOUVCMDdEMUQ1NTYwNzAwMEM4MkVGNyAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJD
MDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKLQkJ
CWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsK
LQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJNTM5RUIwN0UxRDU1NjA3MDAwQzgy
RUY3IC8qIFByb2ZpbGluZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwot
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0Njcg
LyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJ
CVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IFByb2Zp
bGluZzsKLQkJfTsKLQkJNTM5RUIwN0YxRDU1NjA3MDAwQzgyRUY3IC8qIFByb2R1Y3Rpb24gKi8g
PSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhj
Y29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChU
QVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBQcm9kdWN0aW9uOwotCQl9OwogCQk1RDZC
MkE0ODE1MkI5RTE3MDA1MjMxREUgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CkBAIC0xMTEzNCwxNyArMTEwNjIsNiBA
QAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJNTM5RUIwN0IxRDU1NjA3MDAwQzgy
RUY3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0
V0FTTSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25m
aWd1cmF0aW9ucyA9ICgKLQkJCQk1MzlFQjA3QzFENTU2MDcwMDBDODJFRjcgLyogRGVidWcgKi8s
Ci0JCQkJNTM5RUIwN0QxRDU1NjA3MDAwQzgyRUY3IC8qIFJlbGVhc2UgKi8sCi0JCQkJNTM5RUIw
N0UxRDU1NjA3MDAwQzgyRUY3IC8qIFByb2ZpbGluZyAqLywKLQkJCQk1MzlFQjA3RjFENTU2MDcw
MDBDODJFRjcgLyogUHJvZHVjdGlvbiAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlv
bklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9u
OwotCQl9OwogCQk1RDZCMkE0QzE1MkI5RTE3MDA1MjMxREUgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIlRlc3QgVG9vbHMiICovID0gewogCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw2ICsy
OTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MDQ0MQogICAgIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOwogICAgIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogdG9wSlNXZWJBc3NlbWJseUluc3RhbmNlOworICAgIHZvaWQqIHRvcFdh
c21NZW1vcnlQb2ludGVyOworICAgIHVpbnQzMl90IHRvcFdhc21NZW1vcnlTaXplOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvc2hlbGwvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3NoZWxsL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvc2hlbGwvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE3
ICs0OSwxMCBAQCBpZiAoTk9UIFdJTjMyKQogICAgICAgICAuLi9iMy9haXIvdGVzdGFpci5jcHAK
ICAgICApCiAKLSAgICBzZXQoVEVTVFdBU01fU09VUkNFUwotICAgICAgICAuLi90ZXN0V2FzbS5j
cHAKLSAgICApCi0KICAgICBhZGRfZXhlY3V0YWJsZSh0ZXN0YjMgJHtURVNUQjNfU09VUkNFU30p
CiAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RiMyAke0pTQ19MSUJSQVJJRVN9KQogCiAg
ICAgYWRkX2V4ZWN1dGFibGUodGVzdGFpciAke1RFU1RBSVJfU09VUkNFU30pCiAgICAgdGFyZ2V0
X2xpbmtfbGlicmFyaWVzKHRlc3RhaXIgJHtKU0NfTElCUkFSSUVTfSkKIAotICAgIGFkZF9leGVj
dXRhYmxlKHRlc3RXQVNNICR7VEVTVFdBU01fU09VUkNFU30pCi0gICAgdGFyZ2V0X2xpbmtfbGli
cmFyaWVzKHRlc3RXQVNNICR7SlNDX0xJQlJBUklFU30pCi0KIGVuZGlmICgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9IG51bGxw
dHI7CiAKLSAgICBCM0lSR2VuZXJhdG9yKE1lbW9yeSosIFByb2NlZHVyZSYsIFdhc21JbnRlcm5h
bEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Jik7CisgICAgQjNJUkdl
bmVyYXRvcihNZW1vcnlJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0
aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Jik7CiAKICAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7CiAgICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMTc5LDcg
KzE3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3VsdExpc3QmIHN0YWNrKTsKICAgICBWYWx1
ZSogemVyb0ZvclR5cGUoVHlwZSk7CiAKLSAgICBNZW1vcnkqIG1fbWVtb3J5OwogICAgIFByb2Nl
ZHVyZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAgIFZlY3Rv
cjxWYXJpYWJsZSo+IG1fbG9jYWxzOwpAQCAtMTg5LDkgKzE4OCw4IEBAIHByaXZhdGU6CiAgICAg
VmFsdWUqIG1femVyb1ZhbHVlc1tudW1UeXBlc107CiB9OwogCi1CM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgV2FzbUludGVy
bmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQotICAgIDogbV9tZW1vcnkobWVtb3J5KQotICAgICwg
bV9wcm9jKHByb2NlZHVyZSkKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5SW5m
b3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0
aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscykKKyAgICA6IG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogewogICAgIG1fY3Vy
cmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CkBAIC0yMTAsMTIgKzIwOCwxMiBAQCBCM0lS
R2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1lbW9yeSogbWVtCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAobV9tZW1vcnkpIHsKLSAgICAgICAgbV9tZW1vcnlCYXNlR1BSID0gbV9tZW1vcnkt
PnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyOworICAgIGlmICghIW1lbW9yeSkg
eworICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuYmFz
ZU1lbW9yeVBvaW50ZXI7CiAgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VH
UFIpOwotICAgICAgICBBU1NFUlQoIW1fbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVn
aXN0ZXJzWzBdLnNpemVPZmZzZXQpOwotICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBtX21lbW9y
eS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7Ci0gICAg
ICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgaW5mbyA6IG1fbWVtb3J5LT5w
aW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKQorICAgICAgICBBU1NFUlQoIW1lbW9yeS5w
aW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOworICAgICAgICBt
X21lbW9yeVNpemVHUFIgPSBtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1sw
XS5zaXplUmVnaXN0ZXI7CisgICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5m
byYgaW5mbyA6IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKQogICAgICAg
ICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKGluZm8uc2l6ZVJlZ2lzdGVyKTsKIAogICAgICAgICBt
X3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkKSB7CkBAIC0zMDIsMTMgKzMwMCwxMyBAQCBpbmxp
bmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgCiAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkOgogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzoKICAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOgogICAg
ICAgICByZXR1cm4gNDsKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgY2FzZSBM
b2FkT3BUeXBlOjpGNjRMb2FkOgogICAgICAgICByZXR1cm4gODsKICAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQxNlU6CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgotICAgIGNh
c2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKLSAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtNjU5LDcgKzY1Nyw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8
Q28KICAgICBkYXRhTG9nTG4oIlxuIik7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29t
cGlsYXRpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihWTSYgdm0sIGNvbnN0IFNpZ25hdHVyZSog
c2lnbmF0dXJlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBNZW1vcnkqIG1l
bW9yeSkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWF0ZUpTVG9XYXNt
V3JhcHBlcihWTSYgdm0sIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5KQogewogICAg
IFByb2NlZHVyZSBwcm9jOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gcHJvYy5hZGRCbG9jaygp
OwpAQCAtNjgxLDEyICs2NzksMTMgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlv
bj4gY3JlYQogICAgIC8vIE1vdmUgbWVtb3J5IHZhbHVlcyB0byB0aGUgYXBwcm9yaWF0ZSBwbGFj
ZXMsIGlmIG5lZWRlZC4KICAgICBWYWx1ZSogYmFzZU1lbW9yeSA9IG51bGxwdHI7CiAgICAgVmVj
dG9yPFZhbHVlKj4gc2l6ZXM7Ci0gICAgaWYgKG1lbW9yeSkgewotICAgICAgICBiYXNlTWVtb3J5
ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWVtb3J5
LT5tZW1vcnkoKSk7CisgICAgaWYgKCEhbWVtb3J5KSB7CisgICAgICAgIGJhc2VNZW1vcnkgPSBi
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCks
CisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAmdm0udG9wV2FzbU1lbW9yeVBvaW50ZXIpKTsKICAgICAgICAgVmFsdWUqIHNpemUgPSBi
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCks
Ci0gICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1lbW9yeSkgKyBNZW1vcnk6Om9mZnNldE9mU2l6ZSgp
KSk7Ci0gICAgICAgIHNpemVzLnJlc2VydmVDYXBhY2l0eShtZW1vcnktPnBpbm5lZFJlZ2lzdGVy
cygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvIGluZm8gOiBtZW1v
cnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGJsb2Nr
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ2bS50b3BXYXNtTWVt
b3J5U2l6ZSkpOworICAgICAgICBzaXplcy5yZXNlcnZlQ2FwYWNpdHkobWVtb3J5LnBpbm5lZFJl
Z2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvIGluZm8g
OiBtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykgewogICAgICAgICAgICAg
c2l6ZXMuYXBwZW5kKGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCks
IHNpemUsCiAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBpbmZvLnNpemVPZmZzZXQpKSk7CiAgICAgICAgIH0KQEAgLTcwMCwxMSAr
Njk5LDExIEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWEKIAogICAg
IC8vIE1vdmUgdGhlIGFyZ3VtZW50cyBpbnRvIHBsYWNlLgogICAgIFZhbHVlKiByZXN1bHQgPSB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwocHJvYywgYmxvY2ssIE9yaWdpbigpLCBh
cmd1bWVudHMsIHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSksIFsmXSAoUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50KSB7Ci0gICAgICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChzaXplcy5zaXplKCkgPT0gbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVn
aXN0ZXJzLnNpemUoKSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWlu
ZWRWYWx1ZShiYXNlTWVtb3J5LCBWYWx1ZVJlcDo6cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJz
KCkuYmFzZU1lbW9yeVBvaW50ZXIpKSk7CisgICAgICAgIGlmICghIW1lbW9yeSkgeworICAgICAg
ICAgICAgQVNTRVJUKHNpemVzLnNpemUoKSA9PSBtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6
ZVJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0
cmFpbmVkVmFsdWUoYmFzZU1lbW9yeSwgVmFsdWVSZXA6OnJlZyhtZW1vcnkucGlubmVkUmVnaXN0
ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXIpKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoc2l6ZXNbaV0sIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5w
aW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzW2ldLnNpemVSZWdpc3RlcikpKTsKKyAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShzaXplc1tpXSwg
VmFsdWVSZXA6OnJlZyhtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1tpXS5z
aXplUmVnaXN0ZXIpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKQEAgLTczOCw3ICs3MzcsNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENv
bXBpbGF0aW9uPiBjcmVhCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+
KHZtLCBwcm9jKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBw
YXJzZUFuZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXpl
X3QgZnVuY3Rpb25MZW5ndGgsIE1lbW9yeSogbWVtb3J5LCBjb25zdCBTaWduYXR1cmUqIHNpZ25h
dHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIHVuc2ln
bmVkIG9wdExldmVsKQorc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJz
ZUFuZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3Qg
ZnVuY3Rpb25MZW5ndGgsIE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIGNvbnN0IFNpZ25hdHVy
ZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjb25zdCBGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9uPigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDkgKzM1LDkgQEAgZXh0ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCop
OwogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBNZW1vcnk7Citj
bGFzcyBNZW1vcnlJbmZvcm1hdGlvbjsKIAotc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1
bmN0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBNZW1v
cnkqLCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBj
b25zdCBGdW5jdGlvbkluZGV4U3BhY2UmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworc3RkOjp1
bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBjb25z
dCB1aW50OF90Kiwgc2l6ZV90LCBNZW1vcnlJbmZvcm1hdGlvbiYsIGNvbnN0IFNpZ25hdHVyZSos
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IEZ1bmN0aW9uSW5kZXhTcGFj
ZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCShyZXZp
c2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1Nb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkg
eyB9Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShy
ZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJDb2RlTG9jYXRp
b24uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAi
V2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtOTUsMTUgKzk3LDEzIEBAIHN0cnVjdCBJbXBv
cnQgewogICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0
aGUgY29ycmVzcG9uZGluZyBraW5kLgogfTsKIAotY2xhc3MgTWVtb3J5OwotCiBzdHJ1Y3QgRXhw
b3J0IHsKICAgICBJZGVudGlmaWVyIGZpZWxkOwogICAgIEV4dGVybmFsOjpLaW5kIGtpbmQ7CiAg
ICAgdW5pb24gewogICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwogICAgICAgICAvLyBG
SVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDEzNQotICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgTWVtb3J5IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAgICAgLy8gRklYTUUgaW1w
bGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
NjcxCiAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwogICAgIH07CiB9OwpAQCAtMTE5LDEzICsxMTks
MTAgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBv
cnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmUqPiBpbXBvcnRGdW5jdGlvbnM7CiAgICAgLy8gRklY
TUUgaW1wbGVtZW50IGltcG9ydCBUYWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0MTM1Ci0gICAgLy8gRklYTUUgaW1wbGVtZW50IGltcG9ydCBNZW1vcnkgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAogICAgIC8vIEZJWE1F
IGltcGxlbWVudCBpbXBvcnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQxMzMKICAgICBWZWN0b3I8U2lnbmF0dXJlKj4gaW50ZXJuYWxGdW5jdGlvblNp
Z25hdHVyZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbWVtb3J5OworICAgIE1lbW9y
eUluZm9ybWF0aW9uIG1lbW9yeTsKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwotCi0gICAg
fk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwogCiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2
aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE1ICszMCwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewogCi1NZW1vcnk6Ok1lbW9yeSh1aW50MzJfdCBzdGFydGluZ1NpemUs
IHVpbnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwaW5uZWRTaXplUmVn
aXN0ZXJzKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKQogICAgIDogbV9tb2RlKE1vZGU6OkJvdW5kc0NoZWNraW5nKQotICAgICwgbV9zaXplKHN0
YXJ0aW5nU2l6ZSkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCisgICAgLCBtX3NpemUoaW5p
dGlhbC5ieXRlcygpKQorICAgICwgbV9jYXBhY2l0eShtYXhpbXVtID8gbWF4aW11bS5ieXRlcygp
IDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpKQorICAgICwgbV9pbml0aWFsKGluaXRpYWwpCisg
ICAgLCBtX21heGltdW0obWF4aW11bSkKICAgICAvLyBGSVhNRTogSWYgd2UgYWRkIHNpZ25hbCBi
YXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3ZSBuZWVkIGV4dHJhIHNwYWNlIGZvciBvdmVyZmxv
dyBvbiBsb2FkLgogICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MjY5MwotICAgICwgbV9tYXBwZWRDYXBhY2l0eShzdGF0aWNfY2FzdDx1aW50NjRf
dD4obWF4UGFnZUNvdW50KSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihwYWdlU2l6ZSkpCisgICAg
LCBtX21hcHBlZENhcGFjaXR5KFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKSkKIHsKLSAgICBBU1NF
UlQocGlubmVkU2l6ZVJlZ2lzdGVycy5zaXplKCkgPiAwKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
bWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBnYXVhcmFu
dGVlZCBieSBvdXIgY2FsbGVyLgogCiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYg
d2UgaGFkIGEgVk0gdGFnIGZvciB3YXNtIG1lbW9yeS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MzYwMAogICAgIHZvaWQqIHJlc3VsdCA9IG1tYXAobnVsbHB0ciwg
bV9tYXBwZWRDYXBhY2l0eSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwg
MCk7CkBAIC01MCwyNSArNTIsMTIgQEAgTWVtb3J5OjpNZW1vcnkodWludDMyX3Qgc3RhcnRpbmdT
aXplLCB1aQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChzdGFydGlu
Z1NpemUgPD0gbV9tYXBwZWRDYXBhY2l0eSk7Ci0gICAgaWYgKG1wcm90ZWN0KHJlc3VsdCwgc3Rh
cnRpbmdTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgIEFTU0VSVChtX3NpemUg
PD0gbV9tYXBwZWRDYXBhY2l0eSk7CisgICAgaWYgKG1wcm90ZWN0KHJlc3VsdCwgbV9zaXplLCBQ
Uk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgewogICAgICAgICBtdW5tYXAocmVzdWx0LCBtX21hcHBl
ZENhcGFjaXR5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHJlbWFp
bmluZ1Bpbm5lZFJlZ2lzdGVycyA9IHBpbm5lZFNpemVSZWdpc3RlcnMuc2l6ZSgpICsgMTsKLSAg
ICBqc2NDYWxsaW5nQ29udmVudGlvbigpLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5mb3JFYWNoKFsm
XSAoUmVnIHJlZykgewotICAgICAgICBHUFJSZWcgZ3ByID0gcmVnLmdwcigpOwotICAgICAgICBp
ZiAoIXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycyB8fCBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKS5nZXQocmVnKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHJlbWFpbmlu
Z1Bpbm5lZFJlZ2lzdGVycyA9PSAxKSB7Ci0gICAgICAgICAgICBtX3Bpbm5lZFJlZ2lzdGVycy5i
YXNlTWVtb3J5UG9pbnRlciA9IGdwcjsKLSAgICAgICAgICAgIHJlbWFpbmluZ1Bpbm5lZFJlZ2lz
dGVycy0tOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fcGlubmVkUmVnaXN0ZXJzLnNp
emVSZWdpc3RlcnMuYXBwZW5kKHsgZ3ByLCBwaW5uZWRTaXplUmVnaXN0ZXJzWy0tcmVtYWluaW5n
UGlubmVkUmVnaXN0ZXJzIC0gMV0gfSk7Ci0gICAgfSk7Ci0KLSAgICBBU1NFUlQoIXJlbWFpbmlu
Z1Bpbm5lZFJlZ2lzdGVycyk7CiAgICAgbV9tZW1vcnkgPSByZXN1bHQ7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgJKHJldmlzaW9uIDIwOTYyMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMjggKzI3LDEyIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRl
ICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKLXN0cnVjdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvIHsKLSAgICBHUFJSZWcgc2l6ZVJl
Z2lzdGVyOwotICAgIHVuc2lnbmVkIHNpemVPZmZzZXQ7Ci19OwotCi0vLyBGSVhNRTogV2Ugc2hv
dWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3Rlci4gUmlnaHQgbm93
IHdlIHRha2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9uZQotLy8gZW50cnkuIFNwZWNpZmljYWxseSBh
biBlbnRyeSB3aGVyZSB0aGUgc2l6ZU9mZnNldCA9PSAwLiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBv
bmUgc2l6ZSByZWdpc3RlciwKLS8vIHdlIGNhbiBoYXZlIG9uZSBmb3IgZWFjaCBsb2FkIHNpemUg
Y2xhc3MuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1
Mgotc3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7Ci0gICAgVmVjdG9yPFBpbm5lZFNpemVSZWdp
c3RlckluZm8+IHNpemVSZWdpc3RlcnM7Ci0gICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyOwot
fTsKLQotY29uc3RleHByIHVpbnQzMl90IHBhZ2VTaXplID0gNjQgKiBLQjsKLWNvbnN0ZXhwciB1
aW50MzJfdCBtYXhQYWdlQ291bnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oKDF1bGwgPDwgMzIp
IC8gcGFnZVNpemUpOwotCiBjbGFzcyBNZW1vcnkgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE1lbW9yeSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01OSw4ICs0Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgQm91bmRzQ2hlY2tpbmcKICAgICB9OwogCi0gICAgTWVtb3J5KCkg
PSBkZWZhdWx0OwotICAgIE1lbW9yeSh1aW50MzJfdCBzdGFydGluZ1NpemUsIHVpbnQzMl90IGNh
cGFjaXR5LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwaW5uZWRTaXplUmVnaXN0ZXJzKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBt
YXhpbXVtKTsKIAogICAgIH5NZW1vcnkoKQogICAgIHsKQEAgLTcwLDEwICs1MywxMiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsgfQogICAg
IHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBQaW5u
ZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVk
UmVnaXN0ZXJzOyB9CiAKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0K
IAorICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9Cisg
ICAgUGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKwogICAg
IGJvb2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbWVt
b3J5KTsKQEAgLTg0LDEzICs2OSwxNSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBt
X3NpemUpOyB9CisKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCogbV9tZW1vcnkgeyBudWxscHRy
IH07Ci0gICAgUGlubmVkUmVnaXN0ZXJJbmZvIG1fcGlubmVkUmVnaXN0ZXJzOwogICAgIE1vZGUg
bV9tb2RlOwogICAgIHVpbnQzMl90IG1fc2l6ZSB7IDAgfTsKICAgICB1aW50MzJfdCBtX2NhcGFj
aXR5IHsgMCB9OworICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7CisgICAgUGFnZUNvdW50IG1fbWF4
aW11bTsKICAgICB1aW50NjRfdCBtX21hcHBlZENhcGFjaXR5IHsgMCB9OwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRp
b24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnlJbmZvcm1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKworI2luY2x1ZGUgIldh
c21DYWxsaW5nQ29udmVudGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5
SW5mb3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCAgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkPiYgcGlubmVkU2l6ZVJlZ2lzdGVycywgYm9vbCBpc0ltcG9ydCkKKyAg
ICA6IG1faW5pdGlhbChpbml0aWFsKQorICAgICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgLCBt
X2lzSW1wb3J0KGlzSW1wb3J0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9pbml0aWFsKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghbV9tYXhpbXVtIHx8IG1fbWF4aW11bSA+PSBtX2luaXRpYWwp
OworICAgIEFTU0VSVCghISp0aGlzKTsKKworICAgIHVuc2lnbmVkIHJlbWFpbmluZ1Bpbm5lZFJl
Z2lzdGVycyA9IHBpbm5lZFNpemVSZWdpc3RlcnMuc2l6ZSgpICsgMTsKKyAgICBqc2NDYWxsaW5n
Q29udmVudGlvbigpLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5mb3JFYWNoKFsmXSAoUmVnIHJlZykg
eworICAgICAgICBHUFJSZWcgZ3ByID0gcmVnLmdwcigpOworICAgICAgICBpZiAoIXJlbWFpbmlu
Z1Bpbm5lZFJlZ2lzdGVycyB8fCBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKS5nZXQocmVn
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHJlbWFpbmluZ1Bpbm5lZFJlZ2lz
dGVycyA9PSAxKSB7CisgICAgICAgICAgICBtX3Bpbm5lZFJlZ2lzdGVycy5iYXNlTWVtb3J5UG9p
bnRlciA9IGdwcjsKKyAgICAgICAgICAgIHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycy0tOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fcGlubmVkUmVnaXN0ZXJzLnNpemVSZWdpc3RlcnMu
YXBwZW5kKHsgZ3ByLCBwaW5uZWRTaXplUmVnaXN0ZXJzWy0tcmVtYWluaW5nUGlubmVkUmVnaXN0
ZXJzIC0gMV0gfSk7CisgICAgfSk7CisKKyAgICBBU1NFUlQoIXJlbWFpbmluZ1Bpbm5lZFJlZ2lz
dGVycyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5SW5mb3JtYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJH
UFJJbmZvLmgiCisjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RydWN0IFBpbm5l
ZFNpemVSZWdpc3RlckluZm8geworICAgIEdQUlJlZyBzaXplUmVnaXN0ZXI7CisgICAgdW5zaWdu
ZWQgc2l6ZU9mZnNldDsKK307CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRo
YW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyLiBSaWdodCBub3cgd2UgdGFrZSBhIHZlY3RvciB3
aXRoIG9ubHkgb25lCisvLyBlbnRyeS4gU3BlY2lmaWNhbGx5IGFuIGVudHJ5IHdoZXJlIHRoZSBz
aXplT2Zmc2V0ID09IDAuIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lzdGVyLAor
Ly8gd2UgY2FuIGhhdmUgb25lIGZvciBlYWNoIGxvYWQgc2l6ZSBjbGFzcy4gc2VlOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCitzdHJ1Y3QgUGlubmVkUmVn
aXN0ZXJJbmZvIHsKKyAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lz
dGVyczsKKyAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Cit9OworCitjbGFzcyBNZW1vcnlJ
bmZvcm1hdGlvbiB7CitwdWJsaWM6CisgICAgTWVtb3J5SW5mb3JtYXRpb24oKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCEqdGhpcyk7CisgICAgfQorCisgICAgTWVtb3J5SW5mb3JtYXRpb24oUGFn
ZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+
JiBwaW5uZWRTaXplUmVnaXN0ZXJzLCBib29sIGlzSW1wb3J0KTsKKworICAgIGNvbnN0IFBpbm5l
ZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRS
ZWdpc3RlcnM7IH0KKyAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5p
dGlhbDsgfQorICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVt
OyB9CisgICAgYm9vbCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KKwor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1faW5pdGlhbDsg
fQorCitwcml2YXRlOgorICAgIFBhZ2VDb3VudCBtX2luaXRpYWwgeyB9OworICAgIFBhZ2VDb3Vu
dCBtX21heGltdW0geyB9OworICAgIFBpbm5lZFJlZ2lzdGVySW5mbyBtX3Bpbm5lZFJlZ2lzdGVy
cyB7IH07CisgICAgYm9vbCBtX2lzSW1wb3J0IHsgZmFsc2UgfTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0FTTSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCShyZXZpc2lvbiAy
MDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiSWRlbnRpZmll
cklubGluZXMuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSAiV2FzbU1lbW9y
eS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21P
cHMuaCIKICNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKIApAQCAtMjU2LDcgKzI1Niw5IEBAIGJv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAg
ICAgICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9y
eUhlbHBlcihpc0ltcG9ydCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOiB7
CkBAIC0zMDUsMzYgKzMwNyw1OSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCiti
b29sIE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkKIHsKLSAg
ICB1aW50OF90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MShjb3VudCkpCisgICAgLy8g
V2UgZG9uJ3QgYWxsb3cgcmVkZWNsYXJpbmcgbWVtb3J5LiBFaXRoZXIgdmlhIGltcG9ydCBvciBk
ZWZpbml0aW9uLgorICAgIGlmIChtX21vZHVsZS0+bWVtb3J5KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIHVpbnQ4
X3QgZmxhZ3M7Ci0gICAgdWludDMyX3Qgc2l6ZTsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxh
Z3MpCi0gICAgICAgIHx8ICFwYXJzZVZhclVJbnQzMihzaXplKQotICAgICAgICB8fCBzaXplID4g
bWF4UGFnZUNvdW50KQorICAgIGlmICghcGFyc2VWYXJVSW50MShmbGFncykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgaWYgKCFwYXJzZVZhclVJ
bnQzMihpbml0aWFsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFQYWdlQ291
bnQ6OmlzVmFsaWQoaW5pdGlhbCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVpbnQz
Ml90IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50OworICAgIFBhZ2VDb3VudCBpbml0aWFsUGFnZUNv
dW50KGluaXRpYWwpOworCisgICAgUGFnZUNvdW50IG1heGltdW1QYWdlQ291bnQ7CiAgICAgaWYg
KGZsYWdzKSB7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoY2FwYWNpdHkpCi0gICAgICAg
ICAgICB8fCBzaXplID4gY2FwYWNpdHkKLSAgICAgICAgICAgIHx8IGNhcGFjaXR5ID4gbWF4UGFn
ZUNvdW50KQorICAgICAgICB1aW50MzJfdCBtYXhpbXVtOworICAgICAgICBpZiAoIXBhcnNlVmFy
VUludDMyKG1heGltdW0pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAg
IGNhcGFjaXR5ICo9IHBhZ2VTaXplOwotICAgIHNpemUgKj0gcGFnZVNpemU7CisgICAgICAgIGlm
ICghUGFnZUNvdW50Ojppc1ZhbGlkKG1heGltdW0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQobWF4aW11bSk7CisgICAg
ICAgIGlmIChpbml0aWFsUGFnZUNvdW50ID4gbWF4aW11bVBhZ2VDb3VudCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVz
ID0geyAwIH07Ci0gICAgbV9tb2R1bGUtPm1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVtb3J5
PihzaXplLCBjYXBhY2l0eSwgcGlubmVkU2l6ZXMpOwotICAgIHJldHVybiBtX21vZHVsZS0+bWVt
b3J5LT5tZW1vcnkoKTsKKyAgICBtX21vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24o
aW5pdGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgcGlubmVkU2l6ZXMsIGlzSW1wb3J0
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5
KCkKK3sKKyAgICB1aW50OF90IGNvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MShjb3VudCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgLy8gV2Ugb25seSBhbGxvdyBvbmUgbWVtb3J5IGZvciBub3cuCisgICAg
aWYgKGNvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaXNJbXBv
cnQgPSBmYWxzZTsKKyAgICByZXR1cm4gcGFyc2VNZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwogfQog
CiBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKQpAQCAtMzcyLDcgKzM5Nyw3IEBAIGJv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCgpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1NjcxCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVy
bmFsOjpHbG9iYWw6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBA
QCBwcml2YXRlOgogICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFS
RV9QQVJTRVIpCiAjdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCiAKKyAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KTsKKwog
ICAgIFZNKiBtX3ZtOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9t
b2R1bGU7CiAgICAgRnVuY3Rpb25JbmRleFNwYWNlIG1fZnVuY3Rpb25JbmRleFNwYWNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBQYWdlQ291bnQgewor
CitwdWJsaWM6CisgICAgUGFnZUNvdW50KCkKKyAgICAgICAgOiBtX3BhZ2VDb3VudChVSU5UX01B
WCkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQobWF4UGFnZUNvdW50IDwgVUlOVF9NQVgs
ICJXZSByZWx5IG9uIHRoaXMgaGVyZS4iKTsKKyAgICB9CisKKyAgICBQYWdlQ291bnQodWludDMy
X3QgcGFnZUNvdW50KQorICAgICAgICA6IG1fcGFnZUNvdW50KHBhZ2VDb3VudCkKKyAgICB7IH0K
KworICAgIHNpemVfdCBieXRlcygpIHsgcmV0dXJuIG1fcGFnZUNvdW50ICogcGFnZVNpemU7IH0K
KworICAgIHN0YXRpYyBib29sIGlzVmFsaWQodWludDMyX3QgcGFnZUNvdW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CisgICAgfQorCisgICAgc3Rh
dGljIFBhZ2VDb3VudCBtYXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBhZ2VDb3VudChtYXhQ
YWdlQ291bnQpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFnZUNvdW50ICE9IFVJTlRfTUFYOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZUNvdW50IDwgb3RoZXIubV9wYWdlQ291bnQ7IH0KKyAgICBib29sIG9wZXJhdG9yPihj
b25zdCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDb3VudCA+IG90aGVy
Lm1fcGFnZUNvdW50OyB9CisgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFBhZ2VDb3VudCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50ID49IG90aGVyLm1fcGFnZUNvdW50OyB9CisK
K3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICog
S0I7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBtYXhQYWdlQ291bnQgPSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oKDF1bGwgPDwgMzIpIC8gcGFnZVNpemUpOworCisgICAgdWludDMyX3Qg
bV9wYWdlQ291bnQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdBU00pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4u
Y3BwCShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIFBsYW46OnJ1
bigpCiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbVRvSlNTdHVi
cy5zaXplKCkgKyBmdW5jdGlvbkluZGV4OwogICAgICAgICBBU1NFUlQobV9mdW5jdGlvbkluZGV4
U3BhY2VbZnVuY3Rpb25JbmRleFNwYWNlXS5zaWduYXR1cmUgPT0gc2lnbmF0dXJlKTsKIAotICAg
ICAgICBTdHJpbmcgZXJyb3IgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0
aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fZnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgU3Ry
aW5nIGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bWVtb3J5KTsKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVu
Y3Rpb25MZW5ndGg7ICsraSkKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFBsYW46OnJ1bigpCiAg
ICAgICAgIH0KIAogICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy51bmNoZWNrZWRBcHBl
bmQoVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCkpOwotICAgICAgICBtX3dhc21JbnRl
cm5hbEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lmdl
dCgpLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0aW9uSW5kZXgp
LCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSkpOworICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
cy51bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBm
dW5jdGlvbkxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LCBzaWduYXR1cmUsIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0aW9uSW5kZXgpLCBtX2Z1bmN0aW9uSW5kZXhT
cGFjZSkpOwogICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZVtmdW5jdGlvbkluZGV4U3BhY2Vd
LmNvZGUgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+Y29kZS0+Y29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDYgQEAgY2xh
c3MgSlNXZWJBc3NlbWJseUNhbGxlZTsKIAogbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBNZW1v
cnk7Ci0KIGNsYXNzIFBsYW4gewogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4o
Vk0qLCBWZWN0b3I8dWludDhfdD4pOwpAQCAtNjcsMTcgKzY1LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7CiAgICAgfQogCi0gICAgY29u
c3QgTWVtb3J5KiBtZW1vcnkoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWZhaWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5n
ZXQoKTsKLSAgICB9Ci0KICAgICBzaXplX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QK
ICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CiAgICAgICAgIHJldHVy
biBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7CiAgICAgfQorCiAgICAgQjM6OkNvbXBp
bGF0aW9uKiBqc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbihzaXplX3QgaSkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpID4gbV93YXNtVG9KU1N0dWJzLnNpemUoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIw
OTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNSwxMCArMTE1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVt
cChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAorICAgIGJvb2wgaGFzTWVtb3J5KCkgY29uc3Qg
eyByZXR1cm4gISFtX21lbW9yeTsgfQorCiAgICAgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5n
JiYgbWVzc2FnZSkgeyBBU1NFUlQobV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpOyBtX2Vycm9yTWVz
c2FnZSA9IFdURk1vdmUobWVzc2FnZSk7IH0KICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KLSAgICBWYWxpZGF0ZShFeHByZXNzaW9uVHlw
ZSByZXR1cm5UeXBlKQorICAgIFZhbGlkYXRlKEV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUsIGNv
bnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkpCiAgICAgICAgIDogbV9yZXR1cm5UeXBlKHJl
dHVyblR5cGUpCisgICAgICAgICwgbV9tZW1vcnkobWVtb3J5KQogICAgIHsKICAgICB9CiAKQEAg
LTEzMSw2ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIEV4cHJlc3Npb25UeXBlIG1fcmV0dXJuVHlw
ZTsKICAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbHM7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdl
OworICAgIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtX21lbW9yeTsKIH07CiAKIGJvb2wgVmFs
aWRhdGU6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCkBAIC0zNjcsOSAr
MzcxLDkgQEAgdm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbAogICAgIC8v
IFRoaW5rIG9mIHRoaXMgYXMgcGVuYW5jZSBmb3IgdGhlIHNpbiBvZiBiYWQgZXJyb3IgbWVzc2Fn
ZXMuCiB9CiAKLVN0cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
c2l6ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IEZ1bmN0aW9u
SW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlKQorU3RyaW5nIHZhbGlkYXRlRnVuY3Rpb24o
Y29uc3QgdWludDhfdCogc291cmNlLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNp
Z25hdHVyZSwgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIGNv
bnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkpCiB7Ci0gICAgVmFsaWRhdGUgY29udGV4dChz
aWduYXR1cmUtPnJldHVyblR5cGUpOworICAgIFZhbGlkYXRlIGNvbnRleHQoc2lnbmF0dXJlLT5y
ZXR1cm5UeXBlLCBtZW1vcnkpOwogICAgIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0
b3IoY29udGV4dCwgc291cmNlLCBsZW5ndGgsIHNpZ25hdHVyZSwgZnVuY3Rpb25JbmRleFNwYWNl
KTsKICAgICBpZiAoIXZhbGlkYXRvci5wYXJzZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBhZGQg
YmV0dGVyIGxvY2F0aW9uIGluZm9ybWF0aW9uIGhlcmUuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDI4OApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVZhbGlkYXRlLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLVN0cmluZyB2YWxpZGF0
ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0
IEZ1bmN0aW9uSW5kZXhTcGFjZSYpOworU3RyaW5nIHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWlu
dDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNl
JiwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRh
dGVJbmxpbmVzSGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQkocmV2aXNpb24gMjA5NjIz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxp
bmVzSGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDkgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogYm9vbCBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBl
IG9wLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50
MzJfdCkKIHsKKyAgICBpZiAoIWhhc01lbW9yeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICBzd2l0Y2ggKG9wKSB7CiAiIiIgKyBsb2FkQ2FzZXMgKyAiIiIKICAgICB9CkBAIC0xNTAs
NiArMTUzLDkgQEAgYm9vbCBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZQogCiBi
b29sIFZhbGlkYXRlOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRl
ciwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90KQogeworICAgIGlmICghaGFzTWVtb3J5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHN3aXRjaCAob3ApIHsKICIiIiArIHN0
b3JlQ2FzZXMgKyAiIiIKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDIwOTYy
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKQEAgLTc4LDYgKzc5LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZp
c2l0Q2hpbGRyZQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlKTsKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGVOYW1lc3BhY2VPYmplY3QpOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uKGkpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oCShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTY3LDMwICs2OCwzNCBAQCBwdWJsaWM6CiAgICAgICAgIGltcG9ydEZ1bmN0aW9uKGlk
eCktPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyBzaXplX3Qgb2Zm
c2V0T2ZJbXBvcnRGdW5jdGlvbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pPihzaXplb2YoSlNXZWJB
c3NlbWJseUluc3RhbmNlKSk7Ci0gICAgfQorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9y
eSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZt
LCBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBt
ZW1vcnkpOyB9CiAKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24odW5z
aWduZWQgaWR4KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25z
KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogaWR4OwogICAgIH0KIAotICAgIHN0
YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2Yo
V3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogbnVtSW1wb3J0RnVuY3Rpb25zOwotICAgIH0KLQogcHJv
dGVjdGVkOgogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2ln
bmVkKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSos
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFy
cmllcjxKU0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rp
b25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBz
aXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogbnVtSW1wb3J0RnVuY3Rpb25zOworICAgIH0K
KwogcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1
bGU7CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5h
bWVzcGFjZU9iamVjdDsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9t
ZW1vcnk7CiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5LmNwcAkocmV2aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwx
NiBAQAogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dl
YkFzc2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CisKK0pTV2ViQXNzZW1ibHlNZW1v
cnkqIEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKIHsKLSAgICBhdXRv
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1v
cnk+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAgIGF1
dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1l
bW9yeT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSwgV1RGTW92
ZShtZW1vcnkpKTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVy
biBpbnN0YW5jZTsKIH0KQEAgLTQ0LDExICs0OSwyOCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmNyZWF0ZVN0CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dl
YkFzc2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVl
X3B0cjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICwgbV9tZW1vcnkoV1RGTW92ZShtZW1vcnkpKQogewogfQogCitKU0FycmF5QnVmZmVyKiBK
U1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQoreworICAgIGlmIChtX2J1ZmZlcldyYXBwZXIpCisgICAgICAgIHJldHVybiBtX2J1
ZmZlcldyYXBwZXIuZ2V0KCk7CisKKyAgICBhdXRvIGRlc3RydWN0b3IgPSBbXSAodm9pZCopIHsK
KyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlIHRvIGRlc3Ryb3kg
dGhlIG1lbW9yeS4KKyAgICAgICAgLy8gVGhlIEFycmF5QnVmZmVyIGJhY2tpbmcgdGhlIEpTQXJy
YXlCdWZmZXIgaXMgb25seSBvd25lZCBieSB1cywKKyAgICAgICAgLy8gc28gd2UgZ3VhcmFudGVl
IGl0cyBsaWZlY3lsY2UuCisgICAgfTsKKyAgICBtX2J1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGVGcm9tQnl0ZXMobWVtb3J5KCktPm1lbW9yeSgpLCBtZW1vcnkoKS0+c2l6ZSgpLCBXVEZNb3Zl
KGRlc3RydWN0b3IpKTsKKyAgICBtX2J1ZmZlcldyYXBwZXIuc2V0KHZtLCB0aGlzLCBKU0FycmF5
QnVmZmVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+bV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5n
ZXQoKSwgbV9idWZmZXIuZ2V0KCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2J1ZmZlcldyYXBw
ZXIpOworICAgIHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7Cit9CisKIHZvaWQgSlNXZWJB
c3NlbWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKQEAgLTY2LDEwICs4OCw5IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9y
eTo6dmlzaXRDaGlsZHJlbigKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2J1ZmZlcldyYXBwZXIpOwog
fQogCi1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2Vi
QXNzZW1ibHkuTWVtb3J5IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1dlYkFzc2VtYmx5TWVtb3J5KSB9OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMjMgKzI5LDM1IEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9i
amVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5
QnVmZmVyOworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKKwogY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9y
eSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBK
U0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1v
cnkqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVt
b3J5KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5
PiYmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCisgICAgV2FzbTo6TWVt
b3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQorICAgIEpTQXJyYXlCdWZm
ZXIqIGJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kik7CisKIHByb3RlY3RlZDoKLSAgICBK
U1dlYkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CisgICAgSlNXZWJBc3NlbWJseU1l
bW9yeShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYpOwog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OworICAg
IFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CisgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQs
MTIgQEAKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxs
ZWUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJQ
cm90b0NhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5o
IgorI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTkwLDYg
KzkyLDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICAg
ICAgYXJnQ291bnQgPSBib3hlZEFyZ3Muc2l6ZSgpOwogICAgIH0KIAorICAgIC8vIFNldHVwIHRo
ZSBtZW1vcnkgdGhhdCB0aGUgZW50cmFuY2UgbG9hZHMuCisgICAgaWYgKEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIG1lbW9yeSA9IHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5KCkpIHsKKyAg
ICAgICAgV2FzbTo6TWVtb3J5KiB3YXNtTWVtb3J5ID0gbWVtb3J5LT5tZW1vcnkoKTsKKyAgICAg
ICAgdm0udG9wV2FzbU1lbW9yeVBvaW50ZXIgPSB3YXNtTWVtb3J5LT5tZW1vcnkoKTsKKyAgICAg
ICAgdm0udG9wV2FzbU1lbW9yeVNpemUgPSB3YXNtTWVtb3J5LT5zaXplKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgdm0udG9wV2FzbU1lbW9yeVBvaW50ZXIgPSBudWxscHRyOworICAgICAgICB2
bS50b3BXYXNtTWVtb3J5U2l6ZSA9IDA7CisgICAgfQorCiAgICAgLy8gTm90ZTogd2Ugc3BlY2lm
aWNhbGx5IHVzZSB0aGUgV2ViQXNzZWJseUZ1bmN0aW9uIGFzIHRoZSBjYWxsZWUgdG8gYmVnaW4g
d2l0aCBpbiB0aGUgUHJvdG9DYWxsRnJhbWUuCiAgICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhpcyBp
cyB0aGF0IGNhbGxpbmcgaW50byB0aGUgbGxpbnQgbWF5IHN0YWNrIG92ZXJmbG93LCBhbmQgdGhl
IHN0YWNrIG92ZXJmbG93CiAgICAgLy8gaGFuZGxlciBtaWdodCByZWFkIHRoZSBnbG9iYWwgb2Jq
ZWN0IGZyb20gdGhlIGNhbGxlZS4gVGhlIEpTV2ViQXNzZW1ibHlDYWxsZWUgZG9lc24ndCBoYXZl
IGEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFu
Y2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5NjIz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFu
Y2VQcm90b3R5cGUuaCIKQEAgLTUxLDY0ICs1Miw2NiBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0CiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIHN0
YXRlKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJB
c3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvJiB2bSA9IHN0YXRl
LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBh
dXRvKiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIGF1
dG8mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CiAKICAgICAvLyBJZiBtb2R1bGVPYmplY3QgaXMgbm90IGEgV2ViQXNzZW1ibHku
TW9kdWxlIGluc3RhbmNlLCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCi0gICAgSlNXZWJBc3NlbWJs
eU1vZHVsZSoganNNb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihz
dGF0ZS0+YXJndW1lbnQoMCkpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlID0g
anNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwog
ICAgIGlmICghanNNb2R1bGUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dF
eGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJh
bCgiZmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFz
c2VtYmx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFs
dWUoc3RhdGUtPmFyZ3VtZW50KDApKSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0
IGJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGlt
ZVR5cGVGb3JWYWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CiAgICAgY29uc3QgV2FzbTo6TW9k
dWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCk7CiAKICAgICAvLyBJZiB0aGUgaW1wb3J0T2JqZWN0IHBhcmFtZXRlciBpcyBub3Qg
dW5kZWZpbmVkIGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJy
b3IgaXMgdGhyb3duLgotICAgIEpTVmFsdWUgaW1wb3J0QXJndW1lbnQgPSBzdGF0ZS0+YXJndW1l
bnQoMSk7CisgICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwog
ICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsK
ICAgICBpZiAoIWltcG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2Nv
cGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQg
dG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0Iiks
IGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVu
dCkpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25k
IGFyZ3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFu
IE9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1w
b3J0QXJndW1lbnQpKSkpOwogCiAgICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMg
aXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBl
RXJyb3IgaXMgdGhyb3duLgogICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUo
KSAmJiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVy
YWwoInNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIE9iamVj
dCBiZWNhdXNlIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgaGFzIGltcG9ydHMiKSwgZGVmYXVsdFNv
dXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQg
dG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBPYmplY3QgYmVjYXVzZSB0aGUgV2ViQXNz
ZW1ibHkuTW9kdWxlIGhhcyBpbXBvcnRzIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGlt
ZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CiAKICAgICBJZGVudGlmaWVyIG1vZHVs
ZUtleSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2Ny
aXB0aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKLSAgICBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShzdGF0
ZSwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwg
bW9kdWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0g
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53
ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9y
bWF0aW9uKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKLSAg
ICBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0
LT5XZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSA9IEludGVy
bmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rhcmdl
dCgpLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBp
bnN0YW5jZVN0cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNw
YWNlKHN0YXRlKSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVj
dHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpLCBt
b2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFi
bGVzIGJlIGluaXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVj
dHMsIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmpl
Y3RzLCByZXNwZWN0aXZlbHkuCiAgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVt
cHR5IGxpc3Qgb2YgZXh0ZXJuYWwgdmFsdWVzLgogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0
aW9ucyA9IDA7CiAKICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQotICAgIC8vIEZJWE1FIGltcGxlbWVudCBN
ZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAogICAg
IC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NDEzMwogCisgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKICAg
ICAvLyBGb3IgZWFjaCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0czoKICAgICBmb3IgKGF1dG8m
IGltcG9ydCA6IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsKICAgICAgICAgLy8gMS4gTGV0
IG8gYmUgdGhlIHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmplY3Qs
IGkubW9kdWxlX25hbWUpLgotICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0gaW1w
b3J0T2JqZWN0LT5nZXQoc3RhdGUsIGltcG9ydC5tb2R1bGUpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVl
ID0gaW1wb3J0T2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0Lm1vZHVsZSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgLy8gMi4gSWYgVHlwZShv
KSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgaWYgKCFpbXBvcnRN
b2R1bGVWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVND
SUlMaXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVu
ZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4g
b2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBv
cnRNb2R1bGVWYWx1ZSkpKSk7CisKICAgICAgICAgLy8gMy4gTGV0IHYgYmUgdGhlIHZhbHVlIG9m
IHBlcmZvcm1pbmcgR2V0KG8sIGkuaXRlbV9uYW1lKQogICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUpOwotICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gb2JqZWN0LT5nZXQoc3RhdGUsIGltcG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjLCBpbXBvcnQuZmllbGQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CisKICAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewogICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpGdW5jdGlvbjogewogICAgICAgICAgICAgLy8gNC4g
SWYgaSBpcyBhIGZ1bmN0aW9uIGltcG9ydDoKICAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFi
bGUodikgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yLgogICAgICAgICAgICAgaWYgKCF2YWx1
ZS5pc0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlM
aXRlcmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpLCBkZWZhdWx0U291cmNl
QXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsdWUpKSkpOworICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3Qg
YmUgY2FsbGFibGUiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVl
KHZhbHVlKSkpKTsKICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwog
ICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9i
amVjdDoKICAgICAgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBpbXBvcnRlZEV4cG9y
dHMgPSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihvYmplY3QpKSB7CkBAIC0x
MzgsMTEgKzE0MSwzNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7CiAgICAg
ICAgICAgICAvLyA2LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKLSAgICAgICAgICAgIC8vIEZJ
WE1FIGltcGxlbWVudCBNZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDEzNAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7
IC8vIFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOworICAg
ICAgICAgICAgaGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1i
bHlNZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZh
bHVlKTsKICAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5
IG9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBp
bXBvcnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSkpOworCisg
ICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3Jt
YXRpb24ubWVtb3J5LmluaXRpYWwoKTsKKyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1
YWxJbml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS0+aW5pdGlhbCgpOworICAgICAgICAgICAgaWYg
KGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdp
bml0aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSkpOworCisgICAgICAgICAgICBpZiAoV2FzbTo6
UGFnZUNvdW50IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhp
bXVtKCkpIHsKKyAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4aW11bSA9
IG1lbW9yeS0+bWVtb3J5KCktPm1heGltdW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVh
bE1heGltdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5v
dCBoYXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIp
KSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhY3R1YWxNYXhp
bXVtID4gZXhwZWN0ZWRNYXhpbXVtKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVj
LCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJNZW1vcnkg
aW1wb3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdt
YXhpbXVtIikpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAg
ICAgLy8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgogICAgICAgICAgICAgLy8gaWlpLiBBcHBl
bmQgdi5bW01lbW9yeV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgbWVtb3J5
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0
ZXJuYWw6Okdsb2JhbDogewpAQCAtMTU3LDEzICsxODMsMjggQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB9CiAgICAgfQogCi0gICAgbW9kdWxlUmVj
b3JkLT5saW5rKHN0YXRlLCBpbnN0YW5jZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICB7CisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAm
JiBtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSkgeworICAgICAgICAgICAgLy8g
V2Ugc2hvdWxkIGVpdGhlciBoYXZlIGFuIGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24g
YW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzTWVtb3J5SW1wb3J0
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYg
IWhhc01lbW9yeUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUlu
Zm9ybWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBh
IG1lbW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6
TWVtb3J5Pihtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1h
dGlvbi5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnko
dm0sCisgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RG
TW92ZShtZW1vcnkpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtb2R1bGVSZWNvcmQtPmxp
bmsoZXhlYywgaW5zdGFuY2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
eyB9KTsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgbW9kdWxlUmVjb3JkLT5kdW1wKCk7Ci0g
ICAgSlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoc3RhdGUpOwor
ICAgIEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwog
ICAgIFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVt
b3J5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnku
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgog
I2luY2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAKICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmx1dC5o
IgogCkBAIC00MywxOSArNDcsNzUgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5TWVtb3J5
Q29uc3RydQogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8gRklYTUUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVFcnJvcihzdGF0ZSwg
QVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlIE1lbW9y
eSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGV4YWN0bHkgb25lIGFyZ3Vt
ZW50IikpKSk7CisKKyAgICBhdXRvIGdldFVpbnQzMiA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4g
dWludDMyX3QgeworICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b0ludGVnZXIo
ZXhlYyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAg
ICAgICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7Cisg
ICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAg
ICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1v
cnkgZXhwZWN0cyB0aGUgJ2luaXRpYWwnIGFuZCAnbWF4aW11bScgcHJvcGVydGllcyB0byBiZSBp
bnRlZ2VycyBpbiB0aGUgcmFuZ2U6IFswLCAyXjMyIC0gMV0iKSkpOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihk
b3VibGVWYWx1ZSk7CisgICAgfTsKKworICAgIEpTT2JqZWN0KiBtZW1vcnlEZXNjcmlwdG9yOwor
ICAgIHsKKyAgICAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAg
ICAgICBpZiAoIWFyZ3VtZW50LmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGl0cyBmaXJz
dCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QiKSkpKTsKKyAgICAgICAgbWVtb3J5RGVzY3JpcHRv
ciA9IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3VtZW50KTsKKyAgICB9CisKKyAgICBXYXNtOjpQYWdl
Q291bnQgaW5pdGlhbFBhZ2VDb3VudDsKKyAgICB7CisgICAgICAgIElkZW50aWZpZXIgaW5pdGlh
bCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgICAgICBKU1Zh
bHVlIG1pblNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBpbml0aWFsKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICB1
aW50MzJfdCBzaXplID0gZ2V0VWludDMyKG1pblNpemVWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgaWYgKCFXYXNtOjpQYWdlQ291
bnQ6OmlzVmFsaWQoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgJ2luaXRpYWwnIHBhZ2UgY291bnQgaXMgdG9v
IGxhcmdlIikpKSk7CisgICAgICAgIGluaXRpYWxQYWdlQ291bnQgPSBXYXNtOjpQYWdlQ291bnQo
c2l6ZSk7CisgICAgfQorCisgICAgV2FzbTo6UGFnZUNvdW50IG1heGltdW1QYWdlQ291bnQ7Cisg
ICAgeworICAgICAgICBJZGVudGlmaWVyIG1heGltdW0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgIm1heGltdW0iKTsKKyAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IG1lbW9yeURlc2Ny
aXB0b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW0pOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAg
ICAgICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhl
YywgbWF4aW11bSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisgICAgICAgICAgICB1aW50MzJfdCBzaXplID0gZ2V0VWludDMyKG1heFNpemVWYWx1
ZSk7CisgICAgICAgICAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChzaXplKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMs
IHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3Nl
bWJseS5NZW1vcnkgJ21heGltdW0nIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIikpKSk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgICAg
ICBtYXhpbXVtUGFnZUNvdW50ID0gV2FzbTo6UGFnZUNvdW50KHNpemUpOworCisgICAgICAgICAg
ICBpZiAoaW5pdGlhbFBhZ2VDb3VudCA+IG1heGltdW1QYWdlQ291bnQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCInbWF4aW11bScgcGFnZSBjb3VudCBtdXN0IGJlIHRoYW4gZ3JlYXRlciB0aGFuIG9yIGVx
dWFsIHRvIHRoZSAnaW5pdGlhbCcgcGFnZSBjb3VudCIpKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5
ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KGluaXRpYWxQYWdlQ291bnQsIG1heGlt
dW1QYWdlQ291bnQpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5
TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CiB9CiAKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0
ZSogc3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dDb25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsICJXZWJBc3NlbWJseS5NZW1vcnkiKSk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0
cnVjdG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCAiV2ViQXNzZW1ibHkuTWVtb3J5IikpOwogfQogCiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yKiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDkgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1l
bW9yeS5oIgogCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUubHV0LmgiCiAK
QEAgLTQyLDEwICs0NCwyNSBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5CiAgQGVuZAogICovCiAKLVdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiBXZWJBc3NlbWJs
eU1lbW9yeVByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFz
c2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSopOworCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJseU1lbW9yeSog
bWVtb3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4oZXhlYy0+dGhpc1Zh
bHVlKCkpOyAKKyAgICBpZiAoIW1lbW9yeSkgeworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIAorICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnku
cHJvdG90eXBlLmJ1ZmZlciBnZXR0ZXIgY2FsbGVkIHdpdGggbm9uIFdlYkFzc2VtYmx5Lk1lbW9y
eSB8dGhpc3wgdmFsdWUiKSkpKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSht
ZW1vcnktPmJ1ZmZlcihleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsK
K30KKworV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90
eXBlOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5
TWVtb3J5UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwotICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAg
ICAgcmV0dXJuIG9iamVjdDsKIH0KIApAQCAtNTQsOSArNzEsMTAgQEAgU3RydWN0dXJlKiBXZWJB
c3NlbWJseU1lbW9yeVByb3RvdHlwZTo6YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBKU0NfTkFUSVZFX0dFVFRFUigiYnVm
ZmVyIiwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIsIERvbnRFbnVtIHwgQWNjZXNz
b3IpOwogfQogCiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6V2ViQXNzZW1ibHlNZW1vcnlQ
cm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUuaAkocmV2aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0ds
b2JhbE9iamVjdCopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
KFZNJiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDk2
MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICAvLyBG
SVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAg
ICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTY3MQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbDo6R2xvYmFsOiB7CkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICAvLyBG
SVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAg
ICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTY3MQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNt
OjpFeHRlcm5hbDo6R2xvYmFsOiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296685</attachid>
            <date>2016-12-09 13:27:35 -0800</date>
            <delta_ts>2016-12-09 14:29:18 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>171703</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk2MjMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDM1IEBACisyMDE2LTEyLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IGltcG9ydGluZyBh
bmQgZGVmaW5pbmcgTWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjQxMzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHdhc20vQnVpbGRlci5qczoKKyAgICAgICAgKGNvbnN0Ll9pbXBvcnRNZW1v
cnlDb250aW51YXRpb24uc2VjdGlvbik6CisgICAgICAgIChjb25zdC5faW1wb3J0TWVtb3J5Q29u
dGludWF0aW9uLmFzc2VydCk6CisgICAgICAgIChjb25zdC5faW1wb3J0TWVtb3J5Q29udGludWF0
aW9uKToKKyAgICAgICAgKGNvbnN0Ll9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbi5jb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChjb25zdC5fZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qczoKKyAg
ICAgICAgKGNvbnN0LmVtaXR0ZXJzLkltcG9ydCk6CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVz
dF9iYXNpY19hcGkuanM6CisgICAgICAgIChjb25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGll
cy5zd2l0Y2gpOgorICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfbWVtb3J5LmpzOiBBZGRlZC4K
KyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChiaW5hcnlTaG91bGROb3RQYXJzZSk6CisgICAg
ICAgICh0ZXN0KToKKyAgICAgICAgKHRlc3QudGVzdE1lbUltcG9ydEVycm9yKToKKyAgICAgICAg
KiB3YXNtL2pzLWFwaS90ZXN0X21lbW9yeV9jb25zdHJ1Y3Rvci5qczogQWRkZWQuCisgICAgICAg
IChhc3NlcnQpOgorICAgICAgICAodGhyb3cubmV3LkVycm9yKToKKyAgICAgICAgKHRlc3RJbnZh
bGlkU2l6ZSk6CisgICAgICAgIChhc3NlcnQudGVzdEludmFsaWRJbml0aWFsKToKKyAgICAgICAg
KHRlc3RJbnZhbGlkSW5pdGlhbC50ZXN0SW52YWxpZE1heGltdW0pOgorICAgICAgICAodGVzdElu
dmFsaWRJbml0aWFsKToKKyAgICAgICAgKHRlc3RJbnZhbGlkTWF4aW11bSk6CisgICAgICAgICog
d2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qczoKKwogMjAxNi0xMi0wOCAgSkYgQmFz
dGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IEpTQzo6
bGluayogc2hvdWxkbid0IG5lZWQgYSBDb2RlQmxvY2sKSW5kZXg6IEpTVGVzdHMvd2FzbS9CdWls
ZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCShyZXZpc2lvbiAy
MDk2MjMpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAy
LDYgKzEwMiwxNSBAQCBjb25zdCBfaW1wb3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpCiAg
ICAgfTsKIH07CiAKK2NvbnN0IF9pbXBvcnRNZW1vcnlDb250aW51YXRpb24gPSAoYnVpbGRlciwg
c2VjdGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1cm4gKG1vZHVsZSwgZmllbGQsIHtp
bml0aWFsLCBtYXhpbXVtfSkgPT4geworICAgICAgICBhc3NlcnQuaXNTdHJpbmcobW9kdWxlLCBg
SW1wb3J0IGZ1bmN0aW9uIG1vZHVsZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9
ImApOworICAgICAgICBhc3NlcnQuaXNTdHJpbmcoZmllbGQsIGBJbXBvcnQgZnVuY3Rpb24gZmll
bGQgc2hvdWxkIGJlIGEgc3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICBzZWN0aW9u
LmRhdGEucHVzaCh7IG1vZHVsZSwgZmllbGQsIGtpbmQ6ICJNZW1vcnkiLCBtZW1vcnlEZXNjcmlw
dGlvbjoge2luaXRpYWwsIG1heGltdW19fSk7CisgICAgICAgIHJldHVybiBuZXh0QnVpbGRlcjsK
KyAgICB9OworfTsKKwogY29uc3QgX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uID0gKGJ1aWxk
ZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CiAgICAgcmV0dXJuIChmaWVsZCwgaW5kZXgs
IHR5cGUpID0+IHsKICAgICAgICAgYXNzZXJ0LmlzU3RyaW5nKGZpZWxkLCBgRXhwb3J0IGZ1bmN0
aW9uIGZpZWxkIHNob3VsZCBiZSBhIHN0cmluZywgZ290ICIke2ZpZWxkfSJgKTsKQEAgLTExMCw2
ICsxMTksNyBAQCBjb25zdCBfZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpCiAgICAg
ICAgICAgICAvLyBFeHBvcnRzIGNhbiBsZWF2ZSB0aGUgdHlwZSB1bnNwZWNpZmllZCwgbGV0dGlu
ZyB0aGUgQ29kZSBidWlsZGVyIHBhdGNoIHRoZW0gdXAgbGF0ZXIuCiAgICAgICAgICAgICB0eXBl
ID0gX21heWJlUmVnaXN0ZXJUeXBlKGJ1aWxkZXIsIHR5cGUpOwogICAgICAgICB9CisKICAgICAg
ICAgLy8gV2UgY2FuJ3QgY2hlY2sgbXVjaCBhYm91dCAiaW5kZXgiIGhlcmUgYmVjYXVzZSB0aGUg
Q29kZSBzZWN0aW9uIHN1Y2NlZWRzIHRoZSBFeHBvcnQgc2VjdGlvbi4gTW9yZSB3b3JrIGlzIGRv
bmUgYXQgQ29kZSgpLkVuZCgpIHRpbWUuCiAgICAgICAgIHN3aXRjaCAodHlwZW9mKGluZGV4KSkg
ewogICAgICAgICBjYXNlICJzdHJpbmciOiBicmVhazsgLy8gQXNzdW1lIGl0J3MgYSBmdW5jdGlv
biBuYW1lIHdoaWNoIHdpbGwgYmUgcmV2ZWFsZWQgaW4gdGhlIENvZGUgc2VjdGlvbi4KQEAgLTEy
NSw2ICsxMzUsNyBAQCBjb25zdCBfZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24gPSAoYnVpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBFeHBv
cnQgc2VjdGlvbidzIGluZGV4IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIGdvdCAke2lu
ZGV4fWApOwogICAgICAgICB9CisKICAgICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0ltcG9ydCA9
IGJ1aWxkZXIuX2dldEZ1bmN0aW9uRnJvbUluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICBjb25z
dCBpbXBvcnRTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigiSW1wb3J0Iik7CiAgICAgICAg
IGlmICh0eXBlb2YoaW5kZXgpID09PSAib2JqZWN0IikgewpAQCAtMzY4LDEwICszNzksMTAgQEAg
ZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGltcG9ydEJ1aWxkZXIgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRo
aXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZTogKCkgPT4geyB0aHJvdyBuZXcgRXJy
b3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCB0YWJsZWApOyB9LAotICAgICAgICAgICAgICAgICAg
ICAgICAgTWVtb3J5OiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1w
b3J0IG1lbW9yeWApOyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsOiAoKSA9PiB7
IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1wb3J0IGdsb2JhbGApOyB9LAogICAg
ICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLkZ1
bmN0aW9uID0gX2ltcG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxk
ZXIpOworICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLk1lbW9yeSA9IF9pbXBvcnRN
ZW1vcnlDb250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpbXBvcnRCdWlsZGVyOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC00NjUsNyArNDc2LDEzIEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNz
IEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlLnR5cGUpID09PSAidW5k
ZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgbXVzdCBiZSBhIGZ1bmN0aW9uIGV4cG9ydCBmcm9tIHRoZSBDb2RlIHNlY3Rpb24gKHJlLWV4
cG9ydHMgd2VyZSBoYW5kbGVkIGVhcmxpZXIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXhTcGFjZU9mZnNldCA9IGltcG9ydFNlY3Rp
b24gPyBpbXBvcnRTZWN0aW9uLmRhdGEubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25JbmRleFNwYWNlT2Zmc2V0ID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1wb3J0U2VjdGlvbikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0
IHtraW5kfSBvZiBpbXBvcnRTZWN0aW9uLmRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAiRnVuY3Rpb24iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrZnVuY3Rpb25J
bmRleFNwYWNlT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSW5kZXggPSBl
LmluZGV4IC0gZnVuY3Rpb25JbmRleFNwYWNlT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGUudHlwZSA9IGNvZGVTZWN0aW9uLmRhdGFbZnVuY3Rpb25JbmRl
eF0udHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6IEpT
VGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCShyZXZpc2lvbiAyMDk2MjMp
CisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwkod29ya2luZyBj
b3B5KQpAQCAtNTMsOSArNTMsMjkgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICBw
dXQoYmluLCAidWludDgiLCBXQVNNLmV4dGVybmFsS2luZFZhbHVlW2VudHJ5LmtpbmRdKTsKICAg
ICAgICAgICAgIHN3aXRjaCAoZW50cnkua2luZCkgewogICAgICAgICAgICAgZGVmYXVsdDogdGhy
b3cgbmV3IEVycm9yKGBJbXBsZW1lbnRhdGlvbiBwcm9ibGVtOiB1bmV4cGVjdGVkIGtpbmQgJHtl
bnRyeS5raW5kfWApOwotICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb24iOiBwdXQoYmluLCAidmFy
dWludDMyIiwgZW50cnkudHlwZSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb24i
OiB7CisgICAgICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGVudHJ5LnR5cGUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSAi
VGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKLSAgICAgICAg
ICAgIGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGAp
OworICAgICAgICAgICAgY2FzZSAiTWVtb3J5IjogeworICAgICAgICAgICAgICAgIGxldCB7aW5p
dGlhbCwgbWF4aW11bX0gPSBlbnRyeS5tZW1vcnlEZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQudHJ1dGh5KHR5cGVvZiBpbml0aWFsID09PSAibnVtYmVyIiwgIldlIGV4cGVjdCAn
aW5pdGlhbCcgdG8gYmUgYSBudW1iZXIiKTsKKyAgICAgICAgICAgICAgICBpbml0aWFsIHw9IDA7
CisgICAgICAgICAgICAgICAgbGV0IGhhc01heGltdW0gPSAwOworICAgICAgICAgICAgICAgIGlm
ICh0eXBlb2YgbWF4aW11bSA9PT0gIm51bWJlciIpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF4
aW11bSB8PSAwOworICAgICAgICAgICAgICAgICAgICBoYXNNYXhpbXVtID0gMTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHR5cGVv
ZiBtYXhpbXVtID09PSAidW5kZWZpbmVkIiwgIldlIGV4cGVjdCAnbWF4aW11bScgdG8gYmUgYSBu
dW1iZXIgaWYgaXQncyBkZWZpbmVkIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgcHV0KGJpbiwgInZhcnVpbnQxIiwgaGFzTWF4aW11bSk7CisgICAgICAgICAgICAgICAg
cHV0KGJpbiwgInZhcnVpbnQzMiIsIGluaXRpYWwpOworICAgICAgICAgICAgICAgIGlmIChoYXNN
YXhpbXVtKQorICAgICAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgbWF4aW11
bSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9OwogICAgICAgICAgICAg
Y2FzZSAiR2xvYmFsIjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9i
YXNpY19hcGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2lj
X2FwaS5qcwkocmV2aXNpb24gMjA5NjIzKQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jh
c2ljX2FwaS5qcwkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsNyBAQCBmb3IgKGNvbnN0IGMg
aW4gY29uc3RydWN0b3JQcm9wZXJ0aWVzKSB7CiAgICAgICAgIC8vIGFzc2VydC5lcShTeW1ib2wu
dG9TdHJpbmdUYWcgaW4gaW5zdGFuY2UuZXhwb3J0cywgdHJ1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgIk1lbW9yeSI6Ci0gICAgICAgIC8vIEZJWE1FIEltcGxlbWVudCBhbmQgdGVzdCB0
aGVzZSBBUElzIGZ1cnRoZXIuIEZvciBub3cgdGhleSBqdXN0IHRocm93LiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Nzc1Ci0gICAgICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKCksIEVycm9yLCBgV2ViQXNzZW1ibHkgZG9lc24ndCB5
ZXQgaW1wbGVtZW50IHRoZSAke2N9IGNvbnN0cnVjdG9yIHByb3BlcnR5YCk7CisgICAgICAgIG5l
dyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6IDIwfSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgIlRhYmxlIjoKICAgICAgICAgLy8gRklYTUUgSW1wbGVtZW50IGFuZCB0ZXN0IHRoZXNl
IEFQSXMgZnVydGhlci4gRm9yIG5vdyB0aGV5IGp1c3QgdGhyb3cuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk3NzUKSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkv
dGVzdF9tZW1vcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21l
bW9yeS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzg0IEBACitpbXBvcnQgQnVpbGRlciBmcm9t
ICcuLi9CdWlsZGVyLmpzJzsKKworZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIik7CisgICAgfQorfQorCitj
b25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKK2NvbnN0IG1heFBhZ2VDb3VudCA9ICgyKiozMikg
LyBwYWdlU2l6ZTsKKworZnVuY3Rpb24gYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRlcikgewor
ICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBsZXQgdGhy
ZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHRocmV3ID0gdHJ1
ZTsKKyAgICB9CisgICAgYXNzZXJ0KHRocmV3KTsKK30KKworeworICAgIC8vIENhbid0IGRlY2xh
cmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRl
cigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImlt
cCIsICJtZW1vcnkiLCB7aW5pdGlhbDogMjB9KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuTWVtb3J5KCkuSW5pdGlhbE1heFBhZ2VzKDEsIDEpLkVuZCgpCisgICAg
ICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsKKyAg
ICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyKTsKK30KKworeworICAgIC8vIENhbid0IGRl
Y2xhcmUgbW9yZSB0aGFuIG9uZSBtZW1vcnkuCisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVp
bGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIHtpbml0aWFsOiAyMH0pCisgICAgICAgICAg
ICAuTWVtb3J5KCJpbXAiLCAibWVtb3J5Iiwge2luaXRpYWw6IDMwfSkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShi
dWlsZGVyKTsKK30KKworeworICAgIC8vIGluaXRpYWwgbXVzdCBiZSA8PSBtYXhpbXVtLgorICAg
IGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQor
ICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5NZW1vcnkoImltcCIsICJtZW1vcnkiLCB7
aW5pdGlhbDogMjAsIG1heGltdW06IDE5fSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisg
ICAgICAgIC5FbmQoKTsKKyAgICBiaW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyKTsKK30KKwor
eworICAgIC8vIE5vIGxvYWRzIHdoZW4gbm8gbWVtb3J5IGRlZmluZWQuCisgICAgY29uc3QgYnVp
bGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5J
bXBvcnQoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0
KCkuRnVuY3Rpb24oImZvbyIpLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuSTMyTG9hZCgyLCAwKQorICAg
ICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KTsKKworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIpOworfQorCit7CisgICAgLy8g
Tm8gc3RvcmVzIHdoZW4gbm8gbWVtb3J5IGRlZmluZWQuCisgICAgY29uc3QgYnVpbGRlciA9IChu
ZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQor
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9y
dCgpLkZ1bmN0aW9uKCJmb28iKS5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbImkzMiJdIH0pCisgICAgICAgICAgICAgICAgLkdl
dExvY2FsKDApCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAg
LkkzMlN0b3JlKDIsIDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRl
cik7Cit9CisKK3sKKyAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBu
ZXcgV2ViQXNzZW1ibHkuTWVtb3J5KDIwKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgYXNz
ZXJ0KGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpOworICAgICAgICBhc3NlcnQoZS5tZXNzYWdlID09
PSAiV2ViQXNzZW1ibHkuTWVtb3J5IGV4cGVjdHMgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFu
IG9iamVjdCIpOworICAgICAgICB0aHJldyA9IHRydWU7CisgICAgfQorICAgIGFzc2VydCh0aHJl
dyk7Cit9CisKK3sKKyAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBu
ZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHt9LCB7fSk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAg
IGFzc2VydChlIGluc3RhbmNlb2YgVHlwZUVycm9yKTsKKyAgICAgICAgYXNzZXJ0KGUubWVzc2Fn
ZSA9PT0gIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGV4YWN0bHkgb25lIGFyZ3VtZW50Iik7
CisgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICB9CisgICAgYXNzZXJ0KHRocmV3KTsKK30KKwor
ZnVuY3Rpb24gdGVzdChmKSB7CisgICAgbm9JbmxpbmUoZik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAyOyBpKyspIHsKKyAgICAgICAgZihpKTsKKyAgICB9Cit9CisKK3Rlc3QoZnVuY3Rpb24o
KSB7CisgICAgY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMjAsIG1heGltdW06
IDIwfTsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBl
KCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9y
eURlc2NyaXB0aW9uKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFsi
aTMyIiwgImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEp
CisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkkzMlN0b3Jl
KDIsIDApCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAgICAgICAgLkkz
MkxvYWQoMiwgMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4p
OworICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVzY3Jp
cHRpb24pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSwgeyBpbXA6IHsgbWVtb3J5OiBtZW1vcnkgfSB9KTsKKyAgICBjb25zdCBmb28gPSBpbnN0
YW5jZS5leHBvcnRzLmZvbzsKKyAgICAvLyBmb28odmFsdWUsIGFkZHJlc3MpCisKKyAgICBjb25z
dCBieXRlcyA9IG1lbW9yeURlc2NyaXB0aW9uLmluaXRpYWwgKiBwYWdlU2l6ZTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IChieXRlcy80KTsgaSsrKSB7CisgICAgICAgIGxldCB2YWx1ZSA9IGkg
KyAxOworICAgICAgICBsZXQgYWRkcmVzcyA9IGkgKiA0OworICAgICAgICBsZXQgcmVzdWx0ID0g
Zm9vKHZhbHVlLCBhZGRyZXNzKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCA9PT0gdmFsdWUpOwor
ICAgICAgICBsZXQgYXJyYXlCdWZmZXIgPSBtZW1vcnkuYnVmZmVyOworICAgICAgICBsZXQgYnVm
ZmVyID0gbmV3IFVpbnQzMkFycmF5KGFycmF5QnVmZmVyKTsKKyAgICAgICAgYXNzZXJ0KGJ1ZmZl
cltpXSA9PT0gdmFsdWUpOworICAgIH0KK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGNv
bnN0IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDIwLCBtYXhpbXVtOiAyMH07CisgICAg
Y29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisg
ICAgICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZXNjcmlwdGlv
bikuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29k
ZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbImkzMiIsICJpMzIi
XSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAg
ICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkkzMlN0b3JlOCgwLCAwKQorICAg
ICAgICAgICAgICAgIC5HZXRMb2NhbCgxKQorICAgICAgICAgICAgICAgIC5JMzJMb2FkOFUoMCwg
MCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAuRW5kKCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNv
bnN0IG1lbW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pOwor
ICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBp
bXA6IHsgbWVtb3J5OiBtZW1vcnkgfSB9KTsKKyAgICBjb25zdCBmb28gPSBpbnN0YW5jZS5leHBv
cnRzLmZvbzsKKyAgICAvLyBmb28odmFsdWUsIGFkZHJlc3MpCisKKyAgICBjb25zdCBieXRlcyA9
IG1lbW9yeURlc2NyaXB0aW9uLmluaXRpYWwgKiBwYWdlU2l6ZTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGJ5dGVzOyBpKyspIHsKKyAgICAgICAgbGV0IHZhbHVlID0gKGkgKyAxKTsKKyAgICAg
ICAgbGV0IGFkZHJlc3MgPSBpOworICAgICAgICBsZXQgcmVzdWx0ID0gZm9vKHZhbHVlLCBhZGRy
ZXNzKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkVmFsdWUgPSAodmFsdWUgJiAoKDIqKjgpIC0gMSkp
OyAKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCA9PT0gZXhwZWN0ZWRWYWx1ZSk7CisgICAgICAgIGxl
dCBhcnJheUJ1ZmZlciA9IG1lbW9yeS5idWZmZXI7CisgICAgICAgIGxldCBidWZmZXIgPSBuZXcg
VWludDhBcnJheShhcnJheUJ1ZmZlcik7CisgICAgICAgIGFzc2VydChidWZmZXJbaV0gPT09IGV4
cGVjdGVkVmFsdWUpOworICAgIH0KK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGNvbnN0
IG1lbW9yeURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDIwLCBtYXhpbXVtOiAyMH07CisgICAgY29u
c3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAg
ICAgIC5JbXBvcnQoKS5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZXNjcmlwdGlvbiku
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgp
CisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbImYzMiIsICJpMzIiXSwg
cmV0OiAiZjMyIn0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAgICAg
ICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkYzMlN0b3JlKDIsIDApCisgICAgICAg
ICAgICAgICAgLkdldExvY2FsKDEpCisgICAgICAgICAgICAgICAgLkYzMkxvYWQoMiwgMCkKKyAg
ICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5k
KCk7CisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IG1l
bW9yeSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pOworICAgIGNv
bnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IHsg
bWVtb3J5OiBtZW1vcnkgfSB9KTsKKyAgICBjb25zdCBmb28gPSBpbnN0YW5jZS5leHBvcnRzLmZv
bzsKKyAgICAvLyBmb28odmFsdWUsIGFkZHJlc3MpCisKKyAgICBjb25zdCBieXRlcyA9IG1lbW9y
eURlc2NyaXB0aW9uLmluaXRpYWwgKiBwYWdlU2l6ZTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IChieXRlcy80KTsgaSsrKSB7CisgICAgICAgIGxldCB2YWx1ZSA9IGkgKyAxICsgLjAxMjgyMTM3
ODEyODk7CisgICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gTWF0aC5mcm91bmQodmFsdWUpKTsKKyAg
ICAgICAgbGV0IGFkZHJlc3MgPSBpICogNDsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGZvbyh2YWx1
ZSwgYWRkcmVzcyk7CisgICAgICAgIGxldCBleHBlY3RlZFZhbHVlID0gTWF0aC5mcm91bmQocmVz
dWx0KTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCA9PT0gZXhwZWN0ZWRWYWx1ZSk7CisgICAgICAg
IGxldCBhcnJheUJ1ZmZlciA9IG1lbW9yeS5idWZmZXI7CisgICAgICAgIGxldCBidWZmZXIgPSBu
ZXcgRmxvYXQzMkFycmF5KGFycmF5QnVmZmVyKTsKKyAgICAgICAgYXNzZXJ0KGJ1ZmZlcltpXSA9
PT0gZXhwZWN0ZWRWYWx1ZSk7CisgICAgfQorfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAg
Y29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMjAsIG1heGltdW06IDIwfTsKKyAg
ICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0
aW9uKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgeyBwYXJhbXM6IFsiZjY0IiwgImkz
MiJdLCByZXQ6ICJmNjQifSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkKKyAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuRjY0U3RvcmUoMywgMCkKKyAg
ICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkKKyAgICAgICAgICAgICAgICAuRjY0TG9hZCgzLCAw
KQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgbWVtb3J5ID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7Cisg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7IGlt
cDogeyBtZW1vcnk6IG1lbW9yeSB9IH0pOworICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9y
dHMuZm9vOworICAgIC8vIGZvbyh2YWx1ZSwgYWRkcmVzcykKKworICAgIGNvbnN0IGJ5dGVzID0g
bWVtb3J5RGVzY3JpcHRpb24uaW5pdGlhbCAqIHBhZ2VTaXplOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgKGJ5dGVzLzgpOyBpKyspIHsKKyAgICAgICAgbGV0IHZhbHVlID0gaSArIDEgKyAuMDEy
ODIxMzc4MTI4OTsKKyAgICAgICAgbGV0IGFkZHJlc3MgPSBpICogODsKKyAgICAgICAgbGV0IHJl
c3VsdCA9IGZvbyh2YWx1ZSwgYWRkcmVzcyk7CisgICAgICAgIGxldCBleHBlY3RlZFZhbHVlID0g
cmVzdWx0OworICAgICAgICBhc3NlcnQocmVzdWx0ID09PSBleHBlY3RlZFZhbHVlKTsKKyAgICAg
ICAgbGV0IGFycmF5QnVmZmVyID0gbWVtb3J5LmJ1ZmZlcjsKKyAgICAgICAgbGV0IGJ1ZmZlciA9
IG5ldyBGbG9hdDY0QXJyYXkoYXJyYXlCdWZmZXIpOworICAgICAgICBhc3NlcnQoYnVmZmVyW2ld
ID09PSBleHBlY3RlZFZhbHVlKTsKKyAgICB9Cit9KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAg
ICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAyMCwgbWF4aW11bTogMjV9Owor
ICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQo
KQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3Jp
cHRpb24pLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7IHBhcmFtczogWyJmNjQiLCAi
aTMyIl0sIHJldDogImY2NCJ9KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKQorICAgICAg
ICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5GNjRTdG9yZSgzLCAwKQor
ICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKQorICAgICAgICAgICAgICAgIC5GNjRMb2FkKDMs
IDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKworICAg
IGZ1bmN0aW9uIHRlc3RNZW1JbXBvcnRFcnJvcihpbnN0YW5jZU9iaiwgZXhwZWN0ZWRFcnJvcikg
eworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIGluc3RhbmNlT2JqKTsKKyAgICAgICAg
fSBjYXRjaChlKSB7CisgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcik7
CisgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRFcnJv
cikgeworICAgICAgICAgICAgICAgIGFzc2VydChlLm1lc3NhZ2UgPT09IGV4cGVjdGVkRXJyb3Ip
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAg
fQorCisgICAgdGVzdE1lbUltcG9ydEVycm9yKDIwKTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJyb3Io
eyB9KTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJyb3Ioe2ltcDogeyB9IH0pOworICAgIHRlc3RNZW1J
bXBvcnRFcnJvcih7aW1wOiB7IG1lbW9yeTogMjAgfSB9KTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJy
b3Ioe2ltcDogeyBtZW1vcnk6IFtdIH0gfSk7CisgICAgdGVzdE1lbUltcG9ydEVycm9yKHtpbXA6
IHsgbWVtb3J5OiBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOiAxOSwgbWF4aW11bTog
MjV9KSB9IH0sICJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0aWFsJyB0aGF0IGlzIHRv
byBzbWFsbCIpOworICAgIHRlc3RNZW1JbXBvcnRFcnJvcih7aW1wOiB7IG1lbW9yeTogbmV3IFdl
YkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMjB9KSB9IH0sICJNZW1vcnkgaW1wb3J0IGRpZCBu
b3QgaGF2ZSBhICdtYXhpbXVtJyBidXQgdGhlIG1vZHVsZSByZXF1aXJlcyB0aGF0IGl0IGRvZXMi
KTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJyb3Ioe2ltcDogeyBtZW1vcnk6IG5ldyBXZWJBc3NlbWJs
eS5NZW1vcnkoe2luaXRpYWw6IDIwLCBtYXhpbXVtOiAyNn0pIH0gfSwgIk1lbW9yeSBpbXBvcnRz
ICdtYXhpbXVtJyBpcyBsYXJnZXIgdGhhbiB0aGUgbW9kdWxlJ3MgZXhwZWN0ZWQgJ21heGltdW0i
KTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGNvbnN0IG1lbW9yeURlc2NyaXB0aW9u
ID0ge2luaXRpYWw6IDIwfTsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisg
ICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpLk1lbW9yeSgiaW1wIiwgIm1l
bW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwg
eyBwYXJhbXM6IFsiZjY0IiwgImkzMiJdLCByZXQ6ICJmNjQifSkKKyAgICAgICAgICAgICAgICAu
R2V0TG9jYWwoMSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAg
ICAuRjY0U3RvcmUoMywgMCkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMSkKKyAgICAgICAg
ICAgICAgICAuRjY0TG9hZCgzLCAwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIu
V2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisKKyAgICBmdW5jdGlvbiB0ZXN0TWVtSW1wb3J0RXJyb3IoaW5zdGFuY2VP
YmosIGV4cGVjdGVkRXJyb3IpIHsKKyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCBpbnN0
YW5jZU9iaik7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0KGUgaW5z
dGFuY2VvZiBUeXBlRXJyb3IpOworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICAg
ICAgaWYgKGV4cGVjdGVkRXJyb3IpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoZS5tZXNzYWdl
ID09PSBleHBlY3RlZEVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBh
c3NlcnQodGhyZXcpOworICAgIH0KKworICAgIHRlc3RNZW1JbXBvcnRFcnJvcih7aW1wOiB7IG1l
bW9yeTogbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogMTksIG1heGltdW06IDI1fSkg
fSB9LCAiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBhbiAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21h
bGwiKTsKKyAgICB0ZXN0TWVtSW1wb3J0RXJyb3Ioe2ltcDogeyBtZW1vcnk6IG5ldyBXZWJBc3Nl
bWJseS5NZW1vcnkoe2luaXRpYWw6IDE5fSkgfSB9LCAiTWVtb3J5IGltcG9ydCBwcm92aWRlZCBh
biAnaW5pdGlhbCcgdGhhdCBpcyB0b28gc21hbGwiKTsKKworICAgIC8vIFRoaXMgc2hvdWxkIG5v
dCB0aHJvdy4KKyAgICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7bWVt
b3J5OiBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOjIwfSl9fSk7CisgICAgbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge21lbW9yeTogbmV3IFdlYkFzc2VtYmx5
Lk1lbW9yeSh7aW5pdGlhbDoyMCwgbWF4aW11bToyMH0pfX0pOworfSk7CkluZGV4OiBKU1Rlc3Rz
L3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5X2NvbnN0cnVjdG9yLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnlfY29uc3RydWN0b3IuanMJKG5vbmV4aXN0ZW50
KQorKysgSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X21lbW9yeV9jb25zdHJ1Y3Rvci5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWls
ZGVyLmpzJzsKKworZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpIHsKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIik7CisgICAgfQorfQorCit7CisgICAgbGV0
IHRocmV3ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lk1lbW9y
eSh7aW5pdGlhbDogMjAsIG1heGltdW06IDE5fSk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAg
IGFzc2VydChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcik7CisgICAgICAgIGFzc2VydChlLm1lc3Nh
Z2UgPT09ICInbWF4aW11bScgcGFnZSBjb3VudCBtdXN0IGJlIHRoYW4gZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvIHRoZSAnaW5pdGlhbCcgcGFnZSBjb3VudCIpOworICAgICAgICB0aHJldyA9IHRy
dWU7CisgICAgfQorICAgIGFzc2VydCh0aHJldyk7Cit9CisKK2NvbnN0IHBhZ2VTaXplID0gNjQg
KiAxMDI0OworY29uc3QgbWF4UGFnZUNvdW50ID0gKDIqKjMyKSAvIHBhZ2VTaXplOworCitmdW5j
dGlvbiB0ZXN0SW52YWxpZFNpemUoZGVzY3JpcHRpb24sIHByb3BOYW1lKSB7CisgICAgbGV0IHRo
cmV3ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShk
ZXNjcmlwdGlvbik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAg
ICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBSYW5nZUVycm9yKTsKKyAgICAgICAgYXNzZXJ0KGUu
bWVzc2FnZSA9PT0gYFdlYkFzc2VtYmx5Lk1lbW9yeSAnJHtwcm9wTmFtZX0nIHBhZ2UgY291bnQg
aXMgdG9vIGxhcmdlYCk7CisgICAgfQorICAgIGFzc2VydCh0aHJldyk7Cit9CisKK3sKKyAgICBm
dW5jdGlvbiB0ZXN0SW52YWxpZEluaXRpYWwodikgeworICAgICAgICB0ZXN0SW52YWxpZFNpemUo
e2luaXRpYWw6IHZ9LCAiaW5pdGlhbCIpOworICAgIH0KKworICAgIC8vIFRoZXNlIHNob3VsZCBu
b3QgdGhyb3cuCisgICAgbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogbWF4UGFnZUNv
dW50fSk7CisgICAgbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogbWF4UGFnZUNvdW50
LCBtYXhpbXVtOiBtYXhQYWdlQ291bnR9KTsKKworICAgIHRlc3RJbnZhbGlkSW5pdGlhbCgyKioz
MSk7CisgICAgdGVzdEludmFsaWRJbml0aWFsKG1heFBhZ2VDb3VudCArIDEpOworfQorCit7Cisg
ICAgZnVuY3Rpb24gdGVzdEludmFsaWRNYXhpbXVtKHYpIHsKKyAgICAgICAgdGVzdEludmFsaWRT
aXplKHtpbml0aWFsOiAxLCBtYXhpbXVtOiB2fSwgIm1heGltdW0iKTsKKyAgICB9CisKKyAgICB0
ZXN0SW52YWxpZE1heGltdW0oMioqMzEpOworICAgIHRlc3RJbnZhbGlkTWF4aW11bShtYXhQYWdl
Q291bnQgKyAxKTsKK30KKworeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7Cisg
ICAgICAgIGxldCB4ID0gTWF0aC5yYW5kb20oKSAqICgyKioxMCk7CisgICAgICAgIHggfD0gMDsK
KyAgICAgICAgY29uc3QgbWVtID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7aW5pdGlhbDogeCwg
bWF4aW11bTogeCArIDEwMH0pOworICAgICAgICBhc3NlcnQobWVtLmJ1ZmZlci5ieXRlTGVuZ3Ro
ID09PSB4ICogcGFnZVNpemUpOworICAgIH0KK30KKworeworICAgIGxldCBidWZmZXJHZXR0ZXIg
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKChuZXcgV2ViQXNzZW1ibHkuTWVtb3J5
KHtpbml0aWFsOjF9KSkuX19wcm90b19fLCAiYnVmZmVyIikuZ2V0OworICAgIGxldCB0aHJldyA9
IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGJ1ZmZlckdldHRlci5jYWxsKHt9KTsKKyAgICB9
IGNhdGNoKGUpIHsKKyAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpOworICAg
ICAgICBhc3NlcnQoZS5tZXNzYWdlID09PSAiV2ViQXNzZW1ibHkuTWVtb3J5LnByb3RvdHlwZS5i
dWZmZXIgZ2V0dGVyIGNhbGxlZCB3aXRoIG5vbiBXZWJBc3NlbWJseS5NZW1vcnkgfHRoaXN8IHZh
bHVlIik7CisgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICB9CisgICAgYXNzZXJ0KHRocmV3KTsK
K30KSW5kZXg6IEpTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNPTi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vc2VsZi10ZXN0L3Rlc3RfQnVpbGRlckpTT04uanMJKHJl
dmlzaW9uIDIwOTYyMykKKysrIEpTVGVzdHMvd2FzbS9zZWxmLXRlc3QvdGVzdF9CdWlsZGVySlNP
Ti5qcwkod29ya2luZyBjb3B5KQpAQCAtNTY5LDQgKzU2OSwyMyBAQCBjb25zdCBhc3NlcnRPcFRo
cm93cyA9IChvcEZuLCBtZXNzYWdlKSA9CiAgICAgYXNzZXJ0LmVxKGouc2VjdGlvblsxXS5kYXRh
WzBdLmNvZGVbM10ubmFtZSwgInNlbGVjdCIpOwogfSkoKTsKIAorKGZ1bmN0aW9uIE1lbW9yeUlt
cG9ydCgpIHsKKyAgICBjb25zdCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisgICAgICAgIC5U
eXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuTWVtb3J5KCJfX21v
ZHVsZV9fIiwgIl9fZmllbGRfXyIsIHtpbml0aWFsOiAzMCwgbWF4aW11bTogMzF9KQorICAgICAg
ICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKS5FbmQoKTsKKworICAgIGNvbnN0IGpzb24gPSBKU09O
LnBhcnNlKGJ1aWxkZXIuanNvbigpKTsKKyAgICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uLmxlbmd0
aCwgMyk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvblsxXS5uYW1lLCAiSW1wb3J0Iik7Cisg
ICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhLmxlbmd0aCwgMSk7CisgICAgYXNzZXJ0
LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhWzBdLm1vZHVsZSwgIl9fbW9kdWxlX18iKTsKKyAgICBh
c3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMF0uZmllbGQsICJfX2ZpZWxkX18iKTsKKyAg
ICBhc3NlcnQuZXEoanNvbi5zZWN0aW9uWzFdLmRhdGFbMF0ua2luZCwgIk1lbW9yeSIpOworICAg
IGFzc2VydC5lcShqc29uLnNlY3Rpb25bMV0uZGF0YVswXS5tZW1vcnlEZXNjcmlwdGlvbi5pbml0
aWFsLCAzMCk7CisgICAgYXNzZXJ0LmVxKGpzb24uc2VjdGlvblsxXS5kYXRhWzBdLm1lbW9yeURl
c2NyaXB0aW9uLm1heGltdW0sIDMxKTsKK30pKCk7CisKIC8vIEZJWE1FIHRlc3QgdHlwZSBtaXNt
YXRjaCB3aXRoIHNlbGVjdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzI2NwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDk2MjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTExIEBACisyMDE2LTEyLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogaW1wbGVtZW50IGltcG9ydGluZyBhbmQgZGVm
aW5pbmcgTWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQxMzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhlIFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3Qu
IEl0IHJlZmFjdG9ycworICAgICAgICB0aGUgY29kZSB0byBub3cgYXNzb2NpYXRlIGEgTWVtb3J5
IHdpdGggdGhlIGluc3RhbmNlIGluc3RlYWQgb2YKKyAgICAgICAgdGhlIE1vZHVsZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9u
VGVzdFdhc21Nb2R1bGVGdW5jdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAg
ICAgKiBzaGVsbC9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB0ZXN0V2FzbS5jcHA6IFJlbW92
ZWQuCisgICAgICAgIFRoaXMgaGFzIGJpdHJvdHRlZC4gSSdtIHJlbW92aW5nIGl0LgorCisgICAg
ICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpzaXplT2ZM
b2FkT3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIz
SVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dhc21NZW1v
cnkuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6Ok1lbW9yeSk6CisgICAgICAgICog
d2FzbS9XYXNtTWVtb3J5Lmg6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6aW5pdGlhbCk6CisgICAgICAgIChKU0M6Oldhc206
Ok1lbW9yeTo6bWF4aW11bSk6CisgICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6cGlubmVkUmVn
aXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5
SW5mb3JtYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5mb3Jt
YXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6cGlubmVkUmVn
aXN0ZXJzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5SW5mb3JtYXRpb246OmluaXRpYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnlJbmZvcm1hdGlvbjo6bWF4aW11bSk6CisgICAg
ICAgIChKU0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjppc0ltcG9ydCk6CisgICAgICAgIChK
U0M6Oldhc206Ok1lbW9yeUluZm9ybWF0aW9uOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKiB3
YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJz
ZXI6OnBhcnNlSW1wb3J0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJz
ZU1lbW9yeUhlbHBlcik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VN
ZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KToK
KyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Q
YWdlQ291bnQuaDogQWRkZWQuIEltcGxlbWVudCBhIG5ldyB3YXkgb2YgZGVzY3JpYmluZyBXYXNt
CisgICAgICAgIHBhZ2VzIGFuZCB0aGVuIGFza2luZyBmb3IgaG93IG1hbnkgYnl0ZXMgYSBxdWFu
dGl0eSBvZiBwYWdlcyBpcy4gVGhpcworICAgICAgICBjbGFzcyBhbHNvIG1ha2VzIGl0IGNsZWFy
IHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBieXRlcyBvciBwYWdlcy4KKworICAgICAgICAoSlND
OjpXYXNtOjpQYWdlQ291bnQ6OlBhZ2VDb3VudCk6CisgICAgICAgIChKU0M6Oldhc206OlBhZ2VD
b3VudDo6Ynl0ZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYWdlQ291bnQ6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQYWdlQ291bnQ6Om1heCk6CisgICAgICAgIChKU0M6Oldhc206
OlBhZ2VDb3VudDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6Oldhc206OlBhZ2VDb3Vu
dDo6b3BlcmF0b3I8KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFnZUNvdW50OjpvcGVyYXRvcj4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpQYWdlQ291bnQ6Om9wZXJhdG9yPj0pOgorICAgICAgICAq
IHdhc20vV2FzbVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpydW4pOgorICAg
ICAgICAqIHdhc20vV2FzbVBsYW4uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6bWVtb3J5
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlZhbGlkYXRlOjpoYXNNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxp
ZGF0ZTo6VmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjp2YWxpZGF0ZUZ1bmN0aW9uKToK
KyAgICAgICAgKiB3YXNtL1dhc21WYWxpZGF0ZS5oOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVX
YXNtVmFsaWRhdGVJbmxpbmVzSGVhZGVyLnB5OgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5o
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1lbW9yeSk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucyk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6
OkpTV2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5
OjpidWZmZXIpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseU1lbW9yeTo6bWVtb3J5KToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICBIYW5kbGUgaW1wb3J0aW5nIGFuZCBjcmVhdGluZyBvZiBtZW1vcnkgYWNj
b3JkaW5nCisgICAgICAgIHRvIHRoZSBzcGVjLiBUaGlzIGFsc28gZG9lcyB0aGUgbmVlZGVkIHZh
bGlkYXRpb24KKyAgICAgICAgb2YgbWFraW5nIHN1cmUgdGhlIG1lbW9yeSBkZWZpbmVkIGluIHRo
ZSBtb2R1bGUKKyAgICAgICAgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBpbXBvcnRlZCBtZW1vcnku
CisKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KToKKyAgICAgICAgKEpTQzo6Y2FsbEpT
V2ViQXNzZW1ibHlNZW1vcnkpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseU1lbW9yeVByb3RvRnVuY0J1
ZmZlcik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaDoKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorCiAyMDE2LTEyLTA5ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZGlzYWJsZSBj
b25jdXJyZW50IEdDIGZvciByZWFsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05MDIsNiArOTAyLDcgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICB3YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5jcHAKICAgICB3YXNt
L1dhc21Gb3JtYXQuY3BwCiAgICAgd2FzbS9XYXNtTWVtb3J5LmNwcAorICAgIHdhc20vV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmNwcAogICAgIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKICAgICB3
YXNtL1dhc21QbGFuLmNwcAogICAgIHdhc20vV2FzbVZhbGlkYXRlLmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAiVGVzdFJ1
bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2Fz
bVBsYW4uaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAj
aW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0yNjMyLDYgKzI2MzMsMTkg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgICAgICAgICAg
fSk7CiAgICAgfQogCisgICAgdm9pZCogbWVtb3J5Qnl0ZXMgPSBudWxscHRyOworICAgIHVpbnQz
Ml90IG1lbW9yeVNpemUgPSAwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1l
bW9yeTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1vZHVs
ZUluZm9ybWF0aW9uID0gcGxhbi50YWtlTW9kdWxlSW5mb3JtYXRpb24oKTsKKworICAgIGlmICgh
IW1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkpIHsKKyAgICAgICAgbWVtb3J5ID0gc3RkOjptYWtl
X3VuaXF1ZTxXYXNtOjpNZW1vcnk+KG1vZHVsZUluZm9ybWF0aW9uLT5tZW1vcnkuaW5pdGlhbCgp
LCBtb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5Lm1heGltdW0oKSk7CisgICAgICAgIG1lbW9yeUJ5
dGVzID0gbWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAgbWVtb3J5U2l6ZSA9IG1lbW9yeS0+c2l6
ZSgpOworICAgIH0KKyAgICB2bS50b3BXYXNtTWVtb3J5UG9pbnRlciA9IG1lbW9yeUJ5dGVzOwor
ICAgIHZtLnRvcFdhc21NZW1vcnlTaXplID0gbWVtb3J5U2l6ZTsKKwogICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBmdW5jdGlvbkNvdW50OyArK2kpIHsKICAgICAgICAgSlNBcnJheSogdGVz
dENhc2VzID0ganNDYXN0PEpTQXJyYXkqPihleGVjLT5hcmd1bWVudChpICsgMikpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIHRlc3RJbmRleCA9IDA7IHRlc3RJbmRleCA8IHRlc3RDYXNlcy0+bGVu
Z3RoKCk7ICsrdGVzdEluZGV4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdh
c20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAJ
KHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V2FzbS5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxMzQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJC
M0NvbW1vbi5oIgotI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKLSNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCi0jaW5jbHVkZSAiUHJvdG9D
YWxsRnJhbWUuaCIKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKLSNp
bmNsdWRlICJXYXNtUGxhbi5oIgotCi0jaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNsdWRl
IDx3dGYvTEVCRGVjb2Rlci5oPgotCi1jbGFzcyBDb21tYW5kTGluZSB7Ci1wdWJsaWM6Ci0gICAg
Q29tbWFuZExpbmUoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotICAgIHsKLSAgICAgICAgcGFyc2VB
cmd1bWVudHMoYXJnYywgYXJndik7Ci0gICAgfQotCi0gICAgYm9vbCBtX3J1bldhc21UZXN0cyB7
IGZhbHNlIH07Ci0KLSAgICB2b2lkIHBhcnNlQXJndW1lbnRzKGludCwgY2hhcioqKTsKLX07Ci0K
LXN0YXRpYyBOT19SRVRVUk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW50KGJvb2wgaGVscCA9IGZh
bHNlKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IHRlc3RXYXNtIFtvcHRpb25zXVxu
Iik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIC1ofC0taGVscCAgUHJpbnRzIHRoaXMgaGVscCBt
ZXNzYWdlXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXd8LS13ZWIgICBSdW4gdGhlIFdh
c20gdGVzdHNcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQotICAgIGV4aXQoaGVs
cCA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRSk7Ci19Ci0KLXZvaWQgQ29tbWFuZExpbmU6
OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBpbnQgaSA9IDE7
Ci0KLSAgICBpZiAoYXJnYyA9PSBpKQotICAgICAgICBwcmludFVzYWdlU3RhdGVtZW50KGZhbHNl
KTsKLQotICAgIGZvciAoOyBpIDwgYXJnYzsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGFy
ZyA9IGFyZ3ZbaV07Ci0KLSAgICAgICAgaWYgKCFzdHJjbXAoYXJnLCAiLWgiKSB8fCAhc3RyY21w
KGFyZywgIi0taGVscCIpKSB7Ci0gICAgICAgICAgICBwcmludFVzYWdlU3RhdGVtZW50KHRydWUp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghc3RyY21wKGFyZywgIi13IikgfHwgIXN0cmNtcChhcmcsICItLXdlYiIp
KSB7Ci0gICAgICAgICAgICBtX3J1bldhc21UZXN0cyA9IHRydWU7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRp
b24gJXNcbiIsIGFyZyk7Ci0gICAgICAgIHByaW50VXNhZ2VTdGF0ZW1lbnQoZmFsc2UpOwotICAg
IH0KLX0KLQotU3RhdGljTG9jayBjcmFzaExvY2s7Ci0KLSNkZWZpbmUgQ0hFQ0tfRVEoeCwgeSkg
ZG8geyBcCi0gICAgICAgIGF1dG8gX194ID0gKHgpOyBcCi0gICAgICAgIGF1dG8gX195ID0gKHkp
OyBcCi0gICAgICAgIGlmIChfX3ggPT0gX195KSBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgICAg
IGNyYXNoTG9jay5sb2NrKCk7IFwKLSAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShf
X0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIHRvQ1N0cmluZygjeCAiID09
ICIgI3ksICIgKCIgI3ggIiA9PSAiLCBfX3gsICIsICIgI3kgIiA9PSAiLCBfX3ksICIpIikuZGF0
YSgpKTsgXAotICAgICAgICBDUkFTSCgpOyBcCi0gICAgfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZp
bmUgQ0hFQ0soeCkgQ0hFQ0tfRVEoeCwgdHJ1ZSkKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LQotc3RhdGljIEpTQzo6Vk0qIHZtOwotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcgbmFt
ZXNwYWNlIFdhc207Ci11c2luZyBuYW1lc3BhY2UgQjM7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1UIGNhc3QoRW5jb2RlZEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8PgotZG91YmxlIGNhc3QoRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKTsKLX0KLQot
dGVtcGxhdGU8PgotZmxvYXQgY2FzdChFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gYml0d2lzZV9jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIGludm9rZShNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcHRyLCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZT4gYXJncykKLXsKLSAgICBKU1ZhbHVlIGZpcnN0
QXJndW1lbnQ7Ci0gICAgLy8gU2luY2Ugdm1FbnRyeVRvSmF2YVNjcmlwdCBleHBlY3RzIGEgdGhp
cyB2YWx1ZSB3ZSBjbGFpbSB0aGVyZSBpcyBvbmUuLi4gdGhlcmUgaXNuJ3QuCi0gICAgaW50IGFy
Z0NvdW50ID0gMTsKLSAgICBKU1ZhbHVlKiByZW1haW5pbmdBcmd1bWVudHMgPSBudWxscHRyOwot
ICAgIGlmIChhcmdzLnNpemUoKSkgewotICAgICAgICByZW1haW5pbmdBcmd1bWVudHMgPSBjb25z
dF9jYXN0PEpTVmFsdWUqPihhcmdzLmJlZ2luKCkpOwotICAgICAgICBmaXJzdEFyZ3VtZW50ID0g
KnJlbWFpbmluZ0FyZ3VtZW50czsKLSAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzKys7Ci0gICAg
ICAgIGFyZ0NvdW50ID0gYXJncy5zaXplKCk7Ci0gICAgfQotCi0gICAgUHJvdG9DYWxsRnJhbWUg
cHJvdG9DYWxsRnJhbWU7Ci0gICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBudWxscHRy
LCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJndW1lbnRzKTsKLQotICAgIHJl
dHVybiBjYXN0PFQ+KHZtRW50cnlUb1dhc20ocHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHZtLCAm
cHJvdG9DYWxsRnJhbWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgaW52b2tlKGNv
bnN0IENvbXBpbGF0aW9uJiBjb2RlLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SlNWYWx1ZT4gYXJn
cykKLXsKLSAgICByZXR1cm4gaW52b2tlPFQ+KGNvZGUuY29kZSgpLCBhcmdzKTsKLX0KLQotaW5s
aW5lIEpTVmFsdWUgYm94KHVpbnQ2NF90IHZhbHVlKQotewotICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUodmFsdWUpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBib3hmKGZsb2F0IHZhbHVlKQotewot
ICAgIHJldHVybiBib3goYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotfQotCi1pbmxp
bmUgSlNWYWx1ZSBib3hkKGRvdWJsZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYm94KGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdD4odmFsdWUpKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tQbGFuKFBsYW4m
IHBsYW4sIHVuc2lnbmVkIGV4cGVjdGVkTnVtYmVyT2ZGdW5jdGlvbnMpCi17Ci0gICAgcGxhbi5y
dW4oKTsKLSAgICBpZiAocGxhbi5mYWlsZWQoKSkgewotICAgICAgICBkYXRhTG9nTG4oIk1vZHVs
ZSBmYWlsZWQgdG8gY29tcGlsZSB3aXRoIGVycm9yOiAiLCBwbGFuLmVycm9yTWVzc2FnZSgpKTsK
LSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0KLSAgICBpZiAocGxhbi5pbnRlcm5hbEZ1bmN0aW9u
Q291bnQoKSAhPSBleHBlY3RlZE51bWJlck9mRnVuY3Rpb25zKSB7Ci0gICAgICAgIGRhdGFMb2dM
bigiSW5jb3JyZWN0IG51bWJlciBvZiBmdW5jdGlvbnMiKTsKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwZWN0ZWROdW1iZXJPZkZ1bmN0
aW9uczsgKytpKSB7Ci0gICAgICAgIGlmICghcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5j
dGlvbihpKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuKCJGdW5jdGlvbiBhdCBpbmRleCwgIiAs
IGksICIgZmFpbGVkIHRvIGNvbXBpbGUgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICBDUkFTSCgp
OwotICAgICAgICB9Ci0gICAgfQotCi19Ci0KLS8vIEZvciBub3cgd2UgaW5saW5lIHRoZSB0ZXN0
IGZpbGVzLgotc3RhdGljIHZvaWQgcnVuV2FzbVRlc3RzKCkKLXsKLSAgICB7Ci0gICAgICAgIC8v
IEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAo
ZnVuYyAoZXhwb3J0ICJicl90YWJsZS13aXRoLWxvb3AiKSAocGFyYW0gJHggaTMyKSAocmVzdWx0
IGkzMikKLSAgICAgICAgLy8gICAgICAobG9jYWwgJGkgaTMyKQotICAgICAgICAvLyAgICAgIChs
b29wCi0gICAgICAgIC8vICAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAgKGdldF9sb2Nh
bCAkeCkKLSAgICAgICAgLy8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGdldF9sb2Nh
bCAkaSkgKGkzMi5jb25zdCAxKSkpCi0gICAgICAgIC8vICAgICAgICAoc2V0X2xvY2FsICR4IChp
MzIuc3ViIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMSkpKQotICAgICAgICAvLyAgICAgICAg
KGJyX3RhYmxlIDAgMSkKLSAgICAgICAgLy8gICAgICAgICkKLSAgICAgICAgLy8gICAgICAgKQot
ICAgICAgICAvLyAgICAgIChnZXRfbG9jYWwgJGkpCi0gICAgICAgIC8vICAgICAgKQotICAgICAg
ICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAg
ICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwg
MHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4
MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAw
eDAwLCAweDAxLCAweDEyLCAweDYyLCAweDcyLCAweDVmLCAweDc0LCAweDYxLCAweDYyLCAweDZj
LCAweDY1LCAweDJkLCAweDc3LCAweDY5LCAweDc0LAotICAgICAgICAgICAgMHg2OCwgMHgyZCwg
MHg2YywgMHg2ZiwgMHg2ZiwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhNiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHhhMCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4
MDAsIDB4MTQsIDB4MDEsIDB4MTAsCi0gICAgICAgICAgICAweDAxLCAweDQwLCAweDE1LCAweDAx
LCAweDE0LCAweDAwLCAweDEwLCAweDAxLCAweDQxLCAweDE1LCAweDAwLCAweDA4LCAweDAxLCAw
eDAwLCAweDAxLCAweDBmLAotICAgICAgICAgICAgMHgwZiwgMHgxNCwgMHgwMSwgMHgwZgotICAg
ICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQ
bGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5j
dGlvbigwKSwgeyBib3goMCkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSkgfSksIDIpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JG
dW5jdGlvbigwKSwgeyBib3goMTAwKSB9KSwgMTAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEyMikg
fSksIDEyMyk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAg
ICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAibXVsdGlw
bGUtdmFsdWUiKSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAobG9j
YWwgaTMyKQotICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgMSAoYmxvY2sgaTMyCi0gICAgICAg
IC8vICAgICAgICAoc2V0X2xvY2FsIDEgKGJsb2NrIGkzMgotICAgICAgICAvLyAgICAgICAgICAo
c2V0X2xvY2FsIDEgKGJsb2NrIGkzMgotICAgICAgICAvLyAgICAgICAgICAgIChzZXRfbG9jYWwg
MSAoYmxvY2sgaTMyCi0gICAgICAgIC8vICAgICAgICAgICAgICAoc2V0X2xvY2FsIDEgKGJsb2Nr
IGkzMgotICAgICAgICAvLyAgICAgICAgICAgICAgICAoYnJfdGFibGUgMyAyIDEgMCA0IChpMzIu
Y29uc3QgMjAwKSAoZ2V0X2xvY2FsIDApKQotICAgICAgICAvLyAgICAgICAgICAgICAgICAocmV0
dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgMSkgKGkzMi5jb25zdCA5OSkpKQotICAgICAgICAvLyAg
ICAgICAgICAgICAgICApKQotICAgICAgICAvLyAgICAgICAgICAgICAgKHJldHVybiAoaTMyLmFk
ZCAoZ2V0X2xvY2FsIDEpIChpMzIuY29uc3QgMTApKSkKLSAgICAgICAgLy8gICAgICAgICAgICAg
ICkpCi0gICAgICAgIC8vICAgICAgICAgICAgKHJldHVybiAoaTMyLmFkZCAoZ2V0X2xvY2FsIDEp
IChpMzIuY29uc3QgMTEpKSkKLSAgICAgICAgLy8gICAgICAgICAgICApKQotICAgICAgICAvLyAg
ICAgICAgICAocmV0dXJuIChpMzIuYWRkIChnZXRfbG9jYWwgMSkgKGkzMi5jb25zdCAxMikpKQot
ICAgICAgICAvLyAgICAgICAgICApKQotICAgICAgICAvLyAgICAgICAgKHJldHVybiAoaTMyLmFk
ZCAoZ2V0X2xvY2FsIDEpIChpMzIuY29uc3QgMTMpKSkKLSAgICAgICAgLy8gICAgICAgICkpCi0g
ICAgICAgIC8vICAgICAgKGkzMi5hZGQgKGdldF9sb2NhbCAxKSAoaTMyLmNvbnN0IDE0KSkKLSAg
ICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90
PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAw
eDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg2LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDQwLAotICAgICAgICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4Miwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwgMHg4
MCwKLSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NmQsIDB4NzUsIDB4NmMs
IDB4NzQsIDB4NjksIDB4NzAsIDB4NmMsIDB4NjUsIDB4MmQsIDB4NzYsIDB4NjEsIDB4NmMsCi0g
ICAgICAgICAgICAweDc1LCAweDY1LCAweDAwLCAweDAwLCAweDBhLCAweGQzLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweGNkLCAweDgwLCAweDgwLCAweDgwLCAweDAwLAotICAgICAg
ICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgxMCwgMHhjOCwgMHgwMSwKLSAgICAgICAgICAg
IDB4MTQsIDB4MDAsIDB4MDgsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4
MTQsIDB4MDEsIDB4MTAsIDB4ZTMsIDB4MDAsIDB4NDAsIDB4MDksCi0gICAgICAgICAgICAweDBm
LCAweDE1LCAweDAxLCAweDE0LCAweDAxLCAweDEwLCAweDBhLCAweDQwLCAweDA5LCAweDBmLCAw
eDE1LCAweDAxLCAweDE0LCAweDAxLCAweDEwLCAweDBiLAotICAgICAgICAgICAgMHg0MCwgMHgw
OSwgMHgwZiwgMHgxNSwgMHgwMSwgMHgxNCwgMHgwMSwgMHgxMCwgMHgwYywgMHg0MCwgMHgwOSwg
MHgwZiwgMHgxNSwgMHgwMSwgMHgxNCwgMHgwMSwKLSAgICAgICAgICAgIDB4MTAsIDB4MGQsIDB4
NDAsIDB4MDksIDB4MGYsIDB4MTUsIDB4MDEsIDB4MTQsIDB4MDEsIDB4MTAsIDB4MGUsIDB4NDAs
IDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAg
ICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBj
cmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBv
aW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApIH0pLCAyMTMpOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3go
MSkgfSksIDIxMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNt
RW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgyKSB9KSwgMjExKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCks
IHsgYm94KDMpIH0pLCAyMTApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5q
c1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMykgfSksIDIxMCk7Ci0gICAg
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0
aW9uKDApLCB7IGJveCg0KSB9KSwgMjE0KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDUpIH0pLCAyMTQp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRG
b3JGdW5jdGlvbigwKSwgeyBib3goLTEpIH0pLCAyMTQpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goLTEw
MDApIH0pLCAyMTQpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206
Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgInNp
bmdsZXRvbiIpIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKQotICAgICAgICAvLyAgICAgIChibG9j
awotICAgICAgICAvLyAgICAgICAoYmxvY2sKLSAgICAgICAgLy8gICAgICAgIChicl90YWJsZSAx
IDAgKGdldF9sb2NhbCAwKSkKLSAgICAgICAgLy8gICAgICAgIChyZXR1cm4gKGkzMi5jb25zdCAy
MSkpCi0gICAgICAgIC8vICAgICAgICApCi0gICAgICAgIC8vICAgICAgIChyZXR1cm4gKGkzMi5j
b25zdCAyMCkpCi0gICAgICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICAoaTMyLmNvbnN0
IDIyKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQs
IDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAz
LCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhkLCAw
eDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwOSwgMHg3MywgMHg2
OSwgMHg2ZSwgMHg2NywgMHg2YywgMHg2NSwgMHg3NCwgMHg2ZiwgMHg2ZSwgMHgwMCwgMHgwMCwg
MHgwYSwKLSAgICAgICAgICAgIDB4OWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
OTYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAs
Ci0gICAgICAgICAgICAweDE0LCAweDAwLCAweDA4LCAweDAxLCAweDAxLCAweDAwLCAweDEwLCAw
eDE1LCAweDA5LCAweDBmLCAweDEwLCAweDE0LCAweDA5LCAweDBmLCAweDEwLCAweDE2LAotICAg
ICAgICAgICAgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9y
KTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2Fz
bUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCkgfSksIDIyKTsKLSAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCks
IHsgYm94KDEpIH0pLCAyMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpz
VG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMSkgfSksIDIwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rp
b24oMCksIHsgYm94KC0xMDApIH0pLCAyMCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBH
ZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1
bmMgKGV4cG9ydCAiaWYtdGhlbi1ib3RoLWZhbGx0aHJvdWdoIikgKHBhcmFtICR4IGkzMikgKHBh
cmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGJsb2NrICRibG9jayBp
MzIKLSAgICAgICAgLy8gICAgICAgKGlmIGkzMiAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIu
Y29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgICAodGhlbiAoaTMyLmNvbnN0IDEpKQotICAgICAg
ICAvLyAgICAgICAgKGVsc2UKLSAgICAgICAgLy8gICAgICAgICAoaTMyLmNvbnN0IDIpCi0gICAg
ICAgIC8vICAgICAgICAgKGJyICRibG9jaykpCi0gICAgICAgIC8vICAgICAgICApCi0gICAgICAg
IC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAg
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDcz
LCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwg
MHgwNywgMHg5YywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MTgsIDB4NjksIDB4NjYsIDB4MmQsIDB4NzQsIDB4NjgsIDB4NjUsIDB4NmUsIDB4MmQsIDB4NjIs
IDB4NmYsIDB4NzQsCi0gICAgICAgICAgICAweDY4LCAweDJkLCAweDY2LCAweDYxLCAweDZjLCAw
eDZjLCAweDc0LCAweDY4LCAweDcyLCAweDZmLCAweDc1LCAweDY3LCAweDY4LCAweDAwLCAweDAw
LCAweDBhLAotICAgICAgICAgICAgMHg5YSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHg5NCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgxNCwgMHgw
MCwKLSAgICAgICAgICAgIDB4MTAsIDB4MDAsIDB4NGQsIDB4MDMsIDB4MDEsIDB4MTAsIDB4MDEs
IDB4MDQsIDB4MTAsIDB4MDIsIDB4MDYsIDB4MDEsIDB4MGYsIDB4MGYsIDB4MGYKLSAgICAgICAg
fTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNrUGxhbihw
bGFuLCAxKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24o
MCksIHsgYm94KDApLCBib3goMzIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3go
MzIpIH0pLCAyKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgot
ICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpZi10
aGVuLWJvdGgtZmFsbHRocm91Z2giKSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVz
dWx0IGkzMikKLSAgICAgICAgLy8gICAgICAoaWYgaTMyIChpMzIuZXEgKGdldF9sb2NhbCAkeCkg
KGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAgICAgKHRoZW4gKGkzMi5jb25zdCAxKSkKLSAg
ICAgICAgLy8gICAgICAgKGVsc2UgKGkzMi5jb25zdCAyKSkKLSAgICAgICAgLy8gICAgICAgKQot
ICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAz
LCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDljLCAw
eDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxOCwgMHg2OSwgMHg2
NiwgMHgyZCwgMHg3NCwgMHg2OCwgMHg2NSwgMHg2ZSwgMHgyZCwgMHg2MiwgMHg2ZiwgMHg3NCwK
LSAgICAgICAgICAgIDB4NjgsIDB4MmQsIDB4NjYsIDB4NjEsIDB4NmMsIDB4NmMsIDB4NzQsIDB4
NjgsIDB4NzIsIDB4NmYsIDB4NzUsIDB4NjcsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MGEsCi0gICAg
ICAgICAgICAweDk1LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDhmLCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDEwLCAweDAwLAotICAgICAgICAg
ICAgMHg0ZCwgMHgwMywgMHgwMSwgMHgxMCwgMHgwMSwgMHgwNCwgMHgxMCwgMHgwMiwgMHgwZiwg
MHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAg
ICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNy
YXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9p
bnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgzMikgfSksIDEpOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwg
eyBib3goMSksIGJveCgzMikgfSksIDIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2Vu
ZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChmdW5j
IChleHBvcnQgImR1bWItbGVzcy10aGFuIikgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikg
KHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAgKGxvb3AgJGxvb3AgaTMyCi0gICAgICAgIC8v
ICAgICAgIChpMzIuZXEgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkpCi0gICAgICAgIC8v
ICAgICAgIChpZiBpMzIKLSAgICAgICAgLy8gICAgICAgICh0aGVuIChyZXR1cm4gKGkzMi5jb25z
dCAwKSkpCi0gICAgICAgIC8vICAgICAgICAoZWxzZQotICAgICAgICAvLyAgICAgICAgIChnZXRf
bG9jYWwgJHgpCi0gICAgICAgIC8vICAgICAgICAgKHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0
X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAgICAgICAoaTMyLmNvbnN0
IDApCi0gICAgICAgIC8vICAgICAgICAgKGkzMi5uZSkKLSAgICAgICAgLy8gICAgICAgICAoYnJf
aWYgJGxvb3ApCi0gICAgICAgIC8vICAgICAgICAgKGkzMi5jb25zdCAxKQotICAgICAgICAvLyAg
ICAgICAgICkKLSAgICAgICAgLy8gICAgICAgICkKLSAgICAgICAgLy8gICAgICAgKQotICAgICAg
ICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
NDAsCi0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgy
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDkyLCAweDgwLAot
ICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwZSwgMHg2NCwgMHg3NSwgMHg2
ZCwgMHg2MiwgMHgyZCwgMHg2YywgMHg2NSwgMHg3MywgMHg3MywgMHgyZCwgMHg3NCwKLSAgICAg
ICAgICAgIDB4NjgsIDB4NjEsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4YTcsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4YTEsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAg
ICAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDRkLCAw
eDAzLCAweDAxLCAweDEwLCAweDAwLCAweDA5LCAweDA0LCAweDE0LAotICAgICAgICAgICAgMHgw
MCwgMHgxNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MSwgMHgxNSwgMHgwMCwgMHgxMCwgMHgwMCwg
MHg0ZSwgMHgwNywgMHgwMSwgMHgxMCwgMHgwMSwgMHgwZiwKLSAgICAgICAgICAgIDB4MGYsIDB4
MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAg
IGNoZWNrUGxhbihwbGFuLCAxKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFz
aC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApLCBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBi
b3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgyKSwgYm94KDEpIH0pLCAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3goMikgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBi
b3goMiksIGJveCgyKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxKSwgYm94KDEpIH0pLCAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KDIpLCBib3goNikgfSksIDEpOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBi
b3goMTAwKSwgYm94KDYpIH0pLCAwKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVy
YXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAoZnVuYyAk
ZjMyLXN1YiAoZXhwb3J0ICJmMzItc3ViIikgKHBhcmFtIGYzMikgKHBhcmFtIGYzMikgKHJlc3Vs
dCBmMzIpIChyZXR1cm4gKGYzMi5zdWIgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDEpKSkpCi0g
ICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJpbmRpcmVjdC1mMzItc3ViIikgKHBhcmFtIGYz
MikgKHBhcmFtIGYzMikgKHJlc3VsdCBmMzIpIChyZXR1cm4gKGNhbGwgJGYzMi1zdWIgKGdldF9s
b2NhbCAwKSAoZ2V0X2xvY2FsIDEpKSkpCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZk
LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMywgMHgwMywgMHgwMSwgMHgw
MywgMHgwMywgMHg4MywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwg
MHgwNywgMHg5ZSwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4
MDcsIDB4NjYsIDB4MzMsIDB4MzIsIDB4MmQsIDB4NzMsIDB4NzUsIDB4NjIsIDB4MDAsIDB4MDAs
IDB4MTAsCi0gICAgICAgICAgICAweDY5LCAweDZlLCAweDY0LCAweDY5LCAweDcyLCAweDY1LCAw
eDYzLCAweDc0LCAweDJkLCAweDY2LCAweDMzLCAweDMyLCAweDJkLCAweDczLCAweDc1LCAweDYy
LAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg5YywgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMiwgMHg4OCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwKLSAg
ICAgICAgICAgIDB4MDAsIDB4MTQsIDB4MDEsIDB4NzYsIDB4MDksIDB4MGYsIDB4ODksIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsCi0gICAgICAg
ICAgICAweDE2LCAweDAwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBw
bGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7Ci0KLSAgICAgICAg
Ly8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGlu
dm9rZTxmbG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsgYm94
ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGludm9rZTxmbG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsg
Ym94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7Ci0gICAgICAgIENIRUNL
KGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVu
Y3Rpb24oMCksIHsgYm94ZigwLjApLCBib3hmKDEuNSkgfSksIC0xLjVmKSk7Ci0gICAgICAgIENI
RUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9y
RnVuY3Rpb24oMCksIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIuNSkgfSksIDg3LjYyMzRmKSk7
Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8g
ICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMgJGYzMi1hZGQgKGV4cG9ydCAiZjMyLWFk
ZCIpIChwYXJhbSBmMzIpIChwYXJhbSBmMzIpIChyZXN1bHQgZjMyKSAocmV0dXJuIChmMzIuYWRk
IChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAxKSkpKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4
cG9ydCAiaW5kaXJlY3QtZjMyLWFkZCIpIChwYXJhbSBmMzIpIChwYXJhbSBmMzIpIChyZXN1bHQg
ZjMyKSAocmV0dXJuIChjYWxsICRmMzItYWRkIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAxKSkp
KQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewot
ICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAg
ICAgICAgIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDEsIDB4MDMsIDB4MDMsIDB4ODMsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OWUsCi0gICAgICAgICAg
ICAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDA3LCAweDY2LCAweDMzLCAweDMyLCAw
eDJkLCAweDYxLCAweDY0LCAweDY0LCAweDAwLCAweDAwLCAweDEwLAotICAgICAgICAgICAgMHg2
OSwgMHg2ZSwgMHg2NCwgMHg2OSwgMHg3MiwgMHg2NSwgMHg2MywgMHg3NCwgMHgyZCwgMHg2Niwg
MHgzMywgMHgzMiwgMHgyZCwgMHg2MSwgMHg2NCwgMHg2NCwKLSAgICAgICAgICAgIDB4MDAsIDB4
MDEsIDB4MGEsIDB4OWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4ODgsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsCi0gICAgICAgICAgICAweDAwLCAweDE0LCAw
eDAxLCAweDc1LCAweDA5LCAweDBmLCAweDg5LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAw
LCAweDE0LCAweDAwLCAweDE0LCAweDAxLAotICAgICAgICAgICAgMHgxNiwgMHgwMCwgMHgwOSwg
MHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAg
ICAgY2hlY2tQbGFuKHBsYW4sIDIpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNy
YXNoLgotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpwbGFuLmpzVG9X
YXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDEpLCB7IGJveGYoMC4wKSwgYm94ZigxLjUpIH0pLCAx
LjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsgYm94ZigxMDAuMTIzNCksIGJveGYoMTIu
NSkgfSksIDExMi42MjM0ZikpOwotICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8Zmxv
YXQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveGYoMC4wKSwg
Ym94ZigxLjUpIH0pLCAxLjVmKSk7Ci0gICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxm
bG9hdD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94ZigxMDAu
MTIzNCksIGJveGYoMTIuNSkgfSksIDExMi42MjM0ZikpOwotICAgIH0KLQotICAgIHsKLSAgICAg
ICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8g
ICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jICRzdW0xMiAocGFyYW0gaTMyKSAo
cGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMy
KSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0gaTMyKSAocGFyYW0g
aTMyKSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikgKHJldHVybiAoaTMyLmFkZCAoZ2V0X2xvY2Fs
IDApIChpMzIuYWRkIChnZXRfbG9jYWwgMSkgKGkzMi5hZGQgKGdldF9sb2NhbCAyKSAoaTMyLmFk
ZCAoZ2V0X2xvY2FsIDMpIChpMzIuYWRkIChnZXRfbG9jYWwgNCkgKGkzMi5hZGQgKGdldF9sb2Nh
bCA1KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDYpIChpMzIuYWRkIChnZXRfbG9jYWwgNykgKGkzMi5h
ZGQgKGdldF9sb2NhbCA4KSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDkpIChpMzIuYWRkIChnZXRfbG9j
YWwgMTApIChnZXRfbG9jYWwgMTEpKSkpKSkpKSkpKSkpKQotICAgICAgICAvLyAgICAgKGZ1bmMg
KGV4cG9ydCAibXVsdDEyIikgKHBhcmFtIGkzMikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGNhbGwg
JHN1bTEyIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9j
YWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2Nh
bCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2Fs
IDApKSkpCi0gICAgICAgIC8vICAgICApCi0KLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4OTYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4NDAs
Ci0gICAgICAgICAgICAweDBjLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDQwLAotICAg
ICAgICAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4MywgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwNSwgMHg4MywgMHg4MCwKLSAgICAgICAg
ICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDcsIDB4OGEsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4NmQsIDB4NzUsCi0gICAgICAgICAgICAw
eDZjLCAweDc0LCAweDMxLCAweDMyLCAweDAwLCAweDAxLCAweDBhLCAweGNlLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAyLCAweGE2LCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwg
MHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMiwgMHgxNCwgMHgw
MywgMHgxNCwgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNCwKLSAgICAgICAgICAgIDB4MDYsIDB4MTQs
IDB4MDcsIDB4MTQsIDB4MDgsIDB4MTQsIDB4MDksIDB4MTQsIDB4MGEsIDB4MTQsIDB4MGIsIDB4
NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsCi0gICAgICAgICAgICAweDQwLCAweDQwLCAweDQw
LCAweDQwLCAweDQwLCAweDQwLCAweDA5LCAweDBmLCAweDlkLCAweDgwLCAweDgwLCAweDgwLCAw
eDAwLCAweDAwLCAweDE0LCAweDAwLAotICAgICAgICAgICAgMHgxNCwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwg
MHgwMCwgMHgxNCwgMHgwMCwKLSAgICAgICAgICAgIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4
MTQsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQ
bGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNrUGxhbihwbGFuLCAyKTsKLQotICAg
ICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsgYm94KDApIH0p
LCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBv
aW50Rm9yRnVuY3Rpb24oMSksIHsgYm94KDEwMCkgfSksIDEyMDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigxKSwgeyBi
b3goMSkgfSksIDEyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dh
c21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94
KDQpLCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94
KDExKSwgYm94KDEyKSB9KSwgNzgpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgyKSwgYm94
KDMpLCBib3goNCksIGJveCg1KSwgYm94KDYpLCBib3goNyksIGJveCg4KSwgYm94KDkpLCBib3go
MTApLCBib3goMTEpLCBib3goMTAwKSB9KSwgMTY2KTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg
IC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAg
ICAobWVtb3J5IDEpCi0gICAgICAgIC8vICAgICAoZnVuYyAkZmFjIChleHBvcnQgImZhYyIpIChw
YXJhbSBpNjQpIChyZXN1bHQgaTY0KQotICAgICAgICAvLyAgICAgIChpZiAoaTY0LmVxeiAoZ2V0
X2xvY2FsIDApKQotICAgICAgICAvLyAgICAgICAocmV0dXJuIChpNjQuY29uc3QgMSkpCi0gICAg
ICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChpNjQubXVsIChnZXRfbG9j
YWwgMCkgKGNhbGwgJGZhYyAoaTY0LnN1YiAoZ2V0X2xvY2FsIDApIChpNjQuY29uc3QgMSkpKSkp
Ci0gICAgICAgIC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgw
YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDMsIDB4
ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAs
IDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDA3LCAw
eDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAzLCAweDY2LCAweDYxLCAweDYz
LAotICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwYSwgMHg5ZSwgMHg4MCwgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHg5OCwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwKLSAg
ICAgICAgICAgIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjgsIDB4MDMsIDB4MDAsIDB4MTEsIDB4MDEs
IDB4MDksIDB4MGYsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTEsIDB4MDEsCi0gICAgICAg
ICAgICAweDVjLCAweDE2LCAweDAwLCAweDVkLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAg
ICAgICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7
Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJv
eCgwKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNt
RW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7
IGJveCgyKSB9KSwgMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9X
YXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCg0KSB9KSwgMjQpOwotICAgIH0KLQot
ICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUK
LSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQg
ImRvdWJsZSIpIChwYXJhbSBpNjQpIChyZXN1bHQgaTY0KSAocmV0dXJuIChjYWxsIDEgKGdldF9s
b2NhbCAwKSAoZ2V0X2xvY2FsIDApKSkpCi0gICAgICAgIC8vICAgICAoZnVuYyAkc3VtIChwYXJh
bSBpNjQpIChwYXJhbSBpNjQpIChyZXN1bHQgaTY0KSAocmV0dXJuIChpNjQuYWRkIChnZXRfbG9j
YWwgMCkgKGdldF9sb2NhbCAxKSkpKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8
dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwg
MHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMiwgMHg0MCwKLSAgICAgICAgICAgIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDIsIDB4NDAs
IDB4MDIsIDB4MDIsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDMsIDB4ODMsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsCi0gICAgICAgICAgICAweDAyLCAweDAwLCAweDAxLCAweDA1LCAweDgzLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDAxLCAweDA3LCAweDhhLCAweDgwLCAw
eDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2NCwgMHg2ZiwgMHg3
NSwgMHg2MiwgMHg2YywgMHg2NSwgMHgwMCwgMHgwMCwgMHgwYSwgMHg5YywgMHg4MCwgMHg4MCwK
LSAgICAgICAgICAgIDB4ODAsIDB4MDAsIDB4MDIsIDB4ODksIDB4ODAsIDB4ODAsIDB4ODAsIDB4
MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTYsIDB4MDEsIDB4MDksCi0gICAg
ICAgICAgICAweDBmLCAweDg4LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAw
eDAwLCAweDE0LCAweDAxLCAweDViLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAg
UGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7Ci0KLSAg
ICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDEpLCB7IGJveCgwKSwg
Ym94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dh
c21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMSksIHsgYm94KDEwMCksIGJveCgwKSB9KSwgMTAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9y
RnVuY3Rpb24oMSksIHsgYm94KDEpLCBib3goMTUpIH0pLCAxNik7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJv
eCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNt
RW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApIH0pLCAyMDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigw
KSwgeyBib3goMSkgfSksIDIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVk
IGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkK
LSAgICAgICAgLy8gICAgIChmdW5jICRpZCAocGFyYW0gJHZhbHVlIGkzMikgKHJlc3VsdCBpMzIp
IChyZXR1cm4gKGdldF9sb2NhbCAkdmFsdWUpKSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBv
cnQgImlkLWNhbGwiKSAocGFyYW0gJHZhbHVlIGkzMikgKHJlc3VsdCBpMzIpIChyZXR1cm4gKGNh
bGwgJGlkIChnZXRfbG9jYWwgJHZhbHVlKSkpKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBW
ZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3Mywg
MHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDMsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4
MDUsIDB4ODMsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAx
LCAweDAxLCAweDA3LCAweDhiLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDA3LCAw
eDY5LCAweDY0LAotICAgICAgICAgICAgMHgyZCwgMHg2MywgMHg2MSwgMHg2YywgMHg2YywgMHgw
MCwgMHgwMSwgMHgwYSwgMHg5NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHg4NSwg
MHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4
MDksIDB4MGYsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAs
Ci0gICAgICAgICAgICAweDE2LCAweDAwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAg
ICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMik7Ci0K
LSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDEpLCB7IGJveCgw
KSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50
cnlQb2ludEZvckZ1bmN0aW9uKDEpLCB7IGJveCgxMDApIH0pLCAxMDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigxKSwg
eyBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1Rv
V2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCkgfSksIDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigw
KSwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBs
YW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpIH0pLCAxKTsKLSAg
ICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAo
bW9kdWxlCi0gICAgICAgIC8vICAgICAobWVtb3J5IDEpCi0gICAgICAgIC8vICAgICAoZnVuYyAo
ZXhwb3J0ICJpNjQiKSAocGFyYW0gJGkgaTY0KSAocGFyYW0gJHB0ciBpMzIpIChyZXN1bHQgaTY0
KQotICAgICAgICAvLyAgICAgIChpNjQuc3RvcmUgKGdldF9sb2NhbCAkcHRyKSAoZ2V0X2xvY2Fs
ICRpKSkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChpNjQubG9hZCAoZ2V0X2xvY2FsICRwdHIp
KSkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAw
eDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMiwg
MHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4
MywgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDcsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4NjksIDB4
MzYsCi0gICAgICAgICAgICAweDM0LCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLAot
ICAgICAgICAgICAgMHgxNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgx
NCwgMHgwMSwgMHgyYiwgMHgwMywgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAg
ICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwot
Ci0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3go
MCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5q
c1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAx
MDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9p
bnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKLSAgICB9Ci0KLSAg
ICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAobW9kdWxlCi0gICAg
ICAgIC8vICAobWVtb3J5IDEpCi0gICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhf
cyIpIChwYXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAg
IC8vICAgKGkzMi5zdG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAg
ICAvLyAgIChyZXR1cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAvLyAg
ICkKLSAgICAgICAgLy8gICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAg
ICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAg
ICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAgICAgIDB4MzIs
IDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4
MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAx
LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAw
eDAwLCAweDMzLCAweDAyLCAweDAwLCAweDE0LAotICAgICAgICAgICAgMHgwMSwgMHgyYSwgMHgw
MiwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwg
dmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3Qg
dGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5q
c1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgxMCkgfSksIDAp
OwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRG
b3JGdW5jdGlvbigwKSwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwg
eyBib3goMSksIGJveCgxMDApIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdl
bmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAobWVt
b3J5IDEpCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJ3cml0ZV9hcnJheSIpIChwYXJh
bSAkeCBpMzIpIChwYXJhbSAkcCBpMzIpIChwYXJhbSAkbGVuZ3RoIGkzMikgKGxvY2FsICRpIGkz
MikKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkpCi0gICAgICAg
IC8vICAgICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgIChsb29wCi0gICAgICAgIC8vICAgICAg
ICAoYnJfaWYgMSAoaTMyLmdlX3UgKGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAkbGVuZ3RoKSkp
Ci0gICAgICAgIC8vICAgICAgICAoaTMyLnN0b3JlIChpMzIuYWRkIChnZXRfbG9jYWwgJHApIChp
MzIubXVsIChnZXRfbG9jYWwgJGkpIChpMzIuY29uc3QgNCkpKSAoZ2V0X2xvY2FsICR4KSkKLSAg
ICAgICAgLy8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGkzMi5jb25zdCAxKSAoZ2V0
X2xvY2FsICRpKSkpCi0gICAgICAgIC8vICAgICAgICAoYnIgMCkKLSAgICAgICAgLy8gICAgICAg
ICkKLSAgICAgICAgLy8gICAgICAgKQotICAgICAgICAvLyAgICAgIChyZXR1cm4pCi0gICAgICAg
IC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0
MCwKLSAgICAgICAgICAgIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODIs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0g
ICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhm
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDc3LCAweDcyLAotICAgICAg
ICAgICAgMHg2OSwgMHg3NCwgMHg2NSwgMHg1ZiwgMHg2MSwgMHg3MiwgMHg3MiwgMHg2MSwgMHg3
OSwgMHgwMCwgMHgwMCwgMHgwYSwgMHhiMiwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAg
IDB4MDAsIDB4MDEsIDB4YWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDEsIDB4MDAsCi0gICAgICAgICAgICAweDAy
LCAweDAwLCAweDE0LCAweDAzLCAweDE0LCAweDAyLCAweDU2LCAweDA3LCAweDAxLCAweDE0LCAw
eDAxLCAweDE0LCAweDAzLCAweDEwLCAweDA0LCAweDQyLAotICAgICAgICAgICAgMHg0MCwgMHgx
NCwgMHgwMCwgMHgzMywgMHgwMiwgMHgwMCwgMHgxMCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwg
MHgxNSwgMHgwMywgMHgwNiwgMHgwMCwgMHgwZiwKLSAgICAgICAgICAgIDB4MGYsIDB4MDksIDB4
MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAg
IGNoZWNrUGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUo
KSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IDU7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVvZih1aW50MzJf
dCk7Ci0gICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBs
YW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmpzVG9X
YXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94
KGxlbmd0aCkgfSk7Ci0gICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOwotICAgICAg
ICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVt
b3J5W29mZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRd
LCAxMDB1KTsKLQotICAgICAgICBsZW5ndGggPSAxMDsKLSAgICAgICAgb2Zmc2V0ID0gNSAqIHNp
emVvZih1aW50MzJfdCk7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9
KTsKLSAgICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIENIRUNLX0VR
KG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAwdSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZz
ZXQgKyBsZW5ndGhdLCAwdSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKLSAgICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgNXUpOwot
ICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAg
IChtb2R1bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5j
IChleHBvcnQgIndyaXRlX2FycmF5IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICRwIGkzMikgKHBh
cmFtICRsZW5ndGggaTMyKSAobG9jYWwgJGkgaTMyKQotICAgICAgICAvLyAgICAgIChzZXRfbG9j
YWwgJGkgKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAgICAoYmxvY2sKLSAgICAgICAgLy8g
ICAgICAgKGxvb3AKLSAgICAgICAgLy8gICAgICAgIChicl9pZiAxIChpMzIuZ2VfdSAoZ2V0X2xv
Y2FsICRpKSAoZ2V0X2xvY2FsICRsZW5ndGgpKSkKLSAgICAgICAgLy8gICAgICAgIChpMzIuc3Rv
cmU4IChpMzIuYWRkIChnZXRfbG9jYWwgJHApIChnZXRfbG9jYWwgJGkpKSAoZ2V0X2xvY2FsICR4
KSkKLSAgICAgICAgLy8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGkzMi5jb25zdCAx
KSAoZ2V0X2xvY2FsICRpKSkpCi0gICAgICAgIC8vICAgICAgICAoYnIgMCkKLSAgICAgICAgLy8g
ICAgICAgICkKLSAgICAgICAgLy8gICAgICAgKQotICAgICAgICAvLyAgICAgIChyZXR1cm4pCi0g
ICAgICAgIC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhf
dD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDMs
IDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4
ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3
LCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDc3LCAweDcyLAot
ICAgICAgICAgICAgMHg2OSwgMHg3NCwgMHg2NSwgMHg1ZiwgMHg2MSwgMHg3MiwgMHg3MiwgMHg2
MSwgMHg3OSwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhZiwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAg
ICAgICAgIDB4MDAsIDB4MDEsIDB4YTksIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDEsIDB4MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDEsIDB4MDAsCi0gICAgICAgICAg
ICAweDAyLCAweDAwLCAweDE0LCAweDAzLCAweDE0LCAweDAyLCAweDU2LCAweDA3LCAweDAxLCAw
eDE0LCAweDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE0LCAweDAwLAotICAgICAgICAgICAgMHgy
ZSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwgMHgxNSwgMHgwMywg
MHgwNiwgMHgwMCwgMHgwZiwgMHgwZiwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAg
IFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAg
ICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBUZXN0IHRo
aXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKLSAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gMTsKLSAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZv
aWQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBi
b3gob2Zmc2V0KSwgYm94KGxlbmd0aCkgfSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZz
ZXQgLSAxXSwgMHUpOwotICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwg
MHUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDEwMHUpOwotCi0gICAgICAgIGxl
bmd0aCA9IDEwOwotICAgICAgICBvZmZzZXQgPSA1OwotICAgICAgICBpbnZva2U8dm9pZD4oKnBs
YW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDUpLCBib3gob2Zmc2V0
KSwgYm94KGxlbmd0aCkgfSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwg
MTAwdSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgNXUpOwotICAgIH0KLQotICAgIHsKLSAgICAg
ICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8g
ICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9z
IikgKHBhcmFtICRpIGkzMikgKHBhcmFtICRwdHIgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAg
Ly8gICAgICAoaTMyLnN0b3JlOCAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAg
ICAgICAvLyAgICAgIChyZXR1cm4gKGkzMi5sb2FkOF9zIChnZXRfbG9jYWwgJHB0cikpKQotICAg
ICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4NDAsCi0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAw
eDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgw
LAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywg
MHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAg
ICAgICAgICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYs
IDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAg
ICAgICAweDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0
LCAweDAxLCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDE0LAotICAgICAgICAgICAg
MHgwMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAg
IFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAg
ICAgICBBU1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBUZXN0IHRo
aXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsK
LSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9y
RnVuY3Rpb24oMCksIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsg
Ym94KDEpLCBib3goMTAwKSB9KSwgMSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9y
eSAxKQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0g
JGkgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAoaTMyLnN0b3JlOCAoaTMyLmNv
bnN0IDgpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAgICAgIChyZXR1cm4gKGkzMi5sb2Fk
OF9zIChpMzIuY29uc3QgOCkpKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4
NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAw
eDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAw
LCAweDA1LCAweDgzLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
YiwgMHg2OSwgMHgzMywgMHgzMiwKLSAgICAgICAgICAgIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEs
IDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsCi0gICAgICAgICAgICAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAw
eDEwLCAweDA4LAotICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgotICAg
ICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQ
bGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5j
dGlvbigwKSwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMTAwKSB9KSwgMTAw
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAg
IC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAobW9kdWxlCi0gICAgICAgIC8vICAobWVt
b3J5IDEpCi0gICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAk
aSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgKGkzMi5z
dG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAgIChyZXR1
cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAvLyAgICkKLSAgICAgICAg
Ly8gICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4
MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAw
eDAyLCAweDAxLCAweDAxLCAweDAyLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwg
MHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAgICAgIDB4MzIsIDB4NWYsIDB4NmMs
IDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4
OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDhmLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAweDM0LCAw
eDAzLCAweDAwLCAweDE0LAotICAgICAgICAgICAgMHgwMSwgMHgyYiwgMHgwMywgMHgwMCwgMHgw
OSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAg
ICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigw
KSwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJv
eCgxMDApIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dh
c21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KC0xMiksIGJveChwbGFuLm1lbW9yeSgp
LT5zaXplKCkgLSBzaXplb2YodWludDY0X3QpKSB9KSwgLTEyKTsKLSAgICB9Ci0KLSAgICB7Ci0g
ICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAobW9kdWxlCi0gICAgICAgIC8v
ICAobWVtb3J5IDEpCi0gICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChw
YXJhbSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAg
KGkzMi5zdG9yZSAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAg
IChyZXR1cm4gKGkzMi5sb2FkIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAvLyAgICkKLSAg
ICAgICAgLy8gICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAg
ICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEs
IDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAw
eDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgw
LCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAotICAgICAgICAgICAgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAgICAgIDB4MzIsIDB4NWYs
IDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4
MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDhm
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAwLCAw
eDMzLCAweDAyLCAweDAwLCAweDE0LAotICAgICAgICAgICAgMHgwMSwgMHgyYSwgMHgwMiwgMHgw
MCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9y
KTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBk
b2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2Fz
bUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgxMCkgfSksIDApOwotICAg
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5j
dGlvbigwKSwgeyBib3goMTAwKSwgYm94KDIpIH0pLCAxMDApOwotICAgICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3go
MSksIGJveCgxMDApIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRl
ZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAobWVtb3J5IDEp
Ci0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJ3cml0ZV9hcnJheSIpIChwYXJhbSAkeCBp
MzIpIChwYXJhbSAkcCBpMzIpIChwYXJhbSAkbGVuZ3RoIGkzMikgKGxvY2FsICRpIGkzMikKLSAg
ICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAg
ICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgIChsb29wCi0gICAgICAgIC8vICAgICAgICAoYnJf
aWYgMSAoaTMyLmdlX3UgKGdldF9sb2NhbCAkaSkgKGdldF9sb2NhbCAkbGVuZ3RoKSkpCi0gICAg
ICAgIC8vICAgICAgICAoaTMyLnN0b3JlIChpMzIuYWRkIChnZXRfbG9jYWwgJHApIChpMzIubXVs
IChnZXRfbG9jYWwgJGkpIChpMzIuY29uc3QgNCkpKSAoZ2V0X2xvY2FsICR4KSkKLSAgICAgICAg
Ly8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGkzMi5jb25zdCAxKSAoZ2V0X2xvY2Fs
ICRpKSkpCi0gICAgICAgIC8vICAgICAgICAoYnIgMCkKLSAgICAgICAgLy8gICAgICAgICkKLSAg
ICAgICAgLy8gICAgICAgKQotICAgICAgICAvLyAgICAgIChyZXR1cm4pCi0gICAgICAgIC8vICAg
ICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0g
ewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAg
ICAgICAgICAgIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODIsIDB4ODAs
IDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0gICAgICAg
ICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhmLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDc3LCAweDcyLAotICAgICAgICAgICAg
MHg2OSwgMHg3NCwgMHg2NSwgMHg1ZiwgMHg2MSwgMHg3MiwgMHg3MiwgMHg2MSwgMHg3OSwgMHgw
MCwgMHgwMCwgMHgwYSwgMHhiMiwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4MDAs
IDB4MDEsIDB4YWMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4
MTAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDEsIDB4MDAsCi0gICAgICAgICAgICAweDAyLCAweDAw
LCAweDE0LCAweDAzLCAweDE0LCAweDAyLCAweDU2LCAweDA3LCAweDAxLCAweDE0LCAweDAxLCAw
eDE0LCAweDAzLCAweDEwLCAweDA0LCAweDQyLAotICAgICAgICAgICAgMHg0MCwgMHgxNCwgMHgw
MCwgMHgzMywgMHgwMiwgMHgwMCwgMHgxMCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwgMHgxNSwg
MHgwMywgMHgwNiwgMHgwMCwgMHgwZiwKLSAgICAgICAgICAgIDB4MGYsIDB4MDksIDB4MGYKLSAg
ICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNr
UGxhbihwbGFuLCAxKTsKLSAgICAgICAgQVNTRVJUKHBsYW4ubWVtb3J5KCktPnNpemUoKSk7Ci0K
LSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDU7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNpemVvZih1aW50MzJfdCk7Ci0g
ICAgICAgIHVpbnQzMl90KiBtZW1vcnkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBsYW4ubWVt
b3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpwbGFuLmpzVG9XYXNtRW50
cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBib3gob2Zmc2V0KSwgYm94KGxlbmd0
aCkgfSk7Ci0gICAgICAgIG9mZnNldCAvPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICBDSEVD
S19FUShtZW1vcnlbb2Zmc2V0IC0gMV0sIDB1KTsKLSAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W29m
ZnNldCArIGxlbmd0aF0sIDB1KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICAgICAgQ0hFQ0tfRVEobWVtb3J5W2kgKyBvZmZzZXRdLCAxMDB1
KTsKLQotICAgICAgICBsZW5ndGggPSAxMDsKLSAgICAgICAgb2Zmc2V0ID0gNSAqIHNpemVvZih1
aW50MzJfdCk7Ci0gICAgICAgIGludm9rZTx2b2lkPigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRG
b3JGdW5jdGlvbigwKSwgeyBib3goNSksIGJveChvZmZzZXQpLCBib3gobGVuZ3RoKSB9KTsKLSAg
ICAgICAgb2Zmc2V0IC89IHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9y
eVtvZmZzZXQgLSAxXSwgMTAwdSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBs
ZW5ndGhdLCAwdSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIENIRUNLX0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgNXUpOwotICAgIH0K
LQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1
bGUKLSAgICAgICAgLy8gICAgIChtZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBv
cnQgIndyaXRlX2FycmF5IikgKHBhcmFtICR4IGkzMikgKHBhcmFtICRwIGkzMikgKHBhcmFtICRs
ZW5ndGggaTMyKSAobG9jYWwgJGkgaTMyKQotICAgICAgICAvLyAgICAgIChzZXRfbG9jYWwgJGkg
KGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAgICAoYmxvY2sKLSAgICAgICAgLy8gICAgICAg
KGxvb3AKLSAgICAgICAgLy8gICAgICAgIChicl9pZiAxIChpMzIuZ2VfdSAoZ2V0X2xvY2FsICRp
KSAoZ2V0X2xvY2FsICRsZW5ndGgpKSkKLSAgICAgICAgLy8gICAgICAgIChpMzIuc3RvcmU4IChp
MzIuYWRkIChnZXRfbG9jYWwgJHApIChnZXRfbG9jYWwgJGkpKSAoZ2V0X2xvY2FsICR4KSkKLSAg
ICAgICAgLy8gICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGkzMi5jb25zdCAxKSAoZ2V0
X2xvY2FsICRpKSkpCi0gICAgICAgIC8vICAgICAgICAoYnIgMCkKLSAgICAgICAgLy8gICAgICAg
ICkKLSAgICAgICAgLy8gICAgICAgKQotICAgICAgICAvLyAgICAgIChyZXR1cm4pCi0gICAgICAg
IC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0
MCwKLSAgICAgICAgICAgIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODIs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4ODAsCi0g
ICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDA3LCAweDhm
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDBiLCAweDc3LCAweDcyLAotICAgICAg
ICAgICAgMHg2OSwgMHg3NCwgMHg2NSwgMHg1ZiwgMHg2MSwgMHg3MiwgMHg3MiwgMHg2MSwgMHg3
OSwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhZiwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAg
IDB4MDAsIDB4MDEsIDB4YTksIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4
MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDEsIDB4MDAsCi0gICAgICAgICAgICAweDAy
LCAweDAwLCAweDE0LCAweDAzLCAweDE0LCAweDAyLCAweDU2LCAweDA3LCAweDAxLCAweDE0LCAw
eDAxLCAweDE0LCAweDAzLCAweDQwLCAweDE0LCAweDAwLAotICAgICAgICAgICAgMHgyZSwgMHgw
MCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgxNCwgMHgwMywgMHg0MCwgMHgxNSwgMHgwMywgMHgwNiwg
MHgwMCwgMHgwZiwgMHgwZiwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4g
cGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAgICAgICBB
U1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gNTsKLSAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gMTsKLSAgICAgICAgdWludDhfdCogbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KHBsYW4ubWVtb3J5KCktPm1lbW9yeSgpKTsKLSAgICAgICAgaW52b2tlPHZvaWQ+KCpw
bGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBib3gob2Zm
c2V0KSwgYm94KGxlbmd0aCkgfSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAx
XSwgMHUpOwotICAgICAgICBDSEVDS19FUShtZW1vcnlbb2Zmc2V0ICsgbGVuZ3RoXSwgMHUpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICBDSEVDS19FUShtZW1vcnlbaSArIG9mZnNldF0sIDEwMHUpOwotCi0gICAgICAgIGxlbmd0aCA9
IDEwOwotICAgICAgICBvZmZzZXQgPSA1OwotICAgICAgICBpbnZva2U8dm9pZD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDUpLCBib3gob2Zmc2V0KSwgYm94
KGxlbmd0aCkgfSk7Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgLSAxXSwgMTAwdSk7
Ci0gICAgICAgIENIRUNLX0VRKG1lbW9yeVtvZmZzZXQgKyBsZW5ndGhdLCAwdSk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIENIRUNL
X0VRKG1lbW9yeVtpICsgb2Zmc2V0XSwgNXUpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8g
R2VuZXJhdGVkIGZyb206Ci0gICAgICAgIC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgICht
ZW1vcnkgMSkKLSAgICAgICAgLy8gICAgIChmdW5jIChleHBvcnQgImkzMl9sb2FkOF9zIikgKHBh
cmFtICRpIGkzMikgKHBhcmFtICRwdHIgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAg
ICAoaTMyLnN0b3JlOCAoZ2V0X2xvY2FsICRwdHIpIChnZXRfbG9jYWwgJGkpKQotICAgICAgICAv
LyAgICAgIChyZXR1cm4gKGkzMi5sb2FkOF9zIChnZXRfbG9jYWwgJHB0cikpKQotICAgICAgICAv
LyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAs
Ci0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLAotICAg
ICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwNywgMHg4Ziwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2OSwgMHgzMywKLSAgICAgICAg
ICAgIDB4MzIsIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQsIDB4MzgsIDB4NWYsIDB4NzMs
IDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAw
eDAwLCAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAx
LCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDE0LAotICAgICAgICAgICAgMHgwMSwg
MHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4g
cGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotICAgICAgICBB
U1NFUlQocGxhbi5tZW1vcnkoKS0+c2l6ZSgpKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9l
c24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21F
bnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApLCBib3goMTApIH0pLCAwKTsKLSAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rp
b24oMCksIHsgYm94KDEwMCksIGJveCgyKSB9KSwgMTAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEp
LCBib3goMTAwKSB9KSwgMSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQg
ZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQot
ICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiaTMyX2xvYWQ4X3MiKSAocGFyYW0gJGkgaTMy
KSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8gICAgICAoaTMyLnN0b3JlOCAoaTMyLmNvbnN0IDgp
IChnZXRfbG9jYWwgJGkpKQotICAgICAgICAvLyAgICAgIChyZXR1cm4gKGkzMi5sb2FkOF9zIChp
MzIuY29uc3QgOCkpKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4
NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1
LCAweDgzLCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwNywgMHg4ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwYiwgMHg2
OSwgMHgzMywgMHgzMiwKLSAgICAgICAgICAgIDB4NWYsIDB4NmMsIDB4NmYsIDB4NjEsIDB4NjQs
IDB4MzgsIDB4NWYsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsCi0gICAgICAgICAgICAweDAxLCAweDhmLCAweDgwLCAweDgwLCAweDgwLCAweDAw
LCAweDAwLCAweDEwLCAweDA4LCAweDE0LCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDEwLCAw
eDA4LAotICAgICAgICAgICAgMHgyMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwZgotICAgICAgICB9
OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBs
YW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigw
KSwgeyBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5q
c1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMTAwKSB9KSwgMTAwKTsKLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVu
Y3Rpb24oMCksIHsgYm94KDEpIH0pLCAxKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdl
bmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAoZnVu
YyAiZHVtYi1lcSIgKHBhcmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCi0g
ICAgICAgIC8vICAgICAgKGlmIChpMzIuZXEgKGdldF9sb2NhbCAkeCkgKGdldF9sb2NhbCAkeSkp
Ci0gICAgICAgIC8vICAgICAgICh0aGVuIChiciAwKSkKLSAgICAgICAgLy8gICAgICAgKGVsc2Ug
KHJldHVybiAoaTMyLmNvbnN0IDEpKSkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoaTMyLmNv
bnN0IDApKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4
NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3
LCAweDhiLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNywg
MHg2NCwgMHg3NSwgMHg2ZCwgMHg2MiwgMHgyZCwgMHg2NSwgMHg3MSwgMHgwMCwgMHgwMCwgMHgw
YSwgMHg5OSwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4OTMs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4
NGQsCi0gICAgICAgICAgICAweDAzLCAweDAwLCAweDA2LCAweDAwLCAweDA0LCAweDEwLCAweDAx
LCAweDA5LCAweDBmLCAweDEwLCAweDAwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAg
ICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0K
LSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgw
KSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3goMCkgfSksIDEpOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JG
dW5jdGlvbigwKSwgeyBib3goMiksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgx
KSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDIpLCBib3goMikgfSksIDApOwot
ICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JG
dW5jdGlvbigwKSwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgy
KSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEwMCksIGJveCg2KSB9KSwgMSk7
Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKLSAgICAgICAgLy8g
ICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiZHVtYi1sZXNzLXRoYW4i
KSAocGFyYW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikKLSAgICAgICAgLy8g
ICAgICAobG9vcAotICAgICAgICAvLyAgICAgICAoaWYgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAo
Z2V0X2xvY2FsICR5KSkKLSAgICAgICAgLy8gICAgICAgICh0aGVuIChyZXR1cm4gKGkzMi5jb25z
dCAwKSkpCi0gICAgICAgIC8vICAgICAgICAoZWxzZSAoaWYgKGkzMi5lcSAoZ2V0X2xvY2FsICR4
KSAoaTMyLmNvbnN0IDApKQotICAgICAgICAvLyAgICAgICAgICAgICAgIChyZXR1cm4gKGkzMi5j
b25zdCAxKSkpKSkKLSAgICAgICAgLy8gICAgICAgKHNldF9sb2NhbCAkeCAoaTMyLnN1YiAoZ2V0
X2xvY2FsICR4KSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAgICAgKGJyIDApCi0gICAg
ICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAg
ICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAw
eDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwMywgMHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwNywgMHg5MiwgMHg4MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQsIDB4NjIsIDB4MmQsIDB4NmMsIDB4NjUsIDB4NzMsIDB4
NzMsIDB4MmQsIDB4NzQsCi0gICAgICAgICAgICAweDY4LCAweDYxLCAweDZlLCAweDAwLCAweDAw
LCAweDBhLCAweGFjLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweGE2LCAweDgwLCAw
eDgwLCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwOSwgMHgwNCwg
MHgxNCwKLSAgICAgICAgICAgIDB4MDAsIDB4MTAsIDB4MDAsIDB4NGQsIDB4MDMsIDB4MDAsIDB4
MTAsIDB4MDEsIDB4MDksIDB4MGYsIDB4MGYsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDEs
Ci0gICAgICAgICAgICAweDE1LCAweDAwLCAweDA2LCAweDAwLCAweDBmLCAweDAwLCAweDBmCi0g
ICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVj
a1BsYW4ocGxhbiwgMSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1
bmN0aW9uKDApLCB7IGJveCgwKSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEp
LCBib3goMCkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1Rv
V2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMiksIGJveCgxKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1
bmN0aW9uKDApLCB7IGJveCgxKSwgYm94KDIpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDIp
LCBib3goMikgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1Rv
V2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgxKSB9KSwgMCk7Ci0g
ICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1
bmN0aW9uKDApLCB7IGJveCgyKSwgYm94KDYpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEw
MCksIGJveCg2KSB9KSwgMCk7Ci0gICAgfQotCi0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRl
ZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikg
KHJldHVybiAoaTMyLmNvbnN0IDUpKSkgKQotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9y
ID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwK
LSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsCi0gICAg
ICAgICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAweDc1LCAweDcyLCAw
eDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBhLAotICAgICAgICAg
ICAgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwg
MHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0g
ICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEp
OwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyB9
KSwgNSk7Ci0gICAgfQotCi0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOiAobW9k
dWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikgKHJldHVybiAoaTMy
LmFkZCAoaTMyLmNvbnN0IDUpIChpMzIuY29uc3QgNikpKSkgKQotICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgw
YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwg
MHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4
ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4ODAsIDB4ODAs
IDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1LCAweDc0LCAw
eDc1LCAweDcyLCAweDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAweDAwLCAweDBh
LAotICAgICAgICAgICAgMHg4ZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4OCwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgxMCwgMHgwNiwKLSAg
ICAgICAgICAgIDB4NDAsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFuIHBs
YW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLQotICAgICAgICAv
LyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgfSksIDExKTsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBv
cnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikgKHJldHVybiAoaTMyLmFkZCAoaTMyLmFkZCAo
aTMyLmNvbnN0IDUpIChpMzIuY29uc3QgMykpIChpMzIuY29uc3QgMykpKSkgKQotICAgICAgICBW
ZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3Mywg
MHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDMs
IDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4
ODAsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDBhLCAweDcyLCAweDY1
LCAweDc0LCAweDc1LCAweDcyLCAweDZlLCAweDJkLCAweDY5LCAweDMzLCAweDMyLCAweDAwLCAw
eDAwLCAweDBhLAotICAgICAgICAgICAgMHg5MSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgw
MSwgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgxMCwg
MHgwMywKLSAgICAgICAgICAgIDB4NDAsIDB4MTAsIDB4MDMsIDB4NDAsIDB4MDksIDB4MGYKLSAg
ICAgICAgfTsKLQotICAgICAgICBQbGFuIHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNr
UGxhbihwbGFuLCAxKTsKLQotICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVu
Y3Rpb24oMCksIHsgfSksIDExKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRl
ZCBmcm9tOiAobW9kdWxlIChmdW5jIChleHBvcnQgInJldHVybi1pMzIiKSAocmVzdWx0IGkzMikg
KGJsb2NrIChyZXR1cm4gKGkzMi5hZGQgKGkzMi5hZGQgKGkzMi5jb25zdCA1KSAoaTMyLmNvbnN0
IDMpKSAoaTMyLmNvbnN0IDMpKSkpICh1bnJlYWNoYWJsZSkpICkKLSAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4
MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAs
IDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAwLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAw
eDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAweDgwLCAweDgw
LCAweDgwLAotICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwYSwgMHg3MiwgMHg2NSwgMHg3NCwg
MHg3NSwgMHg3MiwgMHg2ZSwgMHgyZCwgMHg2OSwgMHgzMywgMHgzMiwgMHgwMCwgMHgwMCwgMHgw
YSwKLSAgICAgICAgICAgIDB4OTUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4OGYs
IDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDUsCi0g
ICAgICAgICAgICAweDEwLCAweDAzLCAweDQwLCAweDEwLCAweDAzLCAweDQwLCAweDA5LCAweDBm
LCAweDAwLCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3Ip
OwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNt
RW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IH0pLCAxMSk7Ci0gICAgfQotCi0gICAgewotICAg
ICAgICAvLyBHZW5lcmF0ZWQgZnJvbTogKG1vZHVsZSAoZnVuYyAoZXhwb3J0ICJhZGQiKSAocGFy
YW0gJHggaTMyKSAocGFyYW0gJHkgaTMyKSAocmVzdWx0IGkzMikgKHJldHVybiAoaTMyLmFkZCAo
Z2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkpKSApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90
PiB2ZWN0b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAw
eDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDQwLAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywg
MHg4MiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NywgMHg4
MCwKLSAgICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4NjEsIDB4NjQs
IDB4NjQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OGUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsCi0g
ICAgICAgICAgICAweDAxLCAweDg4LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0
LCAweDAwLCAweDE0LCAweDAxLCAweDQwLCAweDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAg
ICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwotICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0K
LSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNuJ3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgw
KSwgYm94KDEpIH0pLCAxKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNU
b1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEwMCksIGJveCgxKSB9KSwgMTAx
KTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50
Rm9yRnVuY3Rpb24oMCksIHsgYm94KC0xKSwgYm94KDEpfSksIDApOwotICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBi
b3goc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSksIGJveCgxKSB9KSwgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKLSAgICAgICAgLy8gICAgKG1vZHVsZQotICAgICAgICAvLyAgICAgKGZ1bmMg
KGV4cG9ydCAibG9jYWxzIikgKHBhcmFtICR4IGkzMikgKHJlc3VsdCBpMzIpIChsb2NhbCAkbnVt
IGkzMikKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRudW0gKGdldF9sb2NhbCAkeCkpCi0g
ICAgICAgIC8vICAgICAgKHJldHVybiAoZ2V0X2xvY2FsICRudW0pKQotICAgICAgICAvLyAgICAg
ICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsK
LSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCi0gICAg
ICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgyLCAweDgwLCAweDgwLCAw
eDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDhhLCAweDgwLCAweDgwLAotICAgICAgICAg
ICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2YywgMHg2ZiwgMHg2MywgMHg2MSwgMHg2Yywg
MHg3MywgMHgwMCwgMHgwMCwgMHgwYSwgMHg5MSwgMHg4MCwgMHg4MCwKLSAgICAgICAgICAgIDB4
ODAsIDB4MDAsIDB4MDEsIDB4OGIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MTQsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MTQsCi0gICAgICAgICAgICAweDAxLCAw
eDA5LCAweDBmCi0gICAgICAgIH07Ci0KLSAgICAgICAgUGxhbiBwbGFuKHZtLCB2ZWN0b3IpOwot
ICAgICAgICBjaGVja1BsYW4ocGxhbiwgMSk7Ci0KLSAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCi0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50
cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgwKSB9KSwgMCk7Ci0gICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJv
eCgxMCkgfSksIDEwKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9t
OgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAgICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJz
dW0iKSAocGFyYW0gJHggaTMyKSAocmVzdWx0IGkzMikgKGxvY2FsICR5IGkzMikKLSAgICAgICAg
Ly8gICAgICAoc2V0X2xvY2FsICR5IChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8vICAgICAgKGxv
b3AKLSAgICAgICAgLy8gICAgICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgICAoYnJfaWYgMCAo
aTMyLmVxIChnZXRfbG9jYWwgJHgpIChpMzIuY29uc3QgMCkpKQotICAgICAgICAvLyAgICAgICAg
KHNldF9sb2NhbCAkeSAoaTMyLmFkZCAoZ2V0X2xvY2FsICR4KSAoZ2V0X2xvY2FsICR5KSkpCi0g
ICAgICAgIC8vICAgICAgICAoc2V0X2xvY2FsICR4IChpMzIuc3ViIChnZXRfbG9jYWwgJHgpIChp
MzIuY29uc3QgMSkpKQotICAgICAgICAvLyAgICAgICAgKGJyIDEpCi0gICAgICAgIC8vICAgICAg
ICApCi0gICAgICAgIC8vICAgICAgICkKLSAgICAgICAgLy8gICAgICAocmV0dXJuIChnZXRfbG9j
YWwgJHkpKQotICAgICAgICAvLyAgICAgICkKLSAgICAgICAgLy8gICAgICkKLSAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKLSAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4
NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDEsIDB4NDAsCi0gICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAw
eDAzLCAweDgyLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDg3
LCAweDgwLCAweDgwLAotICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg3Mywg
MHg3NSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhhZSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgw
MCwgMHgwMSwKLSAgICAgICAgICAgIDB4YTgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MTAsIDB4MDAsIDB4MTUsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDEsIDB4
MDAsCi0gICAgICAgICAgICAweDE0LCAweDAwLCAweDEwLCAweDAwLCAweDRkLCAweDA3LCAweDAw
LCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDQwLCAweDE1LCAweDAxLCAweDE0LCAweDAwLAot
ICAgICAgICAgICAgMHgxMCwgMHgwMSwgMHg0MSwgMHgxNSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgw
ZiwgMHgwZiwgMHgxNCwgMHgwMSwgMHgwOSwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBs
YW4gcGxhbih2bSwgdmVjdG9yKTsKLSAgICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAg
ICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCkgfSks
IDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9p
bnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSkgfSksIDEpOwotICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMil9
KSwgMyk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQ
b2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApIH0pLCA1MDUwKTsKLSAgICB9Ci0KLSAgICB7
Ci0gICAgICAgIC8vIEdlbmVyYXRlZCBmcm9tOgotICAgICAgICAvLyAgICAobW9kdWxlCi0gICAg
ICAgIC8vICAgICAoZnVuYyAoZXhwb3J0ICJkdW1iLW11bHQiKSAocGFyYW0gJHggaTMyKSAocGFy
YW0gJHkgaTMyKSAocmVzdWx0IGkzMikgKGxvY2FsICR0b3RhbCBpMzIpIChsb2NhbCAkaSBpMzIp
IChsb2NhbCAkaiBpMzIpCi0gICAgICAgIC8vICAgICAgKHNldF9sb2NhbCAkdG90YWwgKGkzMi5j
b25zdCAwKSkKLSAgICAgICAgLy8gICAgICAoc2V0X2xvY2FsICRpIChpMzIuY29uc3QgMCkpCi0g
ICAgICAgIC8vICAgICAgKGJsb2NrIChsb29wCi0gICAgICAgIC8vICAgICAgICAgICAgICAoYnJf
aWYgMSAoaTMyLmVxIChnZXRfbG9jYWwgJGkpIChnZXRfbG9jYWwgJHgpKSkKLSAgICAgICAgLy8g
ICAgICAgICAgICAgIChzZXRfbG9jYWwgJGogKGkzMi5jb25zdCAwKSkKLSAgICAgICAgLy8gICAg
ICAgICAgICAgIChzZXRfbG9jYWwgJGkgKGkzMi5hZGQgKGdldF9sb2NhbCAkaSkgKGkzMi5jb25z
dCAxKSkpCi0gICAgICAgIC8vICAgICAgICAgICAgICAobG9vcAotICAgICAgICAvLyAgICAgICAg
ICAgICAgIChicl9pZiAxIChpMzIuZXEgKGdldF9sb2NhbCAkaikgKGdldF9sb2NhbCAkeSkpKQot
ICAgICAgICAvLyAgICAgICAgICAgICAgIChzZXRfbG9jYWwgJHRvdGFsIChpMzIuYWRkIChnZXRf
bG9jYWwgJHRvdGFsKSAoaTMyLmNvbnN0IDEpKSkKLSAgICAgICAgLy8gICAgICAgICAgICAgICAo
c2V0X2xvY2FsICRqIChpMzIuYWRkIChnZXRfbG9jYWwgJGopIChpMzIuY29uc3QgMSkpKQotICAg
ICAgICAvLyAgICAgICAgICAgICAgIChiciAwKQotICAgICAgICAvLyAgICAgICAgICAgICAgICkK
LSAgICAgICAgLy8gICAgICAgICAgICAgICkpCi0gICAgICAgIC8vICAgICAgKHJldHVybiAoZ2V0
X2xvY2FsICR0b3RhbCkpCi0gICAgICAgIC8vICAgICAgKQotICAgICAgICAvLyAgICAgKQotICAg
ICAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yID0gewotICAgICAgICAgICAgMHgwMCwgMHg2MSwg
MHg3MywgMHg2ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NywgMHg4MCwgMHg4
MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg0MCwKLSAgICAgICAgICAgIDB4MDIsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDMsIDB4ODIsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
MDAsIDB4MDcsIDB4OGQsIDB4ODAsCi0gICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAx
LCAweDA5LCAweDY0LCAweDc1LCAweDZkLCAweDYyLCAweDJkLCAweDZkLCAweDc1LCAweDZjLCAw
eDc0LCAweDAwLCAweDAwLAotICAgICAgICAgICAgMHgwYSwgMHhjNywgMHg4MCwgMHg4MCwgMHg4
MCwgMHgwMCwgMHgwMSwgMHhjMSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywg
MHgwMSwgMHgxMCwKLSAgICAgICAgICAgIDB4MDAsIDB4MTUsIDB4MDIsIDB4MTAsIDB4MDAsIDB4
MTUsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTQsIDB4MDAs
IDB4NGQsCi0gICAgICAgICAgICAweDA3LCAweDAxLCAweDEwLCAweDAwLCAweDE1LCAweDA0LCAw
eDE0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweDE1LCAweDAzLCAweDAyLCAweDAwLCAweDE0
LAotICAgICAgICAgICAgMHgwNCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwNywgMHgwMSwgMHgxNCwg
MHgwMiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgxNSwgMHgwMiwgMHgxNCwgMHgwNCwgMHgxMCwKLSAg
ICAgICAgICAgIDB4MDEsIDB4NDAsIDB4MTUsIDB4MDQsIDB4MDYsIDB4MDAsIDB4MGYsIDB4MGYs
IDB4MGYsIDB4MTQsIDB4MDIsIDB4MDksIDB4MGYKLSAgICAgICAgfTsKLQotICAgICAgICBQbGFu
IHBsYW4odm0sIHZlY3Rvcik7Ci0gICAgICAgIGNoZWNrUGxhbihwbGFuLCAxKTsKLQotICAgICAg
ICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDApLCBib3go
MSkgfSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVu
dHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgwKSB9KSwgMCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9u
KDApLCB7IGJveCgyKSwgYm94KDEpIH0pLCAyKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3go
MikgfSksIDIpOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVu
dHJ5UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMiksIGJveCgyKSB9KSwgNCk7Ci0gICAgICAg
IENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9u
KDApLCB7IGJveCgyKSwgYm94KDYpIH0pLCAxMik7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBi
b3goNikgfSksIDYwMCk7Ci0gICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9X
YXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDApLCB7IGJveCgxMDApLCBib3goMTAwKSB9KSwgMTAw
MDApOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgLy8gR2VuZXJhdGVkIGZyb206Ci0gICAgICAg
IC8vICAgIChtb2R1bGUKLSAgICAgICAgLy8gICAgIChmdW5jICJkdW1iLWxlc3MtdGhhbiIgKHBh
cmFtICR4IGkzMikgKHBhcmFtICR5IGkzMikgKHJlc3VsdCBpMzIpCi0gICAgICAgIC8vICAgICAg
KGxvb3AKLSAgICAgICAgLy8gICAgICAgKGJsb2NrCi0gICAgICAgIC8vICAgICAgICAoYmxvY2sK
LSAgICAgICAgLy8gICAgICAgICAoYnJfaWYgMCAoaTMyLmVxIChnZXRfbG9jYWwgJHgpIChnZXRf
bG9jYWwgJHkpKSkKLSAgICAgICAgLy8gICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAgICAg
ICApCi0gICAgICAgIC8vICAgICAgICAocmV0dXJuIChpMzIuY29uc3QgMCkpCi0gICAgICAgIC8v
ICAgICAgICApCi0gICAgICAgIC8vICAgICAgIChibG9jawotICAgICAgICAvLyAgICAgICAgKGJs
b2NrCi0gICAgICAgIC8vICAgICAgICAgKGJyX2lmIDAgKGkzMi5lcSAoZ2V0X2xvY2FsICR4KSAo
aTMyLmNvbnN0IDApKSkKLSAgICAgICAgLy8gICAgICAgICAoYnIgMSkKLSAgICAgICAgLy8gICAg
ICAgICApCi0gICAgICAgIC8vICAgICAgICAocmV0dXJuIChpMzIuY29uc3QgMSkpCi0gICAgICAg
IC8vICAgICAgICApCi0gICAgICAgIC8vICAgICAgIChzZXRfbG9jYWwgJHggKGkzMi5zdWIgKGdl
dF9sb2NhbCAkeCkgKGkzMi5jb25zdCAxKSkpCi0gICAgICAgIC8vICAgICAgIChiciAwKQotICAg
ICAgICAvLyAgICAgICApCi0gICAgICAgIC8vICAgICAgICh1bnJlYWNoYWJsZSkKLSAgICAgICAg
Ly8gICAgICApCi0gICAgICAgIC8vICAgICApCi0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0
b3IgPSB7Ci0gICAgICAgICAgICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAw
eDAwLCAweDAwLCAweDAxLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDQw
LAotICAgICAgICAgICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMywgMHg4Miwg
MHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MiwgMHg4MCwKLSAg
ICAgICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4NjQsIDB4NzUsIDB4NmQs
IDB4NjIsIDB4MmQsIDB4NmMsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MmQsIDB4NzQsCi0gICAgICAg
ICAgICAweDY4LCAweDYxLCAweDZlLCAweDAwLCAweDAwLCAweDBhLCAweGI5LCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAxLCAweGIzLCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAg
MHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxNCwgMHgwMSwgMHg0ZCwgMHgwNywgMHgwMCwgMHgwNiwKLSAgICAgICAgICAgIDB4MDEs
IDB4MGYsIDB4MTAsIDB4MDAsIDB4MDksIDB4MGYsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4
MTQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NGQsIDB4MDcsCi0gICAgICAgICAgICAweDAwLCAweDA2
LCAweDAxLCAweDBmLCAweDEwLCAweDAxLCAweDA5LCAweDBmLCAweDE0LCAweDAwLCAweDEwLCAw
eDAxLCAweDQxLCAweDE1LCAweDAwLCAweDA2LAotICAgICAgICAgICAgMHgwMCwgMHgwZiwgMHgw
MCwgMHgwZgotICAgICAgICB9OwotCi0gICAgICAgIFBsYW4gcGxhbih2bSwgdmVjdG9yKTsKLSAg
ICAgICAgY2hlY2tQbGFuKHBsYW4sIDEpOwotCi0gICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0
IGNyYXNoLgotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMCksIGJveCgxKSB9KSwgMSk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDAp
LCB7IGJveCgxKSwgYm94KDApIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDIpLCBib3goMSkg
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMSksIGJveCgyKSB9KSwgMSk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDAp
LCB7IGJveCgyKSwgYm94KDIpIH0pLCAwKTsKLSAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4uanNUb1dhc21FbnRyeVBvaW50Rm9yRnVuY3Rpb24oMCksIHsgYm94KDEpLCBib3goMSkg
fSksIDApOwotICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5qc1RvV2FzbUVudHJ5
UG9pbnRGb3JGdW5jdGlvbigwKSwgeyBib3goMiksIGJveCg2KSB9KSwgMSk7Ci0gICAgICAgIENI
RUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLmpzVG9XYXNtRW50cnlQb2ludEZvckZ1bmN0aW9uKDAp
LCB7IGJveCgxMDApLCBib3goNikgfSksIDApOwotICAgIH0KLQotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0g
ICAgQ29tbWFuZExpbmUgb3B0aW9ucyhhcmdjLCBhcmd2KTsKLQotICAgIGlmIChvcHRpb25zLm1f
cnVuV2FzbVRlc3RzKSB7Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgICAgICBKU0M6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICAgICAgdm0gPSAmSlNDOjpWTTo6Y3JlYXRlKEpTQzo6
TGFyZ2VIZWFwKS5sZWFrUmVmKCk7Ci0gICAgICAgIHJ1bldhc21UZXN0cygpOwotI2Vsc2UKLSAg
ICAgICAgZGF0YUxvZ0xuKCJXYXNtIGlzIG5vdCBlbmFibGVkISIpOwotICAgICAgICByZXR1cm4g
RVhJVF9GQUlMVVJFOwotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRVhJVF9TVUNDRVNTOwotfQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcg
KzI1LDYgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgK
LQkJCQk1MzlFQjA4MzFENTU2MEY0MDBDODJFRjcgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQkwRjYxODM0NzFDNDVGNjdBMDA3MjQ1MEIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
QEAgLTEyODcsOSArMTI4Niw2IEBACiAJCTUzNzBCNEY1MUJGMjYyMDIwMDVDNDBGQyAvKiBBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNzBCNEYzMUJGMjVFQTIwMDVDNDBG
QyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCAqLzsg
fTsKIAkJNTM3MEI0RjYxQkYyNjIwNTAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi87IH07CiAJCTUzOTE3RTdCMUI3OTA2RkEw
MDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5MTdFN0ExQjc5
MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25z
LmggKi87IH07Ci0JCTUzOUVCMDc5MUQ1NTYwNzAwMEM4MkVGNyAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
RjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKLQkJ
NTM5RUIwN0ExRDU1NjA3MDAwQzgyRUY3IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgy
MkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07Ci0JCTUzOUVC
MDgxMUQ1NTYwOEEwMEM4MkVGNyAvKiB0ZXN0V2FzbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA3MTFENTUzREY4MDBDODJFRjcgLyogdGVz
dFdhc20uY3BwICovOyB9OwogCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
OUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovOyB9OwogCQk1M0Q0
NDREQzFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Q0NDREQjFEQUYwOEFCMDBCOTI3
ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi87IH07CiAJCTUzRDQ0NERFMURBRjA5QTAwMEI5
Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REQxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFk
ZHJlc3NWYWx1ZS5jcHAgKi87IH07CkBAIC0xNDI5LDYgKzE0MjUsOSBAQAogCQk3OUIwMENCRTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlCMDBDQkExQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5
T2JqZWN0LmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1vcHRpbWl6
ZS1zaWJsaW5nLWNhbGxzIjsgfTsgfTsKIAkJNzlCMDBDQkYxQzZBQjA3RTAwODhDNjVEIC8qIFBy
b3h5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUIwMENCQjFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUIxNzg4RTFEMzk5QjgwMDBC
MUE1NjcgLyogSklUTWF0aElDRm9yd2FyZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTg5OUZFMUQzODYxMkUwMEQxOEM3MyAvKiBKSVRNYXRoSUNG
b3J3YXJkcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTc5Qjc1OTc0MURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlCNzU5NzEx
REZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJbmZvcm1hdGlvbi5jcHAgKi87IH07CisJCTc5
Qjc1OTc1MURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5Qjc1OTcyMURGQTRDNjAw
MDUyMTc0QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUI3NTk3NjFERkE0QzYwMDA1MjE3NEMgLyog
V2FzbVBhZ2VDb3VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlCNzU5NzMxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUI4MTk5MzFERDI1
Q0Y1MDBEREM3MTQgLyogSlNHbG9iYWxPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUI4MTk5MjFERDI1Q0Y1MDBEREM3MTQgLyog
SlNHbG9iYWxPYmplY3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzlDNEIxNUQxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRj
aFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUIxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwICovOyB9OwogCQk3OUM0QjE1RTFCQTIx
NThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlDNEIxNUMxQkEy
MTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM3OSwx
MyArMjM3OCw2IEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGNDY4MEE5MTRCQTdGRDkw
MEJGRTI3MjsKIAkJCXJlbW90ZUluZm8gPSAiTExJbnQgT2Zmc2V0cyI7CiAJCX07Ci0JCTUzOUVC
MDgyMUQ1NTYwRjQwMEM4MkVGNyAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7Ci0JCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5
MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87Ci0JCQlwcm94eVR5cGUgPSAx
OwotCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSA1MzlFQjA3NTFENTU2MDcwMDBDODJFRjc7Ci0J
CQlyZW1vdGVJbmZvID0gdGVzdFdBU007Ci0JCX07CiAJCTVENjlFOTExMTUyQkU1NDcwMDI4RDcy
MCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWluZXJJ
dGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcg
LyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0zNjgzLDcgKzM2NzUsNiBAQAogCQk1MzkxN0U3QzFC
NzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBl
ZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1l
ID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90
b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNTM5RUIwNzExRDU1M0RG
ODAwQzgyRUY3IC8qIHRlc3RXYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IHRlc3RXYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTM5RUIw
ODAxRDU1NjA3MDAwQzgyRUY3IC8qIHRlc3RXQVNNICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0V0FTTTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0NERCMURBRjA4QUIwMEI5Mjc4NCAvKiBC
M1dhc21BZGRyZXNzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNX
YXNtQWRkcmVzc1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21BZGRyZXNzVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNENDQ0REQxREFGMDlBMDAwQjkyNzg0IC8qIEIzV2Fz
bUFkZHJlc3NWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1dhc21BZGRyZXNzVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NjAsNiArMzg1MSw5IEBACiAJCTc5QjAw
Q0I5MUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzlCMDBDQkExQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5T2JqZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlCMDBDQkIxQzZBQjA3RTAwODhDNjVEIC8qIFBy
b3h5T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5T2JqZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5Qjc1OTcxMURGQTRDNjAwMDUyMTc0
QyAvKiBXYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzlCNzU5NzIxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21NZW1vcnlJbmZvcm1h
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTWVtb3J5SW5mb3Jt
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlCNzU5NzMxREZBNEM2MDAw
NTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2FzbVBhZ2VDb3VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUI4MTk5
MjFERDI1Q0Y1MDBEREM3MTQgLyogSlNHbG9iYWxPYmplY3RJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0SW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERG
R0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5MTEsMTUgKzQ5MDUsNiBAQAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwotCQk1MzlFQjA3ODFE
NTU2MDcwMDBDODJFRjcgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29y
a3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVz
ID0gKAotCQkJCTUzOUVCMDc5MUQ1NTYwNzAwMEM4MkVGNyAvKiBGb3VuZGF0aW9uLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAotCQkJCTUzOUVCMDdBMUQ1NTYwNzAwMEM4MkVGNyAvKiBKYXZh
U2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJNjUxMTIyRkMxNDA0NkE0
QzAwMkIxMDFEIC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC00OTY3LDcgKzQ5
NTIsNiBAQAogCQkJCTY1MTEyMzA1MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAog
CQkJCTBGOTMyNzU5MUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLywKIAkJCQkwRjYxODM0
MzFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLywKLQkJCQk1MzlFQjA4MDFENTU2MDcwMDBD
ODJFRjcgLyogdGVzdFdBU00gKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTYwMjQsOCArNjAwOCwxMSBAQAogCQkJCTUzRjQwRThB
MUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQk1MzU1NTcx
NTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8sCiAJCQkJNTM1NTU3MTMxRDlE
OUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLywKKwkJCQk3OUI3NTk3MTFERkE0QzYwMDA1
MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcCAqLywKKwkJCQk3OUI3NTk3MjFERkE0
QzYwMDA1MjE3NEMgLyogV2FzbU1lbW9yeUluZm9ybWF0aW9uLmggKi8sCiAJCQkJNTNGNDBFOTYx
RDVBN0JFQzAwOTlBMUI2IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTUzRjQwRTk0
MUQ1QTdBRUYwMDk5QTFCNiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi8sCisJCQkJNzlCNzU5NzMx
REZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCAqLywKIAkJCQk1M0Y0MEU4QzFENTkw
MUYyMDA5OUExQjYgLyogV2FzbVBhcnNlci5oICovLAogCQkJCTUzMTM3NEJFMUQ1Q0U5NTAwMEFG
N0EwQiAvKiBXYXNtUGxhbi5jcHAgKi8sCiAJCQkJNTMxMzc0QkMxRDVDRTY3NjAwQUY3QTBCIC8q
IFdhc21QbGFuLmggKi8sCkBAIC03OTgzLDYgKzc5NzAsNyBAQAogCQkJCTBGMThEM0QwMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk5OEVENjc1MUJFRDc2OEMwMEREODAxNyAvKiBSZW1vdGVDb250cm9sbGFibGVU
YXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzNGQ0Y4MUMxMzZFMjUwMDMyM0Y2NyAvKiBC
M1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlCNzU5NzYx
REZBNEM2MDAwNTIxNzRDIC8qIFdhc21QYWdlQ291bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3Np
dGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjIyLDYgKzgyMTAsNyBAQAogCQkJCUJDMDJFOThE
MEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzAyRTkwRjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk5NkI3MzFCMUJEQTA4RDEwMDMzMUI4NCAvKiBFcnJvclByb3RvdHlwZS5sdXQuaCBp
biBIZWFkZXJzICovLAorCQkJCTc5Qjc1OTc1MURGQTRDNjAwMDUyMTc0QyAvKiBXYXNtTWVtb3J5
SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk4MEVEMUQzQUUwMEYxRjY4
MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTQ5ODIwNDE4
OTFEMEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTFDMEZG
RDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTkxNDYs
MjIgKzkxMzUsNiBAQAogCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDE0QkQ1OUJGMEEzRThGOTAwMEJB
RjU5QyAvKiB0ZXN0YXBpICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3Qt
dHlwZS50b29sIjsKIAkJfTsKLQkJNTM5RUIwNzUxRDU1NjA3MDAwQzgyRUY3IC8qIHRlc3RXQVNN
ICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDUzOUVCMDdCMUQ1NTYwNzAwMEM4MkVGNyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdFdBU00iICovOwotCQkJYnVpbGRQaGFzZXMgPSAo
Ci0JCQkJNTM5RUIwNzYxRDU1NjA3MDAwQzgyRUY3IC8qIFNvdXJjZXMgKi8sCi0JCQkJNTM5RUIw
NzgxRDU1NjA3MDAwQzgyRUY3IC8qIEZyYW1ld29ya3MgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxl
cyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IHRlc3RX
QVNNOwotCQkJcHJvZHVjdE5hbWUgPSB0ZXN0YXBpOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDUz
OUVCMDgwMUQ1NTYwNzAwMEM4MkVGNyAvKiB0ZXN0V0FTTSAqLzsKLQkJCXByb2R1Y3RUeXBlID0g
ImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7Ci0JCX07CiAJCTY1MTEyMkY3MTQwNDZBNEMw
MDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owog
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDY1MTEyMzAwMTQwNDZBNEMwMDJCMTAxRCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdFJlZ0V4cCIg
Ki87CkBAIC05MjYzLDcgKzkyMzYsNiBAQAogCQkJCTVENkIyQTQ3MTUyQjlFMTcwMDUyMzFERSAv
KiBUZXN0IFRvb2xzICovLAogCQkJCTBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5j
aCAqLywKIAkJCQkwRjYxODMzODFDNDVGNjJBMDA3MjQ1MEIgLyogdGVzdGFpciAqLywKLQkJCQk1
MzlFQjA3NTFENTU2MDcwMDBDODJFRjcgLyogdGVzdFdBU00gKi8sCiAJCQkpOwogCQl9OwogLyog
RW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAtOTUzNCwxNCArOTUwNiw2IEBACiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0JCTUzOUVC
MDc2MUQ1NTYwNzAwMEM4MkVGNyAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMg
PSAoCi0JCQkJNTM5RUIwODExRDU1NjA4QTAwQzgyRUY3IC8qIHRlc3RXYXNtLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwotCQl9OwogCQk2NTExMjJGQTE0MDQ2QTRDMDAyQjEwMUQgLyogU291cmNlcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTk2NDcsNiArOTYxMSw3IEBACiAJCQkJQzJGQ0FFMTAxN0E5QzI0RTAwMzRDNzM1
IC8qIEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFBQTEw
N0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzA5NEM0REUxQUU0Mzk1MzAwNDFBMkVFIC8qIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzlCNzU5NzQxREZBNEM2MDAwNTIxNzRDIC8qIFdhc21N
ZW1vcnlJbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkZDQUUxMjE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMzM4RTBEMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTY1QjgzOTJGMUJBQ0FENkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDcxLDExICsxMDQzNiw2IEBACiAJCQl0YXJnZXQgPSAw
RjQ2ODBBOTE0QkE3RkQ5MDBCRkUyNzIgLyogTExJbnQgT2Zmc2V0cyAqLzsKIAkJCXRhcmdldFBy
b3h5ID0gMEZGOTIyRDIxNEY0NkIyRjAwNDFBMjRFIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAq
LzsKIAkJfTsKLQkJNTM5RUIwODMxRDU1NjBGNDAwQzgyRUY3IC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0gNTM5
RUIwNzUxRDU1NjA3MDAwQzgyRUY3IC8qIHRlc3RXQVNNICovOwotCQkJdGFyZ2V0UHJveHkgPSA1
MzlFQjA4MjFENTU2MEY0MDBDODJFRjcgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwotCQl9
OwogCQk1RDY5RTkxMjE1MkJFNTQ3MDAyOEQ3MjAgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSA5MzJGNUJEQTA4
MjJBMUM3MDA3MzY5NzUgLyoganNjICovOwpAQCAtMTA4MTEsMzggKzEwNzcxLDYgQEAKIAkJCX07
CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJNTM5RUIwN0MxRDU1NjA3MDAwQzgyRUY3
IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29s
RXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVD
VF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07
Ci0JCTUzOUVCMDdEMUQ1NTYwNzAwMEM4MkVGNyAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJD
MDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKLQkJ
CWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsK
LQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJNTM5RUIwN0UxRDU1NjA3MDAwQzgy
RUY3IC8qIFByb2ZpbGluZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwot
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0Njcg
LyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJ
CVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IFByb2Zp
bGluZzsKLQkJfTsKLQkJNTM5RUIwN0YxRDU1NjA3MDAwQzgyRUY3IC8qIFByb2R1Y3Rpb24gKi8g
PSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhj
Y29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChU
QVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBQcm9kdWN0aW9uOwotCQl9OwogCQk1RDZC
MkE0ODE1MkI5RTE3MDA1MjMxREUgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CkBAIC0xMTEzNCwxNyArMTEwNjIsNiBA
QAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJNTM5RUIwN0IxRDU1NjA3MDAwQzgy
RUY3IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0
V0FTTSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25m
aWd1cmF0aW9ucyA9ICgKLQkJCQk1MzlFQjA3QzFENTU2MDcwMDBDODJFRjcgLyogRGVidWcgKi8s
Ci0JCQkJNTM5RUIwN0QxRDU1NjA3MDAwQzgyRUY3IC8qIFJlbGVhc2UgKi8sCi0JCQkJNTM5RUIw
N0UxRDU1NjA3MDAwQzgyRUY3IC8qIFByb2ZpbGluZyAqLywKLQkJCQk1MzlFQjA3RjFENTU2MDcw
MDBDODJFRjcgLyogUHJvZHVjdGlvbiAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlv
bklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9u
OwotCQl9OwogCQk1RDZCMkE0QzE1MkI5RTE3MDA1MjMxREUgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhBZ2dyZWdhdGVUYXJnZXQgIlRlc3QgVG9vbHMiICovID0gewogCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw2ICsy
OTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MDQ0MQogICAgIEV4ZWNTdGF0ZSogdG9wQ2FsbEZyYW1lOwogICAgIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogdG9wSlNXZWJBc3NlbWJseUluc3RhbmNlOworICAgIHZvaWQqIHRvcFdh
c21NZW1vcnlQb2ludGVyOworICAgIHVpbnQzMl90IHRvcFdhc21NZW1vcnlTaXplOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiBzdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvc2hlbGwvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3NoZWxsL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvc2hlbGwvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE3
ICs0OSwxMCBAQCBpZiAoTk9UIFdJTjMyKQogICAgICAgICAuLi9iMy9haXIvdGVzdGFpci5jcHAK
ICAgICApCiAKLSAgICBzZXQoVEVTVFdBU01fU09VUkNFUwotICAgICAgICAuLi90ZXN0V2FzbS5j
cHAKLSAgICApCi0KICAgICBhZGRfZXhlY3V0YWJsZSh0ZXN0YjMgJHtURVNUQjNfU09VUkNFU30p
CiAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RiMyAke0pTQ19MSUJSQVJJRVN9KQogCiAg
ICAgYWRkX2V4ZWN1dGFibGUodGVzdGFpciAke1RFU1RBSVJfU09VUkNFU30pCiAgICAgdGFyZ2V0
X2xpbmtfbGlicmFyaWVzKHRlc3RhaXIgJHtKU0NfTElCUkFSSUVTfSkKIAotICAgIGFkZF9leGVj
dXRhYmxlKHRlc3RXQVNNICR7VEVTVFdBU01fU09VUkNFU30pCi0gICAgdGFyZ2V0X2xpbmtfbGli
cmFyaWVzKHRlc3RXQVNNICR7SlNDX0xJQlJBUklFU30pCi0KIGVuZGlmICgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9IG51bGxw
dHI7CiAKLSAgICBCM0lSR2VuZXJhdG9yKE1lbW9yeSosIFByb2NlZHVyZSYsIFdhc21JbnRlcm5h
bEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Jik7CisgICAgQjNJUkdl
bmVyYXRvcihNZW1vcnlJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFdhc21JbnRlcm5hbEZ1bmN0
aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Jik7CiAKICAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7CiAgICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMTc5LDcg
KzE3OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1bmlmeVZhbHVlc1dpdGhCbG9jayhjb25zdCBF
eHByZXNzaW9uTGlzdCYgcmVzdWx0U3RhY2ssIFJlc3VsdExpc3QmIHN0YWNrKTsKICAgICBWYWx1
ZSogemVyb0ZvclR5cGUoVHlwZSk7CiAKLSAgICBNZW1vcnkqIG1fbWVtb3J5OwogICAgIFByb2Nl
ZHVyZSYgbV9wcm9jOwogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAgIFZlY3Rv
cjxWYXJpYWJsZSo+IG1fbG9jYWxzOwpAQCAtMTg5LDkgKzE4OCw4IEBAIHByaXZhdGU6CiAgICAg
VmFsdWUqIG1femVyb1ZhbHVlc1tudW1UeXBlc107CiB9OwogCi1CM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgV2FzbUludGVy
bmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQotICAgIDogbV9tZW1vcnkobWVtb3J5KQotICAgICwg
bV9wcm9jKHByb2NlZHVyZSkKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5SW5m
b3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0
aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscykKKyAgICA6IG1fcHJvYyhwcm9jZWR1cmUpCiAgICAgLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQogewogICAgIG1fY3Vy
cmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CkBAIC0yMTAsMTIgKzIwOCwxMiBAQCBCM0lS
R2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1lbW9yeSogbWVtCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAobV9tZW1vcnkpIHsKLSAgICAgICAgbV9tZW1vcnlCYXNlR1BSID0gbV9tZW1vcnkt
PnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2ludGVyOworICAgIGlmICghIW1lbW9yeSkg
eworICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuYmFz
ZU1lbW9yeVBvaW50ZXI7CiAgICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VH
UFIpOwotICAgICAgICBBU1NFUlQoIW1fbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVn
aXN0ZXJzWzBdLnNpemVPZmZzZXQpOwotICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBtX21lbW9y
eS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7Ci0gICAg
ICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgaW5mbyA6IG1fbWVtb3J5LT5w
aW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKQorICAgICAgICBBU1NFUlQoIW1lbW9yeS5w
aW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOworICAgICAgICBt
X21lbW9yeVNpemVHUFIgPSBtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1sw
XS5zaXplUmVnaXN0ZXI7CisgICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5m
byYgaW5mbyA6IG1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKQogICAgICAg
ICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKGluZm8uc2l6ZVJlZ2lzdGVyKTsKIAogICAgICAgICBt
X3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkKSB7CkBAIC0zMDIsMTMgKzMwMCwxMyBAQCBpbmxp
bmUgdWludDMyX3Qgc2l6ZU9mTG9hZE9wKExvYWRPcFR5cGUgCiAgICAgY2FzZSBMb2FkT3BUeXBl
OjpJMzJMb2FkOgogICAgIGNhc2UgTG9hZE9wVHlwZTo6STY0TG9hZDMyUzoKICAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQzMlU6CisgICAgY2FzZSBMb2FkT3BUeXBlOjpGMzJMb2FkOgogICAg
ICAgICByZXR1cm4gNDsKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQ6CisgICAgY2FzZSBM
b2FkT3BUeXBlOjpGNjRMb2FkOgogICAgICAgICByZXR1cm4gODsKICAgICBjYXNlIExvYWRPcFR5
cGU6OkkzMkxvYWQxNlU6CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZVOgotICAgIGNh
c2UgTG9hZE9wVHlwZTo6RjMyTG9hZDoKLSAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtNjU5LDcgKzY1Nyw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6ZHVtcChjb25zdCBWZWN0b3I8
Q28KICAgICBkYXRhTG9nTG4oIlxuIik7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29t
cGlsYXRpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihWTSYgdm0sIGNvbnN0IFNpZ25hdHVyZSog
c2lnbmF0dXJlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBNZW1vcnkqIG1l
bW9yeSkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWF0ZUpTVG9XYXNt
V3JhcHBlcihWTSYgdm0sIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5KQogewogICAg
IFByb2NlZHVyZSBwcm9jOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gcHJvYy5hZGRCbG9jaygp
OwpAQCAtNjgxLDEyICs2NzksMTMgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlv
bj4gY3JlYQogICAgIC8vIE1vdmUgbWVtb3J5IHZhbHVlcyB0byB0aGUgYXBwcm9yaWF0ZSBwbGFj
ZXMsIGlmIG5lZWRlZC4KICAgICBWYWx1ZSogYmFzZU1lbW9yeSA9IG51bGxwdHI7CiAgICAgVmVj
dG9yPFZhbHVlKj4gc2l6ZXM7Ci0gICAgaWYgKG1lbW9yeSkgewotICAgICAgICBiYXNlTWVtb3J5
ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWVtb3J5
LT5tZW1vcnkoKSk7CisgICAgaWYgKCEhbWVtb3J5KSB7CisgICAgICAgIGJhc2VNZW1vcnkgPSBi
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQ2NCwgT3JpZ2luKCks
CisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAmdm0udG9wV2FzbU1lbW9yeVBvaW50ZXIpKTsKICAgICAgICAgVmFsdWUqIHNpemUgPSBi
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCks
Ci0gICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1lbW9yeSkgKyBNZW1vcnk6Om9mZnNldE9mU2l6ZSgp
KSk7Ci0gICAgICAgIHNpemVzLnJlc2VydmVDYXBhY2l0eShtZW1vcnktPnBpbm5lZFJlZ2lzdGVy
cygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvIGluZm8gOiBtZW1v
cnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGJsb2Nr
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ2bS50b3BXYXNtTWVt
b3J5U2l6ZSkpOworICAgICAgICBzaXplcy5yZXNlcnZlQ2FwYWNpdHkobWVtb3J5LnBpbm5lZFJl
Z2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvIGluZm8g
OiBtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykgewogICAgICAgICAgICAg
c2l6ZXMuYXBwZW5kKGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCks
IHNpemUsCiAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBpbmZvLnNpemVPZmZzZXQpKSk7CiAgICAgICAgIH0KQEAgLTcwMCwxMSAr
Njk5LDExIEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWEKIAogICAg
IC8vIE1vdmUgdGhlIGFyZ3VtZW50cyBpbnRvIHBsYWNlLgogICAgIFZhbHVlKiByZXN1bHQgPSB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwocHJvYywgYmxvY2ssIE9yaWdpbigpLCBh
cmd1bWVudHMsIHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSksIFsmXSAoUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50KSB7Ci0gICAgICAgIGlmIChtZW1vcnkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChzaXplcy5zaXplKCkgPT0gbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVn
aXN0ZXJzLnNpemUoKSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWlu
ZWRWYWx1ZShiYXNlTWVtb3J5LCBWYWx1ZVJlcDo6cmVnKG1lbW9yeS0+cGlubmVkUmVnaXN0ZXJz
KCkuYmFzZU1lbW9yeVBvaW50ZXIpKSk7CisgICAgICAgIGlmICghIW1lbW9yeSkgeworICAgICAg
ICAgICAgQVNTRVJUKHNpemVzLnNpemUoKSA9PSBtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6
ZVJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0
cmFpbmVkVmFsdWUoYmFzZU1lbW9yeSwgVmFsdWVSZXA6OnJlZyhtZW1vcnkucGlubmVkUmVnaXN0
ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXIpKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoc2l6ZXNbaV0sIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5w
aW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzW2ldLnNpemVSZWdpc3RlcikpKTsKKyAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShzaXplc1tpXSwg
VmFsdWVSZXA6OnJlZyhtZW1vcnkucGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1tpXS5z
aXplUmVnaXN0ZXIpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKQEAgLTczOCw3ICs3MzcsNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENv
bXBpbGF0aW9uPiBjcmVhCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+
KHZtLCBwcm9jKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBw
YXJzZUFuZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXpl
X3QgZnVuY3Rpb25MZW5ndGgsIE1lbW9yeSogbWVtb3J5LCBjb25zdCBTaWduYXR1cmUqIHNpZ25h
dHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIHVuc2ln
bmVkIG9wdExldmVsKQorc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJz
ZUFuZENvbXBpbGUoVk0mIHZtLCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3Qg
ZnVuY3Rpb25MZW5ndGgsIE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIGNvbnN0IFNpZ25hdHVy
ZSogc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjb25zdCBGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgdW5zaWduZWQgb3B0TGV2ZWwpCiB7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFdhc21JbnRlcm5hbEZ1bmN0aW9uPigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDkgKzM1LDkgQEAgZXh0ZXJuICJDIiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCop
OwogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBNZW1vcnk7Citj
bGFzcyBNZW1vcnlJbmZvcm1hdGlvbjsKIAotc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1
bmN0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBNZW1v
cnkqLCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBj
b25zdCBGdW5jdGlvbkluZGV4U3BhY2UmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworc3RkOjp1
bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBjb25z
dCB1aW50OF90Kiwgc2l6ZV90LCBNZW1vcnlJbmZvcm1hdGlvbiYsIGNvbnN0IFNpZ25hdHVyZSos
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IEZ1bmN0aW9uSW5kZXhTcGFj
ZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuY3BwCShyZXZp
c2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1Nb2R1bGVJbmZvcm1hdGlvbjo6fk1vZHVsZUluZm9ybWF0aW9uKCkg
eyB9Ci0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShy
ZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJDb2RlTG9jYXRp
b24uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAi
V2FzbU9wcy5oIgorI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtOTUsMTUgKzk3LDEzIEBAIHN0cnVjdCBJbXBv
cnQgewogICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0
aGUgY29ycmVzcG9uZGluZyBraW5kLgogfTsKIAotY2xhc3MgTWVtb3J5OwotCiBzdHJ1Y3QgRXhw
b3J0IHsKICAgICBJZGVudGlmaWVyIGZpZWxkOwogICAgIEV4dGVybmFsOjpLaW5kIGtpbmQ7CiAg
ICAgdW5pb24gewogICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwogICAgICAgICAvLyBG
SVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDEzNQotICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgTWVtb3J5IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAgICAgLy8gRklYTUUgaW1w
bGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
NjcxCiAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwogICAgIH07CiB9OwpAQCAtMTE5LDEzICsxMTks
MTAgQEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBv
cnRzOwogICAgIFZlY3RvcjxTaWduYXR1cmUqPiBpbXBvcnRGdW5jdGlvbnM7CiAgICAgLy8gRklY
TUUgaW1wbGVtZW50IGltcG9ydCBUYWJsZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0MTM1Ci0gICAgLy8gRklYTUUgaW1wbGVtZW50IGltcG9ydCBNZW1vcnkgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAogICAgIC8vIEZJWE1F
IGltcGxlbWVudCBpbXBvcnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQxMzMKICAgICBWZWN0b3I8U2lnbmF0dXJlKj4gaW50ZXJuYWxGdW5jdGlvblNp
Z25hdHVyZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeT4gbWVtb3J5OworICAgIE1lbW9y
eUluZm9ybWF0aW9uIG1lbW9yeTsKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwotCi0gICAg
fk1vZHVsZUluZm9ybWF0aW9uKCk7CiB9OwogCiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2
aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE1ICszMCwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewogCi1NZW1vcnk6Ok1lbW9yeSh1aW50MzJfdCBzdGFydGluZ1NpemUs
IHVpbnQzMl90IGNhcGFjaXR5LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwaW5uZWRTaXplUmVn
aXN0ZXJzKQorTWVtb3J5OjpNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKQogICAgIDogbV9tb2RlKE1vZGU6OkJvdW5kc0NoZWNraW5nKQotICAgICwgbV9zaXplKHN0
YXJ0aW5nU2l6ZSkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCisgICAgLCBtX3NpemUoaW5p
dGlhbC5ieXRlcygpKQorICAgICwgbV9jYXBhY2l0eShtYXhpbXVtID8gbWF4aW11bS5ieXRlcygp
IDogUGFnZUNvdW50OjptYXgoKS5ieXRlcygpKQorICAgICwgbV9pbml0aWFsKGluaXRpYWwpCisg
ICAgLCBtX21heGltdW0obWF4aW11bSkKICAgICAvLyBGSVhNRTogSWYgd2UgYWRkIHNpZ25hbCBi
YXNlZCBib3VuZHMgY2hlY2tpbmcgdGhlbiB3ZSBuZWVkIGV4dHJhIHNwYWNlIGZvciBvdmVyZmxv
dyBvbiBsb2FkLgogICAgIC8vIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MjY5MwotICAgICwgbV9tYXBwZWRDYXBhY2l0eShzdGF0aWNfY2FzdDx1aW50NjRf
dD4obWF4UGFnZUNvdW50KSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihwYWdlU2l6ZSkpCisgICAg
LCBtX21hcHBlZENhcGFjaXR5KFBhZ2VDb3VudDo6bWF4KCkuYnl0ZXMoKSkKIHsKLSAgICBBU1NF
UlQocGlubmVkU2l6ZVJlZ2lzdGVycy5zaXplKCkgPiAwKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
bWF4aW11bSB8fCBtYXhpbXVtID49IGluaXRpYWwpOyAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50
ZWVkIGJ5IG91ciBjYWxsZXIuCiAKICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3
ZSBoYWQgYSBWTSB0YWcgZm9yIHdhc20gbWVtb3J5LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzNjAwCiAgICAgdm9pZCogcmVzdWx0ID0gbW1hcChudWxscHRyLCBt
X21hcHBlZENhcGFjaXR5LCBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAw
KTsKQEAgLTUwLDI1ICs1MiwxMiBAQCBNZW1vcnk6Ok1lbW9yeSh1aW50MzJfdCBzdGFydGluZ1Np
emUsIHVpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKHN0YXJ0aW5n
U2l6ZSA8PSBtX21hcHBlZENhcGFjaXR5KTsKLSAgICBpZiAobXByb3RlY3QocmVzdWx0LCBzdGFy
dGluZ1NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CisgICAgQVNTRVJUKG1fc2l6ZSA8
PSBtX21hcHBlZENhcGFjaXR5KTsKKyAgICBpZiAobXByb3RlY3QocmVzdWx0LCBtX3NpemUsIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUpKSB7CiAgICAgICAgIG11bm1hcChyZXN1bHQsIG1fbWFwcGVk
Q2FwYWNpdHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQgcmVtYWlu
aW5nUGlubmVkUmVnaXN0ZXJzID0gcGlubmVkU2l6ZVJlZ2lzdGVycy5zaXplKCkgKyAxOwotICAg
IGpzY0NhbGxpbmdDb252ZW50aW9uKCkubV9jYWxsZWVTYXZlUmVnaXN0ZXJzLmZvckVhY2goWyZd
IChSZWcgcmVnKSB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSByZWcuZ3ByKCk7Ci0gICAgICAgIGlm
ICghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzIHx8IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVy
cygpLmdldChyZWcpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAocmVtYWluaW5n
UGlubmVkUmVnaXN0ZXJzID09IDEpIHsKLSAgICAgICAgICAgIG1fcGlubmVkUmVnaXN0ZXJzLmJh
c2VNZW1vcnlQb2ludGVyID0gZ3ByOwotICAgICAgICAgICAgcmVtYWluaW5nUGlubmVkUmVnaXN0
ZXJzLS07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9waW5uZWRSZWdpc3RlcnMuc2l6
ZVJlZ2lzdGVycy5hcHBlbmQoeyBncHIsIHBpbm5lZFNpemVSZWdpc3RlcnNbLS1yZW1haW5pbmdQ
aW5uZWRSZWdpc3RlcnMgLSAxXSB9KTsKLSAgICB9KTsKLQotICAgIEFTU0VSVCghcmVtYWluaW5n
UGlubmVkUmVnaXN0ZXJzKTsKICAgICBtX21lbW9yeSA9IHJlc3VsdDsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAkocmV2aXNpb24gMjA5NjIzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwyNyArMjgsMTIgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJX
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtUGFnZUNvdW50LmgiCiAKICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CiAKLXN0cnVjdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvIHsKLSAgICBHUFJSZWcgc2l6ZVJlZ2lz
dGVyOwotICAgIHVuc2lnbmVkIHNpemVPZmZzZXQ7Ci19OwotCi0vLyBGSVhNRTogV2Ugc2hvdWxk
IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3Rlci4gUmlnaHQgbm93IHdl
IHRha2UgYSB2ZWN0b3Igd2l0aCBvbmx5IG9uZQotLy8gZW50cnkuIFNwZWNpZmljYWxseSBhbiBl
bnRyeSB3aGVyZSB0aGUgc2l6ZU9mZnNldCA9PSAwLiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUg
c2l6ZSByZWdpc3RlciwKLS8vIHdlIGNhbiBoYXZlIG9uZSBmb3IgZWFjaCBsb2FkIHNpemUgY2xh
c3MuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1Mgot
c3RydWN0IFBpbm5lZFJlZ2lzdGVySW5mbyB7Ci0gICAgVmVjdG9yPFBpbm5lZFNpemVSZWdpc3Rl
ckluZm8+IHNpemVSZWdpc3RlcnM7Ci0gICAgR1BSUmVnIGJhc2VNZW1vcnlQb2ludGVyOwotfTsK
LQotY29uc3RleHByIHVpbnQzMl90IHBhZ2VTaXplID0gNjQgKiBLQjsKLWNvbnN0ZXhwciB1aW50
MzJfdCBtYXhQYWdlQ291bnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oKDF1bGwgPDwgMzIpIC8g
cGFnZVNpemUpOwotCiBjbGFzcyBNZW1vcnkgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1l
bW9yeSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01OSw4ICs0NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgQm91bmRzQ2hlY2tpbmcKICAgICB9OwogCi0gICAgTWVtb3J5KCkgPSBk
ZWZhdWx0OwotICAgIE1lbW9yeSh1aW50MzJfdCBzdGFydGluZ1NpemUsIHVpbnQzMl90IGNhcGFj
aXR5LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBwaW5uZWRTaXplUmVnaXN0ZXJzKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhp
bXVtKTsKIAogICAgIH5NZW1vcnkoKQogICAgIHsKQEAgLTcwLDEwICs1NCwxMiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIHVp
bnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8mIHBpbm5lZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGlubmVkUmVn
aXN0ZXJzOyB9CiAKICAgICBNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KIAor
ICAgIFBhZ2VDb3VudCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CisgICAg
UGFnZUNvdW50IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21heGltdW07IH0KKwogICAgIGJv
b2wgZ3Jvdyh1aW50MzJfdCBuZXdTaXplKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbWVtb3J5
KTsKQEAgLTg0LDEzICs3MCwxNSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWVtb3J5LCBtX3Np
emUpOyB9CisKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07
Ci0gICAgUGlubmVkUmVnaXN0ZXJJbmZvIG1fcGlubmVkUmVnaXN0ZXJzOwogICAgIE1vZGUgbV9t
b2RlOwogICAgIHVpbnQzMl90IG1fc2l6ZSB7IDAgfTsKICAgICB1aW50MzJfdCBtX2NhcGFjaXR5
IHsgMCB9OworICAgIFBhZ2VDb3VudCBtX2luaXRpYWw7CisgICAgUGFnZUNvdW50IG1fbWF4aW11
bTsKICAgICB1aW50NjRfdCBtX21hcHBlZENhcGFjaXR5IHsgMCB9OwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKworI2luY2x1ZGUgIldhc21D
YWxsaW5nQ29udmVudGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitNZW1vcnlJbmZvcm1hdGlvbjo6TWVtb3J5SW5m
b3JtYXRpb24oUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCAgY29uc3QgVmVj
dG9yPHVuc2lnbmVkPiYgcGlubmVkU2l6ZVJlZ2lzdGVycywgYm9vbCBpc0ltcG9ydCkKKyAgICA6
IG1faW5pdGlhbChpbml0aWFsKQorICAgICwgbV9tYXhpbXVtKG1heGltdW0pCisgICAgLCBtX2lz
SW1wb3J0KGlzSW1wb3J0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9pbml0aWFsKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV9tYXhpbXVtIHx8IG1fbWF4aW11bSA+PSBtX2luaXRpYWwpOwor
ICAgIEFTU0VSVCghISp0aGlzKTsKKworICAgIHVuc2lnbmVkIHJlbWFpbmluZ1Bpbm5lZFJlZ2lz
dGVycyA9IHBpbm5lZFNpemVSZWdpc3RlcnMuc2l6ZSgpICsgMTsKKyAgICBqc2NDYWxsaW5nQ29u
dmVudGlvbigpLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5mb3JFYWNoKFsmXSAoUmVnIHJlZykgewor
ICAgICAgICBHUFJSZWcgZ3ByID0gcmVnLmdwcigpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Bp
bm5lZFJlZ2lzdGVycyB8fCBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKS5nZXQocmVnKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVy
cyA9PSAxKSB7CisgICAgICAgICAgICBtX3Bpbm5lZFJlZ2lzdGVycy5iYXNlTWVtb3J5UG9pbnRl
ciA9IGdwcjsKKyAgICAgICAgICAgIHJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVycy0tOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG1fcGlubmVkUmVnaXN0ZXJzLnNpemVSZWdpc3RlcnMuYXBw
ZW5kKHsgZ3ByLCBwaW5uZWRTaXplUmVnaXN0ZXJzWy0tcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJz
IC0gMV0gfSk7CisgICAgfSk7CisKKyAgICBBU1NFUlQoIXJlbWFpbmluZ1Bpbm5lZFJlZ2lzdGVy
cyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
SW5mb3JtYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWVtb3J5SW5mb3JtYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJHUFJJ
bmZvLmgiCisjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworc3RydWN0IFBpbm5lZFNp
emVSZWdpc3RlckluZm8geworICAgIEdQUlJlZyBzaXplUmVnaXN0ZXI7CisgICAgdW5zaWduZWQg
c2l6ZU9mZnNldDsKK307CisKKy8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4g
b25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyLiBSaWdodCBub3cgd2UgdGFrZSBhIHZlY3RvciB3aXRo
IG9ubHkgb25lCisvLyBlbnRyeS4gU3BlY2lmaWNhbGx5IGFuIGVudHJ5IHdoZXJlIHRoZSBzaXpl
T2Zmc2V0ID09IDAuIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lzdGVyLAorLy8g
d2UgY2FuIGhhdmUgb25lIGZvciBlYWNoIGxvYWQgc2l6ZSBjbGFzcy4gc2VlOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCitzdHJ1Y3QgUGlubmVkUmVnaXN0
ZXJJbmZvIHsKKyAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVy
czsKKyAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXI7Cit9OworCitjbGFzcyBNZW1vcnlJbmZv
cm1hdGlvbiB7CitwdWJsaWM6CisgICAgTWVtb3J5SW5mb3JtYXRpb24oKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCEqdGhpcyk7CisgICAgfQorCisgICAgTWVtb3J5SW5mb3JtYXRpb24oUGFnZUNv
dW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBw
aW5uZWRTaXplUmVnaXN0ZXJzLCBib29sIGlzSW1wb3J0KTsKKworICAgIGNvbnN0IFBpbm5lZFJl
Z2lzdGVySW5mbyYgcGlubmVkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waW5uZWRSZWdp
c3RlcnM7IH0KKyAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlh
bDsgfQorICAgIFBhZ2VDb3VudCBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtOyB9
CisgICAgYm9vbCBpc0ltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbXBvcnQ7IH0KKworICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1faW5pdGlhbDsgfQor
Citwcml2YXRlOgorICAgIFBhZ2VDb3VudCBtX2luaXRpYWwgeyB9OworICAgIFBhZ2VDb3VudCBt
X21heGltdW0geyB9OworICAgIFBpbm5lZFJlZ2lzdGVySW5mbyBtX3Bpbm5lZFJlZ2lzdGVycyB7
IH07CisgICAgYm9vbCBtX2lzSW1wb3J0IHsgZmFsc2UgfTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0FTTSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDk2
MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiSWRlbnRpZmllcklu
bGluZXMuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSAiV2FzbU1lbW9yeS5o
IgorI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21PcHMu
aCIKICNpbmNsdWRlICJXYXNtU2VjdGlvbnMuaCIKIApAQCAtMjU2LDcgKzI1Niw5IEBAIGJvb2wg
TW9kdWxlUGFyc2VyOjpwYXJzZUltcG9ydCgpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIC8vIEZJWE1F
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAgICAg
ICAgIGJvb2wgaXNJbXBvcnQgPSB0cnVlOworICAgICAgICAgICAgaWYgKCFwYXJzZU1lbW9yeUhl
bHBlcihpc0ltcG9ydCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOiB7CkBA
IC0zMDUsMzYgKzMwNyw1OSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VUYWJsZSgpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCitib29s
IE1vZHVsZVBhcnNlcjo6cGFyc2VNZW1vcnlIZWxwZXIoYm9vbCBpc0ltcG9ydCkKIHsKLSAgICB1
aW50OF90IGNvdW50OwotICAgIGlmICghcGFyc2VWYXJVSW50MShjb3VudCkpCisgICAgLy8gV2Ug
ZG9uJ3QgYWxsb3cgcmVkZWNsYXJpbmcgbWVtb3J5LiBFaXRoZXIgdmlhIGltcG9ydCBvciBkZWZp
bml0aW9uLgorICAgIGlmIChtX21vZHVsZS0+bWVtb3J5KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIHVpbnQ4X3Qg
ZmxhZ3M7Ci0gICAgdWludDMyX3Qgc2l6ZTsKLSAgICBpZiAoIXBhcnNlVmFyVUludDEoZmxhZ3Mp
Ci0gICAgICAgIHx8ICFwYXJzZVZhclVJbnQzMihzaXplKQotICAgICAgICB8fCBzaXplID4gbWF4
UGFnZUNvdW50KQorICAgIGlmICghcGFyc2VWYXJVSW50MShmbGFncykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHVpbnQzMl90IGluaXRpYWw7CisgICAgaWYgKCFwYXJzZVZhclVJbnQz
Mihpbml0aWFsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFQYWdlQ291bnQ6
OmlzVmFsaWQoaW5pdGlhbCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHVpbnQzMl90
IGNhcGFjaXR5ID0gbWF4UGFnZUNvdW50OworICAgIFBhZ2VDb3VudCBpbml0aWFsUGFnZUNvdW50
KGluaXRpYWwpOworCisgICAgUGFnZUNvdW50IG1heGltdW1QYWdlQ291bnQ7CiAgICAgaWYgKGZs
YWdzKSB7Ci0gICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoY2FwYWNpdHkpCi0gICAgICAgICAg
ICB8fCBzaXplID4gY2FwYWNpdHkKLSAgICAgICAgICAgIHx8IGNhcGFjaXR5ID4gbWF4UGFnZUNv
dW50KQorICAgICAgICB1aW50MzJfdCBtYXhpbXVtOworICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKG1heGltdW0pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIGNh
cGFjaXR5ICo9IHBhZ2VTaXplOwotICAgIHNpemUgKj0gcGFnZVNpemU7CisgICAgICAgIGlmICgh
UGFnZUNvdW50Ojppc1ZhbGlkKG1heGltdW0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIG1heGltdW1QYWdlQ291bnQgPSBQYWdlQ291bnQobWF4aW11bSk7CisgICAgICAg
IGlmIChpbml0aWFsUGFnZUNvdW50ID4gbWF4aW11bVBhZ2VDb3VudCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0g
eyAwIH07Ci0gICAgbV9tb2R1bGUtPm1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVtb3J5Pihz
aXplLCBjYXBhY2l0eSwgcGlubmVkU2l6ZXMpOwotICAgIHJldHVybiBtX21vZHVsZS0+bWVtb3J5
LT5tZW1vcnkoKTsKKyAgICBtX21vZHVsZS0+bWVtb3J5ID0gTWVtb3J5SW5mb3JtYXRpb24oaW5p
dGlhbFBhZ2VDb3VudCwgbWF4aW11bVBhZ2VDb3VudCwgcGlubmVkU2l6ZXMsIGlzSW1wb3J0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlTWVtb3J5KCkK
K3sKKyAgICB1aW50OF90IGNvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MShjb3VudCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgLy8gV2Ugb25seSBhbGxvdyBvbmUgbWVtb3J5IGZvciBub3cuCisgICAgaWYg
KGNvdW50ICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaXNJbXBvcnQg
PSBmYWxzZTsKKyAgICByZXR1cm4gcGFyc2VNZW1vcnlIZWxwZXIoaXNJbXBvcnQpOwogfQogCiBi
b29sIE1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWwoKQpAQCAtMzcyLDcgKzM5Nyw3IEBAIGJvb2wg
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCgpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEV4dGVybmFsOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIC8vIEZJWE1F
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
NjcxCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFs
OjpHbG9iYWw6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQ
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlUGFyc2VyLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBw
cml2YXRlOgogICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9Q
QVJTRVIpCiAjdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCiAKKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KTsKKwogICAg
IFZNKiBtX3ZtOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1
bGU7CiAgICAgRnVuY3Rpb25JbmRleFNwYWNlIG1fZnVuY3Rpb25JbmRleFNwYWNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhZ2VDb3VudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYWdlQ291bnQuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFnZUNvdW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBQYWdlQ291bnQgeworCitw
dWJsaWM6CisgICAgUGFnZUNvdW50KCkKKyAgICAgICAgOiBtX3BhZ2VDb3VudChVSU5UX01BWCkK
KyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQobWF4UGFnZUNvdW50IDwgVUlOVF9NQVgsICJX
ZSByZWx5IG9uIHRoaXMgaGVyZS4iKTsKKyAgICB9CisKKyAgICBQYWdlQ291bnQodWludDMyX3Qg
cGFnZUNvdW50KQorICAgICAgICA6IG1fcGFnZUNvdW50KHBhZ2VDb3VudCkKKyAgICB7IH0KKwor
ICAgIHNpemVfdCBieXRlcygpIHsgcmV0dXJuIG1fcGFnZUNvdW50ICogcGFnZVNpemU7IH0KKwor
ICAgIHN0YXRpYyBib29sIGlzVmFsaWQodWludDMyX3QgcGFnZUNvdW50KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHBhZ2VDb3VudCA8PSBtYXhQYWdlQ291bnQ7CisgICAgfQorCisgICAgc3RhdGlj
IFBhZ2VDb3VudCBtYXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBhZ2VDb3VudChtYXhQYWdl
Q291bnQpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fcGFnZUNvdW50ICE9IFVJTlRfTUFYOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
cGFnZUNvdW50IDwgb3RoZXIubV9wYWdlQ291bnQ7IH0KKyAgICBib29sIG9wZXJhdG9yPihjb25z
dCBQYWdlQ291bnQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDb3VudCA+IG90aGVyLm1f
cGFnZUNvdW50OyB9CisgICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFBhZ2VDb3VudCYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNvdW50ID49IG90aGVyLm1fcGFnZUNvdW50OyB9CisKK3By
aXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBwYWdlU2l6ZSA9IDY0ICogS0I7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBtYXhQYWdlQ291bnQgPSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oKDF1bGwgPDwgMzIpIC8gcGFnZVNpemUpOworCisgICAgdWludDMyX3QgbV9w
YWdlQ291bnQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8g
RU5BQkxFKFdBU00pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
CShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIFBsYW46OnJ1bigp
CiAgICAgICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fd2FzbVRvSlNTdHVicy5z
aXplKCkgKyBmdW5jdGlvbkluZGV4OwogICAgICAgICBBU1NFUlQobV9mdW5jdGlvbkluZGV4U3Bh
Y2VbZnVuY3Rpb25JbmRleFNwYWNlXS5zaWduYXR1cmUgPT0gc2lnbmF0dXJlKTsKIAotICAgICAg
ICBTdHJpbmcgZXJyb3IgPSB2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9u
TGVuZ3RoLCBzaWduYXR1cmUsIG1fZnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgU3RyaW5n
IGVycm9yID0gdmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwg
c2lnbmF0dXJlLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVt
b3J5KTsKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKHZl
cmJvc2UpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnVuY3Rp
b25MZW5ndGg7ICsraSkKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIFBsYW46OnJ1bigpCiAgICAg
ICAgIH0KIAogICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy51bmNoZWNrZWRBcHBlbmQo
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCkpOwotICAgICAgICBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlv
blN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LmdldCgp
LCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0aW9uSW5kZXgpLCBt
X2Z1bmN0aW9uSW5kZXhTcGFjZSkpOworICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy51
bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5j
dGlvbkxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bWVtb3J5LCBzaWduYXR1cmUsIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0aW9uSW5kZXgpLCBtX2Z1bmN0aW9uSW5kZXhTcGFj
ZSkpOwogICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZVtmdW5jdGlvbkluZGV4U3BhY2VdLmNv
ZGUgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+Y29kZS0+Y29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21QbGFuLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDYgQEAgY2xhc3Mg
SlNXZWJBc3NlbWJseUNhbGxlZTsKIAogbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBNZW1vcnk7
Ci0KIGNsYXNzIFBsYW4gewogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFBsYW4oVk0q
LCBWZWN0b3I8dWludDhfdD4pOwpAQCAtNjcsMTcgKzY1LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPmV4cG9ydHM7CiAgICAgfQogCi0gICAgY29uc3Qg
TWVtb3J5KiBtZW1vcnkoKSBjb25zdAotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZh
aWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24tPm1lbW9yeS5nZXQo
KTsKLSAgICB9Ci0KICAgICBzaXplX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QKICAg
ICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CiAgICAgICAgIHJldHVybiBt
X3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7CiAgICAgfQorCiAgICAgQjM6OkNvbXBpbGF0
aW9uKiBqc1RvV2FzbUVudHJ5UG9pbnRGb3JGdW5jdGlvbihzaXplX3QgaSkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChpID4gbV93YXNtVG9KU1N0dWJzLnNpemUoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwOTYy
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNSwxMCArMTE1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcChj
b25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAorICAgIGJvb2wgaGFzTWVtb3J5KCkgY29uc3QgeyBy
ZXR1cm4gISFtX21lbW9yeTsgfQorCiAgICAgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYg
bWVzc2FnZSkgeyBBU1NFUlQobV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpOyBtX2Vycm9yTWVzc2Fn
ZSA9IFdURk1vdmUobWVzc2FnZSk7IH0KICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9lcnJvck1lc3NhZ2U7IH0KLSAgICBWYWxpZGF0ZShFeHByZXNzaW9uVHlwZSBy
ZXR1cm5UeXBlKQorICAgIFZhbGlkYXRlKEV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUsIGNvbnN0
IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkpCiAgICAgICAgIDogbV9yZXR1cm5UeXBlKHJldHVy
blR5cGUpCisgICAgICAgICwgbV9tZW1vcnkobWVtb3J5KQogICAgIHsKICAgICB9CiAKQEAgLTEz
MSw2ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIEV4cHJlc3Npb25UeXBlIG1fcmV0dXJuVHlwZTsK
ICAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbHM7CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwor
ICAgIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtX21lbW9yeTsKIH07CiAKIGJvb2wgVmFsaWRh
dGU6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCkBAIC0zNjcsOSArMzcx
LDkgQEAgdm9pZCBWYWxpZGF0ZTo6ZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbAogICAgIC8vIFRo
aW5rIG9mIHRoaXMgYXMgcGVuYW5jZSBmb3IgdGhlIHNpbiBvZiBiYWQgZXJyb3IgbWVzc2FnZXMu
CiB9CiAKLVN0cmluZyB2YWxpZGF0ZUZ1bmN0aW9uKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgc2l6
ZV90IGxlbmd0aCwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IEZ1bmN0aW9uSW5k
ZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlKQorU3RyaW5nIHZhbGlkYXRlRnVuY3Rpb24oY29u
c3QgdWludDhfdCogc291cmNlLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25h
dHVyZSwgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIGNvbnN0
IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkpCiB7Ci0gICAgVmFsaWRhdGUgY29udGV4dChzaWdu
YXR1cmUtPnJldHVyblR5cGUpOworICAgIFZhbGlkYXRlIGNvbnRleHQoc2lnbmF0dXJlLT5yZXR1
cm5UeXBlLCBtZW1vcnkpOwogICAgIEZ1bmN0aW9uUGFyc2VyPFZhbGlkYXRlPiB2YWxpZGF0b3Io
Y29udGV4dCwgc291cmNlLCBsZW5ndGgsIHNpZ25hdHVyZSwgZnVuY3Rpb25JbmRleFNwYWNlKTsK
ICAgICBpZiAoIXZhbGlkYXRvci5wYXJzZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBhZGQgYmV0
dGVyIGxvY2F0aW9uIGluZm9ybWF0aW9uIGhlcmUuIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDI4OApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVZhbGlkYXRlLmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLVN0cmluZyB2YWxpZGF0ZUZ1
bmN0aW9uKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IEZ1
bmN0aW9uSW5kZXhTcGFjZSYpOworU3RyaW5nIHZhbGlkYXRlRnVuY3Rpb24oY29uc3QgdWludDhf
dCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgRnVuY3Rpb25JbmRleFNwYWNlJiwg
Y29uc3QgTWVtb3J5SW5mb3JtYXRpb24mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJ
bmxpbmVzSGVhZGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2dlbmVyYXRlV2FzbVZhbGlkYXRlSW5saW5lc0hlYWRlci5weQkocmV2aXNpb24gMjA5NjIzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtVmFsaWRhdGVJbmxpbmVz
SGVhZGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDkgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogYm9vbCBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBlIG9w
LCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0LCB1aW50MzJf
dCkKIHsKKyAgICBpZiAoIWhhc01lbW9yeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICBzd2l0Y2ggKG9wKSB7CiAiIiIgKyBsb2FkQ2FzZXMgKyAiIiIKICAgICB9CkBAIC0xNTAsNiAr
MTUzLDkgQEAgYm9vbCBWYWxpZGF0ZTo6bG9hZChMb2FkT3BUeXBlIG9wLCBFeHByZQogCiBib29s
IFZhbGlkYXRlOjpzdG9yZShTdG9yZU9wVHlwZSBvcCwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwg
RXhwcmVzc2lvblR5cGUgdmFsdWUsIHVpbnQzMl90KQogeworICAgIGlmICghaGFzTWVtb3J5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHN3aXRjaCAob3ApIHsKICIiIiArIHN0b3Jl
Q2FzZXMgKyAiIiIKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDIwOTYyMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKQEAgLTc4LDYgKzc5LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0
Q2hpbGRyZQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGVOYW1lc3BhY2VPYmplY3QpOworICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21lbW9yeSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRoaXNPYmplY3QtPm1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPmltcG9ydEZ1bmN0aW9uKGkpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oCShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTY3LDMwICs2OCwzNCBAQCBwdWJsaWM6CiAgICAgICAgIGltcG9ydEZ1bmN0aW9uKGlkeCkt
PnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0
T2ZJbXBvcnRGdW5jdGlvbnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pPihzaXplb2YoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKSk7Ci0gICAgfQorICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIG1lbW9yeSgp
IHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CisgICAgdm9pZCBzZXRNZW1vcnkoVk0mIHZtLCBK
U1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkpIHsgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCBtZW1v
cnkpOyB9CiAKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24odW5zaWdu
ZWQgaWR4KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkg
KyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogaWR4OwogICAgIH0KIAotICAgIHN0YXRp
YyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPEpTQ2VsbD4pICogbnVtSW1wb3J0RnVuY3Rpb25zOwotICAgIH0KLQogcHJvdGVj
dGVkOgogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVk
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAKKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmll
cjxKU0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOworICAgIH0KKworICAg
IHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25z
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogbnVtSW1wb3J0RnVuY3Rpb25zOworICAgIH0KKwog
cHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVsZT4gbV9tb2R1bGU7
CiAgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVsZU5hbWVz
cGFjZU9iamVjdDsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9tZW1v
cnk7CiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnM7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmNwcAkocmV2aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNiBA
QAogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5o
IgorI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFz
c2VtYmx5TWVtb3J5KiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TWVtb3J5OjpzX2lu
Zm8gPSB7ICJXZWJBc3NlbWJseS5NZW1vcnkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNZW1vcnkpIH07CisKK0pTV2ViQXNzZW1ibHlNZW1vcnkq
IEpTV2ViQXNzZW1ibHlNZW1vcnk6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYmIG1lbW9yeSkKIHsKLSAgICBhdXRvKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNZW1vcnk+
KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TWVtb3J5KHZtLCBzdHJ1Y3R1cmUpOworICAgIGF1dG8q
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1lbW9y
eT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNZW1vcnkodm0sIHN0cnVjdHVyZSwgV1RGTW92ZSht
ZW1vcnkpKTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBp
bnN0YW5jZTsKIH0KQEAgLTQ0LDExICs0OSwyOCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlN
ZW1vcnk6OmNyZWF0ZVN0CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFzc2VtYmx5TWVtb3J5KFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dlYkFzc2VtYmx5TWVtb3J5OjpKU1dlYkFz
c2VtYmx5TWVtb3J5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNZW1vcnk+JiYgbWVtb3J5KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAg
ICwgbV9tZW1vcnkoV1RGTW92ZShtZW1vcnkpKQogewogfQogCitKU0FycmF5QnVmZmVyKiBKU1dl
YkFzc2VtYmx5TWVtb3J5OjpidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQoreworICAgIGlmIChtX2J1ZmZlcldyYXBwZXIpCisgICAgICAgIHJldHVybiBtX2J1ZmZl
cldyYXBwZXIuZ2V0KCk7CisKKyAgICBhdXRvIGRlc3RydWN0b3IgPSBbXSAodm9pZCopIHsKKyAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlIHRvIGRlc3Ryb3kgdGhl
IG1lbW9yeS4KKyAgICAgICAgLy8gVGhlIEFycmF5QnVmZmVyIGJhY2tpbmcgdGhlIEpTQXJyYXlC
dWZmZXIgaXMgb25seSBvd25lZCBieSB1cywKKyAgICAgICAgLy8gc28gd2UgZ3VhcmFudGVlIGl0
cyBsaWZlY3lsY2UuCisgICAgfTsKKyAgICBtX2J1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVG
cm9tQnl0ZXMobWVtb3J5KCktPm1lbW9yeSgpLCBtZW1vcnkoKS0+c2l6ZSgpLCBXVEZNb3ZlKGRl
c3RydWN0b3IpKTsKKyAgICBtX2J1ZmZlcldyYXBwZXIuc2V0KHZtLCB0aGlzLCBKU0FycmF5QnVm
ZmVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+bV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5nZXQo
KSwgbV9idWZmZXIuZ2V0KCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2J1ZmZlcldyYXBwZXIp
OworICAgIHJldHVybiBtX2J1ZmZlcldyYXBwZXIuZ2V0KCk7Cit9CisKIHZvaWQgSlNXZWJBc3Nl
bWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKQEAgLTY2LDEwICs4OCw5IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1lbW9yeTo6
dmlzaXRDaGlsZHJlbigKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2J1ZmZlcldyYXBwZXIpOwogfQog
Ci1jb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1lbW9yeTo6c19pbmZvID0geyAiV2ViQXNz
ZW1ibHkuTWVtb3J5IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5TWVtb3J5KSB9OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksMjMgKzI5LDM1IEBACiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVj
dC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVm
ZmVyOworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKKwogY2xhc3MgSlNXZWJBc3NlbWJseU1lbW9yeSA6
IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rl
c3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TWVtb3J5
KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiYm
KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCisgICAgV2FzbTo6TWVtb3J5
KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQorICAgIEpTQXJyYXlCdWZmZXIq
IGJ1ZmZlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0Kik7CisKIHByb3RlY3RlZDoKLSAgICBKU1dl
YkFzc2VtYmx5TWVtb3J5KFZNJiwgU3RydWN0dXJlKik7CisgICAgSlNXZWJBc3NlbWJseU1lbW9y
eShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+JiYpOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1fbWVtb3J5OworICAgIFdy
aXRlQmFycmllcjxKU0FycmF5QnVmZmVyPiBtX2J1ZmZlcldyYXBwZXI7CisgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAJKHJldmlzaW9uIDIwOTYyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTIg
QEAKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJQcm90
b0NhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgor
I2luY2x1ZGUgIldhc21NZW1vcnkuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTkwLDYgKzky
LDE2IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICAgICAg
YXJnQ291bnQgPSBib3hlZEFyZ3Muc2l6ZSgpOwogICAgIH0KIAorICAgIC8vIFNldHVwIHRoZSBt
ZW1vcnkgdGhhdCB0aGUgZW50cmFuY2UgbG9hZHMuCisgICAgaWYgKEpTV2ViQXNzZW1ibHlNZW1v
cnkqIG1lbW9yeSA9IHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5KCkpIHsKKyAgICAg
ICAgV2FzbTo6TWVtb3J5KiB3YXNtTWVtb3J5ID0gbWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAg
dm0udG9wV2FzbU1lbW9yeVBvaW50ZXIgPSB3YXNtTWVtb3J5LT5tZW1vcnkoKTsKKyAgICAgICAg
dm0udG9wV2FzbU1lbW9yeVNpemUgPSB3YXNtTWVtb3J5LT5zaXplKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgdm0udG9wV2FzbU1lbW9yeVBvaW50ZXIgPSBudWxscHRyOworICAgICAgICB2bS50
b3BXYXNtTWVtb3J5U2l6ZSA9IDA7CisgICAgfQorCiAgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNh
bGx5IHVzZSB0aGUgV2ViQXNzZWJseUZ1bmN0aW9uIGFzIHRoZSBjYWxsZWUgdG8gYmVnaW4gd2l0
aCBpbiB0aGUgUHJvdG9DYWxsRnJhbWUuCiAgICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0
aGF0IGNhbGxpbmcgaW50byB0aGUgbGxpbnQgbWF5IHN0YWNrIG92ZXJmbG93LCBhbmQgdGhlIHN0
YWNrIG92ZXJmbG93CiAgICAgLy8gaGFuZGxlciBtaWdodCByZWFkIHRoZSBnbG9iYWwgb2JqZWN0
IGZyb20gdGhlIGNhbGxlZS4gVGhlIEpTV2ViQXNzZW1ibHlDYWxsZWUgZG9lc24ndCBoYXZlIGEK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5NjIzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpT
TW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5SW5zdGFuY2VQ
cm90b3R5cGUuaCIKQEAgLTUxLDY0ICs1Miw2NiBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0CiAgQGVuZAogICovCiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIHN0YXRl
KQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3Nl
bWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRv
KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIGF1dG8m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAKICAgICAvLyBJZiBtb2R1bGVPYmplY3QgaXMgbm90IGEgV2ViQXNzZW1ibHkuTW9k
dWxlIGluc3RhbmNlLCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCi0gICAgSlNXZWJBc3NlbWJseU1v
ZHVsZSoganNNb2R1bGUgPSBqc0R5bmFtaWNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihzdGF0
ZS0+YXJndW1lbnQoMCkpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGpzTW9kdWxlID0ganNE
eW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
IGlmICghanNNb2R1bGUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNl
cHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgi
Zmlyc3QgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2Vt
Ymx5Lk1vZHVsZSIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUo
c3RhdGUtPmFyZ3VtZW50KDApKSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJl
IGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5
cGVGb3JWYWx1ZShleGVjLT5hcmd1bWVudCgwKSkpKSk7CiAgICAgY29uc3QgV2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0
aW9uKCk7CiAKICAgICAvLyBJZiB0aGUgaW1wb3J0T2JqZWN0IHBhcmFtZXRlciBpcyBub3QgdW5k
ZWZpbmVkIGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3Ig
aXMgdGhyb3duLgotICAgIEpTVmFsdWUgaW1wb3J0QXJndW1lbnQgPSBzdGF0ZS0+YXJndW1lbnQo
MSk7CisgICAgSlNWYWx1ZSBpbXBvcnRBcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDEpOwogICAg
IEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsKICAg
ICBpZiAoIWltcG9ydEFyZ3VtZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUs
IGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8g
V2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IiksIGRl
ZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkp
KSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywg
dGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgic2Vjb25kIGFy
Z3VtZW50IHRvIFdlYkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgdW5kZWZpbmVkIG9yIGFuIE9i
amVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoaW1wb3J0
QXJndW1lbnQpKSkpOwogCiAgICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMgaXMg
bm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJy
b3IgaXMgdGhyb3duLgogICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSAm
JiAhaW1wb3J0T2JqZWN0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhj
ZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwo
InNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0IGJlIE9iamVjdCBi
ZWNhdXNlIHRoZSBXZWJBc3NlbWJseS5Nb2R1bGUgaGFzIGltcG9ydHMiKSwgZGVmYXVsdFNvdXJj
ZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydEFyZ3VtZW50KSkpKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3Bl
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8g
V2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBPYmplY3QgYmVjYXVzZSB0aGUgV2ViQXNzZW1i
bHkuTW9kdWxlIGhhcyBpbXBvcnRzIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5
cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CiAKICAgICBJZGVudGlmaWVyIG1vZHVsZUtl
eSA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0
aW9uLCAiV2ViQXNzZW1ibHlJbnN0YW5jZSIpKTsKLSAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZCogbW9kdWxlUmVjb3JkID0gV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShzdGF0ZSwg
dm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9k
dWxlS2V5LCBtb2R1bGVJbmZvcm1hdGlvbik7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0gV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJB
c3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIG1vZHVsZUluZm9ybWF0
aW9uKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKLSAgICBT
dHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3Vi
Y2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5X
ZWJBc3NlbWJseUluc3RhbmNlU3RydWN0dXJlKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0
YW5jZVN0cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNl
KHN0YXRlKSwgbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0cy5zaXplKCkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVy
ZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpLCBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVz
IGJlIGluaXRpYWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMs
IFdlYkFzc2VtYmx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3Rz
LCByZXNwZWN0aXZlbHkuCiAgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5
IGxpc3Qgb2YgZXh0ZXJuYWwgdmFsdWVzLgogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9u
cyA9IDA7CiAKICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQotICAgIC8vIEZJWE1FIGltcGxlbWVudCBNZW1v
cnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAogICAgIC8v
IEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDEzMwogCisgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQgPSBmYWxzZTsKICAgICAv
LyBGb3IgZWFjaCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0czoKICAgICBmb3IgKGF1dG8mIGlt
cG9ydCA6IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydHMpIHsKICAgICAgICAgLy8gMS4gTGV0IG8g
YmUgdGhlIHJlc3VsdGFudCB2YWx1ZSBvZiBwZXJmb3JtaW5nIEdldChpbXBvcnRPYmplY3QsIGku
bW9kdWxlX25hbWUpLgotICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0gaW1wb3J0
T2JqZWN0LT5nZXQoc3RhdGUsIGltcG9ydC5tb2R1bGUpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBKU1ZhbHVlIGltcG9ydE1vZHVsZVZhbHVlID0g
aW1wb3J0T2JqZWN0LT5nZXQoZXhlYywgaW1wb3J0Lm1vZHVsZSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKICAgICAgICAgLy8gMi4gSWYgVHlwZShvKSBp
cyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgaWYgKCFpbXBvcnRNb2R1
bGVWYWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlM
aXRlcmFsKCJpbXBvcnQgbXVzdCBiZSBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVy
LCBydW50aW1lVHlwZUZvclZhbHVlKGltcG9ydE1vZHVsZVZhbHVlKSkpKTsKKyAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IG11c3QgYmUgYW4gb2Jq
ZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRN
b2R1bGVWYWx1ZSkpKSk7CisKICAgICAgICAgLy8gMy4gTGV0IHYgYmUgdGhlIHZhbHVlIG9mIHBl
cmZvcm1pbmcgR2V0KG8sIGkuaXRlbV9uYW1lKQogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0g
anNDYXN0PEpTT2JqZWN0Kj4oaW1wb3J0TW9kdWxlVmFsdWUpOwotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gb2JqZWN0LT5nZXQoc3RhdGUsIGltcG9ydC5maWVsZCk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3Qt
PmdldChleGVjLCBpbXBvcnQuZmllbGQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7CisKICAgICAgICAgc3dpdGNoIChpbXBvcnQua2luZCkgewogICAgICAg
ICBjYXNlIFdhc206OkV4dGVybmFsOjpGdW5jdGlvbjogewogICAgICAgICAgICAgLy8gNC4gSWYg
aSBpcyBhIGZ1bmN0aW9uIGltcG9ydDoKICAgICAgICAgICAgIC8vIGkuIElmIElzQ2FsbGFibGUo
dikgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yLgogICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRl
cmFsKCJpbXBvcnQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsYWJsZSIpLCBkZWZhdWx0U291cmNlQXBw
ZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsdWUpKSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaW1wb3J0IGZ1bmN0aW9uIG11c3QgYmUg
Y2FsbGFibGUiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHZh
bHVlKSkpKTsKICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwogICAg
ICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVj
dDoKICAgICAgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBpbXBvcnRlZEV4cG9ydHMg
PSBqc0R5bmFtaWNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihvYmplY3QpKSB7CkBAIC0xMzgs
MTEgKzE0MSwzNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7CiAgICAgICAg
ICAgICAvLyA2LiBJZiBpIGlzIGEgbWVtb3J5IGltcG9ydDoKLSAgICAgICAgICAgIC8vIEZJWE1F
IGltcGxlbWVudCBNZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDEzNAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWhhc01lbW9yeUltcG9ydCk7IC8v
IFRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgYSB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpOworICAgICAg
ICAgICAgaGFzTWVtb3J5SW1wb3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlN
ZW1vcnkqIG1lbW9yeSA9IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1lbW9yeSo+KHZhbHVl
KTsKICAgICAgICAgICAgIC8vIGkuIElmIHYgaXMgbm90IGEgV2ViQXNzZW1ibHkuTWVtb3J5IG9i
amVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgICAgICBpZiAoIW1lbW9yeSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBv
cnQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5Lk1lbW9yeSIpKSkpOworCisgICAg
ICAgICAgICBXYXNtOjpQYWdlQ291bnQgZXhwZWN0ZWRJbml0aWFsID0gbW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5LmluaXRpYWwoKTsKKyAgICAgICAgICAgIFdhc206OlBhZ2VDb3VudCBhY3R1YWxJ
bml0aWFsID0gbWVtb3J5LT5tZW1vcnkoKS0+aW5pdGlhbCgpOworICAgICAgICAgICAgaWYgKGFj
dHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1wb3J0IHByb3ZpZGVkIGFuICdpbml0
aWFsJyB0aGF0IGlzIHRvbyBzbWFsbCIpKSkpOworCisgICAgICAgICAgICBpZiAoV2FzbTo6UGFn
ZUNvdW50IGV4cGVjdGVkTWF4aW11bSA9IG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVt
KCkpIHsKKyAgICAgICAgICAgICAgICBXYXNtOjpQYWdlQ291bnQgYWN0dWFsTWF4aW11bSA9IG1l
bW9yeS0+bWVtb3J5KCktPm1heGltdW0oKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdHVhbE1h
eGltdW0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk1lbW9yeSBpbXBvcnQgZGlkIG5vdCBo
YXZlIGEgJ21heGltdW0nIGJ1dCB0aGUgbW9kdWxlIHJlcXVpcmVzIHRoYXQgaXQgZG9lcyIpKSkp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhY3R1YWxNYXhpbXVt
ID4gZXhwZWN0ZWRNYXhpbXVtKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJNZW1vcnkgaW1w
b3J0cyAnbWF4aW11bScgaXMgbGFyZ2VyIHRoYW4gdGhlIG1vZHVsZSdzIGV4cGVjdGVkICdtYXhp
bXVtIikpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ly8gaWkuIEFwcGVuZCB2IHRvIG1lbW9yaWVzLgogICAgICAgICAgICAgLy8gaWlpLiBBcHBlbmQg
di5bW01lbW9yeV1dIHRvIGltcG9ydHMuCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgaW5zdGFuY2UtPnNldE1lbW9yeSh2bSwgbWVtb3J5KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWw6Okdsb2JhbDogewpAQCAtMTU3LDEzICsxODMsMjggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB9CiAgICAgfQogCi0gICAgbW9kdWxlUmVjb3Jk
LT5saW5rKHN0YXRlLCBpbnN0YW5jZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKyAgICB7CisgICAgICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSAmJiBt
b2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaXNJbXBvcnQoKSkgeworICAgICAgICAgICAgLy8gV2Ug
c2hvdWxkIGVpdGhlciBoYXZlIGFuIGltcG9ydCBvciB3ZSBzaG91bGQgaGF2ZSB0aHJvd24gYW4g
ZXhjZXB0aW9uLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaGFzTWVtb3J5SW1wb3J0KTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkgJiYgIWhh
c01lbW9yeUltcG9ydCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeS5pc0ltcG9ydCgpKTsKKyAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSBhIG1l
bW9yeSB3aGVuIGl0J3MgYSBtZW1vcnkgZGVmaW5pdGlvbi4KKyAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxXYXNtOjpNZW1vcnk+IG1lbW9yeSA9IHN0ZDo6bWFrZV91bmlxdWU8V2FzbTo6TWVt
b3J5Pihtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkuaW5pdGlhbCgpLCBtb2R1bGVJbmZvcm1hdGlv
bi5tZW1vcnkubWF4aW11bSgpKTsKKyAgICAgICAgICAgIGluc3RhbmNlLT5zZXRNZW1vcnkodm0s
CisgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92
ZShtZW1vcnkpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtb2R1bGVSZWNvcmQtPmxpbmso
ZXhlYywgaW5zdGFuY2UpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9
KTsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgbW9kdWxlUmVjb3JkLT5kdW1wKCk7Ci0gICAg
SlNWYWx1ZSBzdGFydFJlc3VsdCA9IG1vZHVsZVJlY29yZC0+ZXZhbHVhdGUoc3RhdGUpOworICAg
IEpTVmFsdWUgc3RhcnRSZXN1bHQgPSBtb2R1bGVSZWNvcmQtPmV2YWx1YXRlKGV4ZWMpOwogICAg
IFVOVVNFRF9QQVJBTShzdGFydFJlc3VsdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsMTEgQEAKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIK
KyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVBhZ2VDb3VudC5oIgogI2lu
Y2x1ZGUgIldlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAKICNpbmNsdWRlICJXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yLmx1dC5oIgog
CkBAIC00MywxOSArNDcsNzUgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5TWVtb3J5Q29u
c3RydQogIEBlbmQKICAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSogc3RhdGUpCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TWVtb3J5KEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgLy8gRklYTUUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNAotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVFcnJvcihzdGF0ZSwgQVND
SUlMaXRlcmFsKCJXZWJBc3NlbWJseSBkb2Vzbid0IHlldCBpbXBsZW1lbnQgdGhlIE1lbW9yeSBj
b25zdHJ1Y3RvciBwcm9wZXJ0eSIpKSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGV4YWN0bHkgb25lIGFyZ3VtZW50
IikpKSk7CisKKyAgICBhdXRvIGdldFVpbnQzMiA9IFsmXSAoSlNWYWx1ZSB2YWx1ZSkgLT4gdWlu
dDMyX3QgeworICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b0ludGVnZXIoZXhl
Yyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAg
ICAgaWYgKGRvdWJsZVZhbHVlIDwgMCB8fCBkb3VibGVWYWx1ZSA+IFVJTlRfTUFYKSB7CisgICAg
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLAorICAgICAgICAgICAgICAg
IGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkg
ZXhwZWN0cyB0aGUgJ2luaXRpYWwnIGFuZCAnbWF4aW11bScgcHJvcGVydGllcyB0byBiZSBpbnRl
Z2VycyBpbiB0aGUgcmFuZ2U6IFswLCAyXjMyIC0gMV0iKSkpOworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihkb3Vi
bGVWYWx1ZSk7CisgICAgfTsKKworICAgIEpTT2JqZWN0KiBtZW1vcnlEZXNjcmlwdG9yOworICAg
IHsKKyAgICAgICAgSlNWYWx1ZSBhcmd1bWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgICAg
ICBpZiAoIWFyZ3VtZW50LmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5Lk1lbW9yeSBleHBlY3RzIGl0cyBmaXJzdCBh
cmd1bWVudCB0byBiZSBhbiBvYmplY3QiKSkpKTsKKyAgICAgICAgbWVtb3J5RGVzY3JpcHRvciA9
IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3VtZW50KTsKKyAgICB9CisKKyAgICBXYXNtOjpQYWdlQ291
bnQgaW5pdGlhbFBhZ2VDb3VudDsKKyAgICB7CisgICAgICAgIElkZW50aWZpZXIgaW5pdGlhbCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiaW5pdGlhbCIpOworICAgICAgICBKU1ZhbHVl
IG1pblNpemVWYWx1ZSA9IG1lbW9yeURlc2NyaXB0b3ItPmdldChleGVjLCBpbml0aWFsKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICB1aW50
MzJfdCBzaXplID0gZ2V0VWludDMyKG1pblNpemVWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICAgICAgaWYgKCFXYXNtOjpQYWdlQ291bnQ6
OmlzVmFsaWQoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkgJ2luaXRpYWwnIHBhZ2UgY291bnQgaXMgdG9vIGxh
cmdlIikpKSk7CisgICAgICAgIGluaXRpYWxQYWdlQ291bnQgPSBXYXNtOjpQYWdlQ291bnQoc2l6
ZSk7CisgICAgfQorCisgICAgV2FzbTo6UGFnZUNvdW50IG1heGltdW1QYWdlQ291bnQ7CisgICAg
eworICAgICAgICBJZGVudGlmaWVyIG1heGltdW0gPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgIm1heGltdW0iKTsKKyAgICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IG1lbW9yeURlc2NyaXB0
b3ItPmhhc1Byb3BlcnR5KGV4ZWMsIG1heGltdW0pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSBtYXhTaXplVmFsdWUgPSBtZW1vcnlEZXNjcmlwdG9yLT5nZXQoZXhlYywg
bWF4aW11bSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsg
fSk7CisgICAgICAgICAgICB1aW50MzJfdCBzaXplID0gZ2V0VWludDMyKG1heFNpemVWYWx1ZSk7
CisgICAgICAgICAgICBpZiAoIVdhc206OlBhZ2VDb3VudDo6aXNWYWxpZChzaXplKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJs
eS5NZW1vcnkgJ21heGltdW0nIHBhZ2UgY291bnQgaXMgdG9vIGxhcmdlIikpKSk7CisgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgICAgICAgICBt
YXhpbXVtUGFnZUNvdW50ID0gV2FzbTo6UGFnZUNvdW50KHNpemUpOworCisgICAgICAgICAgICBp
ZiAoaW5pdGlhbFBhZ2VDb3VudCA+IG1heGltdW1QYWdlQ291bnQpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUs
CisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCInbWF4aW11bScgcGFnZSBjb3VudCBtdXN0IGJlIHRoYW4gZ3JlYXRlciB0aGFuIG9yIGVxdWFs
IHRvIHRoZSAnaW5pdGlhbCcgcGFnZSBjb3VudCIpKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0g
c3RkOjptYWtlX3VuaXF1ZTxXYXNtOjpNZW1vcnk+KGluaXRpYWxQYWdlQ291bnQsIG1heGltdW1Q
YWdlQ291bnQpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TWVt
b3J5OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlN
ZW1vcnlTdHJ1Y3R1cmUoKSwgV1RGTW92ZShtZW1vcnkpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5TWVtb3J5KEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dD
b25zdHJ1Y3RvckNhbm5vdEJlQ2FsbGVkQXNGdW5jdGlvblR5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
ICJXZWJBc3NlbWJseS5NZW1vcnkiKSk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0NvbnN0cnVj
dG9yQ2Fubm90QmVDYWxsZWRBc0Z1bmN0aW9uVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCAi
V2ViQXNzZW1ibHkuTWVtb3J5IikpOwogfQogCiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9y
KiBXZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqIHRoaXNQcm90b3R5cGUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDk2MjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDkgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
ICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9y
eS5oIgogCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUubHV0LmgiCiAKQEAg
LTQyLDEwICs0NCwyNSBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5
CiAgQGVuZAogICovCiAKLVdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKiBXZWJBc3NlbWJseU1l
bW9yeVByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2Vt
Ymx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSopOworCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5TWVtb3J5UHJvdG9GdW5jQnVmZmVyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNXZWJBc3NlbWJseU1lbW9yeSogbWVt
b3J5ID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TWVtb3J5Kj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOyAKKyAgICBpZiAoIW1lbW9yeSkgeworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIAorICAgICAgICAgICAgICAgICAgICBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5NZW1vcnkucHJv
dG90eXBlLmJ1ZmZlciBnZXR0ZXIgY2FsbGVkIHdpdGggbm9uIFdlYkFzc2VtYmx5Lk1lbW9yeSB8
dGhpc3wgdmFsdWUiKSkpKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtZW1v
cnktPmJ1ZmZlcihleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKK30K
KworV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUqIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBl
OjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKICAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5TWVt
b3J5UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwotICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CiAgICAg
cmV0dXJuIG9iamVjdDsKIH0KIApAQCAtNTQsOSArNzEsMTAgQEAgU3RydWN0dXJlKiBXZWJBc3Nl
bWJseU1lbW9yeVByb3RvdHlwZTo6YwogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBKU0NfTkFUSVZFX0dFVFRFUigiYnVmZmVy
Iiwgd2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNCdWZmZXIsIERvbnRFbnVtIHwgQWNjZXNzb3Ip
OwogfQogCiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZTo6V2ViQXNzZW1ibHlNZW1vcnlQcm90
b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5
cGUuaAkocmV2aXNpb24gMjA5NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
NyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2Jh
bE9iamVjdCopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlKFZN
JiwgU3RydWN0dXJlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDk2MjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6ZmluaXNoQ3JlYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICAvLyBGSVhN
RSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAgICAg
ICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTY3MQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpF
eHRlcm5hbDo6R2xvYmFsOiB7CkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7Ci0gICAgICAgICAgICAvLyBGSVhN
RSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTM0CisgICAgICAg
ICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTY3MQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpF
eHRlcm5hbDo6R2xvYmFsOiB7Cg==
</data>
<flag name="review"
          id="319100"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>