<?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>199726</bug_id>
          
          <creation_ts>2019-07-11 14:19:27 -0700</creation_ts>
          <short_desc>[WHLSL] Desugar for loops and while loops</short_desc>
          <delta_ts>2020-05-05 00:42:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>199841</dependson>
    
    <dependson>200681</dependson>
          <blocked>198445</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>saam</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1552215</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-11 14:19:27 -0700</bug_when>
    <thetext>There are a few rules in the spec that we can use to simplify our handling of for and while loops:
  for (X ; e1 ; e2) s -&gt; { X; for (; e1 ; e2) s }
  for (; ; e2) s -&gt; for (; true ; e2) s
  for (; e1 ;) s -&gt; for (; e1 ; null) s
  for (;;) s -&gt; for(; true ; null) s
  while (e) s -&gt; for (; e ;) s
This can let us remove while loops altogether, as well as massively simplify the handling of for loops.

Relatedly, I realize while looking at this that the name resolver creates new name contexts for branches and loops.
This is unnecessary: the spec is such that the only place where we need new name contexts is when dealing with blocks.
In practice it won&apos;t change anything, since the only way that a variable declaration can happen is when contained in a block (so &quot;if (foo()) x = 42;&quot; is invalid)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552308</commentid>
    <comment_count>1</comment_count>
      <attachid>373983</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-11 17:35:19 -0700</bug_when>
    <thetext>Created attachment 373983
Patch

Sorry for the mess that is this patch, it really should have been 3 different patches, but I accidentally completely mingled them.
It is thankfully still pretty small, and the parts are related (desugaring loops, no longer treating loops/branches as new scopes, fixing a checker bug that was revealed by the for-loop-desugaring).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552967</commentid>
    <comment_count>2</comment_count>
      <attachid>373983</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-15 14:19:10 -0700</bug_when>
    <thetext>Comment on attachment 373983
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        This patch makes loops behave a lot more similarly to the spec.

Is there a behavior change or a performance change? Is it easier to hack on them if they are closer? Is it easier to have confidence that our implementation matches the spec? What is the purpose of this change?

&gt; Source/WebCore/ChangeLog:11
&gt; +        by putting any initializer in a block around the loop, putting true in the condition if there is none, and putting any litteral in the increment if there is none.

And nothing happens with do-while loops, I guess?

&gt; Source/WebCore/ChangeLog:14
&gt; +        Debugging this patch revealed an unrelated bug in the Checker where it crashed on CommaExpressions of length 0, and the parser uses those for bare ;.
&gt; +        So I also added a small fix for this.

This is a little scary. I wouldn&apos;t expect this to work. How do you type check an empty comma expression? We type check from the leaves up to the root, but an empty comma expression would be a leaf with no type. It seems to me like having an empty comma expression should remain an error.

&gt; Source/WebCore/ChangeLog:18
&gt; +        Finally, while updating the NameResolver for the new structure of loops I realized that it was needlessly generating extra NameContext.
&gt; +        They are not expected by the spec, that forbids naked variable declarations outside of blocks anyway.
&gt; +        So I removed this unnecessary work, and fixed the parser to correctly forbid such naked variable declarations.

Is this tested?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1200
&gt; +    auto increment = makeUniqueRef&lt;AST::BooleanLiteral&gt;(*origin, true); // FIXME: NullLiteral would make more sense, but is buggy right now. Anything side-effect free is fine.

Is it buggy?

Instead of dumping unnecessary expressions in the for loop, why don&apos;t we just make the increment nullable? Dumping a &quot;true&quot; in there seems worse.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1260
&gt; +auto Parser::parseStatement(bool allowVariableDeclarations) -&gt; Expected&lt;UniqueRef&lt;AST::Statement&gt;, Error&gt;

I don&apos;t see this ever called with allowVariableDeclarations set to &quot;true&quot;. Does it need to exist?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552973</commentid>
    <comment_count>3</comment_count>
      <attachid>373983</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-15 14:26:29 -0700</bug_when>
    <thetext>Comment on attachment 373983
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        This patch makes loops behave a lot more similarly to the spec.
&gt; 
&gt; Is there a behavior change or a performance change? Is it easier to hack on them if they are closer? Is it easier to have confidence that our implementation matches the spec? What is the purpose of this change?

It mostly increases confidence that our implementation matches the spec. It also makes the implementation simpler, and should have a tiny performance win.

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        by putting any initializer in a block around the loop, putting true in the condition if there is none, and putting any litteral in the increment if there is none.
&gt; 
&gt; And nothing happens with do-while loops, I guess?

Right, do-while loops are not desugarable to for loops.

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +        So I also added a small fix for this.
&gt; 
&gt; This is a little scary. I wouldn&apos;t expect this to work. How do you type check an empty comma expression? We type check from the leaves up to the root, but an empty comma expression would be a leaf with no type. It seems to me like having an empty comma expression should remain an error.

I simply type check them to type void. I&apos;ve since realized that I can keep empty comma expressions an error, and instead make &quot;;&quot; generate an empty block. It is both closer to spec, and more obviously correct. I will do this change.

&gt;&gt; Source/WebCore/ChangeLog:18
&gt;&gt; +        So I removed this unnecessary work, and fixed the parser to correctly forbid such naked variable declarations.
&gt; 
&gt; Is this tested?

Yes, I verified it does not break any test, but you are right that I should also add a test that naked variable declarations are properly rejected. Will do.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1200
&gt;&gt; +    auto increment = makeUniqueRef&lt;AST::BooleanLiteral&gt;(*origin, true); // FIXME: NullLiteral would make more sense, but is buggy right now. Anything side-effect free is fine.
&gt; 
&gt; Is it buggy?
&gt; 
&gt; Instead of dumping unnecessary expressions in the for loop, why don&apos;t we just make the increment nullable? Dumping a &quot;true&quot; in there seems worse.

NullLiteral is currently buggy yes. It should be fixed, but this patch is already big enough.

Keeping the increment nullable would work, but it means an extra null check everywhere we touch the loop, and nasty bugs if we forget it anywhere. Making both the increment and the condition non-nullable is just a simplification.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1260
&gt;&gt; +auto Parser::parseStatement(bool allowVariableDeclarations) -&gt; Expected&lt;UniqueRef&lt;AST::Statement&gt;, Error&gt;
&gt; 
&gt; I don&apos;t see this ever called with allowVariableDeclarations set to &quot;true&quot;. Does it need to exist?

It is used in parseBlockBody (see line 1066).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553010</commentid>
    <comment_count>4</comment_count>
      <attachid>374159</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-15 16:01:57 -0700</bug_when>
    <thetext>Created attachment 374159
Patch

I&apos;ve added back a test that parser correctly rejects lone variable declarations.
I&apos;ve also changed the fix of bare &quot;;&quot;, so that the parser now generates an empty block, as per the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553227</commentid>
    <comment_count>5</comment_count>
      <attachid>373983</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-16 10:48:01 -0700</bug_when>
    <thetext>Comment on attachment 373983
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1200
&gt;&gt;&gt; +    auto increment = makeUniqueRef&lt;AST::BooleanLiteral&gt;(*origin, true); // FIXME: NullLiteral would make more sense, but is buggy right now. Anything side-effect free is fine.
&gt;&gt; 
&gt;&gt; Is it buggy?
&gt;&gt; 
&gt;&gt; Instead of dumping unnecessary expressions in the for loop, why don&apos;t we just make the increment nullable? Dumping a &quot;true&quot; in there seems worse.
&gt; 
&gt; NullLiteral is currently buggy yes. It should be fixed, but this patch is already big enough.
&gt; 
&gt; Keeping the increment nullable would work, but it means an extra null check everywhere we touch the loop, and nasty bugs if we forget it anywhere. Making both the increment and the condition non-nullable is just a simplification.

WebKit usually uses the style that all pointers are nullable, which means all pointers mechanically have to go through null checks whenever they&apos;re used. Therefore, forgetting the null checks should be obvious and clearly wrong.

I actually think that sticking in a &quot;true&quot; makes the code less simple, rather than more simple. It&apos;s unclear where that true came from and what it means. Debugging the &quot;true&quot; is more difficult than debugging a null pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553274</commentid>
    <comment_count>6</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-16 12:55:09 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #5)
&gt; Comment on attachment 373983 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373983&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1200
&gt; &gt;&gt;&gt; +    auto increment = makeUniqueRef&lt;AST::BooleanLiteral&gt;(*origin, true); // FIXME: NullLiteral would make more sense, but is buggy right now. Anything side-effect free is fine.
&gt; &gt;&gt; 
&gt; &gt;&gt; Is it buggy?
&gt; &gt;&gt; 
&gt; &gt;&gt; Instead of dumping unnecessary expressions in the for loop, why don&apos;t we just make the increment nullable? Dumping a &quot;true&quot; in there seems worse.
&gt; &gt; 
&gt; &gt; NullLiteral is currently buggy yes. It should be fixed, but this patch is already big enough.
&gt; &gt; 
&gt; &gt; Keeping the increment nullable would work, but it means an extra null check everywhere we touch the loop, and nasty bugs if we forget it anywhere. Making both the increment and the condition non-nullable is just a simplification.
&gt; 
&gt; WebKit usually uses the style that all pointers are nullable, which means
&gt; all pointers mechanically have to go through null checks whenever they&apos;re
&gt; used. Therefore, forgetting the null checks should be obvious and clearly
&gt; wrong.
&gt; 
&gt; I actually think that sticking in a &quot;true&quot; makes the code less simple,
&gt; rather than more simple. It&apos;s unclear where that true came from and what it
&gt; means. Debugging the &quot;true&quot; is more difficult than debugging a null pointer.

I agree that debugging missing null pointer checks should be fairly easy. But with putting a constant in there still seems even simpler. More importantly, it keeps the compiler in sync with the spec, and doing it the other way (making the increment optional in the spec) would be significantly more work, and I would risk missing cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553291</commentid>
    <comment_count>7</comment_count>
      <attachid>374159</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-16 13:26:07 -0700</bug_when>
    <thetext>Comment on attachment 374159
Patch

Clearing flags on attachment: 374159

Committed r247493: &lt;https://trac.webkit.org/changeset/247493&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553292</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-16 13:26:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553295</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-07-16 13:27:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/53168644&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553308</commentid>
    <comment_count>10</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-16 14:00:39 -0700</bug_when>
    <thetext>*** Bug 198445 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553350</commentid>
    <comment_count>11</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-07-16 15:48:55 -0700</bug_when>
    <thetext>The new test webgpu/whlsl-for-loop.html

added in https://trac.webkit.org/changeset/247493/webkit

began failing on Mojave.

History:
https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=webgpu%2Fwhlsl-for-loop.html

Diff:
--- /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/webgpu/whlsl-for-loop-expected.txt
+++ /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/webgpu/whlsl-for-loop-actual.txt
@@ -1,3 +1,3 @@
 
-PASS forLoop 
+FAIL forLoop assert_equals: expected 3 but got 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553360</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-16 16:08:00 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 199841</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649085</commentid>
    <comment_count>13</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-05 00:42:44 -0700</bug_when>
    <thetext>WHLSL is no longer relevant.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373983</attachid>
            <date>2019-07-11 17:35:19 -0700</date>
            <delta_ts>2019-07-15 16:01:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch199726</filename>
            <type>text/plain</type>
            <size>40501</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0NDFjMGRjYTYwNi4uNzc4MTczZGYyZGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAor
MjAxOS0wNy0xMSAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAg
ICAgIFtXSExTTF0gRGVzdWdhciBmb3IgbG9vcHMgYW5kIHdoaWxlIGxvb3BzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk3MjYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIGFkZGVkIHRoZSBmb3ItbG9v
cCB0ZXN0cyBmcm9tIFRlc3QubWpzICh3aXRoIGhlbHAgZnJvbSBTYWFtKS4KKyAgICAgICAgSSBk
aWQgbm90IGFkZCB0aGUgZm9vOSBhbmQgZm9vMTAgdGVzdHMsIGFzIHRoZXkgYXJlIGZvcmJpZGRl
biBieSB0aGUgYmVoYXZpb3IgY2hlY2tlciBpbiB0aGUgQysrIGltcGxlbWVudGF0aW9uIChhbmQg
YnkgdGhlIHNwZWMpLgorCisgICAgICAgIEkgYWxzbyByZW1vdmVkIG9uZSB0ZXN0IGZyb20gd2hs
c2wtcmV0dXJuLXNwZWMtdGVzdHMuaHRtbCwgYmVjYXVzZSBpdCByZWxpZWQgb24gYSBsb25lIHZh
cmlhYmxlIGRlY2xhcmF0aW9uIGluIGFuIGlmLCB3aGljaCBpcyBmb3JiaWRkZW4gYnkgdGhlIHNw
ZWMuCisKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtZm9yLWxvb3AtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtZm9yLWxvb3AuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViZ3B1L3dobHNsLXJldHVybi1zcGVjLXRlc3RzLmh0bWw6CisKIDIwMTktMDctMTEgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBmYXN0L2V2ZW50
cy9pb3Mvcm90YXRpb24vb3JpZW50YXRpb25jaGFuZ2UtZXZlbnQtbGlzdGVuZXItb24uYm9keS5o
dG1sIGlzIGZsYWt5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZm9yLWxv
b3AtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZvci1sb29wLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWU2N2U1ZmIz
ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZm9yLWxvb3At
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIGZvckxvb3AgCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mb3ItbG9vcC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWZvci1sb29wLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjI5OWE5Y2Y4N2VhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWZvci1sb29wLmh0bWwKQEAgLTAsMCArMSwxNTMgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGltZW91dCIgY29u
dGVudD0ibG9uZyI+Cis8dGl0bGU+THZhbHVlcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3do
bHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1
bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKwor
d2hsc2xUZXN0cy5mb3JMb29wID0gYXN5bmMgKCkgPT4KK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGAK
KyAgICAgICAgaW50IGZvbzEoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0g
PSAwOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeDsg
aSA9IGkgKyAxKSB7CisgICAgICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBzdW07CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbzIo
aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpID0gaSArIDEpIHsKKyAgICAgICAgICAgICAgICBzdW0g
PSBzdW0gKyBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAg
ICAgfQorICAgICAgICBpbnQgZm9vMyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50
IHN1bSA9IDA7CisgICAgICAgICAgICBpbnQgaSA9IDEwMDsKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgeDsgaSA9IGkgKyAxKSB7CisgICAgICAgICAgICAgICAgc3VtID0gc3VtICsg
aTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdW07CisgICAgICAgIH0KKyAg
ICAgICAgaW50IGZvbzQoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAw
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4OyBpID0gaSArIDEpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaSA9PSA0KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vNShpbnQgeCkKKyAgICAgICAg
eworICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHg7IGkgPSBpICsgMSkgeworICAgICAgICAgICAgICAgIGlmIChpID09IDUpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIGk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAgICAgICB9CisgICAgICAgIGlu
dCBmb282KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyA7IGkgPSBpICsgMSkgeworICAgICAgICAgICAgICAgIGlm
IChpID49IHgpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN1
bSA9IHN1bSArIGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAg
ICAgICB9CisgICAgICAgIGludCBmb283KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBp
bnQgc3VtID0gMDsKKyAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgIGZvciAoIDsg
OyBpID0gaSArIDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+PSB4KQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9v
OChpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAg
ICBpbnQgaSA9IDA7CisgICAgICAgICAgICBmb3IgKCA7IDsgKSB7CisgICAgICAgICAgICAgICAg
aWYgKGkgPj0geCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
c3VtID0gc3VtICsgaTsKKyAgICAgICAgICAgICAgICBpID0gaSArIDE7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMSIsIFttYWtlSW50KDMp
XSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28xIiwgW21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEiLCBbbWFrZUludCg1KV0pLCAxMCk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzIiLCBbbWFrZUlu
dCgzKV0pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vMiIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwgW21ha2VJbnQoNSldKSwgMTApOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW21h
a2VJbnQoMyldKSwgMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzMiLCBbbWFrZUludCg0KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMyIsIFttYWtlSW50KDUpXSksIDEwKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIs
IFttYWtlSW50KDMpXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb280IiwgW21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzQiLCBbbWFrZUludCg1KV0pLCA2
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
NCIsIFttYWtlSW50KDYpXSksIDExKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFttYWtlSW50KDMpXSksIDMpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb281IiwgW21ha2VJbnQoNCld
KSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzUiLCBbbWFrZUludCg1KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCg2KV0pLCAxMCk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbbWFrZUlu
dCg3KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzYiLCBbbWFrZUludCgzKV0pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNiIsIFttYWtlSW50KDQpXSksIDYpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW21h
a2VJbnQoNSldKSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNildKSwgMTUpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoNyldKSwgMjEp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb283
IiwgW21ha2VJbnQoMyldKSwgMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbzciLCBbbWFrZUludCg0KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFttYWtlSW50KDUpXSks
IDEwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vNyIsIFttYWtlSW50KDYpXSksIDE1KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFttYWtlSW50KDcpXSksIDIxKTsKKyAgICBhc3Nl
cnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vOCIsIFttYWtlSW50
KDMpXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dy
YW0sICJmb284IiwgW21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg1KV0pLCAxMCk7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBbbWFr
ZUludCg2KV0pLCAxNSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzgiLCBbbWFrZUludCg3KV0pLCAyMSk7CisgICAgYXdhaXQgY2hlY2tGYWls
KAorICAgICAgICBgCisgICAgICAgICAgICB2b2lkIGZvbyhpbnQgeCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgOyBpID0gaSArIDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHggPSBpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7CisgICAgYXdhaXQgY2hlY2tGYWls
KAorICAgICAgICBgCisgICAgICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGZvciAoIDsgeCA8IDEwOyApIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICBgKTsK
K30KKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJldHVybi1zcGVjLXRlc3RzLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMuaHRtbAppbmRleCAyNjIx
YTQwZDU5MS4uMjI4Y2I0MDFiOTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1yZXR1cm4tc3BlYy10ZXN0cy5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1y
ZXR1cm4tc3BlYy10ZXN0cy5odG1sCkBAIC0xMTEsMTcgKzExMSw2IEBAIHdobHNsVGVzdHMucmV0
dXJuSWYgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDExOwogICAgICAg
ICAgICAgfQogICAgICAgICBgKTsKLQotICAgIHByb2dyYW0gPSBgCi0gICAgICAgIGludCBmb28o
aW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gNjsKLSAgICAgICAgICAgIGlm
ICh4ID09IDcpCi0gICAgICAgICAgICAgICAgaW50IHkgPSA4OwotICAgICAgICAgICAgcmV0dXJu
IHk7Ci0gICAgICAgIH0KLSAgICBgOwotICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCg3KV0pLCA2KTsKIH07CiAKIHdobHNsVGVz
dHMucmV0dXJuUmVmZXJlbmNlVG9TYW1lUGFyYW1ldGVyID0gYXN5bmMgKCkgPT4gewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDRhZGUxZjE3OGNiLi4xMGI2YzljYWE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUz
IEBACisyMDE5LTA3LTExICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisK
KyAgICAgICAgW1dITFNMXSBEZXN1Z2FyIGZvciBsb29wcyBhbmQgd2hpbGUgbG9vcHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTcyNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFr
ZXMgbG9vcHMgYmVoYXZlIGEgbG90IG1vcmUgc2ltaWxhcmx5IHRvIHRoZSBzcGVjLgorICAgICAg
ICBJbiBwYXJ0aWN1bGFyLCB3aGlsZSBsb29wcyBhcmUganVzdCBkZWdlbmVyYXRlIGZvciBsb29w
cywgc28gdGhleSBjYW4gYmUgZGVzdWdhcmVkIGluIHRoZSBwYXJzZXIuCisgICAgICAgIEFuZCBm
b3IgbG9vcHMgY2FuIHRoZW1zZWx2ZXMgYmUgaGVhdmlseSBkZXN1Z2FyZWQsIGludG8gaGF2aW5n
IG5vIGluaXRpYWxpemVyLCBvbmUgY29uZGl0aW9uIGFuZCBvbmUgaW5jcmVtZW50CisgICAgICAg
IGJ5IHB1dHRpbmcgYW55IGluaXRpYWxpemVyIGluIGEgYmxvY2sgYXJvdW5kIHRoZSBsb29wLCBw
dXR0aW5nIHRydWUgaW4gdGhlIGNvbmRpdGlvbiBpZiB0aGVyZSBpcyBub25lLCBhbmQgcHV0dGlu
ZyBhbnkgbGl0dGVyYWwgaW4gdGhlIGluY3JlbWVudCBpZiB0aGVyZSBpcyBub25lLgorCisgICAg
ICAgIERlYnVnZ2luZyB0aGlzIHBhdGNoIHJldmVhbGVkIGFuIHVucmVsYXRlZCBidWcgaW4gdGhl
IENoZWNrZXIgd2hlcmUgaXQgY3Jhc2hlZCBvbiBDb21tYUV4cHJlc3Npb25zIG9mIGxlbmd0aCAw
LCBhbmQgdGhlIHBhcnNlciB1c2VzIHRob3NlIGZvciBiYXJlIDsuCisgICAgICAgIFNvIEkgYWxz
byBhZGRlZCBhIHNtYWxsIGZpeCBmb3IgdGhpcy4KKworICAgICAgICBGaW5hbGx5LCB3aGlsZSB1
cGRhdGluZyB0aGUgTmFtZVJlc29sdmVyIGZvciB0aGUgbmV3IHN0cnVjdHVyZSBvZiBsb29wcyBJ
IHJlYWxpemVkIHRoYXQgaXQgd2FzIG5lZWRsZXNzbHkgZ2VuZXJhdGluZyBleHRyYSBOYW1lQ29u
dGV4dC4KKyAgICAgICAgVGhleSBhcmUgbm90IGV4cGVjdGVkIGJ5IHRoZSBzcGVjLCB0aGF0IGZv
cmJpZHMgbmFrZWQgdmFyaWFibGUgZGVjbGFyYXRpb25zIG91dHNpZGUgb2YgYmxvY2tzIGFueXdh
eS4KKyAgICAgICAgU28gSSByZW1vdmVkIHRoaXMgdW5uZWNlc3Nhcnkgd29yaywgYW5kIGZpeGVk
IHRoZSBwYXJzZXIgdG8gY29ycmVjdGx5IGZvcmJpZCBzdWNoIG5ha2VkIHZhcmlhYmxlIGRlY2xh
cmF0aW9ucy4KKworICAgICAgICBUZXN0OiB3ZWJncHUvd2hsc2wtZm9yLWxvb3AuaHRtbAorCisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQVNULmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRm9yTG9vcC5oOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6Rm9yTG9vcDo6Rm9yTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6QVNUOjpGb3JMb29wOjpjb25kaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6Rm9yTG9vcDo6aW5jcmVtZW50KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTdGF0ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlN0YXRl
bWVudDo6aXNWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCBjb25zdCk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVMb29wLmg6IFJlbW92ZWQuCisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1REdW1wZXI6OnZpc2l0KToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6Q2hlY2tlcjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpOYW1lUmVzb2x2
ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNv
bHZlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRm9yTG9vcCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVdoaWxlTG9vcCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVN0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5jcHA6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpW
aXNpdG9yOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNp
dG9yLmg6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAy
MDE5LTA3LTEwICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CiAKICAgICAg
ICAgW1dITFNMXSBPcHRpb25hbDxVbmlxdWVSZWY8VD4+IC0+IHN0ZDo6dW5pcXVlX3B0ciBpbiBS
ZXR1cm4vSWZTdGF0ZW1lbnQvRm9yTG9vcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQVNULmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBU1QuaAppbmRleCA1Nzk0ZDRlY2RiNy4uMGU0NDYxMmRm
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFTVC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFTVC5oCkBAIC0xMDEsNiArMTAxLDUgQEAKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVj
bGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
LmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIldITFNM
V2hpbGVMb29wLmgiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRm9yTG9vcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRm9yTG9vcC5oCmluZGV4IGY0NWI5NzQ3YTJmLi5mZTU5
MzZjN2QyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRm9yTG9vcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZvckxvb3AuaApAQCAtNDQsMzMgKzQ0LDI4IEBAIG5hbWVzcGFjZSBBU1Qg
ewogCiBjbGFzcyBGb3JMb29wIDogcHVibGljIFN0YXRlbWVudCB7CiBwdWJsaWM6Ci0gICAgRm9y
TG9vcChDb2RlTG9jYXRpb24gbG9jYXRpb24sIFZhcmlhbnQ8VW5pcXVlUmVmPFN0YXRlbWVudD4s
IFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mJiBpbml0aWFsaXphdGlvbiwgc3RkOjp1bmlxdWVfcHRy
PEV4cHJlc3Npb24+JiYgY29uZGl0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBp
bmNyZW1lbnQsIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+JiYgYm9keSkKKyAgICBGb3JMb29wKENvZGVM
b2NhdGlvbiBsb2NhdGlvbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgY29uZGl0aW9uLCBVbmlx
dWVSZWY8RXhwcmVzc2lvbj4mJiBpbmNyZW1lbnQsIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+JiYgYm9k
eSkKICAgICAgICAgOiBTdGF0ZW1lbnQobG9jYXRpb24pCi0gICAgICAgICwgbV9pbml0aWFsaXph
dGlvbihXVEZNb3ZlKGluaXRpYWxpemF0aW9uKSkKICAgICAgICAgLCBtX2NvbmRpdGlvbihXVEZN
b3ZlKGNvbmRpdGlvbikpCiAgICAgICAgICwgbV9pbmNyZW1lbnQoV1RGTW92ZShpbmNyZW1lbnQp
KQogICAgICAgICAsIG1fYm9keShXVEZNb3ZlKGJvZHkpKQogICAgIHsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIH5Gb3JMb29wKCkKLSAgICB7Ci0gICAgfQorICAgIHZpcnR1YWwgfkZvckxvb3AoKSA9
IGRlZmF1bHQ7CiAKICAgICBGb3JMb29wKGNvbnN0IEZvckxvb3AmKSA9IGRlbGV0ZTsKICAgICBG
b3JMb29wKEZvckxvb3AmJikgPSBkZWZhdWx0OwogCiAgICAgYm9vbCBpc0Zvckxvb3AoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBWYXJpYW50PFVuaXF1ZVJlZjxTdGF0
ZW1lbnQ+LCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiBpbml0aWFsaXphdGlvbigpIHsgcmV0dXJu
IG1faW5pdGlhbGl6YXRpb247IH0KLSAgICBFeHByZXNzaW9uKiBjb25kaXRpb24oKSB7IHJldHVy
biBtX2NvbmRpdGlvbi5nZXQoKTsgfQotICAgIEV4cHJlc3Npb24qIGluY3JlbWVudCgpIHsgcmV0
dXJuIG1faW5jcmVtZW50LmdldCgpOyB9CisgICAgRXhwcmVzc2lvbiYgY29uZGl0aW9uKCkgeyBy
ZXR1cm4gbV9jb25kaXRpb247IH0KKyAgICBFeHByZXNzaW9uJiBpbmNyZW1lbnQoKSB7IHJldHVy
biBtX2luY3JlbWVudDsgfQogICAgIFN0YXRlbWVudCYgYm9keSgpIHsgcmV0dXJuIG1fYm9keTsg
fQogCiBwcml2YXRlOgotICAgIFZhcmlhbnQ8VW5pcXVlUmVmPFN0YXRlbWVudD4sIFVuaXF1ZVJl
ZjxFeHByZXNzaW9uPj4gbV9pbml0aWFsaXphdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhw
cmVzc2lvbj4gbV9jb25kaXRpb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1f
aW5jcmVtZW50OworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2NvbmRpdGlvbjsKKyAgICBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9pbmNyZW1lbnQ7CiAgICAgVW5pcXVlUmVmPFN0YXRlbWVu
dD4gbV9ib2R5OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAppbmRleCAyNzhhZDJiMjg5YS4uYmFkOTNl
ZGNhZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN0YXRlbWVudC5oCkBAIC02Miw3ICs2Miw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaXNTd2l0Y2hTdGF0ZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1RyYXAoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc1ZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGlsZUxvb3AoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogCiAgICAgQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZUxvY2F0aW9uOyB9CiAgICAgdm9pZCB1cGRhdGVDb2RlTG9jYXRpb24oQ29kZUxv
Y2F0aW9uIGxvY2F0aW9uKSB7IG1fY29kZUxvY2F0aW9uID0gbG9jYXRpb247IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFdoaWxlTG9v
cC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVM
b29wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YzAzNzc3YTViLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xX
aGlsZUxvb3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHUFUpCi0KLSNpbmNsdWRlICJXSExTTEV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xTdGF0ZW1l
bnQuaCIKLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotbmFtZXNwYWNlIFdITFNMIHsKLQotbmFtZXNwYWNlIEFTVCB7Ci0KLWNsYXNzIFdoaWxlTG9v
cCA6IHB1YmxpYyBTdGF0ZW1lbnQgewotcHVibGljOgotICAgIFdoaWxlTG9vcChDb2RlTG9jYXRp
b24gbG9jYXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGNvbmRpdGlvbmFsLCBVbmlxdWVS
ZWY8U3RhdGVtZW50PiYmIGJvZHkpCi0gICAgICAgIDogU3RhdGVtZW50KGxvY2F0aW9uKQotICAg
ICAgICAsIG1fY29uZGl0aW9uYWwoV1RGTW92ZShjb25kaXRpb25hbCkpCi0gICAgICAgICwgbV9i
b2R5KFdURk1vdmUoYm9keSkpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfldoaWxlTG9v
cCgpID0gZGVmYXVsdDsKLQotICAgIFdoaWxlTG9vcChjb25zdCBXaGlsZUxvb3AmKSA9IGRlbGV0
ZTsKLSAgICBXaGlsZUxvb3AoV2hpbGVMb29wJiYpID0gZGVmYXVsdDsKLQotICAgIGJvb2wgaXNX
aGlsZUxvb3AoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBFeHByZXNz
aW9uJiBjb25kaXRpb25hbCgpIHsgcmV0dXJuIG1fY29uZGl0aW9uYWw7IH0KLSAgICBTdGF0ZW1l
bnQmIGJvZHkoKSB7IHJldHVybiBtX2JvZHk7IH0KLQotcHJpdmF0ZToKLSAgICBVbmlxdWVSZWY8
RXhwcmVzc2lvbj4gbV9jb25kaXRpb25hbDsKLSAgICBVbmlxdWVSZWY8U3RhdGVtZW50PiBtX2Jv
ZHk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBBU1QKLQotfQotCi19Ci0KLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfU1RBVEVNRU5UKFdoaWxlTG9vcCwgaXNXaGlsZUxvb3AoKSkKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCmluZGV4IDBiNTk4MGY2MjBhLi4z
NTBjMDk3MjI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKQEAgLTEyNiw3
ICsxMjYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2UmKSBv
dmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpIG92ZXJyaWRlOwogICAgIHZvaWQg
dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFT
VDo6SW50ZWdlckxpdGVyYWwmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExp
dGVyYWwmKSBvdmVycmlkZTsKQEAgLTM0OCwyNCArMzQ3LDkgQEAgdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKQogICAgIGVt
aXRMb29wKExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QWZ0ZXJCb2R5LCAmZG9XaGlsZUxvb3AuY29u
ZGl0aW9uYWwoKSwgbnVsbHB0ciwgZG9XaGlsZUxvb3AuYm9keSgpKTsKIH0KIAotdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCi17
Ci0gICAgZW1pdExvb3AoTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpCZWZvcmVCb2R5LCAmd2hpbGVM
b29wLmNvbmRpdGlvbmFsKCksIG51bGxwdHIsIHdoaWxlTG9vcC5ib2R5KCkpOwotfQotCiB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQog
ewotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIntcbiIpOwotCi0gICAgV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KSB7Ci0gICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0ZW1lbnQpOwotICAgIH0sIFsmXShVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZXhwcmVzc2lvbik7Ci0gICAgICAgIHRha2VMYXN0VmFsdWUoKTsgLy8gV2UgZG9uJ3QgbmVlZCB0
byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQuCi0gICAgfSksIGZvckxvb3AuaW5pdGlhbGl6
YXRpb24oKSk7Ci0KLSAgICBlbWl0TG9vcChMb29wQ29uZGl0aW9uTG9jYXRpb246OkJlZm9yZUJv
ZHksIGZvckxvb3AuY29uZGl0aW9uKCksIGZvckxvb3AuaW5jcmVtZW50KCksIGZvckxvb3AuYm9k
eSgpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICBlbWl0TG9vcChM
b29wQ29uZGl0aW9uTG9jYXRpb246OkJlZm9yZUJvZHksICZmb3JMb29wLmNvbmRpdGlvbigpLCAm
Zm9yTG9vcC5pbmNyZW1lbnQoKSwgZm9yTG9vcC5ib2R5KCkpOwogfQogCiB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAKaW5kZXggNWNmYzhlMjk4MTcuLjM2MmE4NjJhZjdmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwCkBA
IC0zOTMsMTQgKzM5Myw2IEBAIHZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkNvbnRpbnVlJikK
ICAgICBtX291dC5wcmludCgiY29udGludWUiKTsKIH0KIAotdm9pZCBBU1REdW1wZXI6OnZpc2l0
KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCi17Ci0gICAgbV9vdXQucHJpbnQoIndoaWxlICgi
KTsKLSAgICB2aXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Ci0gICAgbV9vdXQucHJpbnQo
IikiKTsKLSAgICB2aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKLX0KLQogdm9pZCBBU1REdW1wZXI6
OnZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKQogewogICAgIG1fb3V0LnByaW50
KCJkbyAiKTsKQEAgLTQxMiwxOCArNDA0LDEwIEBAIHZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6
OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKIAogdm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6
Rm9yTG9vcCYgZm9yTG9vcCkKIHsKLSAgICBtX291dC5wcmludCgiZm9yICgiKTsKLSAgICBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4mIHN0
YXRlbWVudCkgewotICAgICAgICB2aXNpdChzdGF0ZW1lbnQpOwotICAgIH0sIFsmXShVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgewotICAgICAgICB2aXNpdChleHByZXNz
aW9uKTsKLSAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKLSAgICBtX291dC5wcmlu
dCgiOyAiKTsKLSAgICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkKLSAgICAgICAgdmlzaXQoKmZv
ckxvb3AuY29uZGl0aW9uKCkpOworICAgIG1fb3V0LnByaW50KCJmb3IgKDsgIik7CisgICAgdmlz
aXQoZm9yTG9vcC5jb25kaXRpb24oKSk7CiAgICAgbV9vdXQucHJpbnQoIjsgIik7Ci0gICAgaWYg
KGZvckxvb3AuaW5jcmVtZW50KCkpCi0gICAgICAgIHZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgp
KTsKKyAgICB2aXNpdChmb3JMb29wLmluY3JlbWVudCgpKTsKICAgICBtX291dC5wcmludCgiKSAi
KTsKICAgICB2aXNpdChmb3JMb29wLmJvZHkoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaAppbmRleCAwYWIwOWZmOTlj
Ny4uY2IzZTExMGMwYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQVNURHVtcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaApAQCAtMTAwLDcgKzEwMCw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2
aXNpdChBU1Q6OlRyYXAmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHZpc2l0KEFTVDo6V2hp
bGVMb29wJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24m
KSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENo
ZWNrZXIuY3BwCmluZGV4IGMwYzgzZmY1ZDQxLi41NjIzN2VhYjI5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC01
Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCIKICNpbmNsdWRl
ICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCi0j
aW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgpAQCAtNTAxLDcgKzUw
MCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9u
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNU
OjpEb1doaWxlTG9vcCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYpIG92ZXJyaWRl
OwpAQCAtMTI0NSwxMyArMTI0Myw2IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJZlN0YXRl
bWVudCYgaWZTdGF0ZW1lbnQpCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1l
bnQuZWxzZUJvZHkoKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3Am
IHdoaWxlTG9vcCkKLXsKLSAgICBpZiAoIXJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUod2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgY2hlY2tFcnJvckFuZFZp
c2l0KHdoaWxlTG9vcC5ib2R5KCkpOwotfQotCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RG9X
aGlsZUxvb3AmIGRvV2hpbGVMb29wKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxl
TG9vcC5ib2R5KCkpOwpAQCAtMTI2MCwxOSArMTI1MSw5IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpGb3JMb29wJiBmb3JMb29wKQogewotICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oVW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50PiYgc3RhdGVtZW50KSB7Ci0gICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChzdGF0ZW1lbnQpOwotICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiYgZXhwcmVzc2lvbikgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVz
c2lvbik7Ci0gICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7Ci0gICAgaWYgKGVycm9y
KCkpCisgICAgaWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKGZvckxvb3AuY29uZGl0aW9u
KCkpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpIHsKLSAg
ICAgICAgaWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKCpmb3JMb29wLmNvbmRpdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGZvckxvb3AuaW5jcmVtZW50
KCkpCi0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuaW5jcmVtZW50KCkpOwogICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChmb3JMb29wLmJvZHkoKSk7CiB9CiAKQEAgLTE0MzIsNyArMTQxMywxMSBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQp
CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVz
c2lvbikKIHsKLSAgICBBU1NFUlQoY29tbWFFeHByZXNzaW9uLmxpc3QoKS5zaXplKCkgPiAwKTsK
KyAgICBpZiAoY29tbWFFeHByZXNzaW9uLmxpc3QoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXNz
aWduVHlwZShjb21tYUV4cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChjb21tYUV4
cHJlc3Npb24uY29kZUxvY2F0aW9uKCksIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBWaXNpdG9yOjp2aXNpdChjb21tYUV4cHJlc3Npb24p
OwogICAgIGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKaW5k
ZXggNmI4M2M2NDNhYjkuLjVlYjQ1ZmY5MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC00Niw3
ICs0Niw2IEBACiAjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5j
ZS5oIgotI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMTI0LDQ4ICsxMjMsMzMgQEAgdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6SWZT
dGF0ZW1lbnQmIGlmU3RhdGVtZW50KQogICAgIGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm47
CiAKLSAgICB7Ci0gICAgICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0
KTsKLSAgICAgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcigqdGhpcywgbmFtZUNvbnRl
eHQpOwotICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVt
ZW50LmJvZHkoKSk7Ci0gICAgfQorICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5i
b2R5KCkpOwogICAgIGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaWZT
dGF0ZW1lbnQuZWxzZUJvZHkoKSkgewotICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgm
bV9uYW1lQ29udGV4dCk7Ci0gICAgICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIoKnRo
aXMsIG5hbWVDb250ZXh0KTsKLSAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7Ci0gICAgfQorICAgIGlmIChpZlN0YXRlbWVu
dC5lbHNlQm9keSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVs
c2VCb2R5KCkpOwogfQogCi12b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3Am
IHdoaWxlTG9vcCkKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiB3
aGlsZUxvb3ApCiB7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25h
bCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CiAgICAgaWYg
KGVycm9yKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0
KCZtX25hbWVDb250ZXh0KTsKLSAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKCp0aGlz
LCBuYW1lQ29udGV4dCk7Ci0gICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCh3
aGlsZUxvb3AuYm9keSgpKTsKLX0KLQotdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG9X
aGlsZUxvb3AmIHdoaWxlTG9vcCkKLXsKLSAgICB7Ci0gICAgICAgIE5hbWVDb250ZXh0IG5hbWVD
b250ZXh0KCZtX25hbWVDb250ZXh0KTsKLSAgICAgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNv
bHZlcigqdGhpcywgbmFtZUNvbnRleHQpOwotICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tF
cnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOwotICAgIH0KLQogICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CiB9CiAKIHZvaWQgTmFtZVJlc29sdmVy
Ojp2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCiB7Ci0gICAgTmFtZUNvbnRleHQgbmFtZUNv
bnRleHQoJm1fbmFtZUNvbnRleHQpOwotICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIo
KnRoaXMsIG5hbWVDb250ZXh0KTsKLSAgICBuZXdOYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQo
Zm9yTG9vcCk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuY29uZGl0aW9uKCkpOwor
ICAgIGlmIChlcnJvcigpKQorICAgICAgICByZXR1cm47CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGZvckxvb3AuaW5jcmVtZW50KCkpOworICAgIGlmIChlcnJvcigpKQorICAgICAgICByZXR1cm47
CisKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOwogfQogCiB2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xh
cmF0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMTmFtZVJlc29sdmVyLmgKaW5kZXggOTIzN2IzN2ZlZWIuLjUwYjRkOWZiNzQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNv
bHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZVJlc29sdmVyLmgKQEAgLTU1LDcgKzU1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFT
VDo6VHlwZVJlZmVyZW5jZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYp
IG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0
KEFTVDo6RG9XaGlsZUxvb3AmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9v
cCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJikg
b3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFBhcnNlci5jcHAKaW5kZXggMjBjYjkzOTEwNGEuLmRjYTQ4OGVlYWUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBA
IC0xMDYzLDcgKzEwNjMsOCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VCbG9ja0JvZHkoKSAtPiBFeHBl
Y3RlZDxBU1Q6OkJsb2NrLCBFcnJvcj4KIAogICAgIEFTVDo6U3RhdGVtZW50cyBzdGF0ZW1lbnRz
OwogICAgIHdoaWxlICghcGVla1R5cGVzPFRva2VuOjpUeXBlOjpSaWdodEN1cmx5QnJhY2tldCwg
VG9rZW46OlR5cGU6OkNhc2UsIFRva2VuOjpUeXBlOjpEZWZhdWx0PigpKSB7Ci0gICAgICAgIFBB
UlNFKHN0YXRlbWVudCwgU3RhdGVtZW50KTsKKyAgICAgICAgYm9vbCBhbGxvd1ZhcmlhYmxlRGVj
bGFyYXRpb25zID0gdHJ1ZTsKKyAgICAgICAgUEFSU0Uoc3RhdGVtZW50LCBTdGF0ZW1lbnQsIGFs
bG93VmFyaWFibGVEZWNsYXJhdGlvbnMpOwogICAgICAgICBzdGF0ZW1lbnRzLmFwcGVuZChXVEZN
b3ZlKCpzdGF0ZW1lbnQpKTsKICAgICB9CiAKQEAgLTExNDIsNTEgKzExNDMsNTIgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlU3dpdGNoQ2FzZSgpIC0+IEV4cGVjdGVkPEFTVDo6U3dpdGNoQ2FzZSwgRXJy
b3I+CiAgICAgfQogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VGb3JMb29wKCkgLT4gRXhwZWN0ZWQ8
QVNUOjpGb3JMb29wLCBFcnJvcj4KK2F1dG8gUGFyc2VyOjpwYXJzZUZvckxvb3AoKSAtPiBFeHBl
Y3RlZDxBU1Q6OkJsb2NrLCBFcnJvcj4KIHsKICAgICBDT05TVU1FX1RZUEUob3JpZ2luLCBGb3Ip
OwogICAgIENPTlNVTUVfVFlQRShsZWZ0UGFyZW50aGVzaXMsIExlZnRQYXJlbnRoZXNpcyk7CiAK
LSAgICBhdXRvIHBhcnNlUmVtYWluZGVyID0gWyZdKFZhcmlhbnQ8VW5pcXVlUmVmPEFTVDo6U3Rh
dGVtZW50PiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYgaW5pdGlhbGl6YXRpb24pIC0+
IEV4cGVjdGVkPEFTVDo6Rm9yTG9vcCwgRXJyb3I+IHsKLSAgICAgICAgQ09OU1VNRV9UWVBFKHNl
bWljb2xvbiwgU2VtaWNvbG9uKTsKLQotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHBy
ZXNzaW9uPiBjb25kaXRpb24obnVsbHB0cik7Ci0gICAgICAgIGlmICghdHJ5VHlwZShUb2tlbjo6
VHlwZTo6U2VtaWNvbG9uKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gZXhwcmVzc2lvbiA9IHBh
cnNlRXhwcmVzc2lvbigpKQotICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9ICgqZXhwcmVzc2lv
bikubW92ZVRvVW5pcXVlUHRyKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGV4cHJlc3Npb24uZXJyb3IoKSk7Ci0gICAgICAgICAg
ICBDT05TVU1FX1RZUEUoc2Vjb25kU2VtaWNvbG9uLCBTZW1pY29sb24pOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4gaW5jcmVtZW50KG51bGxw
dHIpOwotICAgICAgICBpZiAoIXRyeVR5cGUoVG9rZW46OlR5cGU6OlJpZ2h0UGFyZW50aGVzaXMp
KSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCkp
Ci0gICAgICAgICAgICAgICAgaW5jcmVtZW50ID0gKCpleHByZXNzaW9uKS5tb3ZlVG9VbmlxdWVQ
dHIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKLSAgICAgICAgICAgIENPTlNVTUVfVFlQRShy
aWdodFBhcmVudGhlc2lzLCBSaWdodFBhcmVudGhlc2lzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFBBUlNFKGJvZHksIFN0YXRlbWVudCk7Ci0gICAgICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0
aW9uKG9yaWdpbi0+Y29kZUxvY2F0aW9uLCAgKCpib2R5KS0+Y29kZUxvY2F0aW9uKCkpOwotICAg
ICAgICByZXR1cm4gQVNUOjpGb3JMb29wKGxvY2F0aW9uLCBXVEZNb3ZlKGluaXRpYWxpemF0aW9u
KSwgV1RGTW92ZShjb25kaXRpb24pLCBXVEZNb3ZlKGluY3JlbWVudCksIFdURk1vdmUoKmJvZHkp
KTsKLSAgICB9OwogCiAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9ucyA9IGJhY2t0cmFja2lu
Z1Njb3BlPEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIEVycm9y
Pj4oWyZdKCkgewogICAgICAgICByZXR1cm4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpOwog
ICAgIH0pOwotICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9ucykgewotICAgICAgICBVbmlxdWVS
ZWY8QVNUOjpTdGF0ZW1lbnQ+IGRlY2xhcmF0aW9uU3RhdGVtZW50ID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihXVEZNb3ZlKCp2YXJpYWJsZURlY2xh
cmF0aW9ucykpOwotICAgICAgICByZXR1cm4gcGFyc2VSZW1haW5kZXIoV1RGTW92ZShkZWNsYXJh
dGlvblN0YXRlbWVudCkpOworICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4+
IGluaXRpYWxpemF0aW9uOworICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9ucykKKyAgICAgICAg
aW5pdGlhbGl6YXRpb24gPSBzdGF0aWNfY2FzdDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+Piht
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KFdURk1vdmUo
KnZhcmlhYmxlRGVjbGFyYXRpb25zKSkpOworICAgIGVsc2UgeworICAgICAgICBQQVJTRShlZmZl
Y3RmdWxFeHByZXNzaW9uLCBFZmZlY3RmdWxFeHByZXNzaW9uKTsKKyAgICAgICAgaW5pdGlhbGl6
YXRpb24gPSBzdGF0aWNfY2FzdDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+PihtYWtlVW5pcXVl
UmVmPEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oV1RGTW92ZSgqZWZmZWN0ZnVs
RXhwcmVzc2lvbikpKTsKICAgICB9CiAKLSAgICBQQVJTRShlZmZlY3RmdWxFeHByZXNzaW9uLCBF
ZmZlY3RmdWxFeHByZXNzaW9uKTsKKyAgICBDT05TVU1FX1RZUEUoc2VtaWNvbG9uLCBTZW1pY29s
b24pOwogCi0gICAgcmV0dXJuIHBhcnNlUmVtYWluZGVyKFdURk1vdmUoKmVmZmVjdGZ1bEV4cHJl
c3Npb24pKTsKKyAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY29uZGl0
aW9uOworICAgIGF1dG8gc2Vjb25kU2VtaWNvbG9uID0gdHJ5VHlwZShUb2tlbjo6VHlwZTo6U2Vt
aWNvbG9uKTsKKyAgICBpZiAoIXNlY29uZFNlbWljb2xvbikgeworICAgICAgICBQQVJTRShleHBy
ZXNzaW9uLCBFeHByZXNzaW9uKTsKKyAgICAgICAgY29uZGl0aW9uID0gV1RGTW92ZSgqZXhwcmVz
c2lvbik7CisgICAgICAgIENPTlNVTUVfVFlQRShzZWNvbmRTZW1pY29sb24sIFNlbWljb2xvbik7
CisgICAgfSBlbHNlCisgICAgICAgIGNvbmRpdGlvbiA9IHN0YXRpY19jYXN0PFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PihtYWtlVW5pcXVlUmVmPEFTVDo6Qm9vbGVhbkxpdGVyYWw+KCpzZWNv
bmRTZW1pY29sb24sIHRydWUpKTsKKworICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+PiBpbmNyZW1lbnQ7CisgICAgYXV0byByaWdodFBhcmVudGhlc2lzID0gdHJ5VHlwZShU
b2tlbjo6VHlwZTo6UmlnaHRQYXJlbnRoZXNpcyk7CisgICAgaWYgKCFyaWdodFBhcmVudGhlc2lz
KSB7CisgICAgICAgIFBBUlNFKGV4cHJlc3Npb24sIEV4cHJlc3Npb24pOworICAgICAgICBpbmNy
ZW1lbnQgPSBXVEZNb3ZlKCpleHByZXNzaW9uKTsKKyAgICAgICAgQ09OU1VNRV9UWVBFKHJpZ2h0
UGFyZW50aGVzaXMsIFJpZ2h0UGFyZW50aGVzaXMpOworICAgIH0gZWxzZQorICAgICAgICBpbmNy
ZW1lbnQgPSBzdGF0aWNfY2FzdDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4obWFrZVVuaXF1
ZVJlZjxBU1Q6OkJvb2xlYW5MaXRlcmFsPigqb3JpZ2luLCB0cnVlKSk7IC8vIEZJWE1FOiBOdWxs
TGl0ZXJhbCB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UsIGJ1dCBpcyBidWdneSByaWdodCBub3cuIEFu
eXRoaW5nIHNpZGUtZWZmZWN0IGZyZWUgaXMgZmluZS4KKworICAgIFBBUlNFKGJvZHksIFN0YXRl
bWVudCk7CisgICAgQVNUOjpDb2RlTG9jYXRpb24gbG9jYXRpb24ob3JpZ2luLT5jb2RlTG9jYXRp
b24sICAoKmJvZHkpLT5jb2RlTG9jYXRpb24oKSk7CisKKyAgICBhdXRvIGZvckxvb3AgPSBtYWtl
VW5pcXVlUmVmPEFTVDo6Rm9yTG9vcD4obG9jYXRpb24sIFdURk1vdmUoKmNvbmRpdGlvbiksIFdU
Rk1vdmUoKmluY3JlbWVudCksIFdURk1vdmUoKmJvZHkpKTsKKyAgICBBU1Q6OlN0YXRlbWVudHMg
c3RhdGVtZW50cyA9IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+Pjo6ZnJvbShXVEZN
b3ZlKCppbml0aWFsaXphdGlvbiksIFdURk1vdmUoZm9yTG9vcCkpOworICAgIHJldHVybiBBU1Q6
OkJsb2NrKGxvY2F0aW9uLCBXVEZNb3ZlKHN0YXRlbWVudHMpKTsKIH0KIAotYXV0byBQYXJzZXI6
OnBhcnNlV2hpbGVMb29wKCkgLT4gRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVycm9yPgorYXV0
byBQYXJzZXI6OnBhcnNlV2hpbGVMb29wKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBFcnJv
cj4KIHsKICAgICBDT05TVU1FX1RZUEUob3JpZ2luLCBXaGlsZSk7CiAgICAgQ09OU1VNRV9UWVBF
KGxlZnRQYXJlbnRoZXNpcywgTGVmdFBhcmVudGhlc2lzKTsKQEAgLTExOTUsNyArMTE5Nyw4IEBA
IGF1dG8gUGFyc2VyOjpwYXJzZVdoaWxlTG9vcCgpIC0+IEV4cGVjdGVkPEFTVDo6V2hpbGVMb29w
LCBFcnJvcj4KICAgICBQQVJTRShib2R5LCBTdGF0ZW1lbnQpOwogCiAgICAgQVNUOjpDb2RlTG9j
YXRpb24gbG9jYXRpb24ob3JpZ2luLT5jb2RlTG9jYXRpb24sICAoKmJvZHkpLT5jb2RlTG9jYXRp
b24oKSk7Ci0gICAgcmV0dXJuIEFTVDo6V2hpbGVMb29wKGxvY2F0aW9uLCBXVEZNb3ZlKCpjb25k
aXRpb25hbCksIFdURk1vdmUoKmJvZHkpKTsKKyAgICBhdXRvIGluY3JlbWVudCA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpCb29sZWFuTGl0ZXJhbD4oKm9yaWdpbiwgdHJ1ZSk7IC8vIEZJWE1FOiBOdWxs
TGl0ZXJhbCB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UsIGJ1dCBpcyBidWdneSByaWdodCBub3cuIEFu
eXRoaW5nIHNpZGUtZWZmZWN0IGZyZWUgaXMgZmluZS4KKyAgICByZXR1cm4gQVNUOjpGb3JMb29w
KGxvY2F0aW9uLCBXVEZNb3ZlKCpjb25kaXRpb25hbCksIFdURk1vdmUoaW5jcmVtZW50KSwgV1RG
TW92ZSgqYm9keSkpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VEb1doaWxlTG9vcCgpIC0+IEV4
cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPgpAQCAtMTI1NCw3ICsxMjU3LDcgQEAgYXV0
byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3QKICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCh7IG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0IH0sIFdURk1vdmUo
cmVzdWx0KSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVN0YXRlbWVudCgpIC0+IEV4cGVjdGVk
PFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPgorYXV0byBQYXJzZXI6OnBhcnNlU3Rh
dGVtZW50KGJvb2wgYWxsb3dWYXJpYWJsZURlY2xhcmF0aW9ucykgLT4gRXhwZWN0ZWQ8VW5pcXVl
UmVmPEFTVDo6U3RhdGVtZW50PiwgRXJyb3I+CiB7CiAgICAgUEVFSyh0b2tlbik7CiAgICAgc3dp
dGNoICh0b2tlbi0+dHlwZSkgewpAQCAtMTI3MiwxMSArMTI3NSwxMSBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBF
cnJvcj4KICAgICB9CiAgICAgY2FzZSBUb2tlbjo6VHlwZTo6Rm9yOiB7CiAgICAgICAgIFBBUlNF
KGZvckxvb3AsIEZvckxvb3ApOwotICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6
Rm9yTG9vcD4oV1RGTW92ZSgqZm9yTG9vcCkpIH07CisgICAgICAgIHJldHVybiB7IG1ha2VVbmlx
dWVSZWY8QVNUOjpCbG9jaz4oV1RGTW92ZSgqZm9yTG9vcCkpIH07CiAgICAgfQogICAgIGNhc2Ug
VG9rZW46OlR5cGU6OldoaWxlOiB7CiAgICAgICAgIFBBUlNFKHdoaWxlTG9vcCwgV2hpbGVMb29w
KTsKLSAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OldoaWxlTG9vcD4oV1RGTW92
ZSgqd2hpbGVMb29wKSkgfTsKKyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkZv
ckxvb3A+KFdURk1vdmUoKndoaWxlTG9vcCkpIH07CiAgICAgfQogICAgIGNhc2UgVG9rZW46OlR5
cGU6OkRvOiB7CiAgICAgICAgIFBBUlNFKGRvV2hpbGVMb29wLCBEb1doaWxlTG9vcCk7CkBAIC0x
MzU1LDkgKzEzNTgsMTMgQEAgYXV0byBQYXJzZXI6OnBhcnNlU3RhdGVtZW50KCkgLT4gRXhwZWN0
ZWQ8VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50PiwgRXJyb3I+CiAgICAgICAgICAgICByZXR1cm4g
eyBtYWtlVW5pcXVlUmVmPEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oV1RGTW92
ZSgqZWZmZWN0ZnVsRXhwcmVzc2lvbikpIH07CiAgICAgfQogCi0gICAgUEFSU0UodmFyaWFibGVE
ZWNsYXJhdGlvbnMsIFZhcmlhYmxlRGVjbGFyYXRpb25zKTsKLSAgICBDT05TVU1FX1RZUEUoc2Vt
aWNvbG9uLCBTZW1pY29sb24pOwotICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbnMp
KSB9OworICAgIGlmIChhbGxvd1ZhcmlhYmxlRGVjbGFyYXRpb25zKSB7CisgICAgICAgIFBBUlNF
KHZhcmlhYmxlRGVjbGFyYXRpb25zLCBWYXJpYWJsZURlY2xhcmF0aW9ucyk7CisgICAgICAgIENP
TlNVTUVfVFlQRShzZW1pY29sb24sIFNlbWljb2xvbik7CisgICAgICAgIHJldHVybiB7IG1ha2VV
bmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oV1RGTW92ZSgqdmFy
aWFibGVEZWNsYXJhdGlvbnMpKSB9OworICAgIH0KKworICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPigiQSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpcyBvbmx5IHZhbGlkIGluc2lkZSBhIGJsb2Nr
Iik7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUVmZmVjdGZ1bEV4cHJlc3Npb24oKSAtPiBFeHBl
Y3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAppbmRleCA0MDBjZTY2YThj
MS4uYTZiMThhYWFkY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuaApAQCAtOTEsNyArOTEsNiBAQAogI2luY2x1ZGUgIldITFNMVmFy
aWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCi0jaW5jbHVk
ZSAiV0hMU0xXaGlsZUxvb3AuaCIKICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTIwMywx
MiArMjAyLDEyIEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpJZlN0YXRlbWVudCwgRXJy
b3I+IHBhcnNlSWZTdGF0ZW1lbnQoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlN3aXRjaFN0YXRlbWVu
dCwgRXJyb3I+IHBhcnNlU3dpdGNoU3RhdGVtZW50KCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpTd2l0
Y2hDYXNlLCBFcnJvcj4gcGFyc2VTd2l0Y2hDYXNlKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpGb3JM
b29wLCBFcnJvcj4gcGFyc2VGb3JMb29wKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3As
IEVycm9yPiBwYXJzZVdoaWxlTG9vcCgpOworICAgIEV4cGVjdGVkPEFTVDo6QmxvY2ssIEVycm9y
PiBwYXJzZUZvckxvb3AoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiBwYXJz
ZVdoaWxlTG9vcCgpOwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPiBwYXJz
ZURvV2hpbGVMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBF
cnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYmKTsKICAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LCBF
cnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpOwotICAgIEV4cGVjdGVkPFVuaXF1ZVJl
ZjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPiBwYXJzZVN0YXRlbWVudCgpOworICAgIEV4cGVjdGVk
PFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPiBwYXJzZVN0YXRlbWVudChib29sIGFs
bG93VmFyaWFibGVEZWNsYXJhdGlvbiA9IGZhbHNlKTsKIAogICAgIEV4cGVjdGVkPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VFZmZlY3RmdWxFeHByZXNzaW9uKCk7CiAg
ICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZUVmZmVj
dGZ1bEFzc2lnbm1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNw
cAppbmRleCBiNGJjZDYxODljYi4uNDc0ZmM4MDM4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVu
dEJlaGF2aW9yQ2hlY2tlci5jcHAKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlICJXSExTTFRy
YXAuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgiCiAj
aW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCi0jaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKICNp
bmNsdWRlIDxjc3RkaW50PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CkBAIC0xMDksOSArMTA4LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdmlz
aXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgLy8gVGhl
IGluaXRpYWxpemF0aW9uIGFsd2F5cyBoYXMgYSBiZWhhdmlvciBvZiBOb3RoaW5nLCB3aGljaCB3
ZSBhbHJlYWR5IGFkZCB1bmNvbmRpdGlvbmFsbHkgYmVsb3csCi0gICAgICAgIC8vIHNvIHdlIGNh
biBqdXN0IGlnbm9yZSB0aGUgaW5pdGlhbGl6YXRpb24uCi0KICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKICAgICAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMjIsMTggKzExOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fc3RhY2su
YXBwZW5kKGIpOwogICAgIH0KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxl
TG9vcCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxv
b3AuYm9keSgpKTsKLSAgICAgICAgaWYgKGVycm9yKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgYi5yZW1vdmUoQmVo
YXZpb3I6OkJyZWFrKTsKLSAgICAgICAgYi5yZW1vdmUoQmVoYXZpb3I6OkNvbnRpbnVlKTsKLSAg
ICAgICAgYi5hZGQoQmVoYXZpb3I6Ok5vdGhpbmcpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZChi
KTsKLSAgICB9Ci0KICAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN3aXRjaENhc2UpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5j
cHAKaW5kZXggYmYxMmU2MzlkMjUuLjM3MmU2NjExMWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKQEAgLTMzMSwxMCAr
MzMxLDEwIEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkK
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoU3RhdGVtZW50
PihzdGF0ZW1lbnQpKTsKICAgICBlbHNlIGlmIChpczxBU1Q6OlRyYXA+KHN0YXRlbWVudCkpCiAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlRyYXA+KHN0YXRlbWVudCkp
OwotICAgIGVsc2UgaWYgKGlzPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0
YXRlbWVudCkpCisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVu
dCkpOwotICAgIGVsc2UKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6
V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKKyAgICB9CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpCcmVhayYpCkBAIC00MjcsMTUgKzQyNyw4IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpGYWxsdGhyb3VnaCYpCiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JM
b29wKQogewotICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFT
VDo6U3RhdGVtZW50PiYgc3RhdGVtZW50KSB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChz
dGF0ZW1lbnQpOwotICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVz
c2lvbikgewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbik7Ci0gICAgfSks
IGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7Ci0gICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkp
Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7Ci0gICAg
aWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCi0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9y
TG9vcC5pbmNyZW1lbnQoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuY29uZGl0
aW9uKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmluY3JlbWVudCgpKTsKICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOwogfQogCkBAIC00NzcsMTIgKzQ3
MCw2IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCh2YXJpYWJsZURlY2xhcmF0aW9uLmdldCgpKTsKIH0KIAotdm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQotewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGls
ZUxvb3AuY29uZGl0aW9uYWwoKSk7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5i
b2R5KCkpOwotfQotCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biYgdmFyaWFibGVEZWNsYXJhdGlvbikKIHsKICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi50
eXBlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFZpc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
VmlzaXRvci5oCmluZGV4IGVjMzk2ZmRmNTRhLi5hM2ZhMjQ3YmYxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKQEAgLTg1LDcg
Kzg1LDYgQEAgY2xhc3MgU3dpdGNoQ2FzZTsKIGNsYXNzIFN3aXRjaFN0YXRlbWVudDsKIGNsYXNz
IFRyYXA7CiBjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudDsKLWNsYXNzIFdoaWxl
TG9vcDsKIGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb247CiBjbGFzcyBBc3NpZ25tZW50RXhwcmVz
c2lvbjsKIGNsYXNzIENhbGxFeHByZXNzaW9uOwpAQCAtMTY2LDcgKzE2NSw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmKTsKICAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpUcmFwJik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpXaGlsZUxvb3AmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uJik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJl
c3Npb24mKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGI2MTMwMmVlYTE3Li5jZWZkOTdjMTg0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMzMDQsNyArMTMzMDQsNiBAQAog
CQlDMjFCRjcwMTIxQ0Q4OUM0MDAyMjc5NzkgLyogV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MDIyMUNEODlDNDAwMjI3OTc5IC8qIFdITFNMRW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzAzMjFD
RDg5QzUwMDIyNzk3OSAvKiBXSExTTFJldHVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJldHVy
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjFCRjcwNDIxQ0Q4OUM2MDAyMjc5
NzkgLyogV0hMU0xXaGlsZUxvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xXaGlsZUxvb3AuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MDUyMUNEODlDNzAwMjI3OTc5IC8q
IFdITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGdW5jdGlvbkF0
dHJpYnV0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcwNjIxQ0Q4OUM3
MDAyMjc5NzkgLyogV0hMU0xDb21tYUV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xD
b21tYUV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MDcy
MUNEODlDODAwMjI3OTc5IC8qIFdITFNMTnVsbExpdGVyYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xOdWxsTGl0ZXJhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxOTMsNyAr
MTcxOTIsNiBAQAogCQkJCUMyMUJGNzEwMjFDRDg5RDAwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxl
RGVjbGFyYXRpb24uaCAqLywKIAkJCQlDMjFCRjcxNDIxQ0Q4OUQzMDAyMjc5NzkgLyogV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oICovLAogCQkJCUMyMUJGNzEzMjFDRDg5RDIw
MDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmggKi8sCi0JCQkJQzIxQkY3MDQyMUNE
ODlDNjAwMjI3OTc5IC8qIFdITFNMV2hpbGVMb29wLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IEFT
VDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Cg==
</data>
<flag name="commit-queue"
          id="389830"
          type_id="3"
          status="-"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374159</attachid>
            <date>2019-07-15 16:01:57 -0700</date>
            <delta_ts>2019-07-16 13:26:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch199726</filename>
            <type>text/plain</type>
            <size>42709</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjYmY3Yjg4MDgxNS4uYjA2ZmIyNTcxNzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAor
MjAxOS0wNy0xNSAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAg
ICAgIFtXSExTTF0gRGVzdWdhciBmb3IgbG9vcHMgYW5kIHdoaWxlIGxvb3BzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk3MjYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIGFkZGVkIHRoZSBmb3ItbG9v
cCB0ZXN0cyBmcm9tIFRlc3QubWpzICh3aXRoIGhlbHAgZnJvbSBTYWFtKS4KKyAgICAgICAgSSBk
aWQgbm90IGFkZCB0aGUgZm9vOSBhbmQgZm9vMTAgdGVzdHMsIGFzIHRoZXkgYXJlIGZvcmJpZGRl
biBieSB0aGUgYmVoYXZpb3IgY2hlY2tlciBpbiB0aGUgQysrIGltcGxlbWVudGF0aW9uIChhbmQg
YnkgdGhlIHNwZWMpLgorCisgICAgICAgIEkgYWxzbyBjaGFuZ2VkIG9uZSB0ZXN0IGZyb20gd2hs
c2wtcmV0dXJuLXNwZWMtdGVzdHMuaHRtbCB0byBhc3NlcnRfZmFpbCwgYmVjYXVzZSBpdCByZWxp
ZWQgb24gYSBsb25lIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIGFuIGlmLCB3aGljaCBpcyBmb3Ji
aWRkZW4gYnkgdGhlIHNwZWMuCisKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtZm9yLWxvb3AtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtZm9yLWxvb3AuaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLXJldHVybi1zcGVjLXRlc3RzLmh0bWw6CisK
IDIwMTktMDctMTUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAg
IEZpbHRlciBTRFAgYyBsaW5lcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWZvci1sb29wLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1mb3ItbG9v
cC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFl
NjdlNWZiM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWZv
ci1sb29wLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBmb3JMb29wIAorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZm9yLWxvb3AuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1mb3ItbG9vcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4yOTlhOWNmODdlYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdwdS93aGxzbC1mb3ItbG9vcC5odG1sCkBAIC0wLDAgKzEsMTUzIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVv
dXQiIGNvbnRlbnQ9ImxvbmciPgorPHRpdGxlPkx2YWx1ZXMuPC90aXRsZT4KKzxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0g
e307CisKK3dobHNsVGVzdHMuZm9yTG9vcCA9IGFzeW5jICgpID0+Cit7CisgICAgbGV0IHByb2dy
YW0gPSBgCisgICAgICAgIGludCBmb28xKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBp
bnQgc3VtID0gMDsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsg
aSA8IHg7IGkgPSBpICsgMSkgeworICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIGk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAgICAgICB9CisgICAgICAgIGlu
dCBmb28yKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeDsgaSA9IGkgKyAxKSB7CisgICAgICAgICAgICAg
ICAgc3VtID0gc3VtICsgaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdW07
CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbzMoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgaW50IGkgPSAxMDA7CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHg7IGkgPSBpICsgMSkgeworICAgICAgICAgICAgICAgIHN1bSA9
IHN1bSArIGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VtOworICAgICAg
ICB9CisgICAgICAgIGludCBmb280KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQg
c3VtID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeDsgaSA9IGkgKyAxKSB7
CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBzdW07CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbzUoaW50IHgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB4OyBpID0gaSArIDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSA1KQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBzdW0gPSBzdW0gKyBp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgZm9vNihpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHN1bSA9IDA7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgOyBpID0gaSArIDEpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaSA+PSB4KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBzdW0gPSBzdW0gKyBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1
bTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vNyhpbnQgeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBm
b3IgKCA7IDsgaSA9IGkgKyAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPj0geCkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc3VtID0gc3VtICsgaTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdW07CisgICAgICAgIH0KKyAgICAgICAg
aW50IGZvbzgoaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAg
ICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgZm9yICggOyA7ICkgeworICAgICAgICAg
ICAgICAgIGlmIChpID49IHgpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIHN1bSA9IHN1bSArIGk7CisgICAgICAgICAgICAgICAgaSA9IGkgKyAxOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1bTsKKyAgICAgICAgfQorICAgIGA7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzEiLCBbbWFr
ZUludCgzKV0pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiZm9vMSIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28xIiwgW21ha2VJbnQoNSldKSwgMTApOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28yIiwg
W21ha2VJbnQoMyldKSwgMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rp
b24ocHJvZ3JhbSwgImZvbzIiLCBbbWFrZUludCg0KV0pLCA2KTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vMiIsIFttYWtlSW50KDUpXSksIDEw
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
MyIsIFttYWtlSW50KDMpXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb28zIiwgW21ha2VJbnQoNCldKSwgNik7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzMiLCBbbWFrZUludCg1KV0p
LCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzQiLCBbbWFrZUludCgzKV0pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNCIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2Vy
dF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb280IiwgW21ha2VJbnQo
NSldKSwgNik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbzQiLCBbbWFrZUludCg2KV0pLCAxMSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbbWFrZUludCgzKV0pLCAzKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNSIsIFttYWtl
SW50KDQpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHBy
b2dyYW0sICJmb281IiwgW21ha2VJbnQoNSldKSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb281IiwgW21ha2VJbnQoNildKSwgMTApOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb281Iiwg
W21ha2VJbnQoNyldKSwgMTApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmb282IiwgW21ha2VJbnQoMyldKSwgMyk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzYiLCBbbWFrZUludCg0KV0pLCA2
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
NiIsIFttYWtlSW50KDUpXSksIDEwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vNiIsIFttYWtlSW50KDYpXSksIDE1KTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9vNiIsIFttYWtlSW50KDcp
XSksIDIxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vNyIsIFttYWtlSW50KDMpXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJmb283IiwgW21ha2VJbnQoNCldKSwgNik7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzciLCBbbWFrZUlu
dCg1KV0pLCAxMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZvbzciLCBbbWFrZUludCg2KV0pLCAxNSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzciLCBbbWFrZUludCg3KV0pLCAyMSk7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbzgiLCBb
bWFrZUludCgzKV0pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiZm9vOCIsIFttYWtlSW50KDQpXSksIDYpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb284IiwgW21ha2VJbnQoNSldKSwgMTAp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb284
IiwgW21ha2VJbnQoNildKSwgMTUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmb284IiwgW21ha2VJbnQoNyldKSwgMjEpOworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgdm9pZCBmb28oaW50IHgpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IDsgaSA9IGkgKyAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB4ID0gaTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIGApOworICAgIGF3YWl0IGNo
ZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHggPCAxMDsgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiA3OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgYCk7Cit9CisKK3J1blRlc3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+CisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXR1cm4tc3BlYy10ZXN0cy5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJldHVybi1zcGVjLXRlc3RzLmh0bWwKaW5k
ZXggMjYyMWE0MGQ1OTEuLmUxMmMzMDlmYzdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtcmV0dXJuLXNwZWMtdGVzdHMuaHRtbApAQCAtMTExLDE3ICsxMTEsMTYgQEAgd2hsc2xU
ZXN0cy5yZXR1cm5JZiA9IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gMTE7
CiAgICAgICAgICAgICB9CiAgICAgICAgIGApOwotCi0gICAgcHJvZ3JhbSA9IGAKLSAgICAgICAg
aW50IGZvbyhpbnQgeCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHkgPSA2OwotICAgICAg
ICAgICAgaWYgKHggPT0gNykKLSAgICAgICAgICAgICAgICBpbnQgeSA9IDg7Ci0gICAgICAgICAg
ICByZXR1cm4geTsKLSAgICAgICAgfQotICAgIGA7Ci0gICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDcpXSksIDYpOworICAgIGF3
YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgeSA9IDY7CisgICAgICAgICAgICAgICAg
aWYgKHggPT0gNykKKyAgICAgICAgICAgICAgICAgICAgaW50IHkgPSA4OworICAgICAgICAgICAg
ICAgIHJldHVybiB5OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKIH07CiAKIHdobHNsVGVz
dHMucmV0dXJuUmVmZXJlbmNlVG9TYW1lUGFyYW1ldGVyID0gYXN5bmMgKCkgPT4gewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGViMWEzZjc1NmM0Li5mMDA2MmUxNzA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUz
IEBACisyMDE5LTA3LTE1ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisK
KyAgICAgICAgW1dITFNMXSBEZXN1Z2FyIGZvciBsb29wcyBhbmQgd2hpbGUgbG9vcHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTcyNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFr
ZXMgbG9vcHMgYmVoYXZlIGEgbG90IG1vcmUgc2ltaWxhcmx5IHRvIHRoZSBzcGVjLgorICAgICAg
ICBJbiBwYXJ0aWN1bGFyLCB3aGlsZSBsb29wcyBhcmUganVzdCBkZWdlbmVyYXRlIGZvciBsb29w
cywgc28gdGhleSBjYW4gYmUgZGVzdWdhcmVkIGluIHRoZSBwYXJzZXIuCisgICAgICAgIEFuZCBm
b3IgbG9vcHMgY2FuIHRoZW1zZWx2ZXMgYmUgaGVhdmlseSBkZXN1Z2FyZWQsIGludG8gaGF2aW5n
IG5vIGluaXRpYWxpemVyLCBvbmUgY29uZGl0aW9uIGFuZCBvbmUgaW5jcmVtZW50CisgICAgICAg
IGJ5IHB1dHRpbmcgYW55IGluaXRpYWxpemVyIGluIGEgYmxvY2sgYXJvdW5kIHRoZSBsb29wLCBw
dXR0aW5nIHRydWUgaW4gdGhlIGNvbmRpdGlvbiBpZiB0aGVyZSBpcyBub25lLCBhbmQgcHV0dGlu
ZyBhbnkgbGl0dGVyYWwgaW4gdGhlIGluY3JlbWVudCBpZiB0aGVyZSBpcyBub25lLgorCisgICAg
ICAgIERlYnVnZ2luZyB0aGlzIHBhdGNoIHJldmVhbGVkIGFuIHVucmVsYXRlZCBidWcgd2hlcmUg
dGhlIHBhcnNlciB3b3VsZCBnZW5lcmF0ZSBhbiBlbXB0eSBjb21tYSBleHByZXNzaW9uIG9uICI7
Iiwgd2hpY2ggdGhlIGNoZWNrZXIgd291bGQgdGhlbiBjaG9rZSBvbi4KKyAgICAgICAgVGhlIHBh
cnNlciBub3cgZ2VuZXJhdGVzIGFuIGVtcHR5IGJsb2NrIGluIHRoYXQgY2FzZSAoYXMgc3BlY2lm
aWVkIGluIHRoZSBzcGVjKSwgd2hpY2ggZml4ZXMgdGhlIHByb2JsZW0uCisKKyAgICAgICAgRmlu
YWxseSwgd2hpbGUgdXBkYXRpbmcgdGhlIE5hbWVSZXNvbHZlciBmb3IgdGhlIG5ldyBzdHJ1Y3R1
cmUgb2YgbG9vcHMgSSByZWFsaXplZCB0aGF0IGl0IHdhcyBuZWVkbGVzc2x5IGdlbmVyYXRpbmcg
ZXh0cmEgTmFtZUNvbnRleHQuCisgICAgICAgIFRoZXkgYXJlIG5vdCBleHBlY3RlZCBieSB0aGUg
c3BlYywgdGhhdCBmb3JiaWRzIG5ha2VkIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBvdXRzaWRlIG9m
IGJsb2NrcyBhbnl3YXkuCisgICAgICAgIFNvIEkgcmVtb3ZlZCB0aGlzIHVubmVjZXNzYXJ5IHdv
cmssIGFuZCBmaXhlZCB0aGUgcGFyc2VyIHRvIGNvcnJlY3RseSBmb3JiaWQgc3VjaCBuYWtlZCB2
YXJpYWJsZSBkZWNsYXJhdGlvbnMuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBU1QuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
b3JMb29wLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGb3JMb29wOjpGb3JMb29w
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZvckxvb3A6OmNvbmRpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGb3JMb29wOjppbmNyZW1lbnQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6U3RhdGVtZW50Ojppc1ZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xX
aGlsZUxvb3AuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkFTVER1bXBlcjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
QVNURHVtcGVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok5hbWVSZXNvbHZlcjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNl
cjo6cGFyc2VCbG9ja0JvZHkpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFy
c2VGb3JMb29wKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlV2hpbGVM
b29wKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlU3RhdGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsRXhwcmVzc2lv
bik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5j
cHA6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmg6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTA3LTE1ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVA
YXBwbGUuY29tPgogCiAgICAgICAgIHdpbmRvdy5vcGVuRGF0YWJhc2UgaXMgbm90IHdyaXRhYmxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xBU1QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFT
VC5oCmluZGV4IDU3OTRkNGVjZGI3Li4wZTQ0NjEyZGYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQVNULmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQVNULmgKQEAgLTEwMSw2ICsxMDEs
NSBAQAogI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJXSExTTFZhcmlh
YmxlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
b3JMb29wLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
b3JMb29wLmgKaW5kZXggZjQ1Yjk3NDdhMmYuLmZlNTkzNmM3ZDJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGb3JMb29wLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRm9yTG9vcC5oCkBA
IC00NCwzMyArNDQsMjggQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIEZvckxvb3AgOiBwdWJs
aWMgU3RhdGVtZW50IHsKIHB1YmxpYzoKLSAgICBGb3JMb29wKENvZGVMb2NhdGlvbiBsb2NhdGlv
biwgVmFyaWFudDxVbmlxdWVSZWY8U3RhdGVtZW50PiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+PiYm
IGluaXRpYWxpemF0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBjb25kaXRpb24s
IHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGluY3JlbWVudCwgVW5pcXVlUmVmPFN0YXRl
bWVudD4mJiBib2R5KQorICAgIEZvckxvb3AoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBVbmlxdWVS
ZWY8RXhwcmVzc2lvbj4mJiBjb25kaXRpb24sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGluY3Jl
bWVudCwgVW5pcXVlUmVmPFN0YXRlbWVudD4mJiBib2R5KQogICAgICAgICA6IFN0YXRlbWVudChs
b2NhdGlvbikKLSAgICAgICAgLCBtX2luaXRpYWxpemF0aW9uKFdURk1vdmUoaW5pdGlhbGl6YXRp
b24pKQogICAgICAgICAsIG1fY29uZGl0aW9uKFdURk1vdmUoY29uZGl0aW9uKSkKICAgICAgICAg
LCBtX2luY3JlbWVudChXVEZNb3ZlKGluY3JlbWVudCkpCiAgICAgICAgICwgbV9ib2R5KFdURk1v
dmUoYm9keSkpCiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgfkZvckxvb3AoKQotICAgIHsK
LSAgICB9CisgICAgdmlydHVhbCB+Rm9yTG9vcCgpID0gZGVmYXVsdDsKIAogICAgIEZvckxvb3Ao
Y29uc3QgRm9yTG9vcCYpID0gZGVsZXRlOwogICAgIEZvckxvb3AoRm9yTG9vcCYmKSA9IGRlZmF1
bHQ7CiAKICAgICBib29sIGlzRm9yTG9vcCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIFZhcmlhbnQ8VW5pcXVlUmVmPFN0YXRlbWVudD4sIFVuaXF1ZVJlZjxFeHByZXNz
aW9uPj4mIGluaXRpYWxpemF0aW9uKCkgeyByZXR1cm4gbV9pbml0aWFsaXphdGlvbjsgfQotICAg
IEV4cHJlc3Npb24qIGNvbmRpdGlvbigpIHsgcmV0dXJuIG1fY29uZGl0aW9uLmdldCgpOyB9Ci0g
ICAgRXhwcmVzc2lvbiogaW5jcmVtZW50KCkgeyByZXR1cm4gbV9pbmNyZW1lbnQuZ2V0KCk7IH0K
KyAgICBFeHByZXNzaW9uJiBjb25kaXRpb24oKSB7IHJldHVybiBtX2NvbmRpdGlvbjsgfQorICAg
IEV4cHJlc3Npb24mIGluY3JlbWVudCgpIHsgcmV0dXJuIG1faW5jcmVtZW50OyB9CiAgICAgU3Rh
dGVtZW50JiBib2R5KCkgeyByZXR1cm4gbV9ib2R5OyB9CiAKIHByaXZhdGU6Ci0gICAgVmFyaWFu
dDxVbmlxdWVSZWY8U3RhdGVtZW50PiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+PiBtX2luaXRpYWxp
emF0aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2NvbmRpdGlvbjsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9pbmNyZW1lbnQ7CisgICAgVW5pcXVlUmVm
PEV4cHJlc3Npb24+IG1fY29uZGl0aW9uOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2lu
Y3JlbWVudDsKICAgICBVbmlxdWVSZWY8U3RhdGVtZW50PiBtX2JvZHk7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRl
bWVudC5oCmluZGV4IDI3OGFkMmIyODlhLi5iYWQ5M2VkY2FkZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmgK
QEAgLTYyLDcgKzYyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1N3aXRjaFN0YXRl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVHJhcCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc1doaWxlTG9vcCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBDb2RlTG9j
YXRpb24gY29kZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlTG9jYXRpb247IH0KICAg
ICB2b2lkIHVwZGF0ZUNvZGVMb2NhdGlvbihDb2RlTG9jYXRpb24gbG9jYXRpb24pIHsgbV9jb2Rl
TG9jYXRpb24gPSBsb2NhdGlvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVMb29wLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xXaGlsZUxvb3AuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTVjMDM3NzdhNWIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFdoaWxlTG9vcC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KFdFQkdQVSkKLQotI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgV0hMU0wgewotCi1u
YW1lc3BhY2UgQVNUIHsKLQotY2xhc3MgV2hpbGVMb29wIDogcHVibGljIFN0YXRlbWVudCB7Ci1w
dWJsaWM6Ci0gICAgV2hpbGVMb29wKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+JiYgY29uZGl0aW9uYWwsIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+JiYgYm9keSkKLSAg
ICAgICAgOiBTdGF0ZW1lbnQobG9jYXRpb24pCi0gICAgICAgICwgbV9jb25kaXRpb25hbChXVEZN
b3ZlKGNvbmRpdGlvbmFsKSkKLSAgICAgICAgLCBtX2JvZHkoV1RGTW92ZShib2R5KSkKLSAgICB7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB+V2hpbGVMb29wKCkgPSBkZWZhdWx0OwotCi0gICAgV2hp
bGVMb29wKGNvbnN0IFdoaWxlTG9vcCYpID0gZGVsZXRlOwotICAgIFdoaWxlTG9vcChXaGlsZUxv
b3AmJikgPSBkZWZhdWx0OwotCi0gICAgYm9vbCBpc1doaWxlTG9vcCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIEV4cHJlc3Npb24mIGNvbmRpdGlvbmFsKCkgeyByZXR1
cm4gbV9jb25kaXRpb25hbDsgfQotICAgIFN0YXRlbWVudCYgYm9keSgpIHsgcmV0dXJuIG1fYm9k
eTsgfQotCi1wcml2YXRlOgotICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2NvbmRpdGlvbmFs
OwotICAgIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+IG1fYm9keTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEFTVAotCi19Ci0KLX0KLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9TVEFURU1FTlQo
V2hpbGVMb29wLCBpc1doaWxlTG9vcCgpKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlv
bldyaXRlci5jcHAKaW5kZXggMGI1OTgwZjYyMGEuLjM1MGMwOTcyMjRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3Jp
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMTI2LDcgKzEyNiw2IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQo
QVNUOjpUcmFwJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9v
cCYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpIG92ZXJy
aWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpIG92ZXJyaWRlOwpAQCAtMzQ4
LDI0ICszNDcsOSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpE
b1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCiAgICAgZW1pdExvb3AoTG9vcENvbmRpdGlvbkxvY2F0
aW9uOjpBZnRlckJvZHksICZkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpLCBudWxscHRyLCBkb1do
aWxlTG9vcC5ib2R5KCkpOwogfQogCi12b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKLXsKLSAgICBlbWl0TG9vcChMb29wQ29uZGl0
aW9uTG9jYXRpb246OkJlZm9yZUJvZHksICZ3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSwgbnVsbHB0
ciwgd2hpbGVMb29wLmJvZHkoKSk7Ci19Ci0KIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCiB7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgie1xuIik7Ci0KLSAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6
U3RhdGVtZW50JiBzdGF0ZW1lbnQpIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRl
bWVudCk7Ci0gICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9u
KSB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAgICAgICAgdGFr
ZUxhc3RWYWx1ZSgpOyAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJl
c3VsdC4KLSAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKLQotICAgIGVtaXRMb29w
KExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QmVmb3JlQm9keSwgZm9yTG9vcC5jb25kaXRpb24oKSwg
Zm9yTG9vcC5pbmNyZW1lbnQoKSwgZm9yTG9vcC5ib2R5KCkpOwotICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn1cbiIpOworICAgIGVtaXRMb29wKExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QmVm
b3JlQm9keSwgJmZvckxvb3AuY29uZGl0aW9uKCksICZmb3JMb29wLmluY3JlbWVudCgpLCBmb3JM
b29wLmJvZHkoKSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAppbmRleCA1Y2ZjOGUyOTgx
Ny4uMzYyYTg2MmFmN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5jcHAKQEAgLTM5MywxNCArMzkzLDYgQEAgdm9pZCBB
U1REdW1wZXI6OnZpc2l0KEFTVDo6Q29udGludWUmKQogICAgIG1fb3V0LnByaW50KCJjb250aW51
ZSIpOwogfQogCi12b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9v
cCkKLXsKLSAgICBtX291dC5wcmludCgid2hpbGUgKCIpOwotICAgIHZpc2l0KHdoaWxlTG9vcC5j
b25kaXRpb25hbCgpKTsKLSAgICBtX291dC5wcmludCgiKSIpOwotICAgIHZpc2l0KHdoaWxlTG9v
cC5ib2R5KCkpOwotfQotCiB2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYg
ZG9XaGlsZUxvb3ApCiB7CiAgICAgbV9vdXQucHJpbnQoImRvICIpOwpAQCAtNDEyLDE4ICs0MDQs
MTAgQEAgdm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29w
KQogCiB2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQogewotICAg
IG1fb3V0LnByaW50KCJmb3IgKCIpOwotICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oVW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50PiYgc3RhdGVtZW50KSB7Ci0gICAgICAgIHZpc2l0
KHN0YXRlbWVudCk7Ci0gICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHBy
ZXNzaW9uKSB7Ci0gICAgICAgIHZpc2l0KGV4cHJlc3Npb24pOwotICAgIH0pLCBmb3JMb29wLmlu
aXRpYWxpemF0aW9uKCkpOwotICAgIG1fb3V0LnByaW50KCI7ICIpOwotICAgIGlmIChmb3JMb29w
LmNvbmRpdGlvbigpKQotICAgICAgICB2aXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAg
bV9vdXQucHJpbnQoImZvciAoOyAiKTsKKyAgICB2aXNpdChmb3JMb29wLmNvbmRpdGlvbigpKTsK
ICAgICBtX291dC5wcmludCgiOyAiKTsKLSAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkKLSAg
ICAgICAgdmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOworICAgIHZpc2l0KGZvckxvb3AuaW5j
cmVtZW50KCkpOwogICAgIG1fb3V0LnByaW50KCIpICIpOwogICAgIHZpc2l0KGZvckxvb3AuYm9k
eSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQVNURHVtcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEFTVER1bXBlci5oCmluZGV4IDBhYjA5ZmY5OWM3Li5jYjNlMTEwYzBiNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5o
CkBAIC0xMDAsNyArMTAwLDYgQEAgcHVibGljOgogICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hT
dGF0ZW1lbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpIG92ZXJyaWRl
OwogICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmKSBvdmVycmlkZTsKICAgICB2
b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQg
dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlz
aXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKaW5kZXggMDY5OTdiZjBm
MjQuLjcyMWUwYmE3ZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTU3LDcgKzU3LDYgQEAKICNpbmNsdWRlICJX
SExTTFN3aXRjaFN0YXRlbWVudC5oIgogI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24u
aCIKICNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKLSNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmLmg+CkBAIC01MDEsNyArNTAwLDYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZp
c2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFT
VDo6SWZTdGF0ZW1lbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29w
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0
KEFTVDo6U3dpdGNoU3RhdGVtZW50Jikgb3ZlcnJpZGU7CkBAIC0xMjQ3LDEzICsxMjQ1LDYgQEAg
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKIH0KIAotdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQotewotICAgIGlmICgh
cmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZSh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Ci19
Ci0KIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCiB7
CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7CkBAIC0xMjYyLDE5
ICsxMjUzLDkgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxl
TG9vcCkKIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCiB7Ci0g
ICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpTdGF0ZW1l
bnQ+JiBzdGF0ZW1lbnQpIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRlbWVudCk7
Ci0gICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7Ci0g
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAgICB9KSwgZm9yTG9vcC5p
bml0aWFsaXphdGlvbigpKTsKLSAgICBpZiAoZXJyb3IoKSkKKyAgICBpZiAoIXJlY3Vyc2VBbmRS
ZXF1aXJlQm9vbFR5cGUoZm9yTG9vcC5jb25kaXRpb24oKSkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkgewotICAgICAgICBpZiAoIXJlY3Vyc2VBbmRSZXF1
aXJlQm9vbFR5cGUoKmZvckxvb3AuY29uZGl0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkKLSAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9y
TG9vcC5pbmNyZW1lbnQoKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgp
KTsKIH0KIApAQCAtMTQzNCw3ICsxNDE1LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlN3
aXRjaFN0YXRlbWVudCYgc3dpdGNoU3RhdGVtZW50KQogCiB2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCiB7Ci0gICAgQVNTRVJUKGNvbW1h
RXhwcmVzc2lvbi5saXN0KCkuc2l6ZSgpID4gMCk7CisgICAgQVNTRVJUKCFjb21tYUV4cHJlc3Np
b24ubGlzdCgpLmlzRW1wdHkoKSk7CiAgICAgVmlzaXRvcjo6dmlzaXQoY29tbWFFeHByZXNzaW9u
KTsKICAgICBpZiAoZXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmlu
ZGV4IDM2NjA0MzlmMjZhLi42OTkxZmIzZTdjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcApAQCAtNDMs
NyArNDMsNiBAQAogI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVu
Y2UuaCIKLSNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTEyMCw0OCArMTE5LDMzIEBAIHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6Oklm
U3RhdGVtZW50JiBpZlN0YXRlbWVudCkKICAgICBpZiAoZXJyb3IoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgewotICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4
dCk7Ci0gICAgICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIoKnRoaXMsIG5hbWVDb250
ZXh0KTsKLSAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRl
bWVudC5ib2R5KCkpOwotICAgIH0KKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQu
Ym9keSgpKTsKICAgICBpZiAoZXJyb3IoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGlm
U3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKLSAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQo
Jm1fbmFtZUNvbnRleHQpOwotICAgICAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVyKCp0
aGlzLCBuYW1lQ29udGV4dCk7Ci0gICAgICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5k
VmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOwotICAgIH0KKyAgICBpZiAoaWZTdGF0ZW1l
bnQuZWxzZUJvZHkoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCppZlN0YXRlbWVudC5l
bHNlQm9keSgpKTsKIH0KIAotdm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6V2hpbGVMb29w
JiB3aGlsZUxvb3ApCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYg
d2hpbGVMb29wKQogewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9u
YWwoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOwogICAgIGlm
IChlcnJvcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4
dCgmbV9uYW1lQ29udGV4dCk7Ci0gICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcigqdGhp
cywgbmFtZUNvbnRleHQpOwotICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQo
d2hpbGVMb29wLmJvZHkoKSk7Ci19Ci0KLXZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRv
V2hpbGVMb29wJiB3aGlsZUxvb3ApCi17Ci0gICAgewotICAgICAgICBOYW1lQ29udGV4dCBuYW1l
Q29udGV4dCgmbV9uYW1lQ29udGV4dCk7Ci0gICAgICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVz
b2x2ZXIoKnRoaXMsIG5hbWVDb250ZXh0KTsKLSAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNr
RXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKLSAgICB9Ci0KICAgICBjaGVja0Vycm9y
QW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwogfQogCiB2b2lkIE5hbWVSZXNvbHZl
cjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQogewotICAgIE5hbWVDb250ZXh0IG5hbWVD
b250ZXh0KCZtX25hbWVDb250ZXh0KTsKLSAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29sdmVy
KCp0aGlzLCBuYW1lQ29udGV4dCk7Ci0gICAgbmV3TmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0
KGZvckxvb3ApOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmNvbmRpdGlvbigpKTsK
KyAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChmb3JMb29wLmluY3JlbWVudCgpKTsKKyAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKIH0KIAogdm9pZCBO
YW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNs
YXJhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMTmFtZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVSZXNvbHZlci5oCmluZGV4IDNhY2RhZGY4ODQxLi4xNGNmYjY1NmI0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVz
b2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVSZXNvbHZlci5oCkBAIC01MCw3ICs1MCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChB
U1Q6OlR5cGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6QmxvY2sm
KSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNp
dChBU1Q6OkRvV2hpbGVMb29wJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxv
b3AmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYp
IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQYXJzZXIuY3BwCmluZGV4IDIwY2I5MzkxMDRhLi4yYmUxMjE3NTVmYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApA
QCAtMTA2Myw3ICsxMDYzLDggQEAgYXV0byBQYXJzZXI6OnBhcnNlQmxvY2tCb2R5KCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpCbG9jaywgRXJyb3I+CiAKICAgICBBU1Q6OlN0YXRlbWVudHMgc3RhdGVtZW50
czsKICAgICB3aGlsZSAoIXBlZWtUeXBlczxUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQs
IFRva2VuOjpUeXBlOjpDYXNlLCBUb2tlbjo6VHlwZTo6RGVmYXVsdD4oKSkgewotICAgICAgICBQ
QVJTRShzdGF0ZW1lbnQsIFN0YXRlbWVudCk7CisgICAgICAgIGJvb2wgYWxsb3dWYXJpYWJsZURl
Y2xhcmF0aW9ucyA9IHRydWU7CisgICAgICAgIFBBUlNFKHN0YXRlbWVudCwgU3RhdGVtZW50LCBh
bGxvd1ZhcmlhYmxlRGVjbGFyYXRpb25zKTsKICAgICAgICAgc3RhdGVtZW50cy5hcHBlbmQoV1RG
TW92ZSgqc3RhdGVtZW50KSk7CiAgICAgfQogCkBAIC0xMTQyLDUxICsxMTQzLDUyIEBAIGF1dG8g
UGFyc2VyOjpwYXJzZVN3aXRjaENhc2UoKSAtPiBFeHBlY3RlZDxBU1Q6OlN3aXRjaENhc2UsIEVy
cm9yPgogICAgIH0KIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlRm9yTG9vcCgpIC0+IEV4cGVjdGVk
PEFTVDo6Rm9yTG9vcCwgRXJyb3I+CithdXRvIFBhcnNlcjo6cGFyc2VGb3JMb29wKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpCbG9jaywgRXJyb3I+CiB7CiAgICAgQ09OU1VNRV9UWVBFKG9yaWdpbiwgRm9y
KTsKICAgICBDT05TVU1FX1RZUEUobGVmdFBhcmVudGhlc2lzLCBMZWZ0UGFyZW50aGVzaXMpOwog
Ci0gICAgYXV0byBwYXJzZVJlbWFpbmRlciA9IFsmXShWYXJpYW50PFVuaXF1ZVJlZjxBU1Q6OlN0
YXRlbWVudD4sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmIGluaXRpYWxpemF0aW9uKSAt
PiBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiB7Ci0gICAgICAgIENPTlNVTUVfVFlQRShz
ZW1pY29sb24sIFNlbWljb2xvbik7Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhw
cmVzc2lvbj4gY29uZGl0aW9uKG51bGxwdHIpOwotICAgICAgICBpZiAoIXRyeVR5cGUoVG9rZW46
OlR5cGU6OlNlbWljb2xvbikpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIGV4cHJlc3Npb24gPSBw
YXJzZUV4cHJlc3Npb24oKSkKLSAgICAgICAgICAgICAgICBjb25kaXRpb24gPSAoKmV4cHJlc3Np
b24pLm1vdmVUb1VuaXF1ZVB0cigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihleHByZXNzaW9uLmVycm9yKCkpOwotICAgICAgICAg
ICAgQ09OU1VNRV9UWVBFKHNlY29uZFNlbWljb2xvbiwgU2VtaWNvbG9uKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+IGluY3JlbWVudChudWxs
cHRyKTsKLSAgICAgICAgaWYgKCF0cnlUeXBlKFRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhlc2lz
KSkgewotICAgICAgICAgICAgaWYgKGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigp
KQotICAgICAgICAgICAgICAgIGluY3JlbWVudCA9ICgqZXhwcmVzc2lvbikubW92ZVRvVW5pcXVl
UHRyKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KGV4cHJlc3Npb24uZXJyb3IoKSk7Ci0gICAgICAgICAgICBDT05TVU1FX1RZUEUo
cmlnaHRQYXJlbnRoZXNpcywgUmlnaHRQYXJlbnRoZXNpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBQQVJTRShib2R5LCBTdGF0ZW1lbnQpOwotICAgICAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2Nh
dGlvbihvcmlnaW4tPmNvZGVMb2NhdGlvbiwgICgqYm9keSktPmNvZGVMb2NhdGlvbigpKTsKLSAg
ICAgICAgcmV0dXJuIEFTVDo6Rm9yTG9vcChsb2NhdGlvbiwgV1RGTW92ZShpbml0aWFsaXphdGlv
biksIFdURk1vdmUoY29uZGl0aW9uKSwgV1RGTW92ZShpbmNyZW1lbnQpLCBXVEZNb3ZlKCpib2R5
KSk7Ci0gICAgfTsKIAogICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbnMgPSBiYWNrdHJhY2tp
bmdTY29wZTxFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LCBFcnJv
cj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsK
ICAgICB9KTsKLSAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbnMpIHsKLSAgICAgICAgVW5pcXVl
UmVmPEFTVDo6U3RhdGVtZW50PiBkZWNsYXJhdGlvblN0YXRlbWVudCA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oV1RGTW92ZSgqdmFyaWFibGVEZWNs
YXJhdGlvbnMpKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlUmVtYWluZGVyKFdURk1vdmUoZGVjbGFy
YXRpb25TdGF0ZW1lbnQpKTsKKyAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+
PiBpbml0aWFsaXphdGlvbjsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbnMpCisgICAgICAg
IGluaXRpYWxpemF0aW9uID0gc3RhdGljX2Nhc3Q8VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50Pj4o
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihXVEZNb3Zl
KCp2YXJpYWJsZURlY2xhcmF0aW9ucykpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUEFSU0UoZWZm
ZWN0ZnVsRXhwcmVzc2lvbiwgRWZmZWN0ZnVsRXhwcmVzc2lvbik7CisgICAgICAgIGluaXRpYWxp
emF0aW9uID0gV1RGTW92ZSgqZWZmZWN0ZnVsRXhwcmVzc2lvbik7CiAgICAgfQogCi0gICAgUEFS
U0UoZWZmZWN0ZnVsRXhwcmVzc2lvbiwgRWZmZWN0ZnVsRXhwcmVzc2lvbik7CisgICAgQ09OU1VN
RV9UWVBFKHNlbWljb2xvbiwgU2VtaWNvbG9uKTsKKworICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PiBjb25kaXRpb247CisgICAgYXV0byBzZWNvbmRTZW1pY29sb24gPSB0
cnlUeXBlKFRva2VuOjpUeXBlOjpTZW1pY29sb24pOworICAgIGlmICghc2Vjb25kU2VtaWNvbG9u
KSB7CisgICAgICAgIFBBUlNFKGV4cHJlc3Npb24sIEV4cHJlc3Npb24pOworICAgICAgICBjb25k
aXRpb24gPSBXVEZNb3ZlKCpleHByZXNzaW9uKTsKKyAgICAgICAgQ09OU1VNRV9UWVBFKHNlY29u
ZFNlbWljb2xvbiwgU2VtaWNvbG9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY29uZGl0aW9uID0g
c3RhdGljX2Nhc3Q8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+KG1ha2VVbmlxdWVSZWY8QVNU
OjpCb29sZWFuTGl0ZXJhbD4oKnNlY29uZFNlbWljb2xvbiwgdHJ1ZSkpOworCisgICAgT3B0aW9u
YWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGluY3JlbWVudDsKKyAgICBhdXRvIHJpZ2h0
UGFyZW50aGVzaXMgPSB0cnlUeXBlKFRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhlc2lzKTsKKyAg
ICBpZiAoIXJpZ2h0UGFyZW50aGVzaXMpIHsKKyAgICAgICAgUEFSU0UoZXhwcmVzc2lvbiwgRXhw
cmVzc2lvbik7CisgICAgICAgIGluY3JlbWVudCA9IFdURk1vdmUoKmV4cHJlc3Npb24pOworICAg
ICAgICBDT05TVU1FX1RZUEUocmlnaHRQYXJlbnRoZXNpcywgUmlnaHRQYXJlbnRoZXNpcyk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGluY3JlbWVudCA9IHN0YXRpY19jYXN0PFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+PihtYWtlVW5pcXVlUmVmPEFTVDo6Qm9vbGVhbkxpdGVyYWw+KCpvcmlnaW4s
IHRydWUpKTsgLy8gRklYTUU6IE51bGxMaXRlcmFsIHdvdWxkIG1ha2UgbW9yZSBzZW5zZSwgYnV0
IGlzIGJ1Z2d5IHJpZ2h0IG5vdy4gQW55dGhpbmcgc2lkZS1lZmZlY3QgZnJlZSBpcyBmaW5lLgor
CisgICAgUEFSU0UoYm9keSwgU3RhdGVtZW50KTsKKyAgICBBU1Q6OkNvZGVMb2NhdGlvbiBsb2Nh
dGlvbihvcmlnaW4tPmNvZGVMb2NhdGlvbiwgICgqYm9keSktPmNvZGVMb2NhdGlvbigpKTsKIAot
ICAgIHJldHVybiBwYXJzZVJlbWFpbmRlcihXVEZNb3ZlKCplZmZlY3RmdWxFeHByZXNzaW9uKSk7
CisgICAgYXV0byBmb3JMb29wID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkZvckxvb3A+KGxvY2F0aW9u
LCBXVEZNb3ZlKCpjb25kaXRpb24pLCBXVEZNb3ZlKCppbmNyZW1lbnQpLCBXVEZNb3ZlKCpib2R5
KSk7CisgICAgQVNUOjpTdGF0ZW1lbnRzIHN0YXRlbWVudHMgPSBWZWN0b3I8VW5pcXVlUmVmPEFT
VDo6U3RhdGVtZW50Pj46OmZyb20oV1RGTW92ZSgqaW5pdGlhbGl6YXRpb24pLCBXVEZNb3ZlKGZv
ckxvb3ApKTsKKyAgICByZXR1cm4gQVNUOjpCbG9jayhsb2NhdGlvbiwgV1RGTW92ZShzdGF0ZW1l
bnRzKSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVdoaWxlTG9vcCgpIC0+IEV4cGVjdGVkPEFT
VDo6V2hpbGVMb29wLCBFcnJvcj4KK2F1dG8gUGFyc2VyOjpwYXJzZVdoaWxlTG9vcCgpIC0+IEV4
cGVjdGVkPEFTVDo6Rm9yTG9vcCwgRXJyb3I+CiB7CiAgICAgQ09OU1VNRV9UWVBFKG9yaWdpbiwg
V2hpbGUpOwogICAgIENPTlNVTUVfVFlQRShsZWZ0UGFyZW50aGVzaXMsIExlZnRQYXJlbnRoZXNp
cyk7CkBAIC0xMTk1LDcgKzExOTcsOCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VXaGlsZUxvb3AoKSAt
PiBFeHBlY3RlZDxBU1Q6OldoaWxlTG9vcCwgRXJyb3I+CiAgICAgUEFSU0UoYm9keSwgU3RhdGVt
ZW50KTsKIAogICAgIEFTVDo6Q29kZUxvY2F0aW9uIGxvY2F0aW9uKG9yaWdpbi0+Y29kZUxvY2F0
aW9uLCAgKCpib2R5KS0+Y29kZUxvY2F0aW9uKCkpOwotICAgIHJldHVybiBBU1Q6OldoaWxlTG9v
cChsb2NhdGlvbiwgV1RGTW92ZSgqY29uZGl0aW9uYWwpLCBXVEZNb3ZlKCpib2R5KSk7CisgICAg
YXV0byBpbmNyZW1lbnQgPSBtYWtlVW5pcXVlUmVmPEFTVDo6Qm9vbGVhbkxpdGVyYWw+KCpvcmln
aW4sIHRydWUpOyAvLyBGSVhNRTogTnVsbExpdGVyYWwgd291bGQgbWFrZSBtb3JlIHNlbnNlLCBi
dXQgaXMgYnVnZ3kgcmlnaHQgbm93LiBBbnl0aGluZyBzaWRlLWVmZmVjdCBmcmVlIGlzIGZpbmUu
CisgICAgcmV0dXJuIEFTVDo6Rm9yTG9vcChsb2NhdGlvbiwgV1RGTW92ZSgqY29uZGl0aW9uYWwp
LCBXVEZNb3ZlKGluY3JlbWVudCksIFdURk1vdmUoKmJvZHkpKTsKIH0KIAogYXV0byBQYXJzZXI6
OnBhcnNlRG9XaGlsZUxvb3AoKSAtPiBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJvcj4K
QEAgLTEyNTQsNyArMTI1Nyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAgcmV0dXJu
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoeyBvcmlnaW4tPnN0YXJ0T2Zmc2V0
KCksIGVuZE9mZnNldCB9LCBXVEZNb3ZlKHJlc3VsdCkpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFy
c2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJv
cj4KK2F1dG8gUGFyc2VyOjpwYXJzZVN0YXRlbWVudChib29sIGFsbG93VmFyaWFibGVEZWNsYXJh
dGlvbnMpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPgogewog
ICAgIFBFRUsodG9rZW4pOwogICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpIHsKQEAgLTEyNzIsMTEg
KzEyNzUsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8VW5p
cXVlUmVmPEFTVDo6U3RhdGVtZW50PiwgRXJyb3I+CiAgICAgfQogICAgIGNhc2UgVG9rZW46OlR5
cGU6OkZvcjogewogICAgICAgICBQQVJTRShmb3JMb29wLCBGb3JMb29wKTsKLSAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkZvckxvb3A+KFdURk1vdmUoKmZvckxvb3ApKSB9Owor
ICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6QmxvY2s+KFdURk1vdmUoKmZvckxv
b3ApKSB9OwogICAgIH0KICAgICBjYXNlIFRva2VuOjpUeXBlOjpXaGlsZTogewogICAgICAgICBQ
QVJTRSh3aGlsZUxvb3AsIFdoaWxlTG9vcCk7Ci0gICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVS
ZWY8QVNUOjpXaGlsZUxvb3A+KFdURk1vdmUoKndoaWxlTG9vcCkpIH07CisgICAgICAgIHJldHVy
biB7IG1ha2VVbmlxdWVSZWY8QVNUOjpGb3JMb29wPihXVEZNb3ZlKCp3aGlsZUxvb3ApKSB9Owog
ICAgIH0KICAgICBjYXNlIFRva2VuOjpUeXBlOjpEbzogewogICAgICAgICBQQVJTRShkb1doaWxl
TG9vcCwgRG9XaGlsZUxvb3ApOwpAQCAtMTM0NiwyNyArMTM0OSwzMyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBF
cnJvcj4KICAgICB9CiAKICAgICB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ZnVsRXhwcmVzc2lvbiA9
IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBF
cnJvcj4+KFsmXSgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJv
cj4geworICAgICAgICBhdXRvIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQgPSBiYWNrdHJh
Y2tpbmdTY29wZTxFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4+KFsm
XSgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPiB7CiAgICAg
ICAgICAgICBQQVJTRShyZXN1bHQsIEVmZmVjdGZ1bEV4cHJlc3Npb24pOwogICAgICAgICAgICAg
Q09OU1VNRV9UWVBFKHNlbWljb2xvbiwgU2VtaWNvbG9uKTsKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgIH0pOwotICAgICAgICBpZiAoZWZmZWN0ZnVsRXhwcmVzc2lvbikKLSAg
ICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9u
U3RhdGVtZW50PihXVEZNb3ZlKCplZmZlY3RmdWxFeHByZXNzaW9uKSkgfTsKKyAgICAgICAgaWYg
KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudDsKICAgICB9CiAKLSAgICBQQVJTRSh2YXJpYWJsZURlY2xh
cmF0aW9ucywgVmFyaWFibGVEZWNsYXJhdGlvbnMpOwotICAgIENPTlNVTUVfVFlQRShzZW1pY29s
b24sIFNlbWljb2xvbik7Ci0gICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50PihXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9ucykpIH07
CisgICAgaWYgKGFsbG93VmFyaWFibGVEZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgUEFSU0UodmFy
aWFibGVEZWNsYXJhdGlvbnMsIFZhcmlhYmxlRGVjbGFyYXRpb25zKTsKKyAgICAgICAgQ09OU1VN
RV9UWVBFKHNlbWljb2xvbiwgU2VtaWNvbG9uKTsKKyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihXVEZNb3ZlKCp2YXJpYWJs
ZURlY2xhcmF0aW9ucykpIH07CisgICAgfQorCisgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KCJBIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgYmxvY2siKTsK
IH0KIAotYXV0byBQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVk
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4KK2F1dG8gUGFyc2VyOjpwYXJzZUVm
ZmVjdGZ1bEV4cHJlc3Npb24oKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+
LCBFcnJvcj4KIHsKICAgICBQRUVLKG9yaWdpbik7Ci0gICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKLSAgICBpZiAob3JpZ2luLT50eXBlID09IFRva2Vu
OjpUeXBlOjpTZW1pY29sb24pCi0gICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpD
b21tYUV4cHJlc3Npb24+KCpvcmlnaW4sIFdURk1vdmUoZXhwcmVzc2lvbnMpKSB9OworICAgIGlm
IChvcmlnaW4tPnR5cGUgPT0gVG9rZW46OlR5cGU6OlNlbWljb2xvbikgeworICAgICAgICBBU1Q6
OlN0YXRlbWVudHMgc3RhdGVtZW50czsKKyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxB
U1Q6OkJsb2NrPigqb3JpZ2luLCBXVEZNb3ZlKHN0YXRlbWVudHMpKSB9OworICAgIH0KIAorICAg
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CiAgICAgUEFS
U0UoZWZmZWN0ZnVsRXhwcmVzc2lvbiwgRWZmZWN0ZnVsQXNzaWdubWVudCk7CiAgICAgZXhwcmVz
c2lvbnMuYXBwZW5kKFdURk1vdmUoKmVmZmVjdGZ1bEV4cHJlc3Npb24pKTsKIApAQCAtMTM3Niwx
MCArMTM4NSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFZmZlY3RmdWxFeHByZXNzaW9uKCkgLT4g
RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sCiAgICAgfQogCiAgICAgaWYgKGV4
cHJlc3Npb25zLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gV1RGTW92ZShleHByZXNzaW9u
c1swXSk7CisgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpFZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50PihXVEZNb3ZlKGV4cHJlc3Npb25zWzBdKSkgfTsKICAgICB1bnNpZ25l
ZCBlbmRPZmZzZXQgPSBtX2xleGVyLnBlZWsoKS5zdGFydE9mZnNldCgpOwogICAgIEFTVDo6Q29k
ZUxvY2F0aW9uIGxvY2F0aW9uKG9yaWdpbi0+c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KTsKLSAg
ICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Q29tbWFFeHByZXNzaW9uPihsb2NhdGlvbiwg
V1RGTW92ZShleHByZXNzaW9ucykpIH07CisgICAgYXV0byBleHByZXNzaW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4obG9jYXRpb24sIFdURk1vdmUoZXhwcmVzc2lvbnMp
KTsKKyAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0
YXRlbWVudD4oV1RGTW92ZShleHByZXNzaW9uKSkgfTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNl
RWZmZWN0ZnVsQXNzaWdubWVudCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+LCBFcnJvcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFBhcnNlci5oCmluZGV4IDQwMGNlNjZhOGMxLi45MDEwOTdkYzY4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCkBAIC05MSw3
ICs5MSw2IEBACiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVk
ZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgogI2luY2x1ZGUgIldITFNM
VmFyaWFibGVSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgogI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtMjAzLDE0ICsyMDIsMTQgQEAgcHJpdmF0ZToKICAgICBF
eHBlY3RlZDxBU1Q6OklmU3RhdGVtZW50LCBFcnJvcj4gcGFyc2VJZlN0YXRlbWVudCgpOwogICAg
IEV4cGVjdGVkPEFTVDo6U3dpdGNoU3RhdGVtZW50LCBFcnJvcj4gcGFyc2VTd2l0Y2hTdGF0ZW1l
bnQoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlN3aXRjaENhc2UsIEVycm9yPiBwYXJzZVN3aXRjaENh
c2UoKTsKLSAgICBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiBwYXJzZUZvckxvb3AoKTsK
LSAgICBFeHBlY3RlZDxBU1Q6OldoaWxlTG9vcCwgRXJyb3I+IHBhcnNlV2hpbGVMb29wKCk7Cisg
ICAgRXhwZWN0ZWQ8QVNUOjpCbG9jaywgRXJyb3I+IHBhcnNlRm9yTG9vcCgpOworICAgIEV4cGVj
dGVkPEFTVDo6Rm9yTG9vcCwgRXJyb3I+IHBhcnNlV2hpbGVMb29wKCk7CiAgICAgRXhwZWN0ZWQ8
QVNUOjpEb1doaWxlTG9vcCwgRXJyb3I+IHBhcnNlRG9XaGlsZUxvb3AoKTsKICAgICBFeHBlY3Rl
ZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b24oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYpOwogICAgIEV4cGVjdGVkPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b25zKCk7Ci0gICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50PiwgRXJyb3I+IHBh
cnNlU3RhdGVtZW50KCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50Piwg
RXJyb3I+IHBhcnNlU3RhdGVtZW50KGJvb2wgYWxsb3dWYXJpYWJsZURlY2xhcmF0aW9uID0gZmFs
c2UpOwogCi0gICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBw
YXJzZUVmZmVjdGZ1bEV4cHJlc3Npb24oKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpT
dGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VFZmZlY3RmdWxFeHByZXNzaW9uKCk7CiAgICAgRXhwZWN0
ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZUVmZmVjdGZ1bEFzc2ln
bm1lbnQoKTsKICAgICBzdHJ1Y3QgU3VmZml4RXhwcmVzc2lvbiB7CiAgICAgICAgIFN1ZmZpeEV4
cHJlc3Npb24oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiByZXN1bHQsIGJvb2wgc3VjY2Vz
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcAppbmRleCBiNGJjZDYx
ODljYi4uNDc0ZmM4MDM4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tl
ci5jcHAKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlICJXSExTTFRyYXAuaCIKICNpbmNsdWRl
ICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiV0hMU0xW
aXNpdG9yLmgiCi0jaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKICNpbmNsdWRlIDxjc3RkaW50
PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC0xMDksOSArMTA4LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29w
JiBmb3JMb29wKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgLy8gVGhlIGluaXRpYWxpemF0aW9u
IGFsd2F5cyBoYXMgYSBiZWhhdmlvciBvZiBOb3RoaW5nLCB3aGljaCB3ZSBhbHJlYWR5IGFkZCB1
bmNvbmRpdGlvbmFsbHkgYmVsb3csCi0gICAgICAgIC8vIHNvIHdlIGNhbiBqdXN0IGlnbm9yZSB0
aGUgaW5pdGlhbGl6YXRpb24uCi0KICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3Au
Ym9keSgpKTsKICAgICAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0x
MjIsMTggKzExOCw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fc3RhY2suYXBwZW5kKGIpOwogICAg
IH0KIAotICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKLSAg
ICAgICAgaWYgKGVycm9yKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8gYiA9
IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgYi5yZW1vdmUoQmVoYXZpb3I6OkJyZWFrKTsK
LSAgICAgICAgYi5yZW1vdmUoQmVoYXZpb3I6OkNvbnRpbnVlKTsKLSAgICAgICAgYi5hZGQoQmVo
YXZpb3I6Ok5vdGhpbmcpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZChiKTsKLSAgICB9Ci0KICAg
ICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN3aXRjaENhc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKaW5kZXggYmYxMmU2
MzlkMjUuLjM3MmU2NjExMWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKQEAgLTMzMSwxMCArMzMxLDEwIEBAIHZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkKICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsK
ICAgICBlbHNlIGlmIChpczxBU1Q6OlRyYXA+KHN0YXRlbWVudCkpCiAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlRyYXA+KHN0YXRlbWVudCkpOwotICAgIGVsc2UgaWYg
KGlzPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50PihzdGF0ZW1lbnQpKTsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgIGVsc2UK
LSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6V2hpbGVMb29wPihzdGF0
ZW1lbnQpKTsKKyAgICB9CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpCcmVhayYpCkBA
IC00MjcsMTUgKzQyNyw4IEBAIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYp
CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQogewotICAgIFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50PiYg
c3RhdGVtZW50KSB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0ZW1lbnQpOwotICAg
IH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgewotICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbik7Ci0gICAgfSksIGZvckxvb3AuaW5pdGlh
bGl6YXRpb24oKSk7Ci0gICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpCi0gICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7Ci0gICAgaWYgKGZvckxvb3AuaW5j
cmVtZW50KCkpCi0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQo
KSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuY29uZGl0aW9uKCkpOworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmluY3JlbWVudCgpKTsKICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZm9yTG9vcC5ib2R5KCkpOwogfQogCkBAIC00NzcsMTIgKzQ3MCw2IEBAIHZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xh
cmF0aW9uLmdldCgpKTsKIH0KIAotdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYg
d2hpbGVMb29wKQotewotICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9u
YWwoKSk7Ci0gICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOwotfQotCiB2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNs
YXJhdGlvbikKIHsKICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCmluZGV4
IGVjMzk2ZmRmNTRhLi5hM2ZhMjQ3YmYxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKQEAgLTg1LDcgKzg1LDYgQEAgY2xhc3Mg
U3dpdGNoQ2FzZTsKIGNsYXNzIFN3aXRjaFN0YXRlbWVudDsKIGNsYXNzIFRyYXA7CiBjbGFzcyBW
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudDsKLWNsYXNzIFdoaWxlTG9vcDsKIGNsYXNzIFZh
cmlhYmxlRGVjbGFyYXRpb247CiBjbGFzcyBBc3NpZ25tZW50RXhwcmVzc2lvbjsKIGNsYXNzIENh
bGxFeHByZXNzaW9uOwpAQCAtMTY2LDcgKzE2NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpUcmFwJik7CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3Am
KTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJik7CiAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mKTsKICAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJiYzgwOWFjMTMw
Li4zNTVmZGJmY2NmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTMzMDQsNyArMTMzMDQsNiBAQAogCQlDMjFCRjcwMTIxQ0Q4
OUM0MDAyMjc5NzkgLyogV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzIxQkY3MDIyMUNEODlDNDAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzAzMjFDRDg5QzUwMDIyNzk3OSAv
KiBXSExTTFJldHVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJldHVybi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlDMjFCRjcwNDIxQ0Q4OUM2MDAyMjc5NzkgLyogV0hMU0xXaGls
ZUxvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xXaGlsZUxvb3AuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MDUyMUNEODlDNzAwMjI3OTc5IC8qIFdITFNMRnVuY3Rpb25B
dHRyaWJ1dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcwNjIxQ0Q4OUM3MDAyMjc5NzkgLyogV0hM
U0xDb21tYUV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDb21tYUV4cHJlc3Npb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MDcyMUNEODlDODAwMjI3OTc5
IC8qIFdITFNMTnVsbExpdGVyYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOdWxsTGl0ZXJhbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxOTYsNyArMTcxOTUsNiBAQAogCQkJ
CUMyMUJGNzEwMjFDRDg5RDAwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCAq
LywKIAkJCQlDMjFCRjcxNDIxQ0Q4OUQzMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudC5oICovLAogCQkJCUMyMUJGNzEzMjFDRDg5RDIwMDIyNzk3OSAvKiBXSExT
TFZhcmlhYmxlUmVmZXJlbmNlLmggKi8sCi0JCQkJQzIxQkY3MDQyMUNEODlDNjAwMjI3OTc5IC8q
IFdITFNMV2hpbGVMb29wLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IEFTVDsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>