<?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>171537</bug_id>
          
          <creation_ts>2017-05-01 23:05:28 -0700</creation_ts>
          <short_desc>WebAssembly: running out of executable memory should throw OoM</short_desc>
          <delta_ts>2017-06-27 23:47:26 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159775</blocked>
    
    <blocked>173908</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1303593</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-05-01 23:05:28 -0700</bug_when>
    <thetext>We&apos;ll OoO when some parts of compile fails, it would be nice if X memory fail were in that category too. This is unique to wasm because we compile some code up-front and cannot function in the llint if X memory is unavailable, whereas JS does this incrementally and can fall back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322565</commentid>
    <comment_count>1</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-06-23 23:01:25 -0700</bug_when>
    <thetext>*** Bug 171454 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322566</commentid>
    <comment_count>2</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-06-23 23:01:59 -0700</bug_when>
    <thetext>While we&apos;re here, if We try to tier up a function but don&apos;t have X memory available for it then it should just stay at O1. Slow is better than dead. That&apos;s what we do for JS (stay in llint).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322567</commentid>
    <comment_count>3</comment_count>
      <attachid>313772</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-06-23 23:12:01 -0700</bug_when>
    <thetext>Created attachment 313772
patch

I&apos;m wondering if this is worth testing, and how. I&apos;m open to suggestions!

I&apos;ve been running a huge program with: JSC_webAssemblyBBQOptimizationLevel=1 JSC_useConcurrentGC=0 JSC_useConcurrentJIT=0 JSC_jitMemoryReservationSize=5000 to hit its import limit, and then higher for BBQ functions. Maybe I should force llint by disabling DFG and FTL? Also, I&apos;d like to make sure we don&apos;t leak code that&apos;s associated with the Module and which was compiled before the failure! Not all the failure points are tested, because that&apos;s kind of dynamic (wasm-&gt;wasm entry points are tricky to hit). Tiering is also tricky to hit OoM with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322568</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-23 23:12:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/32963338&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322621</commentid>
    <comment_count>5</comment_count>
      <attachid>313772</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-06-24 10:31:36 -0700</bug_when>
    <thetext>Comment on attachment 313772
patch

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

&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:299
&gt; -    if (m_state == State::Compiled) {
&gt; +    if (!failed() &amp;&amp; m_state == State::Compiled) {

Why not just return early if already failed?  The only possible reason for not returning early is if you want to move the state to State::Complete.  However, this disagrees with the allocation failure cases below where you return early without setting the state to State::Complete.  So, which is behaving wrongly here?

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp:65
&gt; +                m_errorMessage = &quot;Out of executable memory&quot;;

Use ASCIILiteral here:
    m_errorMessage = ASCIILiteral(&quot;Out of executable memory&quot;);

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.h:101
&gt; +    bool runnable() { return !m_errorMessage; }

nit: I suggest:
    bool runnable() const { ...

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.h:109
&gt; +        CString cString = m_errorMessage.ascii();
&gt; +        return String(cString.data());

Why marshal thru CString?  Why not just return m_errorMessage?

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:116
&gt;          m_codeBlock.set(vm, this, codeBlock);
&gt; +        if (UNLIKELY(!codeBlock-&gt;runnable())) {

Why do this check after setting m_codeBlock?  Why not do it before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322640</commentid>
    <comment_count>6</comment_count>
      <attachid>313772</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-24 15:57:33 -0700</bug_when>
    <thetext>Comment on attachment 313772
patch

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

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp:63
&gt; +            switch (binding.error()) {

Nit: I’m a fan of adding default: ASSERT_NOT_REACHED

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.h:105
&gt; +    String errorMessage()

This comment is wrong. This is a JSCell. No races to worry about

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:116
&gt;&gt; +        if (UNLIKELY(!codeBlock-&gt;runnable())) {
&gt; 
&gt; Why do this check after setting m_codeBlock?  Why not do it before?

+1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322644</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-24 16:59:04 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #3)
&gt; Created attachment 313772 [details]
&gt; patch
&gt; 
&gt; I&apos;m wondering if this is worth testing, and how. I&apos;m open to suggestions!
Testing ARM64 shouldn’t be that hard. I’d just craft an artificial function that’s close to 1 MB in size. Compile in a loop and keep array of them to keep them all alive. 
&gt; 
&gt; I&apos;ve been running a huge program with: JSC_webAssemblyBBQOptimizationLevel=1
&gt; JSC_useConcurrentGC=0 JSC_useConcurrentJIT=0
&gt; JSC_jitMemoryReservationSize=5000 to hit its import limit, and then higher
&gt; for BBQ functions. Maybe I should force llint by disabling DFG and FTL?
&gt; Also, I&apos;d like to make sure we don&apos;t leak code that&apos;s associated with the
&gt; Module and which was compiled before the failure! Not all the failure points
&gt; are tested, because that&apos;s kind of dynamic (wasm-&gt;wasm entry points are
&gt; tricky to hit). Tiering is also tricky to hit OoM with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322645</commentid>
    <comment_count>8</comment_count>
      <attachid>313772</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-24 17:01:28 -0700</bug_when>
    <thetext>Comment on attachment 313772
patch

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

&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:93
&gt; +        Base::fail(holdLock(m_lock), makeString(&quot;Out of executable memory while tiering up function at index &quot;, String::number(m_functionIndex)));

What will happen once we fail here? Will we shut down the compilation and never try again? I think this would be pretty easy to test on ARM64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322646</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-24 17:02:36 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #8)
&gt; Comment on attachment 313772 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=313772&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:93
&gt; &gt; +        Base::fail(holdLock(m_lock), makeString(&quot;Out of executable memory while tiering up function at index &quot;, String::number(m_functionIndex)));
&gt; 
&gt; What will happen once we fail here? Will we shut down the compilation and
&gt; never try again? I think this would be pretty easy to test on ARM64

Actually, there is an option to set the executable allocator pool size. You could probably write a test using that on x86 too. You just need to make sure that option actually does what it’s supposed to</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323324</commentid>
    <comment_count>10</comment_count>
      <attachid>313960</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-06-27 16:56:03 -0700</bug_when>
    <thetext>Created attachment 313960
patch

(In reply to Mark Lam from comment #5)
&gt; Comment on attachment 313772 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=313772&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:299
&gt; &gt; -    if (m_state == State::Compiled) {
&gt; &gt; +    if (!failed() &amp;&amp; m_state == State::Compiled) {
&gt; 
&gt; Why not just return early if already failed?  The only possible reason for
&gt; not returning early is if you want to move the state to State::Complete. 
&gt; However, this disagrees with the allocation failure cases below where you
&gt; return early without setting the state to State::Complete.  So, which is
&gt; behaving wrongly here?

Because I also want to run completion tasks, as done below, which can call back into this function.


(In reply to Saam Barati from comment #6)
&gt; Comment on attachment 313772 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=313772&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp:63
&gt; &gt; +            switch (binding.error()) {
&gt; 
&gt; Nit: I’m a fan of adding default: ASSERT_NOT_REACHED

That&apos;s a bad idea because right now it&apos;s a compile error if one of the cases isn&apos;t covered. With default it because a runtime assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323344</commentid>
    <comment_count>11</comment_count>
      <attachid>313772</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-27 17:40:55 -0700</bug_when>
    <thetext>Comment on attachment 313772
patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp:63
&gt;&gt;&gt; +            switch (binding.error()) {
&gt;&gt; 
&gt;&gt; Nit: I’m a fan of adding default: ASSERT_NOT_REACHED
&gt; 
&gt; That&apos;s a bad idea because right now it&apos;s a compile error if one of the cases isn&apos;t covered. With default it because a runtime assert.

My preferred trick is to return at the end of the case rather than just breaking and then we can ASSERT_NOT_REACHED after the switch. That way we get both a compile error if a case isn’t covered and a runtime assert if an invalid value somehow gets into the enumeration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323355</commentid>
    <comment_count>12</comment_count>
      <attachid>313772</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-27 17:59:11 -0700</bug_when>
    <thetext>Comment on attachment 313772
patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp:63
&gt;&gt;&gt;&gt; +            switch (binding.error()) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Nit: I’m a fan of adding default: ASSERT_NOT_REACHED
&gt;&gt; 
&gt;&gt; That&apos;s a bad idea because right now it&apos;s a compile error if one of the cases isn&apos;t covered. With default it because a runtime assert.
&gt; 
&gt; My preferred trick is to return at the end of the case rather than just breaking and then we can ASSERT_NOT_REACHED after the switch. That way we get both a compile error if a case isn’t covered and a runtime assert if an invalid value somehow gets into the enumeration.

This makes sense JF, I wasn&apos;t thinking about the compilation error. I&apos;m also a fan of Darin&apos;s suggestion, and it&apos;d be trivial to apply to this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323359</commentid>
    <comment_count>13</comment_count>
      <attachid>313960</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-27 18:05:42 -0700</bug_when>
    <thetext>Comment on attachment 313960
patch

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

r=me

&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:320
&gt; +    return exec-&gt;vm().canUseJIT() &amp;&amp; Options::useBaselineJIT();

nice

&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:179
&gt; +        if (UNLIKELY(!binding)) {

Do your tests trigger this?

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:310
&gt; +        LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, JITCompilationCanFail);
&gt; +        if (UNLIKELY(linkBuffer.didFailToAllocate()))
&gt; +            return makeUnexpected(BindingFailure::OutOfMemory);

Do your tests stress this?

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:606
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, JITCompilationCanFail);
&gt; +    if (UNLIKELY(patchBuffer.didFailToAllocate()))

ditto

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:664
&gt; +    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, JITCompilationCanFail);
&gt; +    if (UNLIKELY(patchBuffer.didFailToAllocate()))
&gt; +        return makeUnexpected(BindingFailure::OutOfMemory);
&gt; +

ditto

&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:95
&gt; +    LinkBuffer linkBuffer(*context.wasmEntrypointJIT, nullptr, JITCompilationCanFail);
&gt; +    if (UNLIKELY(linkBuffer.didFailToAllocate())) {
&gt; +        Base::fail(holdLock(m_lock), makeString(&quot;Out of executable memory while tiering up function at index &quot;, String::number(m_functionIndex)));
&gt; +        return;
&gt; +    }

Do any of your tests trigger this?

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyCodeBlock.cpp:62
&gt; +        if (UNLIKELY(!binding)) {

Do your tests trigger this?

&gt; Tools/Scripts/run-jsc-stress-tests:1261
&gt; +    run(&quot;default-wasm&quot;, &quot;--useConcurrentGC=0&quot; , &quot;--useConcurrentJIT=0&quot;, &quot;--jitMemoryReservationSize=15000&quot;, &quot;--useBaselineJIT=0&quot;, &quot;--useDFGJIT=0&quot;, &quot;--useFTLJIT=0&quot;, &quot;-m&quot;)

I see a potential bug where we don&apos;t honor this option. It won&apos;t matter in this case since your region is smaller than what&apos;s used, but since you&apos;re relying on this option, you might as well fix it. There is a direct use of fixedExecutableMemoryPoolSize instead of asking the allocator its reservation size. Look in JITStubRoutine.h. It should be trivial to fix just by loading it from the allocator instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323441</commentid>
    <comment_count>14</comment_count>
      <attachid>313995</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-06-27 23:02:58 -0700</bug_when>
    <thetext>Created attachment 313995
patch

Address all comments.


On tests: yes, I believe I probabilistically hit all the checks. What I mean is that I disable all non-wasm JITting to raise the probability that wasm will hit a limit, then I remove concurrent things so it&apos;s still more likely. I then create functions of random size so that even if I hit one limit on one run it&apos;ll maybe hit another limit on another run (say, if our codegen changes). I skew the &quot;imports&quot; and &quot;exports&quot; test so they have more of those compared to regular wasm code. Finally, the execution test tries to cause tier up as well.

You can see this by running the tests with verbose = true in each file, and JSC_logExecutableAllocation=1 on the command-line.

Non-obvious, but locally it seems to do what I want!


On the potential bug: Saam and I chatted on IRC and he submitted https://bugs.webkit.org/show_bug.cgi?id=173906 to handle the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323443</commentid>
    <comment_count>15</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-06-27 23:04:50 -0700</bug_when>
    <thetext>&gt; On tests: yes, I believe I probabilistically hit all the checks. What I mean
&gt; is that I disable all non-wasm JITting to raise the probability that wasm
&gt; will hit a limit, then I remove concurrent things so it&apos;s still more likely.
&gt; I then create functions of random size so that even if I hit one limit on
&gt; one run it&apos;ll maybe hit another limit on another run (say, if our codegen
&gt; changes). I skew the &quot;imports&quot; and &quot;exports&quot; test so they have more of those
&gt; compared to regular wasm code. Finally, the execution test tries to cause
&gt; tier up as well.
&gt; 
&gt; You can see this by running the tests with verbose = true in each file, and
&gt; JSC_logExecutableAllocation=1 on the command-line.
&gt; 
&gt; Non-obvious, but locally it seems to do what I want!

Clarifying &quot;probability&quot;: by that I mean that I loop until *something* hits the executable limit. What that thing is I don&apos;t check as long as it&apos;s the right kind of WebAssembly exception. I can&apos;t check because I don&apos;t know for a fact that the current codegen will *ever* hit that limit! But with the randomness I throw in it&apos;s likely to hit the limits we want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323445</commentid>
    <comment_count>16</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-27 23:08:58 -0700</bug_when>
    <thetext>My only question is: have you verified locally all paths are hit at some point? It’s ok if this is tied to a particular platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323453</commentid>
    <comment_count>17</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-06-27 23:41:38 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #16)
&gt; My only question is: have you verified locally all paths are hit at some
&gt; point? It’s ok if this is tied to a particular platform.

I believe I have, yes. My answer was trying to illustrate how the tests are written to stay relatively current even if some of our implementation changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323454</commentid>
    <comment_count>18</comment_count>
      <attachid>313995</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-27 23:42:16 -0700</bug_when>
    <thetext>Comment on attachment 313995
patch

Clearing flags on attachment: 313995

Committed r218868: &lt;http://trac.webkit.org/changeset/218868&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323455</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-27 23:42:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313772</attachid>
            <date>2017-06-23 23:12:01 -0700</date>
            <delta_ts>2017-06-27 16:56:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-running-out-of-executable-memory-should-.patch</filename>
            <type>text/plain</type>
            <size>15323</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAwMjI4ZWI3NmU4YzdhNTU1ZGRjZWY5ZjZkMzdjZjZkZjhjNDY2YjdmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBGcmksIDIzIEp1biAyMDE3IDIzOjA3OjIyIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IHJ1bm5pbmcgb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHNob3VsZCB0aHJvdwogT29N
CgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
IHwgMzIgKysrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uY3BwICAgICAgICAgfCAyNiArKysrKysrKysrKysrKystLS0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcCAgICAgICAgIHwgMjQgKysrKysrKysr
KysrLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaCAgICAgICAg
ICAgfCAgOSArKysrLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cCAgICAgICAgIHwgIDcgKysrKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2su
Y3BwICAgICAgICAgICAgIHwgMTAgKysrKysrLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9jay5oICAgICAgICAgICAgICAgfCAxNSArKysrKysrKysrCiAuLi4vd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuY3BwICAgICAgICAgICAgICB8ICA0ICsrKwogOCBmaWxlcyBjaGFu
Z2VkLCAxMTMgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKaW5kZXggNWY5ZjhkZS4uNmI5M2I0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTctMDYtMjMgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBydW5uaW5nIG91dCBvZiBleGVjdXRhYmxlIG1l
bW9yeSBzaG91bGQgdGhyb3cgT29NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzE1MzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBCb3RoIG9uIGZpcnN0IGNvbXBpbGUgd2l0aCBCQlEgYXMgd2VsbCBhcyBv
biB0aWVyLXVwIHdpdGggT01HLAorICAgICAgICBydW5uaW5nIG91dCBvZiBYIG1lbW9yeSBzaG91
bGRuJ3QgY2F1c2UgdGhlIGVudGlyZSBwcm9ncmFtIHRvCisgICAgICAgIHRlcm1pbmF0ZS4gQW4g
ZXhjZXB0aW9uIHdpbGwgZG8gd2hlbiBjb21waWxpbmcgaW5pdGlhbCBjb2RlIChzaW5jZQorICAg
ICAgICB3ZSBkb24ndCBoYXZlIGFueSBvdGhlciBmYWxsYmFjayBhdCB0aGUgbW9tZW50KSwgYW5k
IHJlZnVzYWwgdG8KKyAgICAgICAgdGllciB1cCB3aWxsIGRvIGFzIHdlbGwgKGl0J2xsIGp1c3Qg
YmUgc2xvd2VyKS4KKworICAgICAgICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHByb2dyYW1zIHdo
aWNoIGdlbmVyYXRlIGh1Z2UgYW1vdW50cyBvZgorICAgICAgICBjb2RlIHNpbXBseSBsb29rIGxp
a2UgY3Jhc2hlcywgd2hpY2ggZGV2ZWxvcGVycyByZXBvcnQgdG8KKyAgICAgICAgdXMuIEdldHRp
bmcgYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpbnN0ZWFkIGlzIG11Y2ggY2xlYXJlci4KKworICAg
ICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFu
OjpwcmVwYXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGxldGUpOgorICAg
ICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9K
cyk6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAgICAqIHdhc20vV2Fz
bUJpbmRpbmcuaDoKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNX
ZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3JlYXRpb24pOgor
CiAyMDE3LTA2LTIyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAg
IFZhbHVlUmVwKERvdWJsZVJlcChAdikpIGNhbiBub3Qgc2ltcGx5IGNvbnZlcnQgdG8gQHYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBiM2IzMTk4Li4w
Njc1ZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBA
IC0xNzUsNyArMTc1LDE1IEBAIHZvaWQgQkJRUGxhbjo6cHJlcGFyZSgpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgdW5zaWduZWQgaW1wb3J0RnVuY3Rpb25JbmRleCA9IG1fd2FzbVRv
V2FzbUV4aXRTdHVicy5zaXplKCk7CiAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9j
ZXNzaW5nIGltcG9ydCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjog
IiwgbWFrZVN0cmluZyhpbXBvcnQtPm1vZHVsZSksICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0LT5m
aWVsZCkpOwotICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKHdh
c21Ub1dhc20oaW1wb3J0RnVuY3Rpb25JbmRleCkpOworICAgICAgICBhdXRvIGJpbmRpbmcgPSB3
YXNtVG9XYXNtKGltcG9ydEZ1bmN0aW9uSW5kZXgpOworICAgICAgICBpZiAoVU5MSUtFTFkoIWJp
bmRpbmcpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJpbmRpbmcuZXJyb3IoKSkgeworICAgICAg
ICAgICAgY2FzZSBCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICAgICAg
ZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1v
cnkgYXQgaW1wb3J0ICIsIFN0cmluZzo6bnVtYmVyKGltcG9ydEluZGV4KSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fd2FzbVRvV2Fz
bUV4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQoYmluZGluZy52YWx1ZSgpKTsKICAgICB9CiAKICAg
ICBjb25zdCB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50ID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwpAQCAtMjg4LDE5ICsyOTYsMjkgQEAgdm9pZCBCQlFQ
bGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgIEFTU0VSVCht
X3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBtX2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpKTsKICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgQ29tcGxldGlvbiIpOwogCi0gICAgaWYgKG1fc3RhdGUg
PT0gU3RhdGU6OkNvbXBpbGVkKSB7CisgICAgaWYgKCFmYWlsZWQoKSAmJiBtX3N0YXRlID09IFN0
YXRlOjpDb21waWxlZCkgewogICAgICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAw
OyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbklu
QmluYXJ5LnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAgICAgICAgICBDb21waWxhdGlv
bkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07
CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5m
b3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhd
OwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigq
Y29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5r
QnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2U6
OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVu
Y3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
ICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5lbnRyeXBvaW50LmNv
bXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICAg
ICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rp
b25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpLAogICAgICAgICAgICAgICAg
ICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChhdXRvIGpzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9
IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkpIHsKLSAgICAg
ICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklU
LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRl
eHQuanNFbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJP
dXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAi
LCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAganNUb1dhc21JbnRl
cm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxC
Mzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5j
dGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29u
dGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5jcHAKaW5kZXggNGViZjU4MS4uZDk2NTIyNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMg
dm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChKSVQmIGppdCwgdW5zaWduZWQgaW1wb3J0SW5k
ZXgsIEdQUlJlZyByZXN1bAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkp
LCByZXN1bHQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0qIHZtLCBC
YWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSnMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYg
Y2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGlt
cG9ydEluZGV4KQogewogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcHJvcGVy
bHkgYWJzdHJhY3QgYXdheSB0aGUgY2FsbGluZyBjb252ZW50aW9uLgogICAgIC8vIEl0J2QgYmUg
c3VwZXIgZWFzeSB0byBkbyBzbzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2OTQwMQpAQCAtMTE4LDcgKzExOCwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2Fz
bVRvSnMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dQog
ICAgICAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAg
ICAgICB9OwogCi0gICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQpOworICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CisKICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7CiAgICAgICAgICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0
IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKICAgICAgICAg
fQpAQCAtMzAyLDcgKzMwNSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0q
IHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dQogICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgaml0LnJldCgpOwogCi0gICAgICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6
Ok91dE9mTWVtb3J5KTsKKwogICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMp
OwogICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2FsbCwgZG9VbndpbmRpbmcpOwog
CkBAIC01OTYsNyArNjAyLDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTSog
dm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1CiAgICAgICAgIH0p
OwogICAgIH0KIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0Zh
aWx1cmU6Ok91dE9mTWVtb3J5KTsKKwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1
bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxv
Y2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdl
dFRvQ2hlY2spKTsKQEAgLTYwNiw3ICs2MTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2Fz
bVRvSnMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dQog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZh
U2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub1dhc20o
dW5zaWduZWQgaW1wb3J0SW5kZXgpCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJp
bmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogewogICAgIGNv
bnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCk7CiAgICAgSklUIGppdDsKQEAgLTY0OSw3ICs2NTgsMTAgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgaml0LmxvYWRQdHIo
c2NyYXRjaCwgc2NyYXRjaCk7CiAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CiAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwor
ICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CisK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+V2Vi
QXNzZW1ibHkgaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5oCmluZGV4IDllMjlhMzMuLjRlMjYyYmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuaApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM4
LDggKzM5LDEyIEBAIGNsYXNzIENhbGxMaW5rSW5mbzsKIAogbmFtZXNwYWNlIFdhc20gewogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCk7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0qLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2Fs
bExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKK2VudW0g
Y2xhc3MgQmluZGluZ0ZhaWx1cmUgeworICAgIE91dE9mTWVtb3J5LAorfTsKKworRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25l
ZCBpbXBvcnRJbmRleCk7CitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdG
YWlsdXJlPiB3YXNtVG9KcyhWTSosIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBT
aWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAK
aW5kZXggNmZkOWYwNy4uZjQyZDNmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcApAQCAtODgsNyArODgsMTIgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBp
bGF0aW9uRWZmb3J0KQogICAgIH0KIAogICAgIEVudHJ5cG9pbnQgb21nRW50cnlwb2ludDsKLSAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxw
dHIpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJ
VCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAoVU5MSUtFTFkobGlu
a0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgeworICAgICAgICBCYXNlOjpmYWlsKGhvbGRM
b2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0
aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25J
bmRleCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG9tZ0VudHJ5cG9pbnQuY29t
cGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgIEZJ
TkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVz
IiwgbV9mdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4
dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKaW5kZXggYjcyMWUw
ZS4uNTg2MDYzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKQEAgLTU4LDcgKzU4LDE1IEBAIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZtLCBSZWY8V2FzbTo6
Q29kZUJsb2NrPiYmIGNvCiAgICAgbV93YXNtVG9KU0V4aXRTdHVicy5yZXNlcnZlQ2FwYWNpdHko
bV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
bXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0
Q291bnQoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5hdChpbXBvcnRJbmRleCk7Ci0gICAgICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMudW5j
aGVja2VkQXBwZW5kKFdhc206Ondhc21Ub0pzKCZ2bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1
cmVJbmRleCwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgYXV0byBiaW5kaW5nID0gV2FzbTo6d2Fz
bVRvSnMoJnZtLCBtX2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRJbmRleCk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghYmluZGluZykpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
YmluZGluZy5lcnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIFdhc206OkJpbmRpbmdGYWlsdXJl
OjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJPdXQgb2Yg
ZXhlY3V0YWJsZSBtZW1vcnkiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKGJp
bmRpbmcudmFsdWUoKSk7CiAgICAgICAgIGltcG9ydFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCkg
PSBtX3dhc21Ub0pTRXhpdFN0dWJzW2ltcG9ydEluZGV4XS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKaW5kZXggY2U3Yjk5NS4uYjFkMTBmYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaApAQCAtNzQsMTUgKzc0LDE4IEBAIHB1YmxpYzoKIAogICAgIFdhc206OkNhbGxlZSYg
anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAg
IHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIH0KICAgICBXYXNtOjpXYXNtRW50cnlwb2lu
dExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKKyAgICAgICAgQVNTRVJU
KHJ1bm5hYmxlKCkpOwogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwog
ICAgIH0KIAogICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21Ub0pzQ2Fs
bFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0SW5kZXgpCiAgICAgeworICAgICAgICBBU1NF
UlQocnVubmFibGUoKSk7CiAgICAgICAgIHJldHVybiAmaW1wb3J0V2FzbVRvSlNTdHViKGltcG9y
dEluZGV4KTsKICAgICB9CiAKQEAgLTk1LDYgKzk4LDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Y2xlYXJKU0NhbGxJQ3MoVk0mKTsKIAorICAgIGJvb2wgcnVubmFibGUoKSB7IHJldHVybiAhbV9l
cnJvck1lc3NhZ2U7IH0KKworICAgIC8vIE5vdGUsIHdlIGRvIHRoaXMgY29weSB0byBlbnN1cmUg
aXQncyB0aHJlYWQgc2FmZSB0byBoYXZlIHRoaXMKKyAgICAvLyBjYWxsZWQgZnJvbSBtdWx0aXBs
ZSB0aHJlYWRzIHNpbXVsdGFuZW91c2x5LgorICAgIFN0cmluZyBlcnJvck1lc3NhZ2UoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFydW5uYWJsZSgpKTsKKyAgICAgICAgQ1N0cmluZyBjU3RyaW5n
ID0gbV9lcnJvck1lc3NhZ2UuYXNjaWkoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhjU3RyaW5n
LmRhdGEoKSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2so
Vk0mLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
biYpOwogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CkBAIC0xMjYsNiArMTQwLDcgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub0pTRXhpdFN0dWJz
OwogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyOwog
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKKyAgICBTdHJpbmcgbV9lcnJv
ck1lc3NhZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IDM1
YTViM2MuLjAyMTQyN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMTEzLDYgKzExMywxMCBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgUmVmPFdhc206OgogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvZGVCbG9jayA9IEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgd2FzbUNvZGVCbG9jay5jb3B5UmVmKCks
IG1fbW9kdWxlLmdldCgpKTsKICAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2Rl
QmxvY2spOworICAgICAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jay0+cnVubmFibGUoKSkpIHsK
KyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5TGlu
a0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxpbmtF
cnJvclN0cnVjdHVyZSgpLCBjb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgbW9kdWxlKCktPnNldENvZGVCbG9jayh2bSwg
bWVtb3J5TW9kZSgpLCBjb2RlQmxvY2spOwogICAgIH0KIAotLSAKMi4xMC4xCgo=
</data>
<flag name="commit-queue"
          id="334674"
          type_id="3"
          status="-"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313960</attachid>
            <date>2017-06-27 16:56:03 -0700</date>
            <delta_ts>2017-06-27 23:02:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-running-out-of-executable-memory-should-.patch</filename>
            <type>text/plain</type>
            <size>32777</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA0OWNkYjFlMzEwYzM4NzEyNWIxOTIxOTdmMDI4OWNlM2IzMDU0YzNkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDI3IEp1biAyMDE3IDE2OjU0OjMzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IHJ1bm5pbmcgb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHNob3VsZCB0aHJvdwogT29N
CgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDI2ICsrKysrCiBKU1Rlc3RzL3dhc20ueWFtbCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMiArCiAuLi4vbG93RXhlY3V0YWJsZU1lbW9yeS9leGVjdXRhYmxlLW1lbW9y
eS1vb20uanMgICB8IDExNCArKysrKysrKysrKysrKysrKysrCiBKU1Rlc3RzL3dhc20vbG93RXhl
Y3V0YWJsZU1lbW9yeS9leHBvcnRzLW9vbS5qcyAgICB8IDEwNyArKysrKysrKysrKysrKysrKysK
IEpTVGVzdHMvd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5L2ltcG9ydHMtb29tLmpzICAgIHwgMTI0
ICsrKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgfCAgMzYgKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwICAgICB8ICAgMyArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCAgICAgICAgIHwgIDI2ICsrKystCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgICAgICAgICB8ICAyNCArKystCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oICAgICAgICAgICB8ICAgOSArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwICAgICAgICAgfCAgIDcg
Ky0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwICAgICAgICAgICAgIHwg
IDExICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggICAgICAgICAgICAg
ICB8ICAxMiArKwogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCAgICAgICAg
ICAgICAgfCAgIDQgKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMTAgKysKIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgICAg
ICAgICAgICAgICAgIHwgIDIxICsrKy0KIDE3IGZpbGVzIGNoYW5nZWQsIDUxNyBpbnNlcnRpb25z
KCspLCAyMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vbG93
RXhlY3V0YWJsZU1lbW9yeS9leGVjdXRhYmxlLW1lbW9yeS1vb20uanMKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBKU1Rlc3RzL3dhc20vbG93RXhlY3V0YWJsZU1lbW9yeS9leHBvcnRzLW9vbS5qcwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IEpTVGVzdHMvd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5L2ltcG9ydHMt
b29tLmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwppbmRleCBlYmZlNWYzLi43MmQ0MjMxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZwor
KysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA2LTI3ICBKRiBC
YXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogcnVu
bmluZyBvdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgc2hvdWxkIHRocm93IE9vTQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNTM3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8zMjk2MzMzOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHdhc20ueWFtbDoKKyAgICAgICAgKiB3YXNtL2xvd0V4ZWN1dGFi
bGVNZW1vcnkvZXhlY3V0YWJsZS1tZW1vcnktb29tLmpzOiBBZGRlZC4KKyAgICAgICAgKGZhaWxD
b3VudC4wLmNhdGNoKToKKyAgICAgICAgKGZhaWxDb3VudC4wLm1vZHVsZS51bmRlZmluZWQuY2F0
Y2gpOgorICAgICAgICAqIHdhc20vbG93RXhlY3V0YWJsZU1lbW9yeS9leHBvcnRzLW9vbS5qczog
QWRkZWQuCisgICAgICAgIChjb25zdC50eXBlKToKKyAgICAgICAgKGNvbnN0LnBhcmFtcyk6Cisg
ICAgICAgIChjb25zdC5yYW5kb21Qcm9ncmFtKToKKyAgICAgICAgKGZhaWxDb3VudC4wLmNhdGNo
KToKKyAgICAgICAgKGZhaWxDb3VudC4wLm1vZHVsZS51bmRlZmluZWQuY2F0Y2gpOgorICAgICAg
ICAqIHdhc20vbG93RXhlY3V0YWJsZU1lbW9yeS9pbXBvcnRzLW9vbS5qczogQWRkZWQuCisgICAg
ICAgIChjb25zdC50eXBlKToKKyAgICAgICAgKGNvbnN0LnBhcmFtcyk6CisgICAgICAgIChjb25z
dC5yYW5kb21Qcm9ncmFtKToKKyAgICAgICAgKGYuaW1wb3J0cy5wdXNoKToKKyAgICAgICAgKGZh
aWxDb3VudC4wLmNhdGNoKToKKyAgICAgICAgKGZhaWxDb3VudC4wLm1vZHVsZS51bmRlZmluZWQu
Y2F0Y2gpOgorCiAyMDE3LTA2LTIyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgog
CiAgICAgICAgIFZhbHVlUmVwKERvdWJsZVJlcChAdikpIGNhbiBub3Qgc2ltcGx5IGNvbnZlcnQg
dG8gQHYKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS55YW1sIGIvSlNUZXN0cy93YXNtLnlhbWwK
aW5kZXggZDIyZDliMy4uZjVhM2EwNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtLnlhbWwKKysr
IGIvSlNUZXN0cy93YXNtLnlhbWwKQEAgLTMzLDYgKzMzLDggQEAKICAgY21kOiBydW5XZWJBc3Nl
bWJseSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRoOiB3YXNtL3N0cmVzcwogICBjbWQ6
IHJ1bldlYkFzc2VtYmx5IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCistIHBhdGg6IHdhc20vbG93
RXhlY3V0YWJsZU1lbW9yeQorICBjbWQ6IHJ1bldlYkFzc2VtYmx5TG93RXhlY3V0YWJsZU1lbW9y
eSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogCiAtIHBhdGg6IHdhc20vc3BlYy10ZXN0cy9hZGRy
ZXNzLndhc3QuanMKICAgY21kOiBydW5XZWJBc3NlbWJseVNwZWNUZXN0IDpub3JtYWwKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5L2V4ZWN1dGFibGUtbWVtb3J5
LW9vbS5qcyBiL0pTVGVzdHMvd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5L2V4ZWN1dGFibGUtbWVt
b3J5LW9vbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI4NGQyCi0t
LSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2xvd0V4ZWN1dGFibGVNZW1vcnkvZXhlY3V0
YWJsZS1tZW1vcnktb29tLmpzCkBAIC0wLDAgKzEsMTE0IEBACitpbXBvcnQgKiBhcyBhc3NlcnQg
ZnJvbSAnLi4vYXNzZXJ0LmpzJworaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycK
KworY29uc3QgdmVyYm9zZSA9IGZhbHNlOworY29uc3QgbWF4SW5zdHJ1Y3Rpb25Db3VudCA9IDUw
MDsKK2NvbnN0IGluc3RhbmNlc1RvdGFsID0gODsKK2NvbnN0IGludm9jYXRpb25zVG90YWwgPSA4
OworCisvLyBUaGlzIHRlc3Qgc3RhcnRzIHJ1bm5pbmcgd2l0aCBhIGZldyBieXRlcyBvZiBleGVj
dXRhYmxlIG1lbW9yeSBhdmFpbGFibGUuIFRyeQorLy8gdG8gY3JlYXRlIGFuZCBpbnN0YW50aWF0
ZSBhIG1vZHVsZSB3aGljaCB3aWxsIGZhaWwgdG8gZml0LgorCitjb25zdCByYW5kb21Qcm9ncmFt
ID0gaW5zdHJ1Y3Rpb25Db3VudCA9PiB7CisgICAgbGV0IGIgPSBuZXcgQnVpbGRlcigpCisgICAg
ICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImJhciIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiZjMyIiB9KQorICAgICAgICAgICAg
ICAgIC5GMzJDb25zdCgyLjApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIiwgeyBwYXJhbXM6IFsiZjMyIiwg
ImYzMiJdLCByZXQ6ICJmMzIiIH0pCisgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKTsKKworICAg
IC8vIEluc2VydCBhIGJ1bmNoIG9mIGRlcGVuZGVudCBpbnN0cnVjdGlvbnMgaW4gYSBzaW5nbGUg
YmFzaWMgYmxvY2sgc28gdGhhdAorICAgIC8vIG91ciBjb21waWxlciB3b24ndCBiZSBhYmxlIHRv
IHN0cmVuZ3RoLXJlZHVjZS4KKyAgICBjb25zdCBhY3Rpb25zID0gWworICAgICAgICBiID0+IGIu
R2V0TG9jYWwoMCkuRjMyU3ViKCksCisgICAgICAgIGIgPT4gYi5HZXRMb2NhbCgxKS5GMzJTdWIo
KSwKKyAgICAgICAgYiA9PiBiLkdldExvY2FsKDApLkYzMkFkZCgpLAorICAgICAgICBiID0+IGIu
R2V0TG9jYWwoMSkuRjMyQWRkKCksCisgICAgICAgIGIgPT4gYi5HZXRMb2NhbCgwKS5GMzJNdWwo
KSwKKyAgICAgICAgYiA9PiBiLkdldExvY2FsKDEpLkYzMk11bCgpLAorICAgIF07CisKKyAgICB3
aGlsZSAoLS1pbnN0cnVjdGlvbkNvdW50KQorICAgICAgICBiID0gYWN0aW9uc1soTWF0aC5yYW5k
b20oKSAqIGFjdGlvbnMubGVuZ3RoKSB8IDBdKGIpOworCisgICAgYiA9IGIuUmV0dXJuKCkuRW5k
KCkuRW5kKCk7CisKKyAgICByZXR1cm4gYi5XZWJBc3NlbWJseSgpLmdldCgpOworfQorCitsZXQg
ZmFpbENvdW50ID0gMDsKK2xldCBjYWxsQ291bnQgPSAwOworbGV0IGluc3RhbmNlcyA9IFtdOwor
Citjb25zdCBpbnZva2UgPSBpbnN0YW5jZSA9PiB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IHByaW50KGBJbnZva2luZ2ApOworICAgIGFzc2VydC5lcShpbnN0YW5jZS5leHBvcnRzWyJmb28i
XSgpLCAyLjApOworICAgIGNvbnN0IHJlc3VsdCA9IGluc3RhbmNlLmV4cG9ydHNbImJhciJdKDIu
MCwgNi4wKTsKKyAgICArK2NhbGxDb3VudDsKKyAgICByZXR1cm4gcmVzdWx0OworfTsKKword2hp
bGUgKGZhaWxDb3VudCA9PT0gMCkgeworICAgIGNvbnN0IGluc3RydWN0aW9uQ291bnQgPSAoTWF0
aC5yYW5kb20oKSAqIG1heEluc3RydWN0aW9uQ291bnQgKyAxKSB8IDA7CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgcHJpbnQoYFRyeWluZyBtb2R1bGUgd2l0aCAke2luc3RydWN0aW9uQ291
bnR9IGluc3RydWN0aW9ucy5gKTsKKworICAgIGNvbnN0IGJ1ZiA9IHJhbmRvbVByb2dyYW0oaW5z
dHJ1Y3Rpb25Db3VudCk7CisgICAgbGV0IG1vZHVsZTsKKworICAgIHRyeSB7CisgICAgICAgIG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVmKTsKKyAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgIGlmIChlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yKSB7CisgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBwcmludChgQ2F1Z2h0OiAke2V9
YCk7CisgICAgICAgICAgICArK2ZhaWxDb3VudDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgV2ViQXNzZW1ibHkuQ29tcGls
ZUVycm9yLCBnb3QgJHtlfWApOworICAgIH0KKworICAgIGlmIChtb2R1bGUgIT09IHVuZGVmaW5l
ZCkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIHByaW50KGBDcmVhdGluZyBp
bnN0YW5jZWApOworCisgICAgICAgIGxldCBpbnN0YW5jZTsKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSk7CisgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgV2ViQXNzZW1i
bHkuTGlua0Vycm9yKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIHByaW50KGBDYXVnaHQ6ICR7ZX1gKTsKKyAgICAgICAgICAgICAgICArK2ZhaWxD
b3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLCBnb3QgJHtl
fWApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluc3RhbmNlICE9PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICAgIGluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTsKKyAgICAgICAgICAgIGludm9r
ZShpbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lmIChjYWxsQ291bnQgPT09IDAp
CisgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0byBiZSBhYmxlIHRvIGFsbG9jYXRlIGEg
V2ViQXNzZW1ibHkgbW9kdWxlLCBpbnN0YW50aWF0ZSBpdCwgYW5kIGNhbGwgaXRzIGV4cG9ydHMg
YXQgbGVhc3Qgb25jZWApOworCisvLyBNYWtlIHN1cmUgd2UgY2FuIHN0aWxsIGNhbGwgYWxsIHRo
ZSBpbnN0YW5jZXMgd2UgY3JlYXRlLCBldmVuIGFmdGVyIGdvaW5nIE9PTS4KKworaWYgKHZlcmJv
c2UpCisgICAgcHJpbnQoYEludm9raW5nIGFsbCBwcmV2aW91c2x5IGNyZWF0ZWQgaW5zdGFuY2Vz
YCk7CisKK2ZvciAobGV0IGluc3RhbmNlIG9mIGluc3RhbmNlcykKKyAgICBpbnZva2UoaW5zdGFu
Y2UpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2xvd0V4ZWN1dGFibGVNZW1vcnkvZXhwb3J0
cy1vb20uanMgYi9KU1Rlc3RzL3dhc20vbG93RXhlY3V0YWJsZU1lbW9yeS9leHBvcnRzLW9vbS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzMyNzBhCi0tLSAvZGV2L251
bGwKKysrIGIvSlNUZXN0cy93YXNtL2xvd0V4ZWN1dGFibGVNZW1vcnkvZXhwb3J0cy1vb20uanMK
QEAgLTAsMCArMSwxMDcgQEAKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMn
CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworCitjb25zdCB2ZXJib3NlID0g
ZmFsc2U7Citjb25zdCBudW1GdW5jdGlvbnMgPSAyOworY29uc3QgbWF4UGFyYW1zID0gMTI4Owor
CisvLyBUaGlzIHRlc3Qgc3RhcnRzIHJ1bm5pbmcgd2l0aCBhIGZldyBieXRlcyBvZiBleGVjdXRh
YmxlIG1lbW9yeSBhdmFpbGFibGUuIFRyeQorLy8gdG8gY3JlYXRlIGFuZCBpbnN0YW50aWF0ZSBt
b2R1bGVzIHdoaWNoIGhhdmUgd2F5IG1vcmUgZXhwb3J0cyB0aGFuIGFueXRoaW5nCisvLyBlbHNl
LiBIb3BlZnVsbHkgdGhleSdsbCBmYWlsIHdoZW4gdHJ5aW5nIHRvIGluc3RhbnRpYXRlIHRoZWly
IGVudHJ5cG9pbnRzLgorCitjb25zdCB0eXBlID0gKCkgPT4geworICAgIGNvbnN0IHR5cGVzID0g
WyJpMzIiLCAiZjMyIiwgImY2NCJdOyAvLyBDYW4ndCBleHBvcnQgaTY0LgorICAgIHJldHVybiB0
eXBlc1soTWF0aC5yYW5kb20oKSAqIHR5cGVzLmxlbmd0aCkgfCAwXTsKK307CisKK2NvbnN0IHBh
cmFtcyA9ICgpID0+IHsKKyAgICBsZXQgcCA9IFtdOworICAgIGxldCBjb3VudCA9IChNYXRoLnJh
bmRvbSgpICogbWF4UGFyYW1zKSB8IDA7CisgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgIHAu
cHVzaCh0eXBlKCkpOworICAgIHJldHVybiBwOworfTsKKworY29uc3QgcmFuZG9tUHJvZ3JhbSA9
ICgpID0+IHsKKyAgICBsZXQgYiA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQo
KQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCk7CisgICAgZm9y
IChsZXQgZiA9IDA7IGYgPCBudW1GdW5jdGlvbnM7ICsrZikKKyAgICAgICAgYiA9IGIuRnVuY3Rp
b24oYGYke2Z9YCk7CisgICAgYiA9IGIuRW5kKCkuQ29kZSgpOworICAgIGZvciAobGV0IGYgPSAw
OyBmIDwgbnVtRnVuY3Rpb25zOyArK2YpCisgICAgICAgIGIgPSBiLkZ1bmN0aW9uKGBmJHtmfWAs
IHsgcGFyYW1zOiBwYXJhbXMoKSB9KS5SZXR1cm4oKS5FbmQoKTsKKyAgICBiID0gYi5FbmQoKTsK
KyAgICByZXR1cm4gYi5XZWJBc3NlbWJseSgpLmdldCgpOworfQorCitsZXQgZmFpbENvdW50ID0g
MDsKK2xldCBjYWxsQ291bnQgPSAwOworbGV0IGluc3RhbmNlcyA9IFtdOworCitjb25zdCBpbnZv
a2UgPSBpbnN0YW5jZSA9PiB7CisgICAgbGV0IHJlc3VsdCA9IDA7CisgICAgZm9yIChsZXQgZiA9
IDA7IGYgPCBudW1GdW5jdGlvbnM7ICsrZikgeworICAgICAgICBjb25zdCBuYW1lID0gYGYke2Z9
YDsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBwcmludChgSW52b2tpbmcgJHtu
YW1lfWApOworICAgICAgICByZXN1bHQgKz0gaW5zdGFuY2UuZXhwb3J0c1tuYW1lXSgpOworICAg
ICAgICArK2NhbGxDb3VudDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK307CisKK3doaWxl
IChmYWlsQ291bnQgPT09IDApIHsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYFRy
eWluZy4uLmApOworCisgICAgY29uc3QgYnVmID0gcmFuZG9tUHJvZ3JhbSgpOworICAgIGxldCBt
b2R1bGU7CisKKyAgICB0cnkgeworICAgICAgICBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1Zik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFdl
YkFzc2VtYmx5LkNvbXBpbGVFcnJvcikgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgcHJpbnQoYENhdWdodDogJHtlfWApOworICAgICAgICAgICAgKytmYWlsQ291
bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGBFeHBlY3RlZCBhIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwgZ290ICR7ZX1gKTsKKyAgICB9
CisKKyAgICBpZiAobW9kdWxlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBwcmludChgQ3JlYXRpbmcgaW5zdGFuY2VgKTsKKworICAgICAgICBsZXQg
aW5zdGFuY2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBXZWJB
c3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICBpZiAoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkxpbmtFcnJvcikgeworICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBwcmludChgQ2F1Z2h0OiAk
e2V9YCk7CisgICAgICAgICAgICAgICAgKytmYWlsQ291bnQ7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBh
IFdlYkFzc2VtYmx5LkxpbmtFcnJvciwgZ290ICR7ZX1gKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpbnN0YW5jZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpbnN0YW5jZXMucHVz
aChpbnN0YW5jZSk7CisgICAgICAgICAgICBpbnZva2UoaW5zdGFuY2UpOworICAgICAgICB9Cisg
ICAgfQorfQorCitpZiAoY2FsbENvdW50ID09PSAwKQorICAgIHRocm93IG5ldyBFcnJvcihgRXhw
ZWN0ZWQgdG8gYmUgYWJsZSB0byBhbGxvY2F0ZSBhIFdlYkFzc2VtYmx5IG1vZHVsZSwgaW5zdGFu
dGlhdGUgaXQsIGFuZCBjYWxsIGl0cyBleHBvcnRzIGF0IGxlYXN0IG9uY2VgKTsKKworLy8gTWFr
ZSBzdXJlIHdlIGNhbiBzdGlsbCBjYWxsIGFsbCB0aGUgaW5zdGFuY2VzIHdlIGNyZWF0ZSwgZXZl
biBhZnRlciBnb2luZyBPT00uCisKK2lmICh2ZXJib3NlKQorICAgIHByaW50KGBJbnZva2luZyBh
bGwgcHJldmlvdXNseSBjcmVhdGVkIGluc3RhbmNlc2ApOworCitmb3IgKGxldCBpbnN0YW5jZSBv
ZiBpbnN0YW5jZXMpCisgICAgaW52b2tlKGluc3RhbmNlKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
d2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5L2ltcG9ydHMtb29tLmpzIGIvSlNUZXN0cy93YXNtL2xv
d0V4ZWN1dGFibGVNZW1vcnkvaW1wb3J0cy1vb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNDRjZDk3MwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9sb3dF
eGVjdXRhYmxlTWVtb3J5L2ltcG9ydHMtb29tLmpzCkBAIC0wLDAgKzEsMTI0IEBACitpbXBvcnQg
KiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4v
QnVpbGRlci5qcycKKworY29uc3QgdmVyYm9zZSA9IGZhbHNlOworY29uc3QgbnVtRnVuY3Rpb25z
ID0gMjsKK2NvbnN0IG1heFBhcmFtcyA9IDMyOworCisvLyBUaGlzIHRlc3Qgc3RhcnRzIHJ1bm5p
bmcgd2l0aCBhIGZldyBieXRlcyBvZiBleGVjdXRhYmxlIG1lbW9yeSBhdmFpbGFibGUuIFRyeQor
Ly8gdG8gY3JlYXRlIGFuZCBpbnN0YW50aWF0ZSBtb2R1bGVzIHdoaWNoIGhhdmUgd2F5IG1vcmUg
aW1wb3J0cyB0aGFuIGFueXRoaW5nCisvLyBlbHNlLiBIb3BlZnVsbHkgdGhleSdsbCBmYWlsIHdo
ZW4gdHJ5aW5nIHRvIGluc3RhbnRpYXRlIHRoZWlyIGVudHJ5cG9pbnRzLgorCitjb25zdCB0eXBl
ID0gKCkgPT4geworICAgIGNvbnN0IHR5cGVzID0gWyJpMzIiLCAiZjMyIiwgImY2NCJdOworICAg
IHJldHVybiB0eXBlc1soTWF0aC5yYW5kb20oKSAqIHR5cGVzLmxlbmd0aCkgfCAwXTsKK307CisK
K2NvbnN0IHBhcmFtcyA9ICgpID0+IHsKKyAgICBsZXQgcCA9IFtdOworICAgIGxldCBjb3VudCA9
IChNYXRoLnJhbmRvbSgpICogbWF4UGFyYW1zKSB8IDA7CisgICAgd2hpbGUgKGNvdW50LS0pCisg
ICAgICAgIHAucHVzaCh0eXBlKCkpOworICAgIHJldHVybiBwOworfTsKKworY29uc3QgcmFuZG9t
UHJvZ3JhbSA9ICgpID0+IHsKKyAgICBsZXQgYiA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5
cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCk7CisgICAgY29uc3QgcHMgPSBwYXJhbXMoKTsK
KyAgICBmb3IgKGxldCBmID0gMDsgZiA8IG51bUZ1bmN0aW9uczsgKytmKQorICAgICAgICBiID0g
Yi5GdW5jdGlvbigiaW1wIiwgYCR7Zn1gLCB7IHBhcmFtczogcHMgfSk7CisgICAgYiA9IGIuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpOworICAgIGZv
ciAobGV0IGYgPSAwOyBmIDwgbnVtRnVuY3Rpb25zOyArK2YpCisgICAgICAgIGIgPSBiLkZ1bmN0
aW9uKGBjYWxsJHtmfWApOworICAgIGIgPSBiLkVuZCgpCisgICAgICAgIC5Db2RlKCk7CisgICAg
Zm9yIChsZXQgZiA9IDA7IGYgPCBudW1GdW5jdGlvbnM7ICsrZikgeworICAgICAgICBiID0gYi5G
dW5jdGlvbihgY2FsbCR7Zn1gLCB7IHBhcmFtczogcHMgfSk7CisgICAgICAgIGZvciAobGV0IHAg
PSAwOyBwIDwgcHMubGVuZ3RoOyArK3ApCisgICAgICAgICAgICBiID0gYi5HZXRMb2NhbChwKTsK
KyAgICAgICAgYiA9IGIuQ2FsbChmKS5FbmQoKTsKKyAgICB9CisgICAgYiA9IGIuRW5kKCk7Cisg
ICAgcmV0dXJuIGIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKK30KKworbGV0IGZhaWxDb3VudCA9IDA7
CitsZXQgY2FsbENvdW50ID0gMDsKK2xldCBpbnN0YW5jZXMgPSBbXTsKKworbGV0IGltcG9ydHMg
PSBbXTsKK2ZvciAobGV0IGYgPSAwOyBmIDwgbnVtRnVuY3Rpb25zOyArK2YpCisgICAgaW1wb3J0
cy5wdXNoKCguLi5hcmdzKSA9PiB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
cHJpbnQoYEludm9rZWQgJHtmfSB3aXRoOiAke2FyZ3N9YCk7CisgICAgICAgICsrY2FsbENvdW50
OworICAgIH0pOworCitjb25zdCBpbnZva2UgPSBpbnN0YW5jZSA9PiB7CisgICAgbGV0IHJlc3Vs
dCA9IDA7CisgICAgZm9yIChsZXQgZiA9IDA7IGYgPCBudW1GdW5jdGlvbnM7ICsrZikgeworICAg
ICAgICBjb25zdCBuYW1lID0gYGNhbGwke2Z9YDsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBwcmludChgSW52b2tpbmcgJHtuYW1lfWApOworICAgICAgICByZXN1bHQgKz0gaW5z
dGFuY2UuZXhwb3J0c1tuYW1lXSgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfTsKKwor
d2hpbGUgKGZhaWxDb3VudCA9PT0gMCkgeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmlu
dChgVHJ5aW5nLi4uYCk7CisKKyAgICBjb25zdCBidWYgPSByYW5kb21Qcm9ncmFtKCk7CisgICAg
bGV0IG1vZHVsZTsKKworICAgIHRyeSB7CisgICAgICAgIG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYnVmKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGlmIChlIGluc3RhbmNl
b2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBwcmludChgQ2F1Z2h0OiAke2V9YCk7CisgICAgICAgICAgICArK2Zh
aWxDb3VudDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoYEV4cGVjdGVkIGEgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLCBnb3QgJHtlfWApOwor
ICAgIH0KKworICAgIGlmIChtb2R1bGUgIT09IHVuZGVmaW5lZCkgeworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIHByaW50KGBDcmVhdGluZyBpbnN0YW5jZWApOworCisgICAgICAg
IGxldCBpbnN0YW5jZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGluc3RhbmNlID0gbmV3
IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwgeyBpbXA6IGltcG9ydHMgfSk7CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHku
TGlua0Vycm9yKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgIHByaW50KGBDYXVnaHQ6ICR7ZX1gKTsKKyAgICAgICAgICAgICAgICArK2ZhaWxDb3Vu
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgV2ViQXNzZW1ibHkuTGlua0Vycm9yLCBnb3QgJHtlfWAp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluc3RhbmNlICE9PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgIGluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTsKKyAgICAgICAgICAgIGludm9rZShp
bnN0YW5jZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lmIChjYWxsQ291bnQgPT09IDApCisg
ICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0byBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgV2Vi
QXNzZW1ibHkgbW9kdWxlLCBpbnN0YW50aWF0ZSBpdCwgYW5kIGNhbGwgaXRzIGV4cG9ydHMgYXQg
bGVhc3Qgb25jZWApOworCisvLyBNYWtlIHN1cmUgd2UgY2FuIHN0aWxsIGNhbGwgYWxsIHRoZSBp
bnN0YW5jZXMgd2UgY3JlYXRlLCBldmVuIGFmdGVyIGdvaW5nIE9PTS4KKworaWYgKHZlcmJvc2Up
CisgICAgcHJpbnQoYEludm9raW5nIGFsbCBwcmV2aW91c2x5IGNyZWF0ZWQgaW5zdGFuY2VzYCk7
CisKK2ZvciAobGV0IGluc3RhbmNlIG9mIGluc3RhbmNlcykKKyAgICBpbnZva2UoaW5zdGFuY2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNWY5ZjhkZS4uMGJlZDYyZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTctMDYtMjcgIEpGIEJhc3RpZW4g
IDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBydW5uaW5nIG91
dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBzaG91bGQgdGhyb3cgT29NCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE1MzcKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMyOTYzMzM4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEJvdGggb24gZmlyc3QgY29tcGlsZSB3aXRoIEJCUSBhcyB3ZWxsIGFzIG9uIHRp
ZXItdXAgd2l0aCBPTUcsCisgICAgICAgIHJ1bm5pbmcgb3V0IG9mIFggbWVtb3J5IHNob3VsZG4n
dCBjYXVzZSB0aGUgZW50aXJlIHByb2dyYW0gdG8KKyAgICAgICAgdGVybWluYXRlLiBBbiBleGNl
cHRpb24gd2lsbCBkbyB3aGVuIGNvbXBpbGluZyBpbml0aWFsIGNvZGUgKHNpbmNlCisgICAgICAg
IHdlIGRvbid0IGhhdmUgYW55IG90aGVyIGZhbGxiYWNrIGF0IHRoZSBtb21lbnQpLCBhbmQgcmVm
dXNhbCB0bworICAgICAgICB0aWVyIHVwIHdpbGwgZG8gYXMgd2VsbCAoaXQnbGwganVzdCBiZSBz
bG93ZXIpLgorCisgICAgICAgIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgcHJvZ3JhbXMgd2hpY2gg
Z2VuZXJhdGUgaHVnZSBhbW91bnRzIG9mCisgICAgICAgIGNvZGUgc2ltcGx5IGxvb2sgbGlrZSBj
cmFzaGVzLCB3aGljaCBkZXZlbG9wZXJzIHJlcG9ydCB0bworICAgICAgICB1cy4gR2V0dGluZyBh
IEphdmFTY3JpcHQgZXhjZXB0aW9uIGluc3RlYWQgaXMgbXVjaCBjbGVhcmVyLgorCisgICAgICAg
ICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2hvdWxk
SklUKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cHJlcGFyZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21C
aW5kaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSnMpOgorICAgICAgICAoSlND
OjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmg6CisgICAg
ICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46
OndvcmspOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2spOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKwogMjAxNy0wNi0yMiAgU2Fh
bSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBWYWx1ZVJlcChEb3VibGVS
ZXAoQHYpKSBjYW4gbm90IHNpbXBseSBjb252ZXJ0IHRvIEB2CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCAzYzkxMzZlLi4yZDhmYWY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAg
LTMxNyw4ICszMTcsNyBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0YXRlKiBleGVjLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgfHwgIWVuc3VyZUdsb2JhbEpJVFdoaXRlbGlz
dCgpLmNvbnRhaW5zKGNvZGVCbG9jaykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8v
IFlvdSBjYW4gbW9kaWZ5IHRoaXMgdG8gdHVybiBvZmYgSklUdGluZyB3aXRob3V0IHJlYnVpbGRp
bmcgdGhlIHdvcmxkLgotICAgIHJldHVybiBleGVjLT52bSgpLmNhblVzZUpJVCgpOworICAgIHJl
dHVybiBleGVjLT52bSgpLmNhblVzZUpJVCgpICYmIE9wdGlvbnM6OnVzZUJhc2VsaW5lSklUKCk7
CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIE9TUi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCBlMTRjZGYzLi4wNGVmZDk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC0xMTIsNyArMTEyLDggQEAg
dHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihvcHRpb25TdHJpbmcsIGNv
bmZpZ0ZpbGUsIG51bGxwdHIsIE5vcm1hbCwgImZpbGUgdG8gY29uZmlndXJlIEpTQyBvcHRpb25z
IGFuZCBsb2dnaW5nIGxvY2F0aW9uIikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZUxMSW50LCAg
dHJ1ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBMTElOVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCi0g
ICAgdihib29sLCB1c2VKSVQsICAgIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgYmFzZWxpbmUg
SklUIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKKyAgICB2KGJvb2wsIHVzZUpJVCwgICAgdHJ1ZSwg
Tm9ybWFsLCAiYWxsb3dzIHRoZSBleGVjdXRhYmxlIHBhZ2VzIHRvIGJlIGFsbG9jYXRlZCBmb3Ig
SklUIGFuZCB0aHVua3MgaWYgdHJ1ZSIpIFwKKyAgICB2KGJvb2wsIHVzZUJhc2VsaW5lSklULCB0
cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIGJhc2VsaW5lIEpJVCB0byBiZSB1c2VkIGlmIHRydWUi
KSBcCiAgICAgdihib29sLCB1c2VERkdKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgREZH
IEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAgICAgdihib29sLCB1c2VSZWdFeHBKSVQsIHRy
dWUsIE5vcm1hbCwgImFsbG93cyB0aGUgUmVnRXhwIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBc
CiAgICAgdihib29sLCB1c2VET01KSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgRE9NSklU
IHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcAppbmRleCBiM2IzMTk4Li4wNjc1ZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0xNzUsNyArMTc1LDE1IEBAIHZvaWQgQkJRUGxh
bjo6cHJlcGFyZSgpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdW5zaWduZWQgaW1w
b3J0RnVuY3Rpb25JbmRleCA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5zaXplKCk7CiAgICAgICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5nIGltcG9ydCBmdW5jdGlvbiBudW1iZXIg
IiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgbWFrZVN0cmluZyhpbXBvcnQtPm1vZHVsZSks
ICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0LT5maWVsZCkpOwotICAgICAgICBtX3dhc21Ub1dhc21F
eGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKHdhc21Ub1dhc20oaW1wb3J0RnVuY3Rpb25JbmRleCkp
OworICAgICAgICBhdXRvIGJpbmRpbmcgPSB3YXNtVG9XYXNtKGltcG9ydEZ1bmN0aW9uSW5kZXgp
OworICAgICAgICBpZiAoVU5MSUtFTFkoIWJpbmRpbmcpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KGJpbmRpbmcuZXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBCaW5kaW5nRmFpbHVyZTo6T3V0
T2ZNZW1vcnk6CisgICAgICAgICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3Ry
aW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgYXQgaW1wb3J0ICIsIFN0cmluZzo6bnVtYmVy
KGltcG9ydEluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIG1fd2FzbVRvV2FzbUV4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQoYmlu
ZGluZy52YWx1ZSgpKTsKICAgICB9CiAKICAgICBjb25zdCB1aW50MzJfdCBpbXBvcnRGdW5jdGlv
bkNvdW50ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwpAQCAt
Mjg4LDE5ICsyOTYsMjkgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyKQogICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpDb21waWxlZCB8fCBt
X2N1cnJlbnRJbmRleCA+PSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5C
aW5hcnkuc2l6ZSgpKTsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiU3RhcnRpbmcgQ29tcGxl
dGlvbiIpOwogCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKSB7CisgICAgaWYg
KCFmYWlsZWQoKSAmJiBtX3N0YXRlID09IFN0YXRlOjpDb21waWxlZCkgewogICAgICAgICBmb3Ig
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25Mb2NhdGlvbkluQmluYXJ5LnNpemUoKTsgZnVuY3Rpb25JbmRleCsr
KSB7CiAgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0
aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVs
bHB0cik7CisgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndh
c21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIEJhc2U6OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQg
b2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1i
ZXIoZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxC
Mzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwgU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkudG9TdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5
cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChhdXRv
IGpzVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IG1fanNUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5n
ZXQoZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsaW5r
QnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2U6
OmZhaWwobG9ja2VyLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgaW4gZnVu
Y3Rpb24gZW50cnlwb2ludCBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihmdW5jdGlvbkluZGV4
KSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICAgICAganNUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBp
bGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAg
ICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiSmF2YVNjcmlwdC0+V2ViQXNzZW1i
bHkgZW50cnlwb2ludFslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKSksCiAgICAg
ICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC5qc0VudHJ5cG9pbnRCeXByb2R1Y3RzKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKaW5kZXggNGViZjU4
MS4uZDk2NTIyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJp
bmRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cApAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChK
SVQmIGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bAogICAgIGppdC5sb2Fk
UHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJ
bXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgd2FzbVRvSnMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZv
cywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KQor
RXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSnMo
Vk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KQogewogICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcHJvcGVybHkgYWJzdHJhY3QgYXdheSB0aGUgY2FsbGluZyBj
b252ZW50aW9uLgogICAgIC8vIEl0J2QgYmUgc3VwZXIgZWFzeSB0byBkbyBzbzogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwMQpAQCAtMTE4LDcgKzExOCwxMCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZv
PiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dQogICAgICAgICAgICAgICAgIEFTU0VSVCghIXZtLT5j
YWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgICAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRpbmdGYWls
dXJlOjpPdXRPZk1lbW9yeSk7CisKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0
aHJvd0JhZEk2NCk7CiAgICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWld
IiwgaW1wb3J0SW5kZXgpKTsKICAgICAgICAgfQpAQCAtMzAyLDcgKzMwNSwxMCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExp
bmtJbmZvcywgU2lnbmF0dQogICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAg
ICAgICAgaml0LnJldCgpOwogCi0gICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKwogICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgY2FsbEZ1bmMpOwogICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhj
ZXB0aW9uQ2FsbCwgZG9VbndpbmRpbmcpOwogCkBAIC01OTYsNyArNjAyLDEwIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlu
a0luZm9zLCBTaWduYXR1CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYg
KFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5KTsKKwogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbChzbG93Q2FsbCkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKQEAgLTYwNiw3ICs2MTUsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0qIHZtLCBCYWc8Q2FsbExpbmtJbmZv
PiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJ
bmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCitFeHBlY3Rl
ZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2ln
bmVkIGltcG9ydEluZGV4KQogewogICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVk
UmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAgICAgSklUIGppdDsKQEAgLTY0OSw3
ICs2NTgsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub1dhc20odW5zaWduZWQgaW1w
b3J0SW5kZXgpCiAgICAgaml0LmxvYWRQdHIoc2NyYXRjaCwgc2NyYXRjaCk7CiAgICAgaml0Lmp1
bXAoc2NyYXRjaCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChVTkxJS0VMWShwYXRjaEJ1ZmZlci5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEJpbmRp
bmdGYWlsdXJlOjpPdXRPZk1lbW9yeSk7CisKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+V2ViQXNzZW1ibHkgaW1wb3J0WyVpXSIsIGltcG9ydElu
ZGV4KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oCmluZGV4
IDllMjlhMzMuLjRlMjYyYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRp
bmcuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZv
cm1hdC5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM4LDggKzM5LDEyIEBAIGNsYXNzIENhbGxMaW5rSW5m
bzsKIAogbmFtZXNwYWNlIFdhc20gewogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvV2Fz
bSh1bnNpZ25lZCBpbXBvcnRJbmRleCk7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMo
Vk0qLCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVu
c2lnbmVkIGltcG9ydEluZGV4KTsKK2VudW0gY2xhc3MgQmluZGluZ0ZhaWx1cmUgeworICAgIE91
dE9mTWVtb3J5LAorfTsKKworRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5n
RmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCk7CitFeHBlY3RlZDxNYWNy
b0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KcyhWTSosIEJhZzxDYWxs
TGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0
SW5kZXgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKaW5kZXggNmZkOWYwNy4uZjQyZDNmMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtODgsNyArODgsMTIg
QEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIH0KIAogICAgIEVu
dHJ5cG9pbnQgb21nRW50cnlwb2ludDsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRl
eHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKKyAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkg
eworICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBv
ZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIs
IFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIz
OjpDb21waWxhdGlvbj4oCiAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJB
c3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVzIiwgbV9mdW5jdGlvbkluZGV4LCBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgp
KSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5jcHAKaW5kZXggYjcyMWUwZS4uZTAzM2ZlZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAK
QEAgLTU4LDcgKzU4LDE2IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2soVk0mIHZtLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmIGNvCiAgICAgbV93YXNtVG9K
U0V4aXRTdHVicy5yZXNlcnZlQ2FwYWNpdHkobV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291
bnQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwg
bV9jb2RlQmxvY2stPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsgKytpbXBvcnRJbmRleCkgewogICAg
ICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0
aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5hdChpbXBvcnRJbmRleCk7Ci0gICAg
ICAgIG1fd2FzbVRvSlNFeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKFdhc206Ondhc21Ub0pzKCZ2
bSwgbV9jYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0SW5kZXgpKTsKKyAgICAg
ICAgYXV0byBiaW5kaW5nID0gV2FzbTo6d2FzbVRvSnMoJnZtLCBtX2NhbGxMaW5rSW5mb3MsIHNp
Z25hdHVyZUluZGV4LCBpbXBvcnRJbmRleCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghYmluZGlu
ZykpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmluZGluZy5lcnJvcigpKSB7CisgICAgICAgICAg
ICBjYXNlIFdhc206OkJpbmRpbmdGYWlsdXJlOjpPdXRPZk1lbW9yeToKKyAgICAgICAgICAgICAg
ICBtX2Vycm9yTWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV93YXNtVG9KU0V4aXRTdHVicy51bmNoZWNrZWRB
cHBlbmQoYmluZGluZy52YWx1ZSgpKTsKICAgICAgICAgaW1wb3J0V2FzbVRvSlNTdHViKGltcG9y
dEluZGV4KSA9IG1fd2FzbVRvSlNFeGl0U3R1YnNbaW1wb3J0SW5kZXhdLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAppbmRleCBjZTdiOTk1Li44NTJlYWYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oCkBAIC03NCwxNSArNzQsMTggQEAgcHVibGljOgogCiAgICAgV2FzbTo6
Q2FsbGVlJiBqc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CisgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsK
ICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgfQogICAgIFdhc206Oldhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAg
ICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+d2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhT
cGFjZSk7CiAgICAgfQogCiAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2Fz
bVRvSnNDYWxsU3R1YkZvckltcG9ydCh1bnNpZ25lZCBpbXBvcnRJbmRleCkKICAgICB7CisgICAg
ICAgIEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAgICAgcmV0dXJuICZpbXBvcnRXYXNtVG9KU1N0
dWIoaW1wb3J0SW5kZXgpOwogICAgIH0KIApAQCAtOTUsNiArOTgsMTQgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBjbGVhckpTQ2FsbElDcyhWTSYpOwogCisgICAgYm9vbCBydW5uYWJsZSgpIGNvbnN0
IHsgcmV0dXJuICFtX2Vycm9yTWVzc2FnZTsgfQorCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSgp
CisgICAgeworICAgICAgICBBU1NFUlQoIXJ1bm5hYmxlKCkpOworICAgICAgICByZXR1cm4gbV9l
cnJvck1lc3NhZ2U7CisgICAgfQorCiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2soVk0mLCBSZWY8V2FzbTo6Q29kZUJsb2NrPiYmLCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1h
dGlvbiYpOwogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CkBAIC0xMjYsNiArMTM3LDcgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3dhc21Ub0pTRXhpdFN0
dWJzOwogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmluYWxpemVy
OwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKKyAgICBTdHJpbmcgbV9l
cnJvck1lc3NhZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4
IDM1YTViM2MuLjBlODc3MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMTEyLDYgKzExMiwxMCBAQCB2
b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEV4ZWNT
dGF0ZSogZXhlYywgUmVmPFdhc206OgogICAgICAgICBtX2NvZGVCbG9jay5zZXQodm0sIHRoaXMs
IGNvZGVCbG9jayk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29kZUJsb2NrID0gSlNXZWJBc3Nl
bWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLCB3YXNtQ29kZUJsb2NrLmNvcHlSZWYoKSwgbV9tb2R1
bGUuZ2V0KCkpOworICAgICAgICBpZiAoVU5MSUtFTFkoIWNvZGVCbG9jay0+cnVubmFibGUoKSkp
IHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBKU1dlYkFzc2VtYmx5
TGlua0Vycm9yOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5XZWJBc3NlbWJseUxp
bmtFcnJvclN0cnVjdHVyZSgpLCBjb2RlQmxvY2stPmVycm9yTWVzc2FnZSgpKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlz
LCBjb2RlQmxvY2spOwogICAgICAgICBtb2R1bGUoKS0+c2V0Q29kZUJsb2NrKHZtLCBtZW1vcnlN
b2RlKCksIGNvZGVCbG9jayk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDVkNDc4MjQuLmRkN2E2NWQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0w
Ni0yNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNz
ZW1ibHk6IHJ1bm5pbmcgb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHNob3VsZCB0aHJvdyBPb00K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTUzNwor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzI5NjMzMzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
OgorCiAyMDE3LTA2LTIyICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTiAocjIxODQxOSk6IDcgbGVha3MgaW4gUGx1Z2luTG9hZENsaWVudFBv
bGljaWVzLm1tCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
IGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwppbmRleCBhYzM4NjNhLi41NDU2
NzMwIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBi
L1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKQEAgLTEyMzIsNyArMTIzMiw2IEBA
IGRlZiBydW5XZWJBc3NlbWJseVNwZWNUZXN0KG1vZGUpCiAgICAgd2hlbiA6c2tpcAogICAgICAg
ICByZXR1cm4KICAgICBlbmQKLQogICAgIHJldHVybiBpZiAhJGppdFRlc3RzCiAgICAgcmV0dXJu
IGlmICEkaXNGVExQbGF0Zm9ybQogICAgIHByZXBhcmVFeHRyYUFic29sdXRlRmlsZXMoV0FTTVRF
U1RTX1BBVEgsIFsid2FzbS5qc29uIl0pCkBAIC0xMjQ0LDEwICsxMjQzLDIyIEBAIGRlZiBydW5X
ZWJBc3NlbWJseVNwZWNUZXN0KG1vZGUpCiAgICAgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlcyho
YXJuZXNzLm1hcCB7IHxmfCAiLi4vLi4vc3BlYy1oYXJuZXNzLyIgKyBmIH0sICRjb2xsZWN0aW9u
KQogCiAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoImRlZmF1bHQtd2FzbSIsIG5vaXN5T3V0cHV0
SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICpGVExfT1BUSU9OUykKLSAgICBydW5XaXRo
T3V0cHV0SGFuZGxlcigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsIG5vaXN5T3V0cHV0
SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRl
eHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgIHJ1bldpdGhP
dXRwdXRIYW5kbGVyKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAi
Li4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRB
Z2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKLSAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1u
by1jYWxsLWljIiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0t
dXNlQ2FsbElDc0ZvcldlYkFzc2VtYmx5VG9KU0NhbGxzPWZhbHNlIiwgKkZUTF9PUFRJT05TKQot
ICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLW5vLXRscy1jb250ZXh0Iiwgbm9pc3lPdXRw
dXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250
ZXh0PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgIGlmICEkcXVpY2tNb2RlCisgICAgICBydW5X
aXRoT3V0cHV0SGFuZGxlcigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsIG5vaXN5T3V0
cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICAiLS11c2VGYXN0VExTRm9yV2FzbUNv
bnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQorICAgICAgcnVu
V2l0aE91dHB1dEhhbmRsZXIoIndhc20tZWFnZXItamV0dGlzb24iLCBub2lzeU91dHB1dEhhbmRs
ZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVU
b09sZEFnZT10cnVlIiwgKkZUTF9PUFRJT05TKQorICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIo
Indhc20tbm8tY2FsbC1pYyIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5q
cyIsICItLXVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscz1mYWxzZSIsICpGVExfT1BU
SU9OUykKKyAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLW5vLXRscy1jb250ZXh0Iiwg
bm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlRmFzdFRMU0Zv
cldhc21Db250ZXh0PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgIGVuZAorZW5kCisKK2RlZiBy
dW5XZWJBc3NlbWJseUxvd0V4ZWN1dGFibGVNZW1vcnkoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykKKyAgICByZXR1cm4gaWYgISRqaXRUZXN0cworICAgIHJldHVybiBpZiAhJGlzRlRMUGxh
dGZvcm0KKyAgICBtb2R1bGVzID0gRGlyW1dBU01URVNUU19QQVRIICsgIiouanMiXS5tYXAgeyB8
ZnwgRmlsZS5iYXNlbmFtZShmKSB9CisgICAgcHJlcGFyZUV4dHJhQWJzb2x1dGVGaWxlcyhXQVNN
VEVTVFNfUEFUSCwgWyJ3YXNtLmpzb24iXSkKKyAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVz
KG1vZHVsZXMubWFwIHsgfGZ8ICIuLi8iICsgZiB9LCAkY29sbGVjdGlvbikKKyAgICAjIE9ubHkg
bGV0IFdlYkFzc2VtYmx5IGdldCBleGVjdXRhYmxlIG1lbW9yeS4KKyAgICBydW4oImRlZmF1bHQt
d2FzbSIsICItLXVzZUNvbmN1cnJlbnRHQz0wIiAsICItLXVzZUNvbmN1cnJlbnRKSVQ9MCIsICIt
LWppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZT0xNTAwMCIsICItLXVzZUJhc2VsaW5lSklUPTAiLCAi
LS11c2VERkdKSVQ9MCIsICItLXVzZUZUTEpJVD0wIiwgIi1tIikKIGVuZAogCiBkZWYgcnVuQ2hh
a3JhKG1vZGUsIGV4Y2VwdGlvbiwgYmFzZWxpbmVGaWxlLCBleHRyYUZpbGVzKQotLSAKMi4xMC4x
Cgo=
</data>
<flag name="review"
          id="334851"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313995</attachid>
            <date>2017-06-27 23:02:58 -0700</date>
            <delta_ts>2017-06-27 23:42:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-running-out-of-executable-memory-should-.patch</filename>
            <type>text/plain</type>
            <size>34545</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAwYmFiNGRkYzE1MmZmOGZkMDczYzAzMDZkNDA5ZGNhNzI5NGExNzk2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDI3IEp1biAyMDE3IDE2OjU0OjMzIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHk6IHJ1bm5pbmcgb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHNob3VsZCB0aHJvdwogT29N
CgotLS0KIEpTVGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDI3ICsrKysrCiBKU1Rlc3RzL3dhc20ueWFtbCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMiArCiAuLi4vbG93RXhlY3V0YWJsZU1lbW9yeS9leGVjdXRhYmxlLW1lbW9y
eS1vb20uanMgICB8IDEyMSArKysrKysrKysrKysrKysrKysrKwogSlNUZXN0cy93YXNtL2xvd0V4
ZWN1dGFibGVNZW1vcnkvZXhwb3J0cy1vb20uanMgICAgfCAxMDcgKysrKysrKysrKysrKysrKysr
CiBKU1Rlc3RzL3dhc20vbG93RXhlY3V0YWJsZU1lbW9yeS9pbXBvcnRzLW9vbS5qcyAgICB8IDEy
NCArKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgIHwgIDM4ICsrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgIHwgICA1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwICAgICB8ICAgMyArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oICAgICAgICAgICAgfCAgIDMgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCAgICAgICAgIHwgIDI2ICsrKystCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgICAgICAgICB8ICAyNCArKyst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5oICAgICAgICAgICB8ICAg
OSArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwICAgICAgICAg
fCAgIDcgKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwICAgICAgICAg
ICAgIHwgIDExICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggICAgICAg
ICAgICAgICB8ICAxMiArKwogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCAg
ICAgICAgICAgICAgfCAgIDQgKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMTMgKysrCiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzICAgICAgICAgICAgICAgICB8ICAyMSArKystCiAxOCBmaWxlcyBjaGFuZ2VkLCA1MzQgaW5z
ZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy93
YXNtL2xvd0V4ZWN1dGFibGVNZW1vcnkvZXhlY3V0YWJsZS1tZW1vcnktb29tLmpzCiBjcmVhdGUg
bW9kZSAxMDA2NDQgSlNUZXN0cy93YXNtL2xvd0V4ZWN1dGFibGVNZW1vcnkvZXhwb3J0cy1vb20u
anMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3dhc20vbG93RXhlY3V0YWJsZU1lbW9yeS9p
bXBvcnRzLW9vbS5qcwoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggZWJmZTVmMy4uOWM5ZjBmNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxNy0wNi0y
NyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1i
bHk6IHJ1bm5pbmcgb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHNob3VsZCB0aHJvdyBPb00KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTUzNworICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzI5NjMzMzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2Fh
bSBCYXJhdGkuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS9sb3dFeGVj
dXRhYmxlTWVtb3J5L2V4ZWN1dGFibGUtbWVtb3J5LW9vbS5qczogQWRkZWQuCisgICAgICAgIChj
b25zdC5pbnZva2UpOgorICAgICAgICAoZmFpbENvdW50LjAuY2F0Y2gpOgorICAgICAgICAoZmFp
bENvdW50LjAubW9kdWxlLnVuZGVmaW5lZC5jYXRjaCk6CisgICAgICAgICogd2FzbS9sb3dFeGVj
dXRhYmxlTWVtb3J5L2V4cG9ydHMtb29tLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbnN0LnR5cGUp
OgorICAgICAgICAoY29uc3QucGFyYW1zKToKKyAgICAgICAgKGNvbnN0LnJhbmRvbVByb2dyYW0p
OgorICAgICAgICAoZmFpbENvdW50LjAuY2F0Y2gpOgorICAgICAgICAoZmFpbENvdW50LjAubW9k
dWxlLnVuZGVmaW5lZC5jYXRjaCk6CisgICAgICAgICogd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5
L2ltcG9ydHMtb29tLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbnN0LnR5cGUpOgorICAgICAgICAo
Y29uc3QucGFyYW1zKToKKyAgICAgICAgKGNvbnN0LnJhbmRvbVByb2dyYW0pOgorICAgICAgICAo
Zi5pbXBvcnRzLnB1c2gpOgorICAgICAgICAoZmFpbENvdW50LjAuY2F0Y2gpOgorICAgICAgICAo
ZmFpbENvdW50LjAubW9kdWxlLnVuZGVmaW5lZC5jYXRjaCk6CisKIDIwMTctMDYtMjIgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVmFsdWVSZXAoRG91YmxlUmVw
KEB2KSkgY2FuIG5vdCBzaW1wbHkgY29udmVydCB0byBAdgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtLnlhbWwgYi9KU1Rlc3RzL3dhc20ueWFtbAppbmRleCBkMjJkOWIzLi5mNWEzYTA1IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3dhc20ueWFtbAorKysgYi9KU1Rlc3RzL3dhc20ueWFtbApAQCAtMzMs
NiArMzMsOCBAQAogICBjbWQ6IHJ1bldlYkFzc2VtYmx5IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRz
CiAtIHBhdGg6IHdhc20vc3RyZXNzCiAgIGNtZDogcnVuV2ViQXNzZW1ibHkgdW5sZXNzIHBhcnNl
UnVuQ29tbWFuZHMKKy0gcGF0aDogd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5CisgIGNtZDogcnVu
V2ViQXNzZW1ibHlMb3dFeGVjdXRhYmxlTWVtb3J5IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAK
IC0gcGF0aDogd2FzbS9zcGVjLXRlc3RzL2FkZHJlc3Mud2FzdC5qcwogICBjbWQ6IHJ1bldlYkFz
c2VtYmx5U3BlY1Rlc3QgOm5vcm1hbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2xvd0V4ZWN1
dGFibGVNZW1vcnkvZXhlY3V0YWJsZS1tZW1vcnktb29tLmpzIGIvSlNUZXN0cy93YXNtL2xvd0V4
ZWN1dGFibGVNZW1vcnkvZXhlY3V0YWJsZS1tZW1vcnktb29tLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmUwMGFhZGEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dh
c20vbG93RXhlY3V0YWJsZU1lbW9yeS9leGVjdXRhYmxlLW1lbW9yeS1vb20uanMKQEAgLTAsMCAr
MSwxMjEgQEAKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCitpbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworCitjb25zdCB2ZXJib3NlID0gZmFsc2U7Citj
b25zdCBtYXhJbnN0cnVjdGlvbkNvdW50ID0gNTAwOworY29uc3QgaW5zdGFuY2VzVG90YWwgPSA4
OworY29uc3QgaW52b2NhdGlvbnNUb3RhbCA9IDg7Citjb25zdCB0aWVyVXBDYWxscyA9IDIwMDAw
OyAvLyBDYWxsIGVub3VnaCB0byB0cmlnZ2VyIHRpZXIgdXAgYW5kIGdldCBpdCB0byBjb21waWxl
LgorCisvLyBUaGlzIHRlc3Qgc3RhcnRzIHJ1bm5pbmcgd2l0aCBhIGZldyBieXRlcyBvZiBleGVj
dXRhYmxlIG1lbW9yeSBhdmFpbGFibGUuIFRyeQorLy8gdG8gY3JlYXRlIGFuZCBpbnN0YW50aWF0
ZSBhIG1vZHVsZSB3aGljaCB3aWxsIGZhaWwgdG8gZml0LgorCitjb25zdCByYW5kb21Qcm9ncmFt
ID0gaW5zdHJ1Y3Rpb25Db3VudCA9PiB7CisgICAgbGV0IGIgPSBuZXcgQnVpbGRlcigpCisgICAg
ICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImJhciIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAu
RnVuY3Rpb24oImZvbyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiZjMyIiB9KQorICAgICAgICAgICAg
ICAgIC5GMzJDb25zdCgyLjApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIiwgeyBwYXJhbXM6IFsiZjMyIiwg
ImYzMiJdLCByZXQ6ICJmMzIiIH0pCisgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKTsKKworICAg
IC8vIEluc2VydCBhIGJ1bmNoIG9mIGRlcGVuZGVudCBpbnN0cnVjdGlvbnMgaW4gYSBzaW5nbGUg
YmFzaWMgYmxvY2sgc28gdGhhdAorICAgIC8vIG91ciBjb21waWxlciB3b24ndCBiZSBhYmxlIHRv
IHN0cmVuZ3RoLXJlZHVjZS4KKyAgICBjb25zdCBhY3Rpb25zID0gWworICAgICAgICBiID0+IGIu
R2V0TG9jYWwoMCkuRjMyU3ViKCksCisgICAgICAgIGIgPT4gYi5HZXRMb2NhbCgxKS5GMzJTdWIo
KSwKKyAgICAgICAgYiA9PiBiLkdldExvY2FsKDApLkYzMkFkZCgpLAorICAgICAgICBiID0+IGIu
R2V0TG9jYWwoMSkuRjMyQWRkKCksCisgICAgICAgIGIgPT4gYi5HZXRMb2NhbCgwKS5GMzJNdWwo
KSwKKyAgICAgICAgYiA9PiBiLkdldExvY2FsKDEpLkYzMk11bCgpLAorICAgIF07CisKKyAgICB3
aGlsZSAoLS1pbnN0cnVjdGlvbkNvdW50KQorICAgICAgICBiID0gYWN0aW9uc1soTWF0aC5yYW5k
b20oKSAqIGFjdGlvbnMubGVuZ3RoKSB8IDBdKGIpOworCisgICAgYiA9IGIuUmV0dXJuKCkuRW5k
KCkuRW5kKCk7CisKKyAgICByZXR1cm4gYi5XZWJBc3NlbWJseSgpLmdldCgpOworfQorCitsZXQg
ZmFpbENvdW50ID0gMDsKK2xldCBjYWxsQ291bnQgPSAwOworbGV0IGluc3RhbmNlcyA9IFtdOwor
Citjb25zdCBpbnZva2UgPSAoaW5zdGFuY2UsIGNvdW50KSA9PiB7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIHByaW50KGBJbnZva2luZ2ApOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKKyAgICAgICAgYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHNbImZvbyJdKCksIDIu
MCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBpbnN0YW5j
ZS5leHBvcnRzWyJiYXIiXSgyLjAsIDYuMCk7CisgICAgKytjYWxsQ291bnQ7Cit9OworCit3aGls
ZSAoZmFpbENvdW50ID09PSAwKSB7CisgICAgY29uc3QgaW5zdHJ1Y3Rpb25Db3VudCA9IChNYXRo
LnJhbmRvbSgpICogbWF4SW5zdHJ1Y3Rpb25Db3VudCArIDEpIHwgMDsKKworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBwcmludChgVHJ5aW5nIG1vZHVsZSB3aXRoICR7aW5zdHJ1Y3Rpb25Db3Vu
dH0gaW5zdHJ1Y3Rpb25zLmApOworCisgICAgY29uc3QgYnVmID0gcmFuZG9tUHJvZ3JhbShpbnN0
cnVjdGlvbkNvdW50KTsKKyAgICBsZXQgbW9kdWxlOworCisgICAgdHJ5IHsKKyAgICAgICAgbW9k
dWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWYpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgaWYgKGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IpIHsKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIHByaW50KGBDYXVnaHQ6ICR7ZX1g
KTsKKyAgICAgICAgICAgICsrZmFpbENvdW50OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IsIGdvdCAke2V9YCk7CisgICAgfQorCisgICAgaWYgKG1vZHVsZSAhPT0gdW5kZWZpbmVk
KSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgcHJpbnQoYENyZWF0aW5nIGlu
c3RhbmNlYCk7CisKKyAgICAgICAgbGV0IGluc3RhbmNlOworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKTsKKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBXZWJBc3NlbWJs
eS5MaW5rRXJyb3IpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbnQoYENhdWdodDogJHtlfWApOworICAgICAgICAgICAgICAgICsrZmFpbENv
dW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IsIGdvdCAke2V9
YCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5zdGFuY2UgIT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpOworICAgICAgICAgICAgaW52b2tl
KGluc3RhbmNlLCAxKTsKKyAgICAgICAgfQorICAgIH0KK30KKworaWYgKGNhbGxDb3VudCA9PT0g
MCkKKyAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHRvIGJlIGFibGUgdG8gYWxsb2NhdGUg
YSBXZWJBc3NlbWJseSBtb2R1bGUsIGluc3RhbnRpYXRlIGl0LCBhbmQgY2FsbCBpdHMgZXhwb3J0
cyBhdCBsZWFzdCBvbmNlYCk7CisKKy8vIE1ha2Ugc3VyZSB3ZSBjYW4gc3RpbGwgY2FsbCBhbGwg
dGhlIGluc3RhbmNlcyB3ZSBjcmVhdGUsIGV2ZW4gYWZ0ZXIgZ29pbmcKKy8vIE9PTS4gVGhpcyB3
aWxsIHRyeSB0byBmb3JjZSB0aWVyLXVwIGFzIHdlbGwsIHdoaWNoIHNob3VsZCBmYWlsLgorCitp
ZiAodmVyYm9zZSkKKyAgICBwcmludChgSW52b2tpbmcgYWxsIHByZXZpb3VzbHkgY3JlYXRlZCBp
bnN0YW5jZXNgKTsKKworZm9yIChsZXQgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKQorICAgIGludm9r
ZShpbnN0YW5jZSwgdGllclVwQ2FsbHMpOworCisvLyBEbyBpdCB0d2ljZSB0byByZXZpc2l0IHdo
YXQgc2hvdWxkIGhhdmUgZ290dGVuIHRpZXJlZCB1cC4KK2ZvciAobGV0IGluc3RhbmNlIG9mIGlu
c3RhbmNlcykKKyAgICBpbnZva2UoaW5zdGFuY2UsIDEpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93
YXNtL2xvd0V4ZWN1dGFibGVNZW1vcnkvZXhwb3J0cy1vb20uanMgYi9KU1Rlc3RzL3dhc20vbG93
RXhlY3V0YWJsZU1lbW9yeS9leHBvcnRzLW9vbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wYzMyNzBhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2xvd0V4
ZWN1dGFibGVNZW1vcnkvZXhwb3J0cy1vb20uanMKQEAgLTAsMCArMSwxMDcgQEAKK2ltcG9ydCAq
IGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9C
dWlsZGVyLmpzJworCitjb25zdCB2ZXJib3NlID0gZmFsc2U7Citjb25zdCBudW1GdW5jdGlvbnMg
PSAyOworY29uc3QgbWF4UGFyYW1zID0gMTI4OworCisvLyBUaGlzIHRlc3Qgc3RhcnRzIHJ1bm5p
bmcgd2l0aCBhIGZldyBieXRlcyBvZiBleGVjdXRhYmxlIG1lbW9yeSBhdmFpbGFibGUuIFRyeQor
Ly8gdG8gY3JlYXRlIGFuZCBpbnN0YW50aWF0ZSBtb2R1bGVzIHdoaWNoIGhhdmUgd2F5IG1vcmUg
ZXhwb3J0cyB0aGFuIGFueXRoaW5nCisvLyBlbHNlLiBIb3BlZnVsbHkgdGhleSdsbCBmYWlsIHdo
ZW4gdHJ5aW5nIHRvIGluc3RhbnRpYXRlIHRoZWlyIGVudHJ5cG9pbnRzLgorCitjb25zdCB0eXBl
ID0gKCkgPT4geworICAgIGNvbnN0IHR5cGVzID0gWyJpMzIiLCAiZjMyIiwgImY2NCJdOyAvLyBD
YW4ndCBleHBvcnQgaTY0LgorICAgIHJldHVybiB0eXBlc1soTWF0aC5yYW5kb20oKSAqIHR5cGVz
Lmxlbmd0aCkgfCAwXTsKK307CisKK2NvbnN0IHBhcmFtcyA9ICgpID0+IHsKKyAgICBsZXQgcCA9
IFtdOworICAgIGxldCBjb3VudCA9IChNYXRoLnJhbmRvbSgpICogbWF4UGFyYW1zKSB8IDA7Cisg
ICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgIHAucHVzaCh0eXBlKCkpOworICAgIHJldHVybiBw
OworfTsKKworY29uc3QgcmFuZG9tUHJvZ3JhbSA9ICgpID0+IHsKKyAgICBsZXQgYiA9IG5ldyBC
dWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCk7CisgICAgZm9yIChsZXQgZiA9IDA7IGYgPCBudW1GdW5jdGlv
bnM7ICsrZikKKyAgICAgICAgYiA9IGIuRnVuY3Rpb24oYGYke2Z9YCk7CisgICAgYiA9IGIuRW5k
KCkuQ29kZSgpOworICAgIGZvciAobGV0IGYgPSAwOyBmIDwgbnVtRnVuY3Rpb25zOyArK2YpCisg
ICAgICAgIGIgPSBiLkZ1bmN0aW9uKGBmJHtmfWAsIHsgcGFyYW1zOiBwYXJhbXMoKSB9KS5SZXR1
cm4oKS5FbmQoKTsKKyAgICBiID0gYi5FbmQoKTsKKyAgICByZXR1cm4gYi5XZWJBc3NlbWJseSgp
LmdldCgpOworfQorCitsZXQgZmFpbENvdW50ID0gMDsKK2xldCBjYWxsQ291bnQgPSAwOworbGV0
IGluc3RhbmNlcyA9IFtdOworCitjb25zdCBpbnZva2UgPSBpbnN0YW5jZSA9PiB7CisgICAgbGV0
IHJlc3VsdCA9IDA7CisgICAgZm9yIChsZXQgZiA9IDA7IGYgPCBudW1GdW5jdGlvbnM7ICsrZikg
eworICAgICAgICBjb25zdCBuYW1lID0gYGYke2Z9YDsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBwcmludChgSW52b2tpbmcgJHtuYW1lfWApOworICAgICAgICByZXN1bHQgKz0g
aW5zdGFuY2UuZXhwb3J0c1tuYW1lXSgpOworICAgICAgICArK2NhbGxDb3VudDsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK307CisKK3doaWxlIChmYWlsQ291bnQgPT09IDApIHsKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoYFRyeWluZy4uLmApOworCisgICAgY29uc3QgYnVm
ID0gcmFuZG9tUHJvZ3JhbSgpOworICAgIGxldCBtb2R1bGU7CisKKyAgICB0cnkgeworICAgICAg
ICBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1Zik7CisgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvcikgewor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgcHJpbnQoYENhdWdodDog
JHtlfWApOworICAgICAgICAgICAgKytmYWlsQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIFdlYkFzc2VtYmx5LkNv
bXBpbGVFcnJvciwgZ290ICR7ZX1gKTsKKyAgICB9CisKKyAgICBpZiAobW9kdWxlICE9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBwcmludChgQ3JlYXRp
bmcgaW5zdGFuY2VgKTsKKworICAgICAgICBsZXQgaW5zdGFuY2U7CisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOwor
ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFdlYkFz
c2VtYmx5LkxpbmtFcnJvcikgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBwcmludChgQ2F1Z2h0OiAke2V9YCk7CisgICAgICAgICAgICAgICAgKytm
YWlsQ291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvciwgZ290
ICR7ZX1gKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnN0YW5jZSAhPT0gdW5kZWZpbmVk
KSB7CisgICAgICAgICAgICBpbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7CisgICAgICAgICAgICBp
bnZva2UoaW5zdGFuY2UpOworICAgICAgICB9CisgICAgfQorfQorCitpZiAoY2FsbENvdW50ID09
PSAwKQorICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdG8gYmUgYWJsZSB0byBhbGxvY2F0
ZSBhIFdlYkFzc2VtYmx5IG1vZHVsZSwgaW5zdGFudGlhdGUgaXQsIGFuZCBjYWxsIGl0cyBleHBv
cnRzIGF0IGxlYXN0IG9uY2VgKTsKKworLy8gTWFrZSBzdXJlIHdlIGNhbiBzdGlsbCBjYWxsIGFs
bCB0aGUgaW5zdGFuY2VzIHdlIGNyZWF0ZSwgZXZlbiBhZnRlciBnb2luZyBPT00uCisKK2lmICh2
ZXJib3NlKQorICAgIHByaW50KGBJbnZva2luZyBhbGwgcHJldmlvdXNseSBjcmVhdGVkIGluc3Rh
bmNlc2ApOworCitmb3IgKGxldCBpbnN0YW5jZSBvZiBpbnN0YW5jZXMpCisgICAgaW52b2tlKGlu
c3RhbmNlKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5L2lt
cG9ydHMtb29tLmpzIGIvSlNUZXN0cy93YXNtL2xvd0V4ZWN1dGFibGVNZW1vcnkvaW1wb3J0cy1v
b20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjZDk3MwotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5L2ltcG9ydHMtb29t
LmpzCkBAIC0wLDAgKzEsMTI0IEBACitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0
LmpzJworaW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKKworY29uc3QgdmVyYm9z
ZSA9IGZhbHNlOworY29uc3QgbnVtRnVuY3Rpb25zID0gMjsKK2NvbnN0IG1heFBhcmFtcyA9IDMy
OworCisvLyBUaGlzIHRlc3Qgc3RhcnRzIHJ1bm5pbmcgd2l0aCBhIGZldyBieXRlcyBvZiBleGVj
dXRhYmxlIG1lbW9yeSBhdmFpbGFibGUuIFRyeQorLy8gdG8gY3JlYXRlIGFuZCBpbnN0YW50aWF0
ZSBtb2R1bGVzIHdoaWNoIGhhdmUgd2F5IG1vcmUgaW1wb3J0cyB0aGFuIGFueXRoaW5nCisvLyBl
bHNlLiBIb3BlZnVsbHkgdGhleSdsbCBmYWlsIHdoZW4gdHJ5aW5nIHRvIGluc3RhbnRpYXRlIHRo
ZWlyIGVudHJ5cG9pbnRzLgorCitjb25zdCB0eXBlID0gKCkgPT4geworICAgIGNvbnN0IHR5cGVz
ID0gWyJpMzIiLCAiZjMyIiwgImY2NCJdOworICAgIHJldHVybiB0eXBlc1soTWF0aC5yYW5kb20o
KSAqIHR5cGVzLmxlbmd0aCkgfCAwXTsKK307CisKK2NvbnN0IHBhcmFtcyA9ICgpID0+IHsKKyAg
ICBsZXQgcCA9IFtdOworICAgIGxldCBjb3VudCA9IChNYXRoLnJhbmRvbSgpICogbWF4UGFyYW1z
KSB8IDA7CisgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgIHAucHVzaCh0eXBlKCkpOworICAg
IHJldHVybiBwOworfTsKKworY29uc3QgcmFuZG9tUHJvZ3JhbSA9ICgpID0+IHsKKyAgICBsZXQg
YiA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0
KCk7CisgICAgY29uc3QgcHMgPSBwYXJhbXMoKTsKKyAgICBmb3IgKGxldCBmID0gMDsgZiA8IG51
bUZ1bmN0aW9uczsgKytmKQorICAgICAgICBiID0gYi5GdW5jdGlvbigiaW1wIiwgYCR7Zn1gLCB7
IHBhcmFtczogcHMgfSk7CisgICAgYiA9IGIuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAgICAgLkV4cG9ydCgpOworICAgIGZvciAobGV0IGYgPSAwOyBmIDwgbnVtRnVuY3Rp
b25zOyArK2YpCisgICAgICAgIGIgPSBiLkZ1bmN0aW9uKGBjYWxsJHtmfWApOworICAgIGIgPSBi
LkVuZCgpCisgICAgICAgIC5Db2RlKCk7CisgICAgZm9yIChsZXQgZiA9IDA7IGYgPCBudW1GdW5j
dGlvbnM7ICsrZikgeworICAgICAgICBiID0gYi5GdW5jdGlvbihgY2FsbCR7Zn1gLCB7IHBhcmFt
czogcHMgfSk7CisgICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHMubGVuZ3RoOyArK3ApCisg
ICAgICAgICAgICBiID0gYi5HZXRMb2NhbChwKTsKKyAgICAgICAgYiA9IGIuQ2FsbChmKS5FbmQo
KTsKKyAgICB9CisgICAgYiA9IGIuRW5kKCk7CisgICAgcmV0dXJuIGIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKK30KKworbGV0IGZhaWxDb3VudCA9IDA7CitsZXQgY2FsbENvdW50ID0gMDsKK2xldCBp
bnN0YW5jZXMgPSBbXTsKKworbGV0IGltcG9ydHMgPSBbXTsKK2ZvciAobGV0IGYgPSAwOyBmIDwg
bnVtRnVuY3Rpb25zOyArK2YpCisgICAgaW1wb3J0cy5wdXNoKCguLi5hcmdzKSA9PiB7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgcHJpbnQoYEludm9rZWQgJHtmfSB3aXRoOiAk
e2FyZ3N9YCk7CisgICAgICAgICsrY2FsbENvdW50OworICAgIH0pOworCitjb25zdCBpbnZva2Ug
PSBpbnN0YW5jZSA9PiB7CisgICAgbGV0IHJlc3VsdCA9IDA7CisgICAgZm9yIChsZXQgZiA9IDA7
IGYgPCBudW1GdW5jdGlvbnM7ICsrZikgeworICAgICAgICBjb25zdCBuYW1lID0gYGNhbGwke2Z9
YDsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBwcmludChgSW52b2tpbmcgJHtu
YW1lfWApOworICAgICAgICByZXN1bHQgKz0gaW5zdGFuY2UuZXhwb3J0c1tuYW1lXSgpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfTsKKword2hpbGUgKGZhaWxDb3VudCA9PT0gMCkgewor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChgVHJ5aW5nLi4uYCk7CisKKyAgICBjb25z
dCBidWYgPSByYW5kb21Qcm9ncmFtKCk7CisgICAgbGV0IG1vZHVsZTsKKworICAgIHRyeSB7Cisg
ICAgICAgIG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVmKTsKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgIGlmIChlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9y
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBwcmludChgQ2F1
Z2h0OiAke2V9YCk7CisgICAgICAgICAgICArK2ZhaWxDb3VudDsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgV2ViQXNzZW1i
bHkuQ29tcGlsZUVycm9yLCBnb3QgJHtlfWApOworICAgIH0KKworICAgIGlmIChtb2R1bGUgIT09
IHVuZGVmaW5lZCkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIHByaW50KGBD
cmVhdGluZyBpbnN0YW5jZWApOworCisgICAgICAgIGxldCBpbnN0YW5jZTsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwgeyBpbXA6IGltcG9ydHMgfSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
IGlmIChlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuTGlua0Vycm9yKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIHByaW50KGBDYXVnaHQ6ICR7ZX1g
KTsKKyAgICAgICAgICAgICAgICArK2ZhaWxDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGEgV2Vi
QXNzZW1ibHkuTGlua0Vycm9yLCBnb3QgJHtlfWApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGluc3RhbmNlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIGluc3RhbmNlcy5wdXNoKGlu
c3RhbmNlKTsKKyAgICAgICAgICAgIGludm9rZShpbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK2lmIChjYWxsQ291bnQgPT09IDApCisgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3Rl
ZCB0byBiZSBhYmxlIHRvIGFsbG9jYXRlIGEgV2ViQXNzZW1ibHkgbW9kdWxlLCBpbnN0YW50aWF0
ZSBpdCwgYW5kIGNhbGwgaXRzIGV4cG9ydHMgYXQgbGVhc3Qgb25jZWApOworCisvLyBNYWtlIHN1
cmUgd2UgY2FuIHN0aWxsIGNhbGwgYWxsIHRoZSBpbnN0YW5jZXMgd2UgY3JlYXRlLCBldmVuIGFm
dGVyIGdvaW5nIE9PTS4KKworaWYgKHZlcmJvc2UpCisgICAgcHJpbnQoYEludm9raW5nIGFsbCBw
cmV2aW91c2x5IGNyZWF0ZWQgaW5zdGFuY2VzYCk7CisKK2ZvciAobGV0IGluc3RhbmNlIG9mIGlu
c3RhbmNlcykKKyAgICBpbnZva2UoaW5zdGFuY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5k
ZXggNWY5ZjhkZS4uOWUxOWU5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDEgQEAKKzIwMTctMDYtMjcgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYkFzc2VtYmx5OiBydW5uaW5nIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBzaG91
bGQgdGhyb3cgT29NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzE1MzcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyOTYzMzM4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIEJvdGggb24gZmlyc3QgY29tcGls
ZSB3aXRoIEJCUSBhcyB3ZWxsIGFzIG9uIHRpZXItdXAgd2l0aCBPTUcsCisgICAgICAgIHJ1bm5p
bmcgb3V0IG9mIFggbWVtb3J5IHNob3VsZG4ndCBjYXVzZSB0aGUgZW50aXJlIHByb2dyYW0gdG8K
KyAgICAgICAgdGVybWluYXRlLiBBbiBleGNlcHRpb24gd2lsbCBkbyB3aGVuIGNvbXBpbGluZyBp
bml0aWFsIGNvZGUgKHNpbmNlCisgICAgICAgIHdlIGRvbid0IGhhdmUgYW55IG90aGVyIGZhbGxi
YWNrIGF0IHRoZSBtb21lbnQpLCBhbmQgcmVmdXNhbCB0bworICAgICAgICB0aWVyIHVwIHdpbGwg
ZG8gYXMgd2VsbCAoaXQnbGwganVzdCBiZSBzbG93ZXIpLgorCisgICAgICAgIFRoaXMgaXMgdXNl
ZnVsIGJlY2F1c2UgcHJvZ3JhbXMgd2hpY2ggZ2VuZXJhdGUgaHVnZSBhbW91bnRzIG9mCisgICAg
ICAgIGNvZGUgc2ltcGx5IGxvb2sgbGlrZSBjcmFzaGVzLCB3aGljaCBkZXZlbG9wZXJzIHJlcG9y
dCB0bworICAgICAgICB1cy4gR2V0dGluZyBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluc3RlYWQg
aXMgbXVjaCBjbGVhcmVyLgorCisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAg
ICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2hvdWxk
SklUKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cHJlcGFyZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21C
aW5kaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSnMpOgorICAgICAgICAoSlND
OjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmg6CisgICAg
ICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46
OndvcmspOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2spOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9uKToKKwogMjAxNy0wNi0yMiAgU2Fh
bSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBWYWx1ZVJlcChEb3VibGVS
ZXAoQHYpKSBjYW4gbm90IHNpbXBseSBjb252ZXJ0IHRvIEB2CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAppbmRleCA0MWY1OGVjLi4xZmUx
MWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAKQEAgLTM5NCw4ICszOTQsMTEgQEAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywKICAg
ICAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkID0gc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCAr
IHNpemVJbkJ5dGVzOwogICAgICAgICBzaXplX3QgYnl0ZXNBdmFpbGFibGUgPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KAogICAgICAgICAgICAgc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkICogKDEgLSBl
eGVjdXRhYmxlUG9vbFJlc2VydmF0aW9uRnJhY3Rpb24pKTsKLSAgICAgICAgaWYgKGJ5dGVzQWxs
b2NhdGVkID4gYnl0ZXNBdmFpbGFibGUpCisgICAgICAgIGlmIChieXRlc0FsbG9jYXRlZCA+IGJ5
dGVzQXZhaWxhYmxlKSB7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nRXhlY3V0YWJsZUFs
bG9jYXRpb24oKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJBbGxvY2F0aW9uIGZhaWxlZCBi
ZWNhdXNlIGJ5dGVzIGFsbG9jYXRlZCAiLCBieXRlc0FsbG9jYXRlZCwgICIgPiAiLCBieXRlc0F2
YWlsYWJsZSwgIiBieXRlcyBhdmFpbGFibGUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJ
RCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApp
bmRleCAzYzkxMzZlLi4yZDhmYWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTMxNyw4ICszMTcsNyBAQCBpbmxpbmUgYm9vbCBzaG91
bGRKSVQoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAgfHwg
IWVuc3VyZUdsb2JhbEpJVFdoaXRlbGlzdCgpLmNvbnRhaW5zKGNvZGVCbG9jaykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIC8vIFlvdSBjYW4gbW9kaWZ5IHRoaXMgdG8gdHVybiBvZmYg
SklUdGluZyB3aXRob3V0IHJlYnVpbGRpbmcgdGhlIHdvcmxkLgotICAgIHJldHVybiBleGVjLT52
bSgpLmNhblVzZUpJVCgpOworICAgIHJldHVybiBleGVjLT52bSgpLmNhblVzZUpJVCgpICYmIE9w
dGlvbnM6OnVzZUJhc2VsaW5lSklUKCk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91
bGQgdHJ5IHRvIE9TUi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRl
eCBlMTRjZGYzLi4wNGVmZDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCkBAIC0xMTIsNyArMTEyLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgdihvcHRpb25TdHJpbmcsIGNvbmZpZ0ZpbGUsIG51bGxwdHIsIE5vcm1hbCwgImZpbGUg
dG8gY29uZmlndXJlIEpTQyBvcHRpb25zIGFuZCBsb2dnaW5nIGxvY2F0aW9uIikgXAogICAgIFwK
ICAgICB2KGJvb2wsIHVzZUxMSW50LCAgdHJ1ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBMTElOVCB0
byBiZSB1c2VkIGlmIHRydWUiKSBcCi0gICAgdihib29sLCB1c2VKSVQsICAgIHRydWUsIE5vcm1h
bCwgImFsbG93cyB0aGUgYmFzZWxpbmUgSklUIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKKyAgICB2
KGJvb2wsIHVzZUpJVCwgICAgdHJ1ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBleGVjdXRhYmxlIHBh
Z2VzIHRvIGJlIGFsbG9jYXRlZCBmb3IgSklUIGFuZCB0aHVua3MgaWYgdHJ1ZSIpIFwKKyAgICB2
KGJvb2wsIHVzZUJhc2VsaW5lSklULCB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIGJhc2VsaW5l
IEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAgICAgdihib29sLCB1c2VERkdKSVQsIHRydWUs
IE5vcm1hbCwgImFsbG93cyB0aGUgREZHIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAgICAg
dihib29sLCB1c2VSZWdFeHBKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgUmVnRXhwIEpJ
VCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAgICAgdihib29sLCB1c2VET01KSVQsIHRydWUsIE5v
cm1hbCwgImFsbG93cyB0aGUgRE9NSklUIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBiM2IzMTk4Li41MGZlYjcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0xNzUs
NyArMTc1LDE1IEBAIHZvaWQgQkJRUGxhbjo6cHJlcGFyZSgpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgdW5zaWduZWQgaW1wb3J0RnVuY3Rpb25JbmRleCA9IG1fd2FzbVRvV2FzbUV4
aXRTdHVicy5zaXplKCk7CiAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJQcm9jZXNzaW5n
IGltcG9ydCBmdW5jdGlvbiBudW1iZXIgIiwgaW1wb3J0RnVuY3Rpb25JbmRleCwgIjogIiwgbWFr
ZVN0cmluZyhpbXBvcnQtPm1vZHVsZSksICI6ICIsIG1ha2VTdHJpbmcoaW1wb3J0LT5maWVsZCkp
OwotICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKHdhc21Ub1dh
c20oaW1wb3J0RnVuY3Rpb25JbmRleCkpOworICAgICAgICBhdXRvIGJpbmRpbmcgPSB3YXNtVG9X
YXNtKGltcG9ydEZ1bmN0aW9uSW5kZXgpOworICAgICAgICBpZiAoVU5MSUtFTFkoIWJpbmRpbmcp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJpbmRpbmcuZXJyb3IoKSkgeworICAgICAgICAgICAg
Y2FzZSBCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVt
b3J5IGF0IGltcG9ydCAiLCBTdHJpbmc6Om51bWJlcihpbXBvcnRJbmRleCkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzLnVuY2hlY2tlZEFwcGVuZChiaW5kaW5n
LnZhbHVlKCkpOwogICAgIH0KIAogICAgIGNvbnN0IHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291
bnQgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CkBAIC0yODgs
MTkgKzI5NiwyOSBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBsb2NrZXIpCiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OkNvbXBpbGVkIHx8IG1fY3Vy
cmVudEluZGV4ID49IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uTG9jYXRpb25JbkJpbmFy
eS5zaXplKCkpOwogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJTdGFydGluZyBDb21wbGV0aW9u
Iik7CiAKLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGlsZWQpIHsKKyAgICBpZiAoIWZh
aWxlZCgpICYmIG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBpbGVkKSB7CiAgICAgICAgIGZvciAodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0
aW9uLT5mdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsK
ICAgICAgICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25D
b250ZXh0c1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRy
KTsKKyAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVu
dHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQmFzZTo6ZmFpbChsb2NrZXIsIG1ha2VTdHJpbmcoIk91dCBvZiBl
eGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihm
dW5jdGlvbkluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpD
b21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZl
ciwgKCJXZWJBc3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KS50b1N0cmluZygpLmFzY2lpKCkuZGF0
YSgpKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2lu
dEJ5cHJvZHVjdHMpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8ganNU
b1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9qc1RvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChm
dW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigq
Y29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZm
ZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzZTo6ZmFp
bChsb2NrZXIsIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSBpbiBmdW5jdGlv
biBlbnRyeXBvaW50IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKGZ1bmN0aW9uSW5kZXgpKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgICAgICBqc1RvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRp
b24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAg
ICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJKYXZhU2NyaXB0LT5XZWJBc3NlbWJseSBl
bnRyeXBvaW50WyVpXSAlcyIsIGZ1bmN0aW9uSW5kZXgsIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKSwKICAgICAgICAg
ICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0LmpzRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAppbmRleCA0ZWJmNTgxLi5k
OTY1MjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGlu
Zy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCkBA
IC01MCw3ICs1MCw3IEBAIHN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKEpJVCYg
aml0LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgR1BSUmVnIHJlc3VsCiAgICAgaml0LmxvYWRQdHIo
SklUOjpBZGRyZXNzKHJlc3VsdCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9y
dEZ1bmN0aW9uKGltcG9ydEluZGV4KSksIHJlc3VsdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCitFeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KcyhWTSog
dm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
ZnVuY3Rpb24gZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZl
bnRpb24uCiAgICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCkBAIC0xMTgsNyArMTE4LDEwIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBj
YWxsTGlua0luZm9zLCBTaWduYXR1CiAgICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxG
cmFtZUZvckNhdGNoKTsKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgp
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0ZhaWx1cmU6
Ok91dE9mTWVtb3J5KTsKKwogICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93
QmFkSTY0KTsKICAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgi
V2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBp
bXBvcnRJbmRleCkpOwogICAgICAgICB9CkBAIC0zMDIsNyArMzA1LDEwIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0lu
Zm9zLCBTaWduYXR1CiAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAg
ICBqaXQucmV0KCk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAoVU5MSUtFTFkobGlu
a0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCiAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhjYWxsLCBjYWxsRnVuYyk7CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRp
b25DYWxsLCBkb1Vud2luZGluZyk7CiAKQEAgLTU5Niw3ICs2MDIsMTAgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHdhc21Ub0pzKFZNKiB2bSwgQmFnPENhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5m
b3MsIFNpZ25hdHUKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAoVU5M
SUtFTFkocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChCaW5kaW5nRmFpbHVyZTo6T3V0T2ZNZW1vcnkpOworCiAgICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0tPmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBDb2RlTG9j
YXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKHNsb3dDYWxsKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luKHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpOwpAQCAtNjA2LDcgKzYxNSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTSogdm0sIEJhZzxDYWxsTGlua0luZm8+JiBj
YWxsTGlua0luZm9zLCBTaWduYXR1CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4
LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSkpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKK0V4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQg
aW1wb3J0SW5kZXgpCiB7CiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdz
ID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICBKSVQgaml0OwpAQCAtNjQ5LDcgKzY1
OCwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJ
bmRleCkKICAgICBqaXQubG9hZFB0cihzY3JhdGNoLCBzY3JhdGNoKTsKICAgICBqaXQuanVtcChz
Y3JhdGNoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKFVOTElLRUxZKHBhdGNoQnVmZmVyLmRpZEZh
aWxUb0FsbG9jYXRlKCkpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoQmluZGluZ0Zh
aWx1cmU6Ok91dE9mTWVtb3J5KTsKKwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCAoIldlYkFzc2VtYmx5LT5XZWJBc3NlbWJseSBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRp
bmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmgKaW5kZXggOWUy
OWEzMy4uNGUyNjJiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5o
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0
LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtMzgsOCArMzksMTIgQEAgY2xhc3MgQ2FsbExpbmtJbmZvOwog
CiBuYW1lc3BhY2UgV2FzbSB7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9XYXNtKHVu
c2lnbmVkIGltcG9ydEluZGV4KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTSos
IEJhZzxDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWdu
ZWQgaW1wb3J0SW5kZXgpOworZW51bSBjbGFzcyBCaW5kaW5nRmFpbHVyZSB7CisgICAgT3V0T2ZN
ZW1vcnksCit9OworCitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KTsKK0V4cGVjdGVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pzKFZNKiwgQmFnPENhbGxMaW5r
SW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRl
eCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCA2ZmQ5ZjA3Li5mNDJkM2YzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC04OCw3ICs4OCwxMiBAQCB2
b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgfQogCiAgICAgRW50cnlw
b2ludCBvbWdFbnRyeXBvaW50OwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53
YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpj
b250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OworICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7Cisg
ICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygiT3V0IG9mIGV4
ZWN1dGFibGUgbWVtb3J5IHdoaWxlIHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQgaW5kZXggIiwgU3Ry
aW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNv
bXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2Vt
Ymx5IE9NRyBmdW5jdGlvblslaV0gJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpKSwK
ICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmNwcAppbmRleCBiNzIxZTBlLi5mOTFlNmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcApAQCAt
NTgsNyArNTgsMTYgQEAgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6SlNXZWJBc3NlbWJseUNvZGVC
bG9jayhWTSYgdm0sIFJlZjxXYXNtOjpDb2RlQmxvY2s+JiYgY28KICAgICBtX3dhc21Ub0pTRXhp
dFN0dWJzLnJlc2VydmVDYXBhY2l0eShtX2NvZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpOyArK2ltcG9ydEluZGV4KSB7CiAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24u
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLmF0KGltcG9ydEluZGV4KTsKLSAgICAgICAg
bV93YXNtVG9KU0V4aXRTdHVicy51bmNoZWNrZWRBcHBlbmQoV2FzbTo6d2FzbVRvSnMoJnZtLCBt
X2NhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRJbmRleCkpOworICAgICAgICBh
dXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9Kcygmdm0sIG1fY2FsbExpbmtJbmZvcywgc2lnbmF0
dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFiaW5kaW5nKSkg
eworICAgICAgICAgICAgc3dpdGNoIChiaW5kaW5nLmVycm9yKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgV2FzbTo6QmluZGluZ0ZhaWx1cmU6Ok91dE9mTWVtb3J5OgorICAgICAgICAgICAgICAgIG1f
ZXJyb3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkiKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIG1fd2FzbVRvSlNF
eGl0U3R1YnMudW5jaGVja2VkQXBwZW5kKGJpbmRpbmcudmFsdWUoKSk7CiAgICAgICAgIGltcG9y
dFdhc21Ub0pTU3R1YihpbXBvcnRJbmRleCkgPSBtX3dhc21Ub0pTRXhpdFN0dWJzW2ltcG9ydElu
ZGV4XS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgKaW5k
ZXggY2U3Yjk5NS4uODUyZWFmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaApAQCAtNzQsMTUgKzc0LDE4IEBAIHB1
YmxpYzoKIAogICAgIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgeworICAgICAgICBB
U1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+anNFbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAg
IH0KICAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwogICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIH0KIAogICAgIFdhc206Oldhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uIHdhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQodW5zaWduZWQgaW1wb3J0
SW5kZXgpCiAgICAgeworICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIHJldHVy
biAmaW1wb3J0V2FzbVRvSlNTdHViKGltcG9ydEluZGV4KTsKICAgICB9CiAKQEAgLTk1LDYgKzk4
LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJKU0NhbGxJQ3MoVk0mKTsKIAorICAgIGJv
b2wgcnVubmFibGUoKSBjb25zdCB7IHJldHVybiAhbV9lcnJvck1lc3NhZ2U7IH0KKworICAgIFN0
cmluZyBlcnJvck1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFydW5uYWJsZSgpKTsK
KyAgICAgICAgcmV0dXJuIG1fZXJyb3JNZXNzYWdlOworICAgIH0KKwogcHJpdmF0ZToKICAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiwgUmVmPFdhc206OkNvZGVCbG9jaz4mJiwgY29uc3Qg
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mKTsKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwpAQCAt
MTI2LDYgKzEzNyw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zj4gbV93YXNtVG9KU0V4aXRTdHViczsKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5j
b25kaXRpb25hbEZpbmFsaXplcjsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5m
b3M7CisgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcAppbmRleCAzNWE1YjNjLi4wZTg3NzM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAg
LTExMiw2ICsxMTIsMTAgQEAgdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplQ3Jl
YXRpb24oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZjxXYXNtOjoKICAgICAgICAgbV9jb2Rl
QmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNv
ZGVCbG9jayA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZSh2bSwgd2FzbUNvZGVCbG9j
ay5jb3B5UmVmKCksIG1fbW9kdWxlLmdldCgpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFjb2Rl
QmxvY2stPnJ1bm5hYmxlKCkpKSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgSlNXZWJBc3NlbWJseUxpbmtFcnJvcjo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmpl
Y3QoKS0+V2ViQXNzZW1ibHlMaW5rRXJyb3JTdHJ1Y3R1cmUoKSwgY29kZUJsb2NrLT5lcnJvck1l
c3NhZ2UoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIG1fY29k
ZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICAgICAgbW9kdWxlKCktPnNldENv
ZGVCbG9jayh2bSwgbWVtb3J5TW9kZSgpLCBjb2RlQmxvY2spOwogICAgIH0KZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1ZDQ3ODI0Li45ODhmYTJh
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTctMDYtMjcgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29t
PgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBydW5uaW5nIG91dCBvZiBleGVjdXRhYmxlIG1lbW9y
eSBzaG91bGQgdGhyb3cgT29NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzE1MzcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyOTYzMzM4PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4t
anNjLXN0cmVzcy10ZXN0czogYWRkIGEgY29uZmlndXJhdGlvbiB3aGljaCBydW5zIHRoZQorICAg
ICAgICB0ZXN0cyB1bmRlciBsaW1pdGVkIGV4ZWN1dGFibGUgbWVtb3J5IGFuZCBhdm9pZHMgbm9u
LVdlYkFzc2VtYmx5CisgICAgICAgIGNvZGUgZ2VuZXJhdGlvbiBzbyB0aGF0IHdlIG1vcmUgcmVs
aWFibHkgcnVuIG91dCBvZiBleGVjdXRhYmxlCisgICAgICAgIG1lbW9yeSBpbiBXZWJBc3NlbWJs
eS4KKwogMjAxNy0wNi0yMiAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJFR1JFU1NJT04gKHIyMTg0MTkpOiA3IGxlYWtzIGluIFBsdWdpbkxvYWRDbGllbnRQ
b2xpY2llcy5tbQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKaW5kZXggYWMzODYzYS4uNTQ1
NjczMCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cworKysg
Yi9Ub29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCkBAIC0xMjMyLDcgKzEyMzIsNiBA
QCBkZWYgcnVuV2ViQXNzZW1ibHlTcGVjVGVzdChtb2RlKQogICAgIHdoZW4gOnNraXAKICAgICAg
ICAgcmV0dXJuCiAgICAgZW5kCi0KICAgICByZXR1cm4gaWYgISRqaXRUZXN0cwogICAgIHJldHVy
biBpZiAhJGlzRlRMUGxhdGZvcm0KICAgICBwcmVwYXJlRXh0cmFBYnNvbHV0ZUZpbGVzKFdBU01U
RVNUU19QQVRILCBbIndhc20uanNvbiJdKQpAQCAtMTI0NCwxMCArMTI0MywyMiBAQCBkZWYgcnVu
V2ViQXNzZW1ibHlTcGVjVGVzdChtb2RlKQogICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXMo
aGFybmVzcy5tYXAgeyB8ZnwgIi4uLy4uL3NwZWMtaGFybmVzcy8iICsgZiB9LCAkY29sbGVjdGlv
bikKIAogICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJkZWZhdWx0LXdhc20iLCBub2lzeU91dHB1
dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAqRlRMX09QVElPTlMpCi0gICAgcnVuV2l0
aE91dHB1dEhhbmRsZXIoIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCBub2lzeU91dHB1
dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250
ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKLSAgICBydW5XaXRo
T3V0cHV0SGFuZGxlcigid2FzbS1lYWdlci1qZXR0aXNvbiIsIG5vaXN5T3V0cHV0SGFuZGxlciwg
Ii4uL3NwZWMtaGFybmVzcy5qcyIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xk
QWdlPXRydWUiLCAqRlRMX09QVElPTlMpCi0gICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndhc20t
bm8tY2FsbC1pYyIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICIt
LXVzZUNhbGxJQ3NGb3JXZWJBc3NlbWJseVRvSlNDYWxscz1mYWxzZSIsICpGVExfT1BUSU9OUykK
LSAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1uby10bHMtY29udGV4dCIsIG5vaXN5T3V0
cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29u
dGV4dD1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAgICBpZiAhJHF1aWNrTW9kZQorICAgICAgcnVu
V2l0aE91dHB1dEhhbmRsZXIoIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCBub2lzeU91
dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAgIi0tdXNlRmFzdFRMU0Zvcldhc21D
b250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKKyAgICAgIHJ1
bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgbm9pc3lPdXRwdXRIYW5k
bGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVl
VG9PbGRBZ2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVy
KCJ3YXNtLW5vLWNhbGwtaWMiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3Mu
anMiLCAiLS11c2VDYWxsSUNzRm9yV2ViQXNzZW1ibHlUb0pTQ2FsbHM9ZmFsc2UiLCAqRlRMX09Q
VElPTlMpCisgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1uby10bHMtY29udGV4dCIs
IG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLXVzZUZhc3RUTFNG
b3JXYXNtQ29udGV4dD1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAgICBlbmQKK2VuZAorCitkZWYg
cnVuV2ViQXNzZW1ibHlMb3dFeGVjdXRhYmxlTWVtb3J5KCpvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpCisgICAgcmV0dXJuIGlmICEkaml0VGVzdHMKKyAgICByZXR1cm4gaWYgISRpc0ZUTFBs
YXRmb3JtCisgICAgbW9kdWxlcyA9IERpcltXQVNNVEVTVFNfUEFUSCArICIqLmpzIl0ubWFwIHsg
fGZ8IEZpbGUuYmFzZW5hbWUoZikgfQorICAgIHByZXBhcmVFeHRyYUFic29sdXRlRmlsZXMoV0FT
TVRFU1RTX1BBVEgsIFsid2FzbS5qc29uIl0pCisgICAgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxl
cyhtb2R1bGVzLm1hcCB7IHxmfCAiLi4vIiArIGYgfSwgJGNvbGxlY3Rpb24pCisgICAgIyBPbmx5
IGxldCBXZWJBc3NlbWJseSBnZXQgZXhlY3V0YWJsZSBtZW1vcnkuCisgICAgcnVuKCJkZWZhdWx0
LXdhc20iLCAiLS11c2VDb25jdXJyZW50R0M9MCIgLCAiLS11c2VDb25jdXJyZW50SklUPTAiLCAi
LS1qaXRNZW1vcnlSZXNlcnZhdGlvblNpemU9MTUwMDAiLCAiLS11c2VCYXNlbGluZUpJVD0wIiwg
Ii0tdXNlREZHSklUPTAiLCAiLS11c2VGVExKSVQ9MCIsICItbSIpCiBlbmQKIAogZGVmIHJ1bkNo
YWtyYShtb2RlLCBleGNlcHRpb24sIGJhc2VsaW5lRmlsZSwgZXh0cmFGaWxlcykKLS0gCjIuMTAu
MQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>