<?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>201799</bug_id>
          
          <creation_ts>2019-09-14 09:30:01 -0700</creation_ts>
          <short_desc>Change WebAssembly calling conventions</short_desc>
          <delta_ts>2019-09-18 14:00: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>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>201943</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>annulen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1570884</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-14 09:30:01 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570885</commentid>
    <comment_count>1</comment_count>
      <attachid>378800</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-14 09:36:18 -0700</bug_when>
    <thetext>Created attachment 378800
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570886</commentid>
    <comment_count>2</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-14 09:36:48 -0700</bug_when>
    <thetext>It seems like my last refactoring broke everything, but I&apos;ll leave this WIP patch here for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570919</commentid>
    <comment_count>3</comment_count>
      <attachid>378807</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-14 23:24:29 -0700</bug_when>
    <thetext>Created attachment 378807
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570983</commentid>
    <comment_count>4</comment_count>
      <attachid>378828</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-15 15:44:59 -0700</bug_when>
    <thetext>Created attachment 378828
Patch

Attaching the rebased patch, but it seems that tests are not starting locally. Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570995</commentid>
    <comment_count>5</comment_count>
      <attachid>378828</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-09-15 18:32:08 -0700</bug_when>
    <thetext>Comment on attachment 378828
Patch

Attachment 378828 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/13034878

New failing tests:
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above-no-consts.wasm)-wasm-collect-continuously
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-multiple-enclosed-contexts.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above-no-consts.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/js-api/Instance.imports.exports.unicode.js.wasm-collect-continuously
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-multiple-enclosed-contexts.wasm)-default-wasm
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-collect-continuously
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above-no-consts.wasm)-wasm-eager-jettison
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above-no-consts.wasm)-wasm-no-call-ic
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop.wasm)-wasm-slow-memory
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-multiple-enclosed-contexts.wasm)-wasm-eager
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop.wasm)-default-wasm
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-eager-jettison
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above-no-consts.wasm)-wasm-eager
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-no-tls-context
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-eager
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop.wasm)-wasm-no-call-ic
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-multiple-enclosed-contexts.wasm)-wasm-no-tls-context
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop.wasm)-wasm-collect-continuously
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-multiple-enclosed-contexts.wasm)-wasm-slow-memory
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-multiple-enclosed-contexts.wasm)-wasm-collect-continuously
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-multiple-enclosed-contexts.wasm)-wasm-no-air
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop.wasm)-wasm-eager-jettison
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-slow-memory
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above-no-consts.wasm)-wasm-no-air
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above-no-consts.wasm)-default-wasm
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-default-wasm
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop.wasm)-wasm-no-air
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-multiple-enclosed-contexts.wasm)-wasm-eager-jettison
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above-no-consts.wasm)-wasm-no-tls-context
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop.wasm)-wasm-eager
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-no-cjit-yes-tls-context
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop.wasm)-wasm-no-tls-context
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-no-air
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above.wasm)-wasm-no-call-ic
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-inner-loop-branch-above-no-consts.wasm)-wasm-slow-memory
wasm.yaml/wasm/wast-tests/harness.js.(osr-entry-multiple-enclosed-contexts.wasm)-wasm-no-call-ic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571019</commentid>
    <comment_count>6</comment_count>
      <attachid>378844</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-15 22:40:52 -0700</bug_when>
    <thetext>Created attachment 378844
Patch

Fix OMG osr entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571055</commentid>
    <comment_count>7</comment_count>
      <attachid>378844</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-16 02:31:50 -0700</bug_when>
    <thetext>Comment on attachment 378844
Patch

Can you also ensure that this change keeps SamplingProfiler. work? SamplingProfiler relies on that WasmCallee exists on Callee place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571084</commentid>
    <comment_count>8</comment_count>
      <attachid>378859</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-16 07:31:22 -0700</bug_when>
    <thetext>Created attachment 378859
Patch

Fix WebKit build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571093</commentid>
    <comment_count>9</comment_count>
      <attachid>378861</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-16 07:55:31 -0700</bug_when>
    <thetext>Created attachment 378861
Patch

Fix CMake build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571142</commentid>
    <comment_count>10</comment_count>
      <attachid>378867</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-16 09:55:59 -0700</bug_when>
    <thetext>Created attachment 378867
Patch

Fix CMake build (take 2).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571151</commentid>
    <comment_count>11</comment_count>
      <attachid>378868</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-16 10:01:01 -0700</bug_when>
    <thetext>Created attachment 378868
Patch

Fix CMake build (take 3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571156</commentid>
    <comment_count>12</comment_count>
      <attachid>378869</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-16 10:10:03 -0700</bug_when>
    <thetext>Created attachment 378869
Patch

Fix CMake build (take 4).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571169</commentid>
    <comment_count>13</comment_count>
      <attachid>378869</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-16 10:36:35 -0700</bug_when>
    <thetext>Comment on attachment 378869
Patch

I&apos;ve confirmed that the sampling profiler still works as expected and the bots seem happy (the wincairo failure seems like an infra failure). I think this is actually good for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571649</commentid>
    <comment_count>14</comment_count>
      <attachid>378869</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-17 13:19:23 -0700</bug_when>
    <thetext>Comment on attachment 378869
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        - Callee writes to call frame: wasm-to-wasm stub, JS-to-wasm stub (callee frame), wasm-to-JS stub, OMG osr entry

nit: &quot;wasm-to-wasm stub&quot; =&gt; &quot;inter-module wasm-to-wasm stub&quot;
(since you specify intra above)

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        Additionally, also change it so that the callee keeps track of its callers, instead of having a global mapping

&quot;also change&quot; =&gt; maybe something like &quot;this patch also changes&quot;

&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:331
&gt; +

nit: no newline here

&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.h:142
&gt; +    const Vector&lt;RefPtr&lt;BBQCallee&gt;&gt;* m_callees { nullptr };

this is never actually null AFAICT. Why not make it a reference?

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:71
&gt; +    // At this point, we have been called, so ReturnPC is on the stack, but have not yet pushed the base pointer,

&quot;but have&quot; =&gt; &quot;but we have&quot;
&quot;base pointer&quot; =&gt; &quot;frame pointer&quot;

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:73
&gt; +    jit.storePtr(callee, JIT::Address(JIT::stackPointerRegister, CallFrameSlot::callee * sizeof(Register) - sizeof(CPURegister)));

why sizeof(Register) and sizeof(CPURegister) on same line? Why not use one?

&gt; Source/JavaScriptCore/wasm/WasmOMGForOSREntryPlan.cpp:109
&gt; +            BBQCallee&amp; targetCallee = m_codeBlock-&gt;wasmBBQCalleeFromFunctionIndexSpace(call.targetFunctionIndexSpace);

why just BBQ? What if it&apos;s already OMG compiled?

&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:122
&gt; +            BBQCallee&amp; targetCallee = m_codeBlock-&gt;wasmBBQCalleeFromFunctionIndexSpace(call.targetFunctionIndexSpace);

why BBQ callee? What if the target is already OMG compiled?

&gt; Source/JavaScriptCore/wasm/WasmOperations.cpp:203
&gt; +    *(stackPointer + CallFrameSlot::callee - 1) = CalleeBits::boxWasm(&amp;osrEntryCallee);

this math relies on sizeof void*. You should instead rely on CPURegister, since this code is wrong for arm64_32.

So something like &quot;CPURegister* stackPointer = ...;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571659</commentid>
    <comment_count>15</comment_count>
      <attachid>378869</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-17 13:33:19 -0700</bug_when>
    <thetext>Comment on attachment 378869
Patch

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

Thanks for reviewing it!

&gt;&gt; Source/JavaScriptCore/ChangeLog:16
&gt;&gt; +        - Callee writes to call frame: wasm-to-wasm stub, JS-to-wasm stub (callee frame), wasm-to-JS stub, OMG osr entry
&gt; 
&gt; nit: &quot;wasm-to-wasm stub&quot; =&gt; &quot;inter-module wasm-to-wasm stub&quot;
&gt; (since you specify intra above)

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:18
&gt;&gt; +        Additionally, also change it so that the callee keeps track of its callers, instead of having a global mapping
&gt; 
&gt; &quot;also change&quot; =&gt; maybe something like &quot;this patch also changes&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.h:142
&gt;&gt; +    const Vector&lt;RefPtr&lt;BBQCallee&gt;&gt;* m_callees { nullptr };
&gt; 
&gt; this is never actually null AFAICT. Why not make it a reference?

Good point, fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:71
&gt;&gt; +    // At this point, we have been called, so ReturnPC is on the stack, but have not yet pushed the base pointer,
&gt; 
&gt; &quot;but have&quot; =&gt; &quot;but we have&quot;
&gt; &quot;base pointer&quot; =&gt; &quot;frame pointer&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:73
&gt;&gt; +    jit.storePtr(callee, JIT::Address(JIT::stackPointerRegister, CallFrameSlot::callee * sizeof(Register) - sizeof(CPURegister)));
&gt; 
&gt; why sizeof(Register) and sizeof(CPURegister) on same line? Why not use one?

Because they might be different. sizeof(Register) is always 8 and sizeof(CPURegister) might be 4 or 8 depending on the arch. ReturnPC is sizeof(CPURegister) while callee, codeblock and argumentCount are sizeof(Register).

&gt;&gt; Source/JavaScriptCore/wasm/WasmOMGForOSREntryPlan.cpp:109
&gt;&gt; +            BBQCallee&amp; targetCallee = m_codeBlock-&gt;wasmBBQCalleeFromFunctionIndexSpace(call.targetFunctionIndexSpace);
&gt; 
&gt; why just BBQ? What if it&apos;s already OMG compiled?

We call addAndLinkCaller below, which checks if the callee has a replacement. In which case, it will link it against the OMG callee. But it always the BBQ callee who holds the callers.

&gt;&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:122
&gt;&gt; +            BBQCallee&amp; targetCallee = m_codeBlock-&gt;wasmBBQCalleeFromFunctionIndexSpace(call.targetFunctionIndexSpace);
&gt; 
&gt; why BBQ callee? What if the target is already OMG compiled?

Replied above.

&gt;&gt; Source/JavaScriptCore/wasm/WasmOperations.cpp:203
&gt;&gt; +    *(stackPointer + CallFrameSlot::callee - 1) = CalleeBits::boxWasm(&amp;osrEntryCallee);
&gt; 
&gt; this math relies on sizeof void*. You should instead rely on CPURegister, since this code is wrong for arm64_32.
&gt; 
&gt; So something like &quot;CPURegister* stackPointer = ...;&quot;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571673</commentid>
    <comment_count>16</comment_count>
      <attachid>378986</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-17 13:55:46 -0700</bug_when>
    <thetext>Created attachment 378986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571716</commentid>
    <comment_count>17</comment_count>
      <attachid>378986</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-17 15:28:08 -0700</bug_when>
    <thetext>Comment on attachment 378986
Patch

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

&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:123
&gt; +            BBQCallee&amp; targetCallee = m_codeBlock-&gt;wasmBBQCalleeFromFunctionIndexSpace(call.targetFunctionIndexSpace);
&gt; +            targetCallee.addAndLinkCaller(holder, linkBuffer, call.unlinkedMoveAndCall);

this targetCallee is different than the one below. The below is what we&apos;re compiling. This targetCallee is what OMG is going to call. It seems wrong to make OMG compile always call BBQ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571723</commentid>
    <comment_count>18</comment_count>
      <attachid>378986</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-17 15:59:52 -0700</bug_when>
    <thetext>Comment on attachment 378986
Patch

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

r=me

&gt;&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:123
&gt;&gt; +            targetCallee.addAndLinkCaller(holder, linkBuffer, call.unlinkedMoveAndCall);
&gt; 
&gt; this targetCallee is different than the one below. The below is what we&apos;re compiling. This targetCallee is what OMG is going to call. It seems wrong to make OMG compile always call BBQ...

I see. addAndLinkCaller looks for a replacement. Seems like kinda a weird paradigm, but it&apos;s OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571724</commentid>
    <comment_count>19</comment_count>
      <attachid>378986</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-17 16:01:54 -0700</bug_when>
    <thetext>Comment on attachment 378986
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:123
&gt;&gt;&gt; +            targetCallee.addAndLinkCaller(holder, linkBuffer, call.unlinkedMoveAndCall);
&gt;&gt; 
&gt;&gt; this targetCallee is different than the one below. The below is what we&apos;re compiling. This targetCallee is what OMG is going to call. It seems wrong to make OMG compile always call BBQ...
&gt; 
&gt; I see. addAndLinkCaller looks for a replacement. Seems like kinda a weird paradigm, but it&apos;s OK

We could do it explicitly, by passing targetCallee.replacement(), but I thought that seemed unnecessary. I wanted to keep all callers in the BBQCallee so that we don&apos;t need to iterate through all callees.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571727</commentid>
    <comment_count>20</comment_count>
      <attachid>379003</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-09-17 16:08:43 -0700</bug_when>
    <thetext>Created attachment 379003
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571745</commentid>
    <comment_count>21</comment_count>
      <attachid>379003</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-17 16:52:35 -0700</bug_when>
    <thetext>Comment on attachment 379003
Patch for landing

Clearing flags on attachment: 379003

Committed r250002: &lt;https://trac.webkit.org/changeset/250002&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571746</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-17 16:52:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571747</commentid>
    <comment_count>23</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-17 16:53:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/55459868&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572065</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-18 14:00:26 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 201943</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378800</attachid>
            <date>2019-09-14 09:36:18 -0700</date>
            <delta_ts>2019-09-14 23:24:26 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-201799-20190914093616.patch</filename>
            <type>text/plain</type>
            <size>107850</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NjU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZWM5MTUzZGI3ZmEwNjM5MDdjMTU4ZTYwM2M5ZDE2N2I0ZWY3N2E5Li4xOTk2ZmYwOWRmYWZhNjY1
YTk0ZjEyNGQ2YjhjZDkzNDdjY2I5ZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OSBAQAorMjAxOS0wOS0xNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiAg
SG93ZXZlciwgdGhpcyB3b24ndCB3b3JrIHdoZW4KKyAgICAgICAgd2UgaGF2ZSB0aGUgaW50ZXJw
cmV0ZXIsIHNpbmNlIHdlIG5lZWQgdGhlIGNhbGxlZSBpbiBvcmRlciB0byBrbm93IHdoaWNoIGZ1
bmN0aW9uIGFyZSB3ZSBleGVjdXRpbmcuCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUg
Y2FsbGluZyBjb252ZW50aW9ucyBpbiBwcmVwYXJhdGlvbiBmb3IgdGhlIGludGVycHJldGVyLCBz
byB0aGF0IHRoZSBjYWxsZXIKKyAgICAgICAgd3JpdGVzIHRoZSBjYWxsZWUgaW50byB0aGUgY2Fs
bCBmcmFtZS4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBpdCBhbHNvIGNoYW5nZXMgaXQgc28gdGhh
dCB0aGUgY2FsbGVlIGtlZXBzIHRyYWNrIG9mIGl0cyBjYWxsZXJzLCBpbnN0ZWFkIG9mIGhhdmlu
ZworICAgICAgICBhIGdsb2JhbCBtYXBwaW5nIG9mIGNhbGxzIGluIHRoZSBXYXNtOjpDb2RlQmxv
Y2suCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsZWVCaXRzLmg6CisgICAgICAgIChKU0M6
OkNhbGxlZUJpdHM6OmJveFdhc20pOgorICAgICAgICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlQWlyKToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBh
cnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAg
ICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFu
OjpCQlFQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6cHJlcGFyZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgorICAgICAgICAoSlND
OjpXYXNtOjpCQlFQbGFuOjpjb21wbGV0ZSk6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5o
OgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmg6CisgICAgICAgIChKU0M6Oldh
c206OkJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5k
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvV2FzbSk6CisgICAgICAgICogd2Fz
bS9XYXNtQ2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjpDYWxsZWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpyZXBhdGNoTW92ZSk6CisgICAgICAgIChKU0M6Oldhc206OnJl
cGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRQ2FsbGVlOjphZGRDYWxsZXIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCQlFDYWxsZWU6OmFkZEFuZExpbmtDYWxsZXIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFDYWxsZWU6OnJlcGF0Y2hDYWxsZXJzKToKKyAgICAgICAgKiB3YXNt
L1dhc21DYWxsZWUuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGVlOjpzZXRFbnRyeXBvaW50
KToKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oOgorICAgICAgICAoSlND
OjpXYXNtOjpDYWxsaW5nQ29udmVudGlvbjo6c2V0dXBGcmFtZUluUHJvbG9ndWUgY29uc3QpOgor
ICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkNv
ZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjplbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpiYnFD
YWxsZWVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjp3YXNtQkJRQ2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9j
azo6Y2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgICog
d2FzbS9XYXNtRW1iZWRkZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZDYWxs
ZWVMb2FkTG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZldhc21DYWxsZWVMb2FkTG9jYXRpb24pOgor
ICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQbGFuKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6T01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dh
c21PTUdGb3JPU1JFbnRyeVBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6T01HUGxhbik6CisgICAgICAgIChKU0M6Oldh
c206Ok9NR1BsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dl
ck9NR1JlcGxhY2VtZW50Q29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPU1JF
bnRyeU5vdyk6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2Fz
bS5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTktMDkt
MDkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBQ
cm9taXNlIHJlc29sdmUvcmVqZWN0IGZ1bmN0aW9ucyBzaG91bGQgYmUgY3JlYXRlZCBtb3JlIGVm
ZmljaWVudGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbGVlQml0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxlZUJp
dHMuaAppbmRleCA4NWMzZWQ4OGMxYzJiZjMyMWU2OTJkYjczZjJlZWM5N2YwMGMwNzRlLi5mNDIz
N2QyN2NiOTYxMWU5ZGYwOTQyMzNhMWU0ZTUxMmNlMTgwYWZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbGVlQml0cy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsZWVCaXRzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVi
bGljOgogICAgIH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBzdGF0aWMgdm9pZCog
Ym94V2FzbShXYXNtOjpDYWxsZWUqIGNhbGxlZSkKKyAgICBzdGF0aWMgdm9pZCogYm94V2FzbShj
b25zdCBXYXNtOjpDYWxsZWUqIGNhbGxlZSkKICAgICB7CiAgICAgICAgIENhbGxlZUJpdHMgcmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihj
YWxsZWUpIHwgVGFnQml0c1dhc20pKTsKICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc1dhc20oKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNw
cAppbmRleCBmYTE1ZWM4NGM4NzYxMDZjYTQzYTQyZGYxYjIwMDYwM2EwMzllNmZjLi43ZDlkYzcy
ZTRkNzhhZDAwMmMwYjFkNGEzODlmMDI5Nzk2Mzg4ZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTIyOSw3ICsyMjksNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAg
ICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKTsK
KyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1
cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBWZWN0b3I8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNp
Z25hdHVyZSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJn
dW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTYzOSw3ICs2MzksOCBAQCBwcml2
YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIEJh
c2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIFZlY3RvcjxUeXBlZFRtcD4g
bV9sb2NhbHM7Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24g
aW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV9vdXRnb2luZ0NhbGxzOworICAgIGNvbnN0IFZl
Y3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIG1fd2FzbVRvV2Fz
bUV4aXRTdHViczsKICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9
OwogICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BS
UmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKQEAgLTcwOCwx
NCArNzA5LDE1IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluc3Rh
bmNlKEJhc2ljQmxvY2sqIGJsb2NrLCBUeXBlZFRtcCBpbnN0CiAgICAgZW1pdFBhdGNocG9pbnQo
YmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CiB9CiAKLUFpcklSR2VuZXJhdG9y
OjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9k
ZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSkKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIG91dGdvaW5nQ2FsbHMsIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMsIE1lbW9yeU1vZGUg
bW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dX
YXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUpCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9mdW5j
dGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiAgICAgLCBtX3RpZXJVcCh0aWVyVXApCiAgICAgLCBt
X3Byb2MocHJvY2VkdXJlKQogICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCi0gICAgLCBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgICwgbV9v
dXRnb2luZ0NhbGxzKG91dGdvaW5nQ2FsbHMpCisgICAgLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMo
d2FzbVRvV2FzbUV4aXRTdHVicykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8uaW1w
b3J0RnVuY3Rpb25Db3VudCgpKQogewogICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2RlLmFkZEJs
b2NrKCk7CkBAIC03NjEsMTYgKzc2Myw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvCiAgICAg
UmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0
ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgewogICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgIGNvZGUuZW1p
dERlZmF1bHRQcm9sb2d1ZShqaXQpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdQUlJlZyBj
YWxsZWVHUFIgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7
Ci0gICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOwotICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3Zl
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9j
YXRpb24pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICAgICAgICAg
IGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKTsKLSAgICAgICAgfQorICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAKICAgICAgICAgewogICAgICAg
ICAgICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3YXNtRnJhbWVTaXplID0gbV9jb2RlLmZyYW1l
U2l6ZSgpOwpAQCAtMTkzNiw4ICsxOTI5LDYgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2Fs
bCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAg
ICBpZiAocmV0dXJuVHlwZSAhPSBUeXBlOjpWb2lkKQogICAgICAgICByZXN1bHQgPSB0bXBGb3JU
eXBlKHJldHVyblR5cGUpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwotCiAg
ICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjpt
YXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNp
emUoKSkpOwogCkBAIC0xOTczLDExICsxOTY0LDEyIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
CiAgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOwogICAgICAg
ICAgICAgfSk7CiAKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1YiA9IG1fd2Fz
bVRvV2FzbUV4aXRTdHVic1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbd2FzbVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVO
ZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQo
eyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBm
dW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBqaXQuY2FsbChXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbY2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0
aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPih3YXNtVG9XYXNtRXhpdFN0dWIuY29kZSgpKSk7CiAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMjAyNCwxOCArMjAxNiwy
MCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0g
YWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CiAgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJl
Z2lzdGVycysrOwogCiAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOwog
ICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1
cm5UeXBlLCBwYXRjaHBvaW50LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6
VmFsdWVSZXAgcmVwKSB7CiAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAg
fSk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2Fs
bCgpOwotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9
KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4qIG91dGdvaW5nQ2FsbHMgPSAmbV9vdXRnb2luZ0NhbGxzOworICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoW291dGdvaW5nQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAg
ICAgICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoY2FsbGVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihS
ZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBjYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJD
YWxsKCk7CisgICAgICAgICAgICBvdXRnb2luZ0NhbGxzLT5hcHBlbmQoeyBmdW5jdGlvbkluZGV4
LCB7IG1vdmVMb2NhdGlvbiwgY2FsbExvY2F0aW9uIH19KTsKICAgICAgICAgfSk7CiAKICAgICAg
ICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RG
TW92ZShwYXRjaEFyZ3MpKTsKQEAgLTIwODksNiArMjA4Myw3IEBAIGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hCiAgICAgfSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gZzY0KCk7
CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlID0gZzY0KCk7CiAgICAgewogICAgICAgICBFeHBy
ZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IGc2NCgpOwogICAgICAgICAvLyBDb21w
dXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZv
ci4KQEAgLTIwOTcsNiArMjA5Miw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAgICAgICAg
IGFwcGVuZChBZGQ2NCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgY2FsbGVlU2lnbmF0dXJlSW5k
ZXgpOwogICAgICAgICAKICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWdu
YXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBv
aW50TG9hZExvY2F0aW9uKCkpLCBjYWxsZWVDb2RlKTsgLy8gUG9pbnRlciB0byBjYWxsZWUgY29k
ZS4KKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwg
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZDYWxsZWVMb2FkTG9jYXRpb24o
KSksIGNhbGxlZSk7IC8vIFBvaW50ZXIgdG8gY2FsbGVlCiAKICAgICAgICAgLy8gQ2hlY2sgdGhh
dCB0aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJh
cCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdz
IG5vdCBpbml0aWFsaXplZC4KICAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhh
bmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6
aW52YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzcyMTAKQEAgLTIxODksNiArMjE4NSwxMCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRD
YWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYQog
CiAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBlbWl0QXJnczsKICAgICBlbWl0QXJncy5hcHBl
bmQoY2FsbGVlQ29kZSk7CisKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZSksIGNh
bGxlZSk7CisgICAgZW1pdEFyZ3MuYXBwZW5kKHsgY2FsbGVlLCBCMzo6VmFsdWVSZXA6OnN0YWNr
QXJndW1lbnQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkgfSk7CisKICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIo
KS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaCwgdG9UbXBWZWN0b3IoYXJncyks
IFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgewogICAgICAgICBlbWl0QXJncy5hcHBl
bmQoeyB0bXAsIHJlcCB9KTsKICAgICB9KTsKQEAgLTIyMjksOSArMjIyOSw5IEBAIGF1dG8gQWly
SVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KICAgICByZXR1cm4gQjM6Ok9yaWdp
bigpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5n
dGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3Vu
dCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorRXhwZWN0
ZWQ8RW50cnlwb2ludCwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250
ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNp
emVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1
YnMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXBDb3VudCwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlx
dWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKKyAgICBFbnRyeXBvaW50IHJlc3VsdDsKIAogICAgIGNv
bXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxs
SGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBt
YWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKQEAgLTIyNTIsNyArMjI1Miw3IEBAIEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGVBaXIoQ29tcGlsYXRpCiAgICAgCiAgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKE9wdGlvbnM6
OndlYkFzc2VtYmx5QkJRQWlyT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBBaXJJUkdlbmVy
YXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhj
ZXB0aW9uLCBzaWduYXR1cmUpOworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8s
IHByb2NlZHVyZSwgY29tcGlsYXRpb25Db250ZXh0Lm91dGdvaW5nQ2FsbHMsIHdhc21Ub1dhc21F
eGl0U3R1YnMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcENvdW50LCB0aHJvd1dhc21FeGNl
cHRpb24sIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBh
cnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVy
ZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7
CiAKQEAgLTIyNzIsNyArMjI3Miw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpCiAgICAgICAg
IEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOwogICAgICAgICBCMzo6QWlyOjpn
ZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKICAg
ICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2Nl
ZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2Fs
bGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7
CisgICAgICAgIHJlc3VsdC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVn
aXN0ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAppbmRleCAzNmE3
M2RkNThhMzFiNDE1YTNiYTlhYWZlNThmMWNhMGQxZWFiNWNhLi4wZGRiNTgxN2NmZTk5ZmFjOWI4
OWJkMzMxZGRkYzQ4NTQyM2ZhZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQWlySVJHZW5lcmF0b3IuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYs
IGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNt
RXhjZXB0aW9uID0gbnVsbHB0cik7CitFeHBlY3RlZDxFbnRyeXBvaW50LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90
LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRp
b24gPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDgwZTg0
ODg3ZGIwZTEyMTVlYjhiZGQ0ZmVhMjk1YjU4Y2NmOWFlYTMuLjQxZDlmYjhmY2UzZWNhZjNlMmVl
NWQxZDgyNmUyNDhlZGI2MDA4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTI3MSw3ICsyNzEsNiBAQCBwdWJsaWM6CiAKICAg
ICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9y
VHlwZT4gVW5leHBlY3RlZFJlc3VsdDsKLSAgICB0eXBlZGVmIEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAgdHlwZWRlZiBF
eHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdApAQCAtMjg0LDcgKzI4Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAg
ICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBN
ZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2ln
bmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlv
bik7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVy
ZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqLCBUaHJvd1dh
c21FeGNlcHRpb24pOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
QXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTM4Miw2ICszODEsNyBAQCBw
cml2YXRlOgogCiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsg
bnVsbHB0ciB9OwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX291dGdvaW5nQ2FsbHM7CiAgICAgY29uc3Qg
TWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGNv
bnN0IENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9uTW9kZTo6
QkJRTW9kZSB9OwogICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFY
IH07CkBAIC0zOTMsNyArMzkzLDcgQEAgcHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJl
bnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8dWludDMyX3Q+IG1fb3V0ZXJMb29wczsK
ICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxs
IHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBw
YXRjaGVkIHdpdGguCisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+PiYgbV93YXNtVG9XYXNtRXhpdFN0dWJzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFu
ZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3
aXRoLgogICAgIHVuc2lnbmVkJiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgSGFz
aE1hcDxWYWx1ZUtleSwgVmFsdWUqPiBtX2NvbnN0YW50UG9vbDsKICAgICBJbnNlcnRpb25TZXQg
bV9jb25zdGFudEluc2VydGlvblZhbHVlczsKQEAgLTQ1NCwxNSArNDU0LDE2IEBAIHZvaWQgQjNJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBC
YXNpY0Jsb2NrKiBibG9jCiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJ
bnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnks
IFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRp
b24pCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiBvdXRnb2luZ0NhbGxzLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25N
b2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRy
eSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbikKICAgICA6IG1faW5mbyhpbmZvKQorICAgICwgbV9vdXRnb2luZ0NhbGxzKG91dGdvaW5n
Q2FsbHMpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBp
bGF0aW9uTW9kZSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogICAgICwg
bV9sb29wSW5kZXhGb3JPU1JFbnRyeShsb29wSW5kZXhGb3JPU1JFbnRyeSkKICAgICAsIG1fdGll
clVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCi0gICAgLCBtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgICwgbV93YXNtVG9XYXNt
RXhpdFN0dWJzKHdhc21Ub1dhc21FeGl0U3R1YnMpCiAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICAsIG1fY29uc3RhbnRJbnNl
cnRpb25WYWx1ZXMobV9wcm9jKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBv
cnRGdW5jdGlvbkNvdW50KCkpCkBAIC01MTYsNyArNTE3LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9j
ZWR1cmUKICAgICAgICAgfQogICAgIH0KIAotICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNl
dHVwRnJhbWVJblByb2xvZ3VlKCZjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBtX3By
b2MsIE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9u
KCkuc2V0dXBGcmFtZUluUHJvbG9ndWUobV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2sp
OwogCiAgICAgewogICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdp
bigpKTsKQEAgLTE0NzksOCArMTQ4MCw2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICBt
X21ha2VzQ2FsbHMgPSB0cnVlOwogCiAgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJl
dHVyblR5cGUoKTsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7Ci0KICAgICBpZiAo
bV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25J
bmRleCkpIHsKICAgICAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21h
eE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7
CiAKQEAgLTE0OTQsNiArMTQ5Myw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAg
QmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBv
cmlnaW4oKSwgaXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVl
bnRlZEJsb2NrKGlzRW1iZWRkZXJCbG9jaykpOwogCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1YiA9IG1fd2FzbVRvV2FzbUV4
aXRTdHVic1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgVmFsdWUqIHdhc21DYWxsUmVzdWx0ID0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9y
aWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMTUwMiwxMSArMTUwMiwxMSBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5
IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBj
aGVja2luZy4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8g
ZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQog
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
ZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbd2FzbVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJD
YWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBw
ZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxs
KSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGppdC5jYWxsKFdhc21FbnRyeVB0clRhZyk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4od2FzbVRvV2FzbUV4aXRT
dHViLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIH0pOwpAQCAtMTU1MCwxNyArMTU1MCwxOCBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsCiAgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVy
IFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBN
ZW1vcnkuCiAgICAgICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNo
ZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9j
LCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiogb3V0Z29pbmdDYWxscyA9ICZtX291dGdvaW5nQ2FsbHM7CiAgICAgICAg
IHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3Vy
cmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAg
ICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLQotICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1
bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlv
bkluZGV4IH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBwYXRj
aHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAgIEdQUlJl
ZyBjYWxsZWVHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgICAgICAgICBh
dXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICAgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoY2FsbGVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihS
ZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb2NhdGlvbiA9IGppdC50aHJlYWRTYWZlUGF0Y2hh
YmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0Z29pbmdDYWxscy0+YXBwZW5k
KHsgZnVuY3Rpb25JbmRleCwgeyBtb3ZlTG9jYXRpb24sIGNhbGxMb2NhdGlvbiB9fSk7CiAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC0xNzAxLDYgKzE3MDIs
MTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJ
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwgY2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigp
KSkpOwogCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sCisgICAg
ICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6b2Zmc2V0T2ZDYWxsZWVMb2FkTG9jYXRpb24oKSkpKTsKKwogICAgIFR5cGUgcmV0dXJuVHlw
ZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CiAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdz
LCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQpIHsKQEAgLTE3MTIsOCArMTcxNyw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMsIGJ1
dCB0aGUgd2FzbS0+d2FzbSBzdHViIGFzc3VtZXMgaXQgY2FuCiAgICAgICAgICAgICAvLyB1c2Ug
YWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nKSk7Ci0KICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2Rl
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChjYWxsZWUsIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwog
ICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDog
MV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CkBAIC0xNzY2LDkgKzE3NzEsOSBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29t
cGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVu
Y3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9y
eU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0
aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitFeHBlY3RlZDxF
bnRyeXBvaW50LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNv
bXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1
bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgdW5z
aWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUs
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBU
aWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9u
KQogewotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwor
ICAgIEVudHJ5cG9pbnQgcmVzdWx0OwogCiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVy
RW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0
aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigp
OwpAQCAtMTc5MCw3ICsxNzk1LDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFs
RnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAgICAgICAg
PyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUIzT3B0aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6
IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lS
R2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9kZSwgY29t
cGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgdGllclVw
LCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5m
bywgcHJvY2VkdXJlLCBjb21waWxhdGlvbkNvbnRleHQub3V0Z29pbmdDYWxscywgd2FzbVRvV2Fz
bUV4aXRTdHVicywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9kZSwgY29tcGlsYXRpb25N
b2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgdGllclVwLCB0aHJvd1dh
c21FeGNlcHRpb24pOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihp
ckdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5m
byk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAg
LTE4MDgsNyArMTgxMyw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAgICAgICAgIEIzOjpw
cmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUpOwogICAgICAgICBCMzo6Z2VuZXJhdGUocHJv
Y2VkdXJlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKICAgICAgICAg
Y29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5y
ZWxlYXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsK
KyAgICAgICAgcmVzdWx0LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2
ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCmluZGV4IDVl
Y2M1MWE2ODc1YmI0MTQ5ODllYTEyYjFiNDExOGNhNDA2NDRlZWEuLmM5MWU3Yjc1YTY5MmQ3NTk3
ZThhZGY2MTljZTA5OGY3NTI1OWE3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtNDksOSArNDksMTEgQEAgc3RydWN0IENvbXBpbGF0
aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiBl
bWJlZGRlckVudHJ5cG9pbnRCeXByb2R1Y3RzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhl
bHBlcnM+IHdhc21FbnRyeXBvaW50SklUOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVl
Qnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzOworICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiBvdXRnb2luZ0NhbGxzOworICAgIFVubGlua2VkTW92ZUFuZENhbGwg
ZW1iZWRkZXJNb3ZlQW5kQ2FsbDsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0
JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGll
clVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CitFeHBl
Y3RlZDxFbnRyeXBvaW50LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgdW5zaWduZWQmIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwg
Q29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5k
ZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9u
ID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCBmYWJjMDAzMjNlYjJhNzM1OTA3
MzA5ZDRkYTBkNTJiMDU4OTU4OWY3Li41ODA2M2QwOTY0ZjRkYzYyNjhiMTJkNmYzOWMyOTQ3ZmM0
ZjE1NTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBA
IC01Myw4ICs1Myw5IEBAIG5hbWVzcGFjZSBXYXNtQkJRUGxhbkludGVybmFsIHsKIHN0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0
KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBD
b21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0JCUVBs
YW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9yPFJlZlB0cjxCQlFDYWxs
ZWU+PiYgY2FsbGVlcywgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29y
aywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVF
bWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiAg
ICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIFdURk1vdmUo
Y3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQorICAgICwgbV9jYWxs
ZWVzKCZjYWxsZWVzKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKQogICAgICwgbV9h
c3luY1dvcmsod29yaykKIHsKQEAgLTE2MSwxNCArMTYyLDEyIEBAIHZvaWQgQkJRUGxhbjo6cHJl
cGFyZSgpCiAgICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtVG9XYXNtRXhpdFN0dWJz
LCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6
ZSgpLCAiIFdlYkFzc2VtYmx5IHRvIEphdmFTY3JpcHQgc3R1YnMiKQogICAgICAgICB8fCAhdHJ5
UmVzZXJ2ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXpl
KCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQogICAgICAg
ICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlv
bnMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCi0gICAgICAgIHx8ICF0cnlSZXNl
cnZlQ2FwYWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNv
bXBpbGF0aW9uIGNvbnRleHRzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3Rp
ZXJVcENvdW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAg
ICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25z
LnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAg
ICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAg
bV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3Rp
ZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBv
cnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBJbXBvcnQqIGltcG9ydCA9ICZt
X21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9ydEluZGV4XTsKQEAgLTIzMCw2ICsyMjks
NyBAQCBwdWJsaWM6CiAKIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jYWxsZWVzKTsKICAgICBB
U1NFUlQobV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQpOwogICAgIGRhdGFMb2dMbklmKFdhc21C
QlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBjb21waWxhdGlvbiIpOwogCkBAIC0y
NjcsMTIgKzI2Nyw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9u
LmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tm
dW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkpCi0gICAgICAgICAgICBtX3RpZXJV
cENvdW50c1tmdW5jdGlvbkluZGV4XSA9IG1ha2VVbmlxdWU8VGllclVwQ291bnQ+KCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdID0gbnVs
bHB0cjsKLSAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IG1fdGllclVwQ291bnRzW2Z1bmN0
aW9uSW5kZXhdLmdldCgpOwotICAgICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0OworICAgICAgICBFeHBl
Y3RlZDxFbnRyeXBvaW50LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKICAgICAgICAg
dW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IDA7CiAKICAgICAgICAgLy8gRklY
TUU6IFNvbWUgd2VicGFnZXMgdXNlIHZlcnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBleGhh
dXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1vcnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUgc2l6
ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSByZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1CLgpA
QCAtMjgyLDEwICsyNzcsMTEgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJR
QWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6
ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAg
ICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CiAKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9
IG1fY2FsbGVlcy0+YXQoZnVuY3Rpb25JbmRleCktPnRpZXJVcENvdW50KCk7CiAgICAgICAgIGlm
ICghZm9yY2VVc2luZ0IzICYmIE9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCi0gICAgICAgICAg
ICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxhdGlv
bkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24u
ZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlv
bkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHBhcnNlQW5kQ29t
cGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVu
Y3Rpb25JbmRleF0sIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwg
c2lnbmF0dXJlLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9u
LmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJR
TW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2Vw
dGlvbik7CisgICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBp
bGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRh
dGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV93YXNtVG9XYXNtRXhpdFN0
dWJzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMy
X01BWCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICAgICAgaWYgKFVOTElL
RUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CkBAIC0zMDEsNyArMjk3LDkgQEAgdm9pZCBCQlFQbGFuOjpjb21w
aWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIAogICAgICAgICBpZiAobV9l
eHBvcnRlZEZ1bmN0aW9uSW5kaWNlcy5jb250YWlucyhmdW5jdGlvbkluZGV4KSB8fCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5yZWZlcmVuY2VkRnVuY3Rpb25zKCkuY29udGFpbnMoZnVuY3Rpb25JbmRl
eCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFk
ZChmdW5jdGlvbkluZGV4LCBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVu
Y3Rpb25JbmRleCkpOworICAgICAgICAgICAgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZT4gZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKG1fY29t
cGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCBlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUuZ2V0KCksIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVu
Y3Rpb25JbmRleCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21J
bnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQu
aXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIApAQCAtMzE5LDcgKzMxNyw5IEBAIHZvaWQgQkJRUGxh
bjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKICAgICAgICAgICAgIENv
bXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlv
bkluZGV4XTsKICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgY29uc3Qg
dWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5m
b3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQz
Ml90IGltcG9ydEZ1bmN0aW9uQ291bnQgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5j
dGlvbkNvdW50KCk7CisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3Bh
Y2UgPSBmdW5jdGlvbkluZGV4ICsgaW1wb3J0RnVuY3Rpb25Db3VudDsKKyAgICAgICAgICAgIEJC
UUNhbGxlZSYgY2FsbGVlID0gKm1fY2FsbGVlcy0+YXQoZnVuY3Rpb25JbmRleCk7CiAgICAgICAg
ICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVu
Y3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIs
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CkBAIC0zMjgsOSArMzI4LDE4IEBAIHZvaWQgQkJRUGxh
bjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9u
ID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgICAgIG1fd2FzbUlu
dGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxC
Mzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBCQlEgZnVuY3Rpb25bJWld
ICVzIG5hbWUgJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFz
Y2lpKCkuZGF0YSgpKSwKICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21F
bnRyeXBvaW50Qnlwcm9kdWN0cykpOworCisgICAgICAgICAgICAgICAgY2FsbGVlLnNldEVudHJ5
cG9pbnQoV1RGTW92ZShtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSkpOwor
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY29udGV4dC5vdXRnb2luZ0NhbGxz
KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsLnRhcmdldEZ1bmN0aW9uSW5kZXhT
cGFjZSA+PSBpbXBvcnRGdW5jdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludDMyX3QgdGFyZ2V0RnVuY3Rpb25JbmRleCA9IGNhbGwudGFyZ2V0RnVuY3Rpb25JbmRleFNw
YWNlIC0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOworICAgICAg
ICAgICAgICAgICAgICBtX2NhbGxlZXMtPmF0KHRhcmdldEZ1bmN0aW9uSW5kZXgpLT5hZGRDYWxs
ZXIobG9ja2VyLCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOworICAgICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYXV0byBlbWJl
ZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbnMuZ2V0KGZ1bmN0aW9uSW5kZXgpKSB7CkBAIC0zNDAsMjMgKzM0OSwxNyBAQCB2b2lkIEJC
UVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBl
bWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBt
YWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9uLT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVl
PEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIkVtYmVkZGVyLT5XZWJBc3NlbWJseSBlbnRy
eXBvaW50WyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNw
YWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhT
cGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29u
dGV4dC5lbWJlZGRlckVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KIAotICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkIDogbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxscykgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5saW5rZWQpIHsKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBleGVj
dXRhYmxlQWRkcmVzczsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2R1bGVJbmZvcm1hdGlvbi0+
aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wb3J0cyBjb3VsZCBo
YXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBwYXRjaHBvaW50
LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSRUxFQVNFX0FTU0VSVC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2MgotICAgICAgICAg
ICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbVRvV2FzbUV4aXRTdHVicy5hdChj
YWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuY29kZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbUludGVybmFsRnVu
Y3Rpb25zLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIC0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
aW1wb3J0RnVuY3Rpb25Db3VudCgpKS0+ZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJl
dGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxX
YXNtRW50cnlQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgY2Fs
bGVlLmFkZENhbGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsIGNvbnRleHQuZW1iZWRkZXJNb3ZlQW5k
Q2FsbCk7CiAgICAgICAgICAgICB9CisKICAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYg
Y2FsbGVlIDogKm1fY2FsbGVlcykKKyAgICAgICAgICAgIGNhbGxlZS0+cmVwYXRjaENhbGxlcnMo
bG9ja2VyLCAqY2FsbGVlKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFpc0NvbXBsZXRlKCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4IGEyNjA0ZTU1NTM0
MWZlMGIyZjA2YzkzMzNiMWJiNzhlNzgzNWQ1N2YuLjhmYWM3MmNmNDEzZDJiNjBlZWI3ZWI2Yjdl
MTA0OTY5OWYxNzBlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
aApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90
IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKIAogICAgIC8vIE5vdGU6IENvbXBsZXRpb25U
YXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhl
cmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBCQlFQbGFuKENvbnRleHQqLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVt
YmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIEJCUVBsYW4oQ29udGV4
dCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4mLCBSZWY8TW9kdWxlSW5mb3JtYXRp
b24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYm
LCBUaHJvd1dhc21FeGNlcHRpb24pOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29u
dGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogICAgIEJCUVBsYW4o
Q29udGV4dCosIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAKQEAgLTEzNiwxMSArMTM2
LDEyIEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fc291cmNlOwogICAgIEJhZzxD
YWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKLSAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+PiBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uczsKKyAgICBWZWN0b3I8RW50cnlwb2ludD4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAg
ICAgSGFzaFNldDx1aW50MzJfdCwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNo
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRl
ZEZ1bmN0aW9uSW5kaWNlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJU
b1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8RW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpI
YXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJl
ZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRl
eHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRp
ZXJVcENvdW50Pj4gbV90aWVyVXBDb3VudHM7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxCQlFD
YWxsZWU+PiogbV9jYWxsZWVzIHsgbnVsbHB0ciB9OwogCiAgICAgVmVjdG9yPFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPj4gbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsKICAgICBTdGF0
ZSBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJC
UVBsYW5JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklu
bGluZXMuaAppbmRleCA4NjYwMWFjOWVmM2ZiMzg1ZTA2MDI5MDFjMWEwNGQ1MzBjNTYzY2E4Li4w
YTUyOGFjNzEwMGI1MTVjMmEwMmFhZjdlMjQzNjMzNmJlMjc2NjRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaApAQCAtMzgsMjEgKzM4LDgg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQgQkJRUGxhbjo6aW5pdGlhbGl6ZUNh
bGxlZXMoY29uc3QgRnVuY3RvciYgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKCFmYWlsZWQoKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1
bmN0aW9uSW5kZXggPCBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5zaXplKCk7ICsraW50ZXJuYWxG
dW5jdGlvbkluZGV4KSB7Ci0KLSAgICAgICAgUmVmUHRyPFdhc206OkNhbGxlZT4gZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlOwotICAgICAgICBpZiAoYXV0byBlbWJlZGRlclRvV2FzbUZ1bmN0aW9u
ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9u
SW5kZXgpKSB7Ci0gICAgICAgICAgICBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpF
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGVtYmVkZGVyVG9XYXNtRnVu
Y3Rpb24tPmVudHJ5cG9pbnQpKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxl
ZUJpdHM6OmJveFdhc20oZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLmdldCgpKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IG1fd2FzbUludGVybmFs
RnVuY3Rpb25zW2ludGVybmFsRnVuY3Rpb25JbmRleF0uZ2V0KCk7Ci0gICAgICAgIHNpemVfdCBm
dW5jdGlvbkluZGV4U3BhY2UgPSBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgICAgIFJlZjxXYXNtOjpDYWxsZWU+
IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6QkJRQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShm
dW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKG1fdGll
clVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hQb2ludGVyKGZ1bmN0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJp
dHM6OmJveFdhc20od2FzbUVudHJ5cG9pbnRDYWxsZWUucHRyKCkpKTsKLQotICAgICAgICBjYWxs
YmFjayhpbnRlcm5hbEZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlKSwgV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxlZSkpOwotICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8
IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgp
CisgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgbV9lbWJlZGRlclRvV2Fz
bUludGVybmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcAppbmRleCBjZTYxMDc2ZDFhY2I3OWFlYTRjNWU4Yjc1MmIxNzk0ODVjYWYwOGVl
Li5mZjA2NmM1ZjU4YjYwN2M2NzYyYmYyODg2MzNmZmMzNWUzN2M0MzIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC00Nyw2ICs0Nyw3IEBAIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVy
ZT4gd2FzbVRvV2FzbSh1bnNpCiAgICAgSklUIGppdDsKIAogICAgIEdQUlJlZyBzY3JhdGNoID0g
d2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAgIEdQUlJl
ZyBjYWxsZWUgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMSk7
CiAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwog
ICAgIEFTU0VSVChiYXNlTWVtb3J5ICE9IHNjcmF0Y2gpOwogICAgIEFTU0VSVChwaW5uZWRSZWdz
LnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKQEAgLTU3LDEzICs1OCwxOSBAQCBFeHBlY3Rl
ZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+
IHdhc21Ub1dhc20odW5zaQogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShzaXplUmVn
QXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgogICAgIC8vIEdldCB0aGUgY2FsbGVlJ3MgV2Fz
bTo6SW5zdGFuY2UgYW5kIHNldCBpdCBhcyBXYXNtQ29udGV4dCdzIGluc3RhbmNlLiBUaGUgY2Fs
bGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgogICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZUYXJnZXRJbnN0YW5jZShpbXBvcnRJbmRleCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2Uq
LgotICAgIC8vIFdoaWxlIHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQg
dGhlIHdhc20gZW50cnlwb2ludCBzbyB3ZSBjYW4gdGFpbCBjYWxsIHRvIGl0IGJlbG93LgorICAg
IC8vIFdoaWxlIHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQgdGhlIHdh
c20gZW50cnlwb2ludCBhbmQgY2FsbGVlIHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cu
CiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNl
OjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKGltcG9ydEluZGV4KSksIHNjcmF0
Y2gpOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZXYXNtQ2FsbGVlTG9hZExvY2F0aW9uKGltcG9ydEluZGV4KSksIGNhbGxl
ZSk7CiAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKIAogICAg
IGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVnQXNTY3JhdGNoKTsKICAgICBqaXQuc3Rv
cmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwogCisgICAgLy8gU2V0IHRoZSBjYWxsZWUg
c2xvdCBpbiB0aGUgY2FsbCBmcmFtZQorICAgIGppdC5sb2FkUHRyKGNhbGxlZSwgY2FsbGVlKTsK
KyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGJlZW4gY2FsbGVkLCBidXQgaGF2ZSBub3Qg
eWV0IHB1c2hlZCB0aGUgYmFzZSBwb2ludGVyCisgICAgaml0LnN0b3JlUHRyKGNhbGxlZSwgSklU
OjpBZGRyZXNzKEpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSk7CisKICAgICAvLyBG
SVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXYXNtOjpJbnN0YW5jZSBo
YXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1v
cnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKaW5kZXggZThkZGYxNTNk
ZDlkOTAyMjljNTEyODFlYzI4MTJmN2E1OTExNDFkNi4uY2IyODAwMzllNzFhMzhmYmEyZThjMjA2
NGJiNGI0MTE4YWZmYjhhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxl
ZS5jcHAKQEAgLTMyLDE2ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCi1DYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25N
b2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKK0NhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBp
bGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUpCiAgICAgOiBtX2NvbXBpbGF0aW9uTW9kZShjb21w
aWxhdGlvbk1vZGUpCi0gICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50KSkKIHsK
ICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUodGhpcyk7CiB9
CiAKLUNhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUs
IEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBO
YW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorQ2FsbGVlOjpDYWxsZWUoV2FzbTo6
Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKICAgICA6IG1fY29tcGls
YXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKLSAgICAsIG1fZW50cnlwb2ludChXVEZNb3ZlKGVu
dHJ5cG9pbnQpKQogICAgICwgbV9pbmRleE9yTmFtZShpbmRleCwgV1RGTW92ZShuYW1lKSkKIHsK
ICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUodGhpcyk7CkBA
IC01Miw2ICs1MCw0OSBAQCBDYWxsZWU6On5DYWxsZWUoKQogICAgIENhbGxlZVJlZ2lzdHJ5Ojpz
aW5nbGV0b24oKS51bnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwogfQogCisKK2lubGluZSB2b2lkIHJl
cGF0Y2hNb3ZlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
PFdhc21FbnRyeVB0clRhZz4gbW92ZUxvY2F0aW9uLCBDYWxsZWUmIHRhcmdldENhbGxlZSkKK3sK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVC
aXRzOjpib3hXYXNtKCZ0YXJnZXRDYWxsZWUpKTsKK30KKworaW5saW5lIHZvaWQgcmVwYXRjaENh
bGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50cnlQ
dHJUYWc+IGNhbGxMb2NhdGlvbiwgQ2FsbGVlJiB0YXJnZXRDYWxsZWUpCit7CisgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4odGFyZ2V0Q2FsbGVlLmVudHJ5cG9pbnQoKSkpOworfQorCit2b2lk
IEJCUUNhbGxlZTo6YWRkQ2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZlciYg
bGlua0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAgIGF1dG8gbW92ZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbC5tb3Zl
TG9jYXRpb24pOworICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsLmNhbGxMb2NhdGlvbik7CisgICAgbV9tb3Zl
TG9jYXRpb25zLmFwcGVuZChtb3ZlTG9jYXRpb24pOworICAgIG1fY2FsbExvY2F0aW9ucy5hcHBl
bmQoY2FsbExvY2F0aW9uKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OmFkZEFuZExpbmtDYWxsZXIo
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgVW5s
aW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9pbnQo
KSk7CisKKyAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNt
RW50cnlQdHJUYWc+KGNhbGwubW92ZUxvY2F0aW9uKTsKKyAgICBhdXRvIGNhbGxMb2NhdGlvbiA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbC5jYWxs
TG9jYXRpb24pOworICAgIG1fbW92ZUxvY2F0aW9ucy5hcHBlbmQobW92ZUxvY2F0aW9uKTsKKyAg
ICBtX2NhbGxMb2NhdGlvbnMuYXBwZW5kKGNhbGxMb2NhdGlvbik7CisKKyAgICBDYWxsZWUmIHRh
cmdldENhbGxlZSA9IG1fcmVwbGFjZW1lbnQgPyBzdGF0aWNfY2FzdDxDYWxsZWUmPigqbV9yZXBs
YWNlbWVudCkgOiAqdGhpczsKKyAgICByZXBhdGNoTW92ZShsb2NrZXIsIG1vdmVMb2NhdGlvbiwg
dGFyZ2V0Q2FsbGVlKTsKKyAgICByZXBhdGNoQ2FsbChsb2NrZXIsIGNhbGxMb2NhdGlvbiwgdGFy
Z2V0Q2FsbGVlKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OnJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBsb2NrZXIsIENhbGxlZSYgdGFyZ2V0Q2FsbGVlKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKHRhcmdldENhbGxlZS5lbnRyeXBvaW50KCkpOworICAgIGZvciAoYXV0byBtb3Zl
TG9jYXRpb24gOiBtX21vdmVMb2NhdGlvbnMpCisgICAgICAgIHJlcGF0Y2hNb3ZlKGxvY2tlciwg
bW92ZUxvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOworCisgICAgZm9yIChhdXRvIGNhbGxMb2NhdGlv
biA6IG1fY2FsbExvY2F0aW9ucykKKyAgICAgICAgcmVwYXRjaENhbGwobG9ja2VyLCBjYWxsTG9j
YXRpb24sIHRhcmdldENhbGxlZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ2FsbGVlLmgKaW5kZXggZjdlYTRkMDViOGQwYTcxYzFlZTYyYTU2YzRkMzlkYTU0OWYwOWI3
Yi4uZTBkMzRkYjQzNzMyMGVkMzk2YmE3MDJjNDJlN2QxMWIwN2MyM2M3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtMzksNyArMzksMTMgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgQ2FsbGVlIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPENhbGxlZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCisg
ICAgZnJpZW5kIGNsYXNzIEJCUVBsYW47CisKIHB1YmxpYzoKKyAgICAvLyBUT0RPCisgICAgLy9N
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBjb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRy
VGFnPigpOyB9CisgICAgLy9FbnRyeXBvaW50JiBlbnRyeXBvaW50KCkgeyByZXR1cm4gbV9lbnRy
eXBvaW50OyB9CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50
cnlwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgp
LnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsgfQogCiAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNh
dmVSZWdpc3RlcnM7IH0KQEAgLTU1LDkgKzYxLDE0IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgfkNhbGxlZSgpOwogCisgICAgdm9pZCBzZXRFbnRyeXBvaW50KFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQorICAgIHsKKyAgICAgICAgbV9lbnRyeXBvaW50
ID0gV1RGTW92ZShlbnRyeXBvaW50KTsKKyAgICB9CisKIHByb3RlY3RlZDoKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlLCBXYXNtOjpFbnRyeXBvaW50
JiYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUs
IFdhc206OkVudHJ5cG9pbnQmJiwgc2l6ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShXYXNtOjpD
b21waWxhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21w
aWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmKTsKIAogcHJpdmF0ZToKICAgICBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlv
bk1vZGU7CkBAIC02Nyw2NyArNzgsNjEgQEAgcHJpdmF0ZToKIAogY2xhc3MgT01HQ2FsbGVlIGZp
bmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+
IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6
OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAgICBzdGF0aWMgUmVmPE9N
R0NhbGxlZT4gY3JlYXRlKEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2lu
dCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBp
bmRleCwgV1RGTW92ZShuYW1lKSkpOwogICAgIH0KIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgd2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNh
bGxzaXRlczsgfQotCiBwcml2YXRlOgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5s
aW5rZWRDYWxscykKLSAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdN
b2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAg
LCBtX3dhc21Ub1dhc21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICBPTUdD
YWxsZWUoRW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNv
bnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCisgICAgICAgIDogQ2FsbGVl
KFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCiAg
ICAgeworICAgICAgICBzZXRFbnRyeXBvaW50KFdURk1vdmUoZW50cnlwb2ludCkpOwogICAgIH0K
LQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBtX3dhc21Ub1dhc21DYWxsc2l0
ZXM7CiB9OwogCiBjbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxs
ZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0
ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIHN0YXRpYyBSZWY8T01HRm9yT1NS
RW50cnlDYWxsZWU+IGNyZWF0ZShFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5z
aWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUoV1RG
TW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIGxvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9p
bnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbG9v
cEluZGV4KSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsgfQogICAgIHVp
bnQzMl90IGxvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcEluZGV4OyB9Ci0gICAgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB3YXNtVG9XYXNtQ2FsbHNpdGVzKCkgeyByZXR1
cm4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgT01HRm9yT1NSRW50
cnlDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3Rk
OjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVk
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAgICAgOiBDYWxsZWUo
V2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1vdmUoZW50cnlw
b2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fd2FzbVRvV2FzbUNhbGxz
aXRlcyhXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKEVu
dHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1l
KiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgpCisgICAgICAgIDogQ2FsbGVlKFdhc206OkNv
bXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkK
ICAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSkKICAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAgICAgeworICAgICAg
ICBzZXRFbnRyeXBvaW50KFdURk1vdmUoZW50cnlwb2ludCkpOwogICAgIH0KIAotICAgIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgdW5z
aWduZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIHVpbnQzMl90IG1fbG9vcElu
ZGV4OwogfTsKIAogY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlIGZpbmFsIDogcHVibGlj
IENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICBzdGF0aWMgUmVm
PEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3ZlKGVudHJ5cG9p
bnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENh
bGxlZSgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
KFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotICAgICAgICA6IENhbGxlZShXYXNtOjpD
b21waWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUsIFdURk1vdmUoZW50cnlwb2lu
dCkpCisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKCkKKyAgICAgICAgOiBDYWxsZWUoV2Fz
bTo6Q29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlKQogICAgIHsKICAgICB9
CiB9OwogCiBjbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRy
eXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVT
ZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291
bnQpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShzaXplX3QgaW5kZXgsIHN0ZDo6
cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1
ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1v
dmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEJCUUNhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3Vu
dCkpKTsKICAgICB9CiAKICAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUo
KSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0xNDcsMTMgKzE1MiwyMCBA
QCBwdWJsaWM6CiAKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7IHJldHVybiBtX3Rp
ZXJVcENvdW50LmdldCgpOyB9CiAKKyAgICB2b2lkIGFkZENhbGxlcihjb25zdCBBYnN0cmFjdExv
Y2tlciYsIExpbmtCdWZmZXImLCBVbmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAgICB2b2lkIGFkZEFu
ZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5rQnVmZmVyJiwgVW5saW5rZWRN
b3ZlQW5kQ2FsbCk7CisKKyAgICB2b2lkIHJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgQ2FsbGVlJik7CisKIHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9p
bnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVm
UHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYg
dGllclVwQ291bnQpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJR
TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgQkJR
Q2FsbGVlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3Vu
dCkKKyAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBpbmRl
eCwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3RpZXJVcENvdW50KFdURk1vdmUodGllclVw
Q291bnQpKQogICAgIHsKICAgICB9CiAKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uRGF0YUxhYmVs
UHRyPFdhc21FbnRyeVB0clRhZz4+IG1fbW92ZUxvY2F0aW9uczsKKyAgICBWZWN0b3I8Q29kZUxv
Y2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPj4gbV9jYWxsTG9jYXRpb25zOwogICAgIFJl
ZlB0cjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKICAgICBSZWZQdHI8
T01HQ2FsbGVlPiBtX3JlcGxhY2VtZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3Vu
dD4gbV90aWVyVXBDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggYjQ0MmI2MTYxYmY5MjMzNzU4MTk3NTgxM2ZmMzgw
NmE3MzFhOTIyNi4uNmZhNDM2OWNjZGNhODhlNGI3MGVkNjQ2OWJiNzYzOTgxNGY4ZTg0MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9u
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9u
LmgKQEAgLTg4LDM0ICs4OCwxNiBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgc3RhdGljIHVu
c2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQotICAgIHZv
aWQgc2V0dXBGcmFtZUluUHJvbG9ndWUoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRy
eVB0clRhZz4qIGNhbGxlZU1vdmVMb2NhdGlvbiwgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9y
aWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB2b2lkIHNldHVw
RnJhbWVJblByb2xvZ3VlKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBC
Mzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAi
V2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwg
IldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAKLSAgICAgICAgQjM6OlBhdGNocG9p
bnRWYWx1ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNo
cG9pbnRWYWx1ZT4ocHJvYywgQjM6OkludDY0LCBvcmlnaW4pOwotICAgICAgICBnZXRDYWxsZWVQ
YXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IHsgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIgfTsKLSAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3Rz
Ojpub25lKCk7Ci0gICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBw
YXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJl
bFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIEIzOjpWYWx1ZSogZnJh
bWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBv
aW50ZXIsIG9yaWdpbik7Ci0gICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUgPSBibG9j
ay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8
QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKLSAgICAgICAgICAgIGdl
dENhbGxlZVBhdGNocG9pbnQsCi0gICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ2FsbGVlKSk7
Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIHplcm8gaW50
byB0aGUgQ29kZUJsb2NrKiBzcG90IGluIHRoZSBjYWxsIGZyYW1lLAogICAgICAgICAvLyBidXQg
dGhlcmUgYXJlIHBsYWNlcyB0aGF0IGludGVycHJldCBub24tbnVsbCBDb2RlQmxvY2sgc2xvdCB0
byBtZWFuIGEgdmFsaWQgQ29kZUJsb2NrLgogICAgICAgICAvLyBXaGVuIGRvaW5nIHVud2luZGlu
Zywgd2UnbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZW50aXJlIHJ1bnRpbWUgaXMgT0sgd2l0
aCBhIG5vbi1udWxsCiAgICAgICAgIC8vIENvZGVCbG9jayBub3QgaW1wbHlpbmcgdGhhdCB0aGUg
Q29kZUJsb2NrIGlzIHZhbGlkLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVyID0g
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdp
bik7CiAgICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDb2RlQmxvY2sgPSBibG9jay0+YXBwZW5k
TmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1l
bW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKICAgICAgICAgICAgIGJsb2NrLT5h
cHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCAwKSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggZDRhOWNkNjc3MTAyYjU4
ZTRmYzU5ZTFhMjBhZTU2YjhlMjFjNzQzMC4uZjFiOTUzYjM1NWRmNTA1YWMyNDM1ODRmZmE5MmY5
OTkwOTE1Nzg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9j
ay5jcHAKQEAgLTQ3LDcgKzQ3LDE1IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvbnRleHQqIGNv
bnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsCiB7CiAgICAg
UmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7CiAKLSAgICBtX3BsYW4gPSBh
ZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiks
IEJCUVBsYW46OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlw
ZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxhbiYp
IHsKKyAgICBtX2NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgIG1fdGFnZ2VkQ2Fs
bGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG1fY2FsbGVlQ291bnQ7IGkrKykgeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3Bh
Y2UgPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkgKyBpOworICAgICAg
ICBtX2NhbGxlZXNbaV0gPSBCQlFDYWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1v
ZHVsZUluZm9ybWF0aW9uLm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgbWFr
ZVVuaXF1ZTxUaWVyVXBDb3VudD4oKSk7CisgICAgICAgIG1fdGFnZ2VkQ2FsbGVlc1tpXSA9IENh
bGxlZUJpdHM6OmJveFdhc20obV9jYWxsZWVzW2ldLmdldCgpKTsKKyAgICB9CisKKyAgICBtX3Bs
YW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbV9jYWxsZWVzLCBtYWtlUmVmKG1v
ZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJlZFRhc2s8
UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyldIChQbGFuJikgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CiAgICAgICAgIGlmIChtX3BsYW4tPmZhaWxlZCgpKSB7CiAgICAgICAgICAgICBtX2Vycm9y
TWVzc2FnZSA9IG1fcGxhbi0+ZXJyb3JNZXNzYWdlKCk7CkBAIC01NiwxNiArNjQsMTQgQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1
bGVJbmZvcm1hdGlvbiYgbW9kdWwKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiB3ZSBz
aG91bGQgZXZlbnR1YWxseSBjb2xsZWN0IHRoZSBCQlEgY29kZS4KLSAgICAgICAgbV9jYWxsZWVz
LnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKICAgICAgICAgbV9vcHRpbWl6ZWRDYWxsZWVzLnJlc2l6
ZShtX2NhbGxlZUNvdW50KTsKICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMu
cmVzaXplKG1fY2FsbGVlQ291bnQpOwogCi0gICAgICAgIG1fcGxhbi0+aW5pdGlhbGl6ZUNhbGxl
ZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVmUHRyPFdhc206OkNhbGxlZT4mJiBlbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWUsIFJlZjxXYXNtOjpDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnRD
YWxsZWUpIHsKKyAgICAgICAgbV9wbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVk
IGNhbGxlZUluZGV4LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiYmIGVtYmVkZGVy
RW50cnlwb2ludENhbGxlZSkgewogICAgICAgICAgICAgaWYgKGVtYmVkZGVyRW50cnlwb2ludENh
bGxlZSkgewogICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlckNhbGxlZXMu
c2V0KGNhbGxlZUluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSkpOwogICAg
ICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdID0gV1RGTW92
ZSh3YXNtRW50cnlwb2ludENhbGxlZSk7CiAgICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxF
bnRyeVBvaW50c1tjYWxsZWVJbmRleF0gPSBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdLT5lbnRyeXBv
aW50KCk7CiAgICAgICAgIH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29k
ZUJsb2NrLmgKaW5kZXggZGVhMmZmYTMxODEyMDNmNzhhYWE2MWM3MGJmMjk3MWJjMDMyNzllZC4u
MzAxYTllOTU0ZGU4MTg2NGI0ZTRjODg2OGYzNmNlNzhlOWIxMTU4OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgor
I2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNs
dWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtNDAsNyAr
NDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBDYWxs
ZWU7CiBzdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIEJCUVBsYW47CiBjbGFzcyBPTUdQbGFuOwpAQCAt
NzYsNyArNzYsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMg
YXJlIG9ubHkgdmFsaWQgb25jZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgogCi0g
ICAgQ2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25J
bXBvcnRDb3VudCgpKTsKQEAgLTg2LDYgKzg2LDkgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVChjYWxsZWUpOwogICAgICAgICByZXR1cm4gKmNhbGxlZTsKICAgICB9CisKKyAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+JiBiYnFDYWxsZWVzKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsZWVzOyB9CisKICAgICBDYWxsZWUmIHdhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAg
ICAgICBBU1NFUlQocnVubmFibGUoKSk7CkBAIC05Niw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuICptX2NhbGxlZXNbY2FsbGVlSW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIENh
bGxlZSYgd2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQorICAgIEJCUUNhbGxlZSYgd2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKHJ1bm5hYmxlKCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3Bh
Y2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKQEAgLTExMSw2ICsxMTQsMTMgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gJm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUlu
ZGV4XTsKICAgICB9CiAKKyAgICBDYWxsZWUqKiBjYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50
KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAt
IGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxDYWxs
ZWUqKj4oJm1fdGFnZ2VkQ2FsbGVlc1tjYWxsZWVJbmRleF0pOworICAgIH0KKwogICAgIGJvb2wg
aXNTYWZlVG9SdW4oTWVtb3J5TW9kZSk7CiAKICAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KQEAgLTEyNCw5ICsxMzQsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50Owog
ICAgIE1lbW9yeU1vZGUgbV9tb2RlOwotICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9jYWxs
ZWVzOworICAgIFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4gbV9jYWxsZWVzOwogICAgIFZlY3Rv
cjxSZWZQdHI8Q2FsbGVlPj4gbV9vcHRpbWl6ZWRDYWxsZWVzOwotICAgIEhhc2hNYXA8dWludDMy
X3QsIFJlZlB0cjxDYWxsZWU+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gs
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVy
Q2FsbGVlczsKKyAgICBWZWN0b3I8dm9pZCo+IG1fdGFnZ2VkQ2FsbGVlczsKKyAgICBIYXNoTWFw
PHVpbnQzMl90LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiwgdHlwZW5hbWUgRGVm
YXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlckNhbGxlZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50
czsKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3dhc21Ub1dh
c21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21FbWJlZGRlci5oCmluZGV4IGEyMzc5ZmQ1ODljODlkZjYzNTdlNmU0NDFiZWQyYTUxODcz
OWNhM2UuLmYxYWNkOThiNGE1MDkxYmRiZjM3YTViNWIzYjQ3ZjUxY2M0M2YwM2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCkBAIC00MSw2ICs0MSw3IEBAIGNs
YXNzIEV4ZWNTdGF0ZTsKIG5hbWVzcGFjZSBXYXNtIHsKIAogc3RydWN0IENvbXBpbGF0aW9uQ29u
dGV4dDsKK2NsYXNzIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKIGNsYXNzIEluc3RhbmNlOwog
c3RydWN0IEludGVybmFsRnVuY3Rpb247CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CkBAIC00
OCw3ICs0OSw3IEBAIGNsYXNzIFNpZ25hdHVyZTsKIHN0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21D
YWxsOwogCiAvLyBDcmVhdGUgd3JhcHBlciBjb2RlIHRvIGNhbGwgZnJvbSBlbWJlZGRlciAtPiBX
ZWJBc3NlbWJseS4KLXVzaW5nIENyZWF0ZUVtYmVkZGVyV3JhcHBlciA9IFdURjo6RnVuY3Rpb248
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+KENvbXBpbGF0aW9uQ29udGV4dCYsIGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QpPjsKK3VzaW5nIENyZWF0ZUVt
YmVkZGVyV3JhcHBlciA9IFdURjo6RnVuY3Rpb248dm9pZChDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCBTaWduYXR1cmUmLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90KT47CiAKIC8vIENhbGxlZCBhcyBzb29u
IGFzIGFuIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMg
dG8gY29udGludWUgYXQuCiB1c2luZyBUaHJvd1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhl
Y1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSW5zdGFuY2UqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCAwNjY5YmI0MDdlMjk1OTM2MjJmY2NhOGU1MTkx
MTk1ZGQ5YjQ2ZjNiLi5mM2YwY2Y0ZjkxYjVhMGRmNDcwMGMzNjBlZmFjMzBiNTg0MWRkODY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC01MSw2ICs1MSw3IEBA
IGNsYXNzIENvbXBpbGF0aW9uOwogCiBuYW1lc3BhY2UgV2FzbSB7CiAKK2NsYXNzIENhbGxlZTsK
IHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiAK
QEAgLTI4NywxMCArMjg4LDE1IEBAIGlubGluZSBib29sIGlzVmFsaWROYW1lVHlwZShJbnQgdmFs
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RydWN0IFVubGlua2VkTW92ZUFuZENhbGwgewor
ICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxMb2NhdGlvbjsKK307CisKIHN0cnVjdCBVbmxpbmtlZFdhc21U
b1dhc21DYWxsIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAgQ29k
ZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPiBjYWxsTG9jYXRpb247Ci0gICAgc2l6
ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZTsKKyAgICBzaXplX3QgdGFyZ2V0RnVuY3Rpb25JbmRleFNw
YWNlOworICAgIFVubGlua2VkTW92ZUFuZENhbGwgdW5saW5rZWRNb3ZlQW5kQ2FsbDsKIH07CiAK
IHN0cnVjdCBFbnRyeXBvaW50IHsKQEAgLTMxMywxMCArMzE5LDEyIEBAIHN0cnVjdCBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsKICAgICB1c2luZyBMb2FkTG9jYXRpb24gPSBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPio7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhbGxlZUxvYWRMb2NhdGlvbigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBj
YWxsZWVMb2FkTG9jYXRpb24pOyB9CiAKICAgICAvLyBGSVhNRTogUGFjayBzaWduYXR1cmUgaW5k
ZXggYW5kIGNvZGUgcG9pbnRlciBpbnRvIG9uZSA2NC1iaXQgdmFsdWUuIFNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMT4uCiAgICAgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggeyBTaWduYXR1cmU6OmludmFsaWRJbmRleCB9OwogICAgIExvYWRM
b2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uOworICAgIENhbGxlZSoqIGNhbGxlZUxvYWRM
b2NhdGlvbjsKIH07CiB1c2luZyBGdW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0b3I8V2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlu
c3RhbmNlLmgKaW5kZXggZjRmMzUwODdlMjU2ZDA5MmNlNzRiMjFiODQ0MGE5MzcyNWQxNjY4NS4u
ZWYzZDZkYmQwNzZhNTFjNjA4MmYxMjVlYWYzMjkwNTFmZDgyNWM1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbiB7IG51bGxwdHIgfTsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViOwogICAgICAgICB2
b2lkKiBpbXBvcnRGdW5jdGlvbiB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcsIHRo
aXMgaXMgYSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+LgorICAgICAgICBDYWxsZWUqKiB3YXNtQ2Fs
bGVlTG9hZExvY2F0aW9uIHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAgdW5zaWduZWQgbnVtSW1w
b3J0RnVuY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9udW1JbXBvcnRGdW5jdGlvbnM7IH0KICAg
ICBJbXBvcnRGdW5jdGlvbkluZm8qIGltcG9ydEZ1bmN0aW9uSW5mbyhzaXplX3QgaW1wb3J0RnVu
Y3Rpb25OdW0pCkBAIC0xNDEsNiArMTQyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBzaXplX3Qg
b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25O
dW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2Yo
SW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8s
IHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0
T2ZXYXNtVG9FbWJlZGRlclN0dWIoc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBv
ZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9u
SW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNtVG9FbWJlZGRl
clN0dWIpOyB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVf
dCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5j
dGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKElt
cG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVuY3Rpb24pOyB9CisgICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZldhc21DYWxsZWVMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7
IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9y
dEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNt
Q2FsbGVlTG9hZExvY2F0aW9uKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGltcG9y
dEZ1bmN0aW9uKHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFQqPigmaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKS0+aW1wb3J0
RnVuY3Rpb24pOyB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihJbXBvcnRGdW5jdGlvbklu
Zm8pID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YodWludDY0X3QpPihzaXplb2Yo
SW1wb3J0RnVuY3Rpb25JbmZvKSksICJXZSByZWx5IG9uIHRoaXMgZm9yIHRoZSBhbGlnbm1lbnQg
dG8gYmUgY29ycmVjdCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAppbmRleCA4NjcxMjQyOWE1MzgzODU0Zjc4OWRhNTE2
ZWY1ZWQwZWM2NmRlMDIxLi4xNDk4NzU5NTAyYWZiOTU0NzA1MmI2YjMyN2U4ODRmZmMxZDRkMzc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50
cnlQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NS
RW50cnlQbGFuLmNwcApAQCAtNTQsMTUgKzU0LDE1IEBAIG5hbWVzcGFjZSBXYXNtT01HRm9yT1NS
RW50cnlQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
fQogCi1PTUdGb3JPU1JFbnRyeVBsYW46Ok9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0KiBjb250
ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgUmVmPEJCUUNhbGxlZT4mJiBjYWxsZWUsIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBD
b21wbGV0aW9uVGFzayYmIHRhc2spCitPTUdGb3JPU1JFbnRyeVBsYW46Ok9NR0Zvck9TUkVudHJ5
UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgUmVmPEJCUUNhbGxl
ZT4mJiBjYWxsZWUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwg
Q29kZUJsb2NrJiBjb2RlQmxvY2ssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IEJhc2Uo
Y29udGV4dCwgbWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlLT5t
b2R1bGVJbmZvcm1hdGlvbigpKSksIFdURk1vdmUodGFzaykpCiAgICAgLCBtX21vZHVsZShXVEZN
b3ZlKG1vZHVsZSkpCi0gICAgLCBtX2NvZGVCbG9jaygqbV9tb2R1bGUtPmNvZGVCbG9ja0Zvciht
b2RlKSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fY2FsbGVlKFdURk1v
dmUoY2FsbGVlKSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogICAgICwg
bV9sb29wSW5kZXgobG9vcEluZGV4KQogewotICAgIHNldE1vZGUobW9kZSk7CisgICAgc2V0TW9k
ZShjb2RlQmxvY2subW9kZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnJ1bm5hYmxlKCkp
OwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9y
KG1fbW9kZSkpOwogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIlN0YXJ0aW5nIE9NR0Zvck9TUkVudHJ5IHBsYW4gZm9yICIsIGZ1bmN0aW9u
SW5kZXgsICIgb2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOwpAQCAt
ODEsMTAgKzgxLDkgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25F
ZmZvcnQpCiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihm
dW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+IHVubGlua2VkQ2FsbHM7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7CiAg
ICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IDA7Ci0gICAgYXV0byBwYXJz
ZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24uZGF0
YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMs
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRl
eCwgbV9sb29wSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VB
bmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNp
emUoKSwgc2lnbmF0dXJlLCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzLCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUs
IENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBtX2Z1bmN0aW9uSW5kZXgsIG1f
bG9vcEluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkg
ewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFyc2VBbmRDb21w
aWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0cmluZzo6bnVt
YmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKQEAgLTEwMiwyNCArMTAxLDE5IEBAIHZvaWQgT01HRm9y
T1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUdGb3JP
U1JFbnRyeSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0
dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29u
dGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAgIG9tZ0VudHJ5cG9pbnQuY2Fs
bGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCkt
PmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgb21nRW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS5j
YWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1f
bW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2Fs
bGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50
cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNl
Y3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSk7CisgICAgUmVmPE9NR0Zvck9T
UkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1v
dmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCBtX2xvb3BJbmRleCk7CiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVM
b2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKICAgICAgICAgZW50
cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6
IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYg
KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCku
aW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2Nv
ZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5j
b2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1f
Y29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2Fs
bC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJU
YWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2Fs
bC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlw
b2ludCkpOworCisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxs
cykgeworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxsZWUgPSBtX2NvZGVCbG9jay0+
d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC50YXJnZXRGdW5jdGlvbklu
ZGV4U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtDYWxsZXIobG9j
a2VyLCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwpAQCAtMTMyLDE5
ICsxMjYsNiBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9y
dCkKICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5vc3JFbnRyeVRyaWdnZXJz
KClbbV9sb29wSW5kZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9u
RG9uZTsKICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9u
U3RhdHVzRm9yT01HRm9yT1NSRW50cnkgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6
OkNvbXBpbGVkOwogICAgICAgICB9Ci0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0g
ICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRlZCB3
aGlsZSB3ZSByZWxlYXNlIG1fY29kZUJsb2NrLT5sb2NrLgotICAgICAgICAvLyBVbnRpbCB3ZSBh
ZGQgT01HRm9yT1NSRW50cnkgY2FsbGVlIHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxsZWUs
IHRoaXMgbmV3IE9NRyBmdW5jdGlvbiBsaW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhpcyBP
TUdGb3JPU1JFbnRyeSBjYWxsZWUuCi0gICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdGb3JP
U1JFbnRyeSBjYWxsZWUgYWdhaW4gbm90IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0gICAgICAgIGZv
ciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50Owot
ICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVu
dHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rp
b25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dl
ZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRy
eVB0clRhZz4oZW50cnlwb2ludCkpOwotICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dMbklm
KFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zv
ck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIs
IG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0ZShob2xkTG9j
ayhtX2xvY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
TUdGb3JPU1JFbnRyeVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdG
b3JPU1JFbnRyeVBsYW4uaAppbmRleCAwMTUxZGE2NjVhOTY4MzI4Zjk1MDM4ZjViNTBjMDg1NzYx
ZjA1ZGU3Li5kNTZlYTQyMTdkZDcxMGQ1NzUxNjQ1YTliM2ViMDE4YzQzNTBkMGRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5o
CkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRh
c2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVy
ZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zvck9TUkVudHJ5UGxhbihDb250
ZXh0KiwgUmVmPE1vZHVsZT4mJiwgUmVmPEJCUUNhbGxlZT4mJiwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9uVGFzayYmKTsK
KyAgICBPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIFJlZjxCQlFD
YWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgQ29k
ZUJsb2NrJiwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUg
cmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCBlNTYxM2VlYjcx
NDM3NzU0Njg2ODg2MDE3MTc5M2IzNTk1OWIxYTBlLi4xZDg3M2Q1YmNjZDVlYTllMmY2ZDNmYjM5
NzkwYTUyNjJmZWRjMTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uY3BwCkBAIC01NCwxMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFuSW50ZXJuYWwg
ewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdQbGFuOjpPTUdQ
bGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK09NR1Bs
YW46Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYm
IHRhc2spCiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZv
cm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQog
ICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwgbV9jb2RlQmxvY2soKm1fbW9k
dWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAg
ICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUp
OworICAgIHNldE1vZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5ydW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUt
PmNvZGVCbG9ja0ZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVy
bmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgT01HIHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5kZXgsICIg
b2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOwpAQCAtNzksMTAgKzc5
LDkgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7CiAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24uZGF0YS5kYXRhKCks
IGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCkpKTsKIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxz
OwogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgQ29tcGlsYXRp
b25Db250ZXh0IGNvbnRleHQ7Ci0gICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJz
ZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEu
c2l6ZSgpLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpP
TUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgpOworICAgIGF1dG8gcGFyc2VBbmRD
b21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0
YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX2NvZGVCbG9jay0+bV93YXNt
VG9XYXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9y
bWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlv
bkluZGV4LCBVSU5UMzJfTUFYKTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxl
UmVzdWx0KSkgewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFy
c2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0
cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKQEAgLTEwMCwxMyArOTksMTUgQEAgdm9p
ZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUcgZnVuY3Rp
b25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5
cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3Rl
cnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNh
bGxlZVNhdmVSZWdpc3RlcnMpOworICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVy
cyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCkuY2FsbGVlU2F2ZVJlZ2lz
dGVycyk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRy
eXBvaW50OworICAgIEJCUUNhbGxlZSYgYmJxQ2FsbGVlID0gKm1fY29kZUJsb2NrLT5tX2NhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XTsKKyAgICBPTUdDYWxsZWUqIG9tZ0NhbGxlZTsKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9y
KG1vZGUoKSkpOwotICAgICAgICBSZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNy
ZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92
ZSh1bmxpbmtlZENhbGxzKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRl
cihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxs
ZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOworICAgICAgICBSZWY8T01HQ2FsbGVlPiBj
YWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlv
bkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rp
b25JbmRleFNwYWNlKSk7CisgICAgICAgIG9tZ0NhbGxlZSA9IGNhbGxlZS5wdHIoKTsKICAgICAg
ICAgQVNTRVJUKCFtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxsZWVzW21fZnVuY3Rpb25JbmRl
eF0pOwogICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CiAKQEAgLTEx
NywxOSArMTE4LDE0IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAg
ICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIG1f
Y29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5j
b3B5UmVmKCk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEJCUUNhbGxlZSYgYmJxQ2FsbGVlID0g
KnN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlv
bkluZGV4XS5nZXQoKSk7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJicUNh
bGxlZS50aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkpOwogICAgICAgICAgICAgYmJxQ2FsbGVlLnNl
dFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgYmJxQ2FsbGVlLnRp
ZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29t
cGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYg
Y2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAg
ICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0
aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQg
PSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNw
YWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2lu
dCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50
cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNh
bGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4o
ZW50cnlwb2ludCkpOworCisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29p
bmdDYWxscykgeworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxsZWUgPSBtX2NvZGVC
bG9jay0+d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC50YXJnZXRGdW5j
dGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtDYWxs
ZXIoaG9sZGVyLCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xNDAsMjYgKzEzNiwxMCBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29t
cGlsYXRpb25FZmZvcnQpCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9i
YWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KIAogICAg
IG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5k
ZXhdID0gZW50cnlwb2ludDsKKyAgICBtX2NvZGVCbG9jay0+bV90YWdnZWRDYWxsZWVzW21fZnVu
Y3Rpb25JbmRleF0gPSBDYWxsZWVCaXRzOjpib3hXYXNtKG9tZ0NhbGxlZSk7CiAgICAgewogICAg
ICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLQotICAgICAgICBh
dXRvIHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiBjYWxsc2l0ZXMpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRl
cykgewotICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZl
cmJvc2UsICJDb25zaWRlcmluZyByZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2Fs
bC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0
OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAi
LCBSYXdQb2ludGVyKGVudHJ5cG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhtX2NvZGVCbG9jay0+bV93
YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKLSAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxh
Y2VtZW50Q2FsbGVlID0gc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4obV9jb2RlQmxvY2stPm1fY2Fs
bGVlc1tpXS5nZXQoKSktPnJlcGxhY2VtZW50KCkpCi0gICAgICAgICAgICAgICAgcmVwYXRjaENh
bGxzKHJlcGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAg
ICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IHN0YXRpY19jYXN0
PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbaV0uZ2V0KCkpLT5vc3JFbnRyeUNh
bGxlZSgpKQotICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgfQorICAgICAgICBiYnFDYWxsZWUucmVwYXRj
aENhbGxlcnMoaG9sZGVyLCAqb21nQ2FsbGVlKTsKICAgICB9CiAKICAgICBkYXRhTG9nTG5JZihX
YXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVuY3Rpb25J
bmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+
KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSktPnRpZXJVcENv
dW50KCktPmNvdW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgK
aW5kZXggY2I3OWI0MzlkNGU5OTRkODcwZTlkYzkwODljNDNhN2Y1ODYwMjU2Ni4uZTY4OWQ1NjY1
N2E4ZDFiYjliZGU4MmVlMDUxNTM1NDg3MGJlODMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HUGxhbi5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBib29sIG11
bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8g
Tm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQ
bGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR1Bs
YW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9y
eU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1
bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYsIENvbXBsZXRpb25UYXNr
JiYpOwogCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNu
J3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggMWFkZThhOGU5NDQ5ZGE4YjNmMDZjZDNkNjk0
MjU3OTJlNmM1ZGY5YS4uOTVlNWYwMjNkNTY5ZmVkM2ZiNDE3MDNhZjI2ZTNhODIzMWJlZjM3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAt
ODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKFRp
ZXJVcENvdW50JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFjZQogICAgIGlmIChjb21waWxlKSB7
CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgInRyaWdnZXJPTUdS
ZXBsYWNlbWVudCBmb3IgIiwgZnVuY3Rpb25JbmRleCk7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8g
Y29tcGlsZSB0aGUgY29kZS4KLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3
IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2Ut
Pm1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZp
bmFsaXplKCkpKTsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1Bs
YW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVs
ZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBQbGFuOjpkb250RmluYWxpemUoKSkpOwog
ICAgICAgICBlbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCiAgICAgICAgICAg
ICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigpOwpAQCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCiAK
ICAgICBpZiAoc3RhcnRPU1JFbnRyeUNvbXBpbGF0aW9uKSB7CiAgICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgInRyaWdnZXJPTUdPU1IgZm9yICIsIGZ1bmN0aW9uSW5k
ZXgpOwotICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50
cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5t
b2R1bGUoKSksIFJlZjxXYXNtOjpCQlFDYWxsZWU+KGNhbGxlZSksIGZ1bmN0aW9uSW5kZXgsIGxv
b3BJbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICAg
ICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5UGxhbihpbnN0
YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBS
ZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXgsIGNv
ZGVCbG9jaywgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAgZW5zdXJlV29ya2xpc3Qo
KS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25z
Ojp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRp
b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNt
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAppbmRleCA3
MzUyMjAyODkzN2M2ZGFjMWZjNDczYzdlNGNkYzY0OTU4Y2U4ZWE2Li4xNmQ3YmEwYmUyYTk2NWFk
YmIwNzM4MzczZjNiNDkzMDJmZmNlZDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc20uY3BwCkBAIC00MiwyMSArNDIsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0
ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCit2b2lkIGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSogc2VsZiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleCkKIHsKKyAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25JbmRleCk7CiAgICAg
Q0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2lu
dEpJVDsKIAotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigp
OworICAgIEVudHJ5cG9pbnQgZW50cnlwb2ludDsKICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoKTsKIAogICAgIC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCiAgICAgaml0LnN0b3JlNjQo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRh
TGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7Ci0gICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGxpbmtl
ZENhbGxlZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2Fs
bGVlTW92ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGxlZU1v
dmVMb2NhdGlvbik7Ci0gICAgfSk7CisgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihDYWxsZWVCaXRzOjpib3hXYXNtKHNlbGYpKSwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAKICAgICBjb25zdCBQaW5uZWRS
ZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwogICAg
IFJlZ2lzdGVyU2V0IHRvU2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1vZGUpOwpAQCAtNjksNyAr
NjUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21X
cmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogI2VuZGlmCiAKICAgICBSZWdpc3RlckF0
T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6
Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCk7Ci0gICAgcmVzdWx0LT5lbnRyeXBv
aW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOworICAgIGVudHJ5cG9p
bnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7CiAKICAgICB1bnNpZ25l
ZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQq
KTsKICAgICB0b3RhbEZyYW1lU2l6ZSArPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNp
emVJbkJ5dGVzKCk7CkBAIC0xMjUsNyArMTIxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFs
RnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAK
ICAgICAgICAgfQogCiAgICAgICAgIGVtaXRUaHJvd1dhc21Ub0pTRXhjZXB0aW9uKGppdCwgR1BS
SW5mbzo6YXJndW1lbnRHUFIyLCBhcmd1bWVudHNJbmNsdWRlSTY0ID8gRXhjZXB0aW9uVHlwZTo6
STY0QXJndW1lbnRUeXBlIDogRXhjZXB0aW9uVHlwZTo6STY0UmV0dXJuVHlwZSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBHUFJSZWcgd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50
ZXI7CkBAIC0xOTgsNiArMTk0LDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAKICAgICAg
ICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIH0KKwor
ICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJv
bG9ndWVTY3JhdGNoKDApOworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJNb3Zl
QW5kQ2FsbC5tb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgaml0LnN0b3JlUHRy
KGNhbGxlZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsK
QEAgLTIyMSwxMiArMjIxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNy
ZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAKICAgICAgICAgaml0
LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHNjcmF0
Y2hPclNpemUsIHNjcmF0Y2hPclNpemUpOwogICAgIH0KIAotICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZvLmltcG9ydEZ1bmN0aW9u
Q291bnQoKTsKLSAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgaW5mby5mdW5jdGlvbklu
ZGV4U3BhY2VTaXplKCkpOwotICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSB9KTsKLSAgICB9KTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJNb3ZlQW5k
Q2FsbC5jYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAK
ICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJz
VG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7
CkBAIC0yNjcsNyArMjYyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNy
ZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAKICAgICBqaXQuZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHNlbGYtPnNldEVudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50KSk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc20uaAppbmRleCBiNGI5OGQxNTliMjg0YjdlYzMyM2FhNTAyYzAzZjkyMWMxMmIwM2E5Li5l
NGY2Zjc0OTE3Y2E4MzYxZWE1OGU4ODg5YzJiYzEwYzk1YTk4MDQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWdu
YXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwordm9pZCBjcmVh
dGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwg
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1v
cnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcAppbmRleCAwNTdhYTcwMThiNDRhOGZiYjRhOGQ0NzExM2JkYmViODc0
OWRlYzg3Li45OTdiMmFlMTYyOWM0YTNhY2FhNGVmN2ZkNjMwODZhYWFiYTU1YmI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcApAQCAtNDY1LDYgKzQ2NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgICAg
IC8vIEZJWE1FOiBDdXJyZW50bHkgd2UganVzdCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ug
c2hvdWxkIHRlYWNoIHRoZSBNb2R1bGUKICAgICAgICAgLy8gaG93IHRvIHJlcGF0Y2ggdXM6CiAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NzAK
KyAgICAgICAgaml0LmxvYWRQdHIoY2FsbGVlTG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAq
IHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKICAgICAgICAg
aml0LmxvYWRQdHIoZW50cnlwb2ludExvYWRMb2NhdGlvbigpLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgaml0LmNhbGwoc2NyYXRjaEdQUiwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICB9CkBAIC01MzYs
MTAgKzUzOCwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgIHJldHVybiBtX2pzQ2Fs
bEVudHJ5cG9pbnQuY29kZSgpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBv
aW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2Fz
bVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3Jl
YXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uLCBXYXNtOjpDYWxsZWUqKiB3YXNtQ2FsbGVlTG9hZExvY2F0aW9uLCBX
YXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKIHsKICAgICBOYXRpdmVFeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0
aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIs
IG5hbWUpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5
RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21U
b1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJB
c3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlGdW5jdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIGpzRW50cnlwb2ludCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24sIHdhc21DYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICBm
dW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSwgaW5z
dGFuY2UpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9uLT5pc0xhcmdlQWxsb2Nh
dGlvbigpLCAiV2ViQXNzZW1ibHlGdW5jdGlvbiBzaG91bGQgYmUgYWxsb2NhdGVkIG5vdCBpbiBs
YXJnZSBhbGxvY2F0aW9uIHNpbmNlIGl0IGlzIEpTQ2FsbGVlLiIpOwogICAgIHJldHVybiBmdW5j
dGlvbjsKQEAgLTU1MSwxMCArNTUzLDEwIEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlGdW5jdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsZWUmIGpz
RW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0
aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
biwgV2FzbTo6Q2FsbGVlKiogd2FzbUNhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXgpCiAgICAgOiBCYXNlIHsgdm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlIH0KICAgICAsIG1fanNFbnRyeXBvaW50IHsganNFbnRyeXBvaW50LmVudHJ5cG9pbnQo
KSB9Ci0gICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9X
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CisgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7
IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgd2FzbUNh
bGxlZUxvYWRMb2NhdGlvbiB9CiB7IH0KIAogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKaW5kZXgg
OThjMzQ2NGNkMDcyZDY0NDVlNzdkZTRmODhkZTBjY2UzYjQ5NWUzNC4uM2Q0YWUwMmNkNDI2YTIx
NzQ4NGE3M2I2OGVlNTBmZGYxNWU5ZTdkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaApAQCAtNjIsMTEgKzYyLDEyIEBAIHB1
YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVu
Y3Rpb246OkxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBX
YXNtOjpDYWxsZWUqKiB3YXNtQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRl
eCk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7
IH0KICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlw
b2ludExvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLmVu
dHJ5cG9pbnRMb2FkTG9jYXRpb247IH0KKyAgICBXYXNtOjpDYWxsZWUqKiBjYWxsZWVMb2FkTG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbi5jYWxsZWVMb2FkTG9j
YXRpb247IH0KICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGltcG9ydGFibGVGdW5j
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uOyB9CiAKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBqc0VudHJ5cG9pbnQoQXJpdHlDaGVj
a01vZGUgYXJpdHkpCkBAIC03OCw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2ltcG9ydGFibGVGdW5jdGlvbikg
KyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9j
YXRpb24oKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWxsZWVMb2FkTG9jYXRp
b24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9pbXBv
cnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZD
YWxsZWVMb2FkTG9jYXRpb24oKTsgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnQoKQogICAgIHsKQEAgLTkxLDcgKzkzLDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdh
c206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24sIFdhc206OkNhbGxlZSoqIHdhc0NhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJl
SW5kZXgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2Fs
bEVudHJ5cG9pbnRTbG93KCk7CiAgICAgcHRyZGlmZl90IHByZXZpb3VzSW5zdGFuY2VPZmZzZXQo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCA5MmRkY2Y3ODZlODEwMDVhMjFlMWY4YjFm
NTBhOWQyMDlmOWU2OTI5Li5lMGFiNGFiMDNlNTIzN2RlNzI2NGJmOTllOGI5MGEzMjkyZWEzMGNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC0xOTMsNiArMTkzLDcgQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBp
bXBvcnRPYmoKIAogICAgICAgICAgICAgV2FzbTo6SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0g
bnVsbHB0cjsKICAgICAgICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRM
b2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFdh
c206OkNhbGxlZSoqIGNhbGxlZUxvYWRMb2NhdGlvbiA9IG51bGxwdHI7CiAgICAgICAgICAgICBK
U09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CiAKICAgICAgICAg
ICAgIC8vIGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CkBA
IC0yMDUsNiArMjA2LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgICAgICAg
ICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5k
ZXgoKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbGVlSW5zdGFuY2UgPSAmd2FzbUZ1bmN0aW9u
LT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICBlbnRyeXBvaW50
TG9hZExvY2F0aW9uID0gd2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNhbGxlZUxvYWRMb2NhdGlvbiA9IHdhc21GdW5jdGlvbi0+Y2Fs
bGVlTG9hZExvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNp
Z25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJl
IHYuW1tDbG9zdXJlXV0uCkBAIC0yMjMsNiArMjI1LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRP
YmoKICAgICAgICAgICAgIGF1dG8qIGluZm8gPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9y
dEZ1bmN0aW9uSW5mbyhpbXBvcnQua2luZEluZGV4KTsKICAgICAgICAgICAgIGluZm8tPnRhcmdl
dEluc3RhbmNlID0gY2FsbGVlSW5zdGFuY2U7CiAgICAgICAgICAgICBpbmZvLT53YXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbiA9IGVudHJ5cG9pbnRMb2FkTG9jYXRpb247CisgICAgICAgICAgICBp
bmZvLT53YXNtQ2FsbGVlTG9hZExvY2F0aW9uID0gY2FsbGVlTG9hZExvY2F0aW9uOwogICAgICAg
ICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbjxXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+PihpbXBvcnQua2luZEluZGV4KS0+c2V0KHZtLCBtX2luc3RhbmNlLmdldCgpLCBm
dW5jdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzQ3LDkgKzM1MCwx
MCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVy
biBmdW5jLgogICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVu
dHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKKyAgICAg
ICAgICAgIFdhc206OkNhbGxlZSoqIGNhbGxlZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+Y2Fs
bGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CiAgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJl
SW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgICAgIGNvbnN0IFdh
c206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5j
dGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENh
bGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9u
U3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIGZpZWxkLCBtX2luc3RhbmNl
LmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24s
IGNhbGxlZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgd3JhcHBl
ciA9IGZ1bmN0aW9uOwogICAgICAgICB9CiAKQEAgLTQ2MCw3ICs0NjQsOCBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmpl
Y3QqIGltcG9ydE9iagogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgV2FzbTo6Q2FsbGVl
JiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwog
ICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0
aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9j
YXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAg
ICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlG
dW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBt
X2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIFdhc206OkNhbGxlZSoqIGNh
bGxlZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+Y2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5jZS5nZXQo
KSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBjYWxs
ZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5j
dGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU3NSwx
MyArNTgwLDE0IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBXYXNtOjpXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlv
biA9IGNvZGVCbG9jay0+ZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICBXYXNtOjpDYWxsZWUqKiBjYWxsZWVMb2Fk
TG9jYXRpb24gPSBjb2RlQmxvY2stPmNhbGxlZUxvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUm
IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBleHBvcnQgbG9jYWwgZnVuY3Rpb24g
ImZvbyIgYXQgZnVuY3Rpb24gaW5kZXggMC4KICAgICAgICAgICAgIC8vIFdoYXQgaWYgd2UgYWxz
byBzZXQgaXQgdG8gdGhlIHRhYmxlIGFuIEVsZW1lbnQgdy8gaW5kZXggMC4KICAgICAgICAgICAg
IC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4pKS5leHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0KDAp
PwogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTgyNQogICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsK
KyAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgU3RyaW5n
KCksIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2lu
dExvYWRMb2NhdGlvbiwgY2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAKICAg
ICAgICAgICAgIG1faW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5zZXQoZWxlbWVudEluZGV4
LCBmdW5jdGlvbik7CiAgICAgICAgICAgICArK2VsZW1lbnRJbmRleDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcAppbmRleCBjZGU0ZjNjZjI2MDRhZGQ3NmNjMDRmYjIyNGY5YTUyYmQyZGEwMzc2Li42
MGZjZTc0Mzg2MmYyZjE2ZDJlYjc5MWJjMDRhZjdlYzJlMDYzMGFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwCkBAIC02MCw3ICs2MCw5IEBAIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPCiAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzPFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uPih2bSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1
bmN0aW9uLiIpOwogICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0
ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFw
KSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZp
bnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgpLT53YXNt
VG9FbWJlZGRlclN0dWIgfSApOworICAgIGF1dG8gaW1wb3J0RnVuY3Rpb25JbmZvID0gaW5zdGFu
Y2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEluZGV4KTsKKyAgICBzdGF0
aWMgV2FzbTo6Q2FsbGVlKiBudWxsQ2FsbGVlID0gbnVsbHB0cjsKKyAgICBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgJmltcG9ydEZ1bmN0aW9uSW5mby0+d2FzbVRvRW1i
ZWRkZXJTdHViLCAmbnVsbENhbGxlZSB9KTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378807</attachid>
            <date>2019-09-14 23:24:29 -0700</date>
            <delta_ts>2019-09-15 15:44:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201799-20190914232427.patch</filename>
            <type>text/plain</type>
            <size>111291</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NjU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZWM5MTUzZGI3ZmEwNjM5MDdjMTU4ZTYwM2M5ZDE2N2I0ZWY3N2E5Li5hMWQxMDc2ZDJiYTVjNDRl
OTQ2YmZkZjg4MGZkMjAxZjZmMzQ0MmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NSBAQAorMjAxOS0wOS0xNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBI
b3dldmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGlu
dGVycHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGlj
aCBmdW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMg
dGhlIGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRl
ciwgc28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdy
aXRpbmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0
aGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0
byB0aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBn
ZW5lcmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdl
IGtlZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAg
Y29kZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAg
LSBDYWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBj
YWxscywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBK
Uy10by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogd2Fz
bS10by13YXNtIHN0dWIsIEpTLXRvLXdhc20gc3R1YiAoY2FsbGVlIGZyYW1lKSwgd2FzbS10by1K
UyBzdHViCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhbHNvIGNoYW5nZSBpdCBzbyB0aGF0IHRo
ZSBjYWxsZWUga2VlcHMgdHJhY2sgb2YgaXRzIGNhbGxlcnMsIGluc3RlYWQgb2YgaGF2aW5nIGEg
Z2xvYmFsIG1hcHBpbmcKKyAgICAgICAgb2YgY2FsbHMgaW4gdGhlIFdhc206OkNvZGVCbG9jay4g
VGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVwYXRjaCBhbGwgY2FsbGVycyBvZiBhIGdpdmVuIENh
bGxlZSB3aGVuIGl0IHRpZXJzIHVwLgorCisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAqIHdhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6Cisg
ICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBs
YW46OkJCUVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwcmVwYXJlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChK
U0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFu
Lmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJp
bmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3
YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OkNhbGxlZSk6
CisgICAgICAgIChKU0M6Oldhc206OnJlcGF0Y2hNb3ZlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
cmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFDYWxsZWU6OmFkZENhbGxlcik6
CisgICAgICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6YWRkQW5kTGlua0NhbGxlcik6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6cmVwYXRjaENhbGxlcnMpOgorICAgICAgICAqIHdh
c20vV2FzbUNhbGxlZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmVudHJ5cG9pbnQp
OgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpDYWxsZWU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50
aW9uOjpzZXR1cEZyYW1lSW5Qcm9sb2d1ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgor
ICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2Rl
QmxvY2s6OmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Ondhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpib3hlZENhbGxlZUxv
YWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAgICAqIHdhc20vV2FzbUVt
YmVkZGVyLmg6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgIChKU0M6Oldh
c206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mQm94ZWRDYWxsZWVMb2Fk
TG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6
Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKToKKyAgICAg
ICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpPTUdGb3JPU1JFbnRyeVBsYW46Ok9NR0Zvck9TUkVudHJ5UGxhbik6CisgICAgICAgIChKU0M6
Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtT01H
Rm9yT1NSRW50cnlQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206Ok9NR1BsYW46Ok9NR1BsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmg6CisgICAgICAgICog
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdS
ZXBsYWNlbWVudENvbXBpbGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpkb09TUkVudHJ5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9TUkVudHJ5Tm93KToKKyAgICAgICAgKiB3YXNtL2pz
L0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVy
KToKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6
anNDYWxsRW50cnlwb2ludFNsb3cpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9u
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6Y3JlYXRlKToKKwogMjAxOS0wOS0wOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFByb21pc2UgcmVzb2x2ZS9yZWplY3QgZnVuY3Rp
b25zIHNob3VsZCBiZSBjcmVhdGVkIG1vcmUgZWZmaWNpZW50bHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IGZhMTVlYzg0Yzg3
NjEwNmNhNDNhNDJkZjFiMjAwNjAzYTAzOWU2ZmMuLmJjNWE2ZjM3YmFhNjRmOGQ3MThmMGI3OWVk
OTg2MTJlZGI0ZjQ2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUg
KDApCiAKLSAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQ
cm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBU
aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYpOworICAgIEFpcklSR2VuZXJhdG9y
KGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2Fz
bUVudHJ5UHRyVGFnPj4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVy
VXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CiAKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0
dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOwpAQCAtNjM5LDcgKzYzOSw4IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9j
ayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgQmFzaWNCbG9jayogbV9yb290Qmxv
Y2sgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPFR5cGVkVG1wPiBtX2xvY2FsczsKLSAgICBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8v
IExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNz
IGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiBtX291dGdvaW5nQ2FsbHM7CisgICAgY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIEdQ
UlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fbWVt
b3J5U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV93YXNtQ29udGV4dElu
c3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwpAQCAtNzA4LDE0ICs3MDksMTUgQEAgdm9pZCBB
aXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayogYmxv
Y2ssIFR5cGVkVG1wIGluc3QKICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwg
VG1wKCksIGluc3RhbmNlKTsKIH0KIAotQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIElu
dGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQorQWlySVJHZW5lcmF0
b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJv
Y2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgb3V0Z29p
bmdDYWxscywgY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJU
YWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5j
dGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKICAgICA6IG1faW5mbyhp
bmZvKQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25J
bmRleCkKICAgICAsIG1fdGllclVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCiAg
ICAgLCBtX2NvZGUobV9wcm9jLmNvZGUoKSkKLSAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCisgICAgLCBtX291dGdvaW5nQ2FsbHMob3V0Z29p
bmdDYWxscykKKyAgICAsIG1fd2FzbVRvV2FzbUV4aXRTdHVicyh3YXNtVG9XYXNtRXhpdFN0dWJz
KQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkp
CiB7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKQEAgLTc2MSwxNiAr
NzYzLDcgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm8KICAgICBSZWY8QjM6OkFpcjo6UHJvbG9n
dWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWly
OjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6
QWlyOjpDb2RlJiBjb2RlKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgY29kZS5lbWl0RGVmYXVsdFByb2xvZ3VlKGpp
dCk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxs
aW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKLSAgICAgICAgICAgIGF1dG8g
bW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7Ci0gICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
W2NvbXBpbGF0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY2FsbGVlR1BS
LCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihudWxscHRyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotICAgICAgICB9
CisgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBDaGVja2Vk
PGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7CkBAIC0xOTM2LDgg
KzE5MjksNiBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgIGlmIChyZXR1cm5UeXBlICE9
IFR5cGU6OlZvaWQpCiAgICAgICAgIHJlc3VsdCA9IHRtcEZvclR5cGUocmV0dXJuVHlwZSk7CiAK
LSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7Ci0KICAgICBpZiAobV9pbmZvLmlzSW1w
b3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKICAg
ICAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFy
Z3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKQEAgLTE5NzMs
MTEgKzE5NjQsMTIgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICBw
YXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CiAgICAgICAgICAgICB9KTsKIAotICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
ZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21F
bnRyeVB0clRhZz4gd2FzbVRvV2FzbUV4aXRTdHViID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1
bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt3YXNt
VG9XYXNtRXhpdFN0dWJdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwg
ZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKFdhc21F
bnRyeVB0clRhZyk7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsLCB3YXNt
VG9XYXNtRXhpdFN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQ
dHJUYWc+KHdhc21Ub1dhc21FeGl0U3R1Yi5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0pOwogCkBAIC0yMDI0LDE4ICsyMDE2LDIwIEBAIGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsCiAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNU
eXBlKHJldHVyblR5cGUpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5u
ZWQgPSB0cnVlOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CiAKICAgICAg
ICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CiAgICAgICAgIHdhc21DYWxsaW5n
Q29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQs
IHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKICAg
ICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKICAgICAgICAgfSk7CiAK
LSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbklu
ZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxX
YXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwotICAgICAgICAgICAgfSk7
CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogb3V0Z29pbmdDYWxscyA9
ICZtX291dGdvaW5nQ2FsbHM7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbb3V0
Z29pbmdDYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEdQUlJlZyBj
YWxsZWVHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgYXV0byBtb3ZlTG9j
YXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxM
b2NhdGlvbiA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAg
IG91dGdvaW5nQ2FsbHMtPmFwcGVuZCh7IGZ1bmN0aW9uSW5kZXgsIHsgbW92ZUxvY2F0aW9uLCBj
YWxsTG9jYXRpb24gfX0pOwogICAgICAgICB9KTsKIAogICAgICAgICBlbWl0UGF0Y2hwb2ludCht
X2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOwpA
QCAtMjA4OSw2ICsyMDgzLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICB9KTsKIAog
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBnNjQoKTsKKyAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsZWUgPSBnNjQoKTsKICAgICB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNp
Z25hdHVyZUluZGV4ID0gZzY0KCk7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0
aGUgdGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgpAQCAtMjA5Nyw2ICsyMDky
LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxl
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICAgICAgYXBwZW5kKEFkZDY0LCBjYWxs
YWJsZUZ1bmN0aW9uQnVmZmVyLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CiAgICAgICAgIAogICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSks
IGNhbGxlZUNvZGUpOyAvLyBQb2ludGVyIHRvIGNhbGxlZSBjb2RlLgorICAgICAgICBhcHBlbmQo
TW92ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCkpLCBjYWxsZWUpOyAv
LyBQb2ludGVyIHRvIGJveGVkIGNhbGxlZQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQg
aXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5p
dGlhbGl6ZWQuCiAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywg
d2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJ
bmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEw
CkBAIC0yMTg5LDYgKzIxODUsMTAgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGly
ZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKIAogICAgIFZl
Y3RvcjxDb25zdHJhaW5lZFRtcD4gZW1pdEFyZ3M7CiAgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxl
ZUNvZGUpOworCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWUpLCBjYWxsZWUpOwor
ICAgIGVtaXRBcmdzLmFwcGVuZCh7IGNhbGxlZSwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpIH0pOworCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBD
YWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2gsIHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRt
cCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKICAgICAgICAgZW1pdEFyZ3MuYXBwZW5kKHsgdG1w
LCByZXAgfSk7CiAgICAgfSk7CkBAIC0yMjI5LDEwICsyMjI5LDggQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgogICAgIHJldHVybiBCMzo6T3JpZ2luKCk7CiB9
CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQs
IGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBN
ZW1vcnlNb2RlIG1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVy
VXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitFeHBlY3RlZDx2b2lk
LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0
aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9u
TGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4
Y2VwdGlvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlv
bj4oKTsKLQogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBt
YWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVu
dHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIApAQCAtMjI1Miw3ICsy
MjUwLDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGkKICAgICAKICAgICBwcm9jZWR1cmUuc2V0
T3B0TGV2ZWwoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJPcHRpbWl6YXRpb25MZXZlbCgpKTsK
IAotICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0
LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGll
clVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgQWlySVJHZW5lcmF0b3Ig
aXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCBjb21waWxhdGlvbkNvbnRleHQub3V0Z29pbmdD
YWxscywgd2FzbVRvV2FzbUV4aXRTdHVicywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0
aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJH
ZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5n
dGgsIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZXIucGFyc2UoKSk7CiAKQEAgLTIyNzIsMTAgKzIyNzAsMTAgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21w
aWxhdGkKICAgICAgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdlbmVyYXRpb24oY29kZSk7CiAgICAg
ICAgIEIzOjpBaXI6OmdlbmVyYXRlKGNvZGUsICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5
cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXBy
b2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7Ci0gICAgICAgIHJlc3VsdC0+
ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJB
dE9mZnNldExpc3QoKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0LmNhbGxlZVNhdmVSZWdp
c3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwogICAgIH0KIAot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIEludFR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5oCmluZGV4IDM2YTczZGQ1OGEzMWI0MTVhM2JhOWFhZmU1OGYxY2EwZDFlYWI1Y2Eu
LjI2N2MxZWQ5ZmNhNjMwYTYwYjllNmIyN2NjZWQzMDdmMzIwMmI2MjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCkBAIC0zMSw3ICszMSw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLUV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIo
Q29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0
dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCog
PSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKK0V4cGVjdGVkPHZvaWQs
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IHVp
bnQ4X3QqLCBzaXplX3QsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRo
cm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKaW5kZXggODBlODQ4ODdkYjBlMTIxNWViOGJkZDRmZWEyOTViNThjY2Y5YWVhMy4uNjAxNDMw
MTNhMmFlMWUxMGFlODkxODU5MjVmY2NkOWI0MTgzNzhkNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtMjcxLDcgKzI3MSw2IEBA
IHB1YmxpYzoKIAogICAgIHR5cGVkZWYgU3RyaW5nIEVycm9yVHlwZTsKICAgICB0eXBlZGVmIFVu
ZXhwZWN0ZWQ8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0OwotICAgIHR5cGVkZWYgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBFcnJvclR5cGU+IFJlc3VsdDsK
ICAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUGFydGlhbFJlc3VsdDsKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9JTkxJTkUgVW5leHBlY3Rl
ZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFyZ3MpIGNvbnN0CkBAIC0y
ODQsNyArMjgzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdT
X18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIEIzSVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiwgVGhy
b3dXYXNtRXhjZXB0aW9uKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiwgUHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYsIHVuc2lnbmVkJiBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBD
b3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMzgy
LDYgKzM4MSw3IEBAIHByaXZhdGU6CiAKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9y
PiogbV9wYXJzZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1f
aW5mbzsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fb3V0Z29pbmdDYWxs
czsKICAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNr
aW5nIH07CiAgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlIHsgQ29t
cGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07CiAgICAgY29uc3QgdW5zaWduZWQgbV9mdW5jdGlvbklu
ZGV4IHsgVUlOVF9NQVggfTsKQEAgLTM5Myw3ICszOTMsNyBAQCBwcml2YXRlOgogICAgIEJhc2lj
QmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIFZlY3Rvcjx1aW50MzJfdD4g
bV9vdXRlckxvb3BzOwogICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9jYWxzOwotICAgIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8g
TGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3Mg
aXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFdhc21FbnRyeVB0clRhZz4+JiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7IC8vIExpc3QgZWFj
aCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3Vs
ZCBiZSBwYXRjaGVkIHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZTsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29uc3RhbnRQb29sOwogICAg
IEluc2VydGlvblNldCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzOwpAQCAtNDU0LDE1ICs0NTQs
MTYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShQcm9j
ZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2MKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUg
Y29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5k
ZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRo
cm93V2FzbUV4Y2VwdGlvbikKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIG91dGdvaW5nQ2FsbHMsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMsIHVuc2lnbmVkJiBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9k
ZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJ
bmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24g
dGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9pbmZvKGluZm8pCisgICAgLCBtX291dGdvaW5n
Q2FsbHMob3V0Z29pbmdDYWxscykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9jb21waWxh
dGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9u
SW5kZXgpCiAgICAgLCBtX2xvb3BJbmRleEZvck9TUkVudHJ5KGxvb3BJbmRleEZvck9TUkVudHJ5
KQogICAgICwgbV90aWVyVXAodGllclVwKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKLSAgICAs
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCisgICAg
LCBtX3dhc21Ub1dhc21FeGl0U3R1YnMod2FzbVRvV2FzbUV4aXRTdHVicykKICAgICAsIG1fb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAgICwg
bV9jb25zdGFudEluc2VydGlvblZhbHVlcyhtX3Byb2MpCiAgICAgLCBtX251bUltcG9ydEZ1bmN0
aW9ucyhpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKQEAgLTUxNiw3ICs1MTcsNyBAQCBCM0lS
R2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQ
cm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9CiAgICAgfQogCi0gICAgd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUoJmNvbXBpbGF0aW9uLT5jYWxsZWVNb3Zl
TG9jYXRpb24sIG1fcHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKKyAgICB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZShtX3Byb2MsIE9yaWdpbigpLCBt
X2N1cnJlbnRCbG9jayk7CiAKICAgICB7CiAgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVy
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZyYW1l
UG9pbnRlciwgT3JpZ2luKCkpOwpAQCAtMTQ3OSw4ICsxNDgwLDYgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLAogICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CiAKICAgICBUeXBlIHJldHVyblR5cGUg
PSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
czsKLQogICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4KSkgewogICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9
IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YXJncy5zaXplKCkpKTsKIApAQCAtMTQ5NCw2ICsxNDkzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLAogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2so
KTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2Ms
IEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVudGVkQmxvY2soaXNXYXNt
QmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2NrKSk7CiAKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvV2FzbUV4aXRTdHViID0g
bV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICBWYWx1ZSogd2Fz
bUNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBp
c1dhc21CbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAg
ICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0xNTAyLDExICsx
NTAyLDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICAvLyBXZSBw
ZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcgdG8gc29tZXRoaW5nIHRo
YXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcp
KTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFt3YXNtVG9XYXNtRXhpdFN0dWJdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZl
UGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRv
V2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50
cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoV2FzbUVudHJ5UHRyVGFnKTsKKyAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsLCB3YXNtVG9XYXNtRXhpdFN0
dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPih3
YXNtVG9XYXNtRXhpdFN0dWIuY29kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xNTUwLDE3ICsxNTUwLDE4IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgLy8gVGhlIGNhbGwgY291bGQgaGF2ZSBi
ZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAvIG9yIGNvdWxkIGhhdmUg
bW9kaWZpZWQgb3VyIE1lbW9yeS4KICAgICAgICAgcmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3Rh
dGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VW
YWx1ZSgpLCBtX3Byb2MsIGNvbnRpbnVhdGlvbik7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiBvdXRnb2luZ0NhbGxzID0gJm1fb3V0Z29pbmdD
YWxsczsKICAgICAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxs
KG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5U
eXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAg
ICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOwot
Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVO
ZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMt
PmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4o
Y2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysrOworICAgICAgICAg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExvY2F0aW9uID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBvdXRnb2lu
Z0NhbGxzLT5hcHBlbmQoeyBmdW5jdGlvbkluZGV4LCB7IG1vdmVMb2NhdGlvbiwgY2FsbExvY2F0
aW9uIH19KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogICAgIH0KQEAg
LTE3MDEsNiArMTcwMiwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1
bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJU
eXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAogICAgICAgICAgICAgc2FmZUNhc3Q8
aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50
TG9hZExvY2F0aW9uKCkpKSk7CiAKKyAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0
aW9uLAorICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpKSkpOworCiAgICAgVHlw
ZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKICAgICByZXN1bHQgPSB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3Jp
Z2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICBbPV0gKFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTcxMiw4ICsxNzE3LDggQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXQKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8g
ZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNtIHN0dWIgYXNzdW1lcyBpdCBjYW4KICAgICAgICAg
ICAgIC8vIHVzZSBhbGwgdGhlIHBpbm5lZCByZWdpc3RlcnMgYXMgc2NyYXRjaDogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLQogICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGNhbGxlZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKGNhbGxlZSwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpKTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
ICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0g
Vm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKQEAgLTE3NjYsMTAgKzE3NzEs
OCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdpbgogICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9u
Q29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0
LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNp
Z25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRp
ZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24p
CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRl
eHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6
ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVi
cywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlv
bk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVu
dHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhj
ZXB0aW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9u
PigpOwotCiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1h
a2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50
cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCkBAIC0xNzkwLDcgKzE3
OTMsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmlu
Zz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/IE9wdGlvbnM6OndlYkFz
c2VtYmx5QkJRQjNPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNz
ZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5l
cmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1
bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2Vw
dGlvbik7CisgICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIGNv
bXBpbGF0aW9uQ29udGV4dC5vdXRnb2luZ0NhbGxzLCB3YXNtVG9XYXNtRXhpdFN0dWJzLCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5k
ZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7CiAg
ICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIApAQCAtMTgwOCwxMCArMTgxMSwx
MCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVy
YXRpb24ocHJvY2VkdXJlKTsKICAgICAgICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBp
bGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVj
dHMoKTsKLSAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBw
cm9jZWR1cmUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAgICAgIGNvbXBp
bGF0aW9uQ29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVS
ZWdpc3RlckF0T2Zmc2V0TGlzdCgpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAogLy8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMg
dG9vIG1lc3N5IHRvIGRvIGluIHdhc20uanNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCmluZGV4IDVlY2M1MWE2ODc1YmI0MTQ5ODllYTEyYjFi
NDExOGNhNDA2NDRlZWEuLjcxOGFiOTQ2OWRjZDJlMjc5YTEyZWMxODlkZDk0OGE1ZTczZTcxZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApA
QCAtNDksOSArNDksMTIgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiBlbWJlZGRlckVudHJ5cG9pbnRCeXByb2R1
Y3RzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IHdhc21FbnRyeXBvaW50SklU
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9p
bnRCeXByb2R1Y3RzOworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBvdXRnb2lu
Z0NhbGxzOworICAgIE9wdGlvbmFsPFVubGlua2VkTW92ZUFuZENhbGw+IGVtYmVkZGVyTW92ZUFu
ZENhbGw7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgY2FsbGVlU2F2ZVJlZ2lzdGVyczsKIH07
CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgdWludDhfdCosIHNpemVf
dCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5z
aWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1
aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhy
b3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0g
bnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cAppbmRleCBmYWJjMDAzMjNlYjJhNzM1OTA3MzA5ZDRkYTBkNTJiMDU4OTU4OWY3Li5kMmVlNWZi
NjVhOWM3NTRiNTJiMTFjM2FiZmQ5NDI3Njk1MjQ2YmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC01Myw4ICs1Myw5IEBAIG5hbWVzcGFjZSBXYXNt
QkJRUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0K
IAotQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRp
b24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVt
YmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9u
IHRocm93V2FzbUV4Y2VwdGlvbikKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxCQlFDYWxsZWU+PiYgY2FsbGVlcywgUmVmPE1vZHVsZUluZm9y
bWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVh
dGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2Vw
dGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5m
byksIFdURk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dX
YXNtRXhjZXB0aW9uKQorICAgICwgbV9jYWxsZWVzKCZjYWxsZWVzKQogICAgICwgbV9zdGF0ZShT
dGF0ZTo6VmFsaWRhdGVkKQogICAgICwgbV9hc3luY1dvcmsod29yaykKIHsKQEAgLTE1OSwxNiAr
MTYwLDEwIEBAIHZvaWQgQkJRUGxhbjo6cHJlcGFyZSgpCiAKICAgICBjb25zdCBhdXRvJiBmdW5j
dGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnM7CiAgICAgaWYgKCF0cnlSZXNl
cnZlQ2FwYWNpdHkobV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLT5p
bXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IHRvIEph
dmFTY3JpcHQgc3R1YnMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1i
bHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fd2FzbUludGVybmFsRnVuY3Rpb25zLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5
IGZ1bmN0aW9ucyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9jb21waWxhdGlv
bkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRleHRzIikKLSAg
ICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25zLnNp
emUoKSwgIiB0aWVyLXVwIGNvdW50cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBj
b250ZXh0cyIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9u
cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJl
c2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKLSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rp
b25zLnNpemUoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0
SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRl
eCkgewogICAgICAgICBJbXBvcnQqIGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBv
cnRzW2ltcG9ydEluZGV4XTsKQEAgLTIzMCw2ICsyMjUsNyBAQCBwdWJsaWM6CiAKIHZvaWQgQkJR
UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9jYWxsZWVzKTsKICAgICBBU1NFUlQobV9zdGF0ZSA+PSBTdGF0ZTo6
UHJlcGFyZWQpOwogICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJTdGFydGluZyBjb21waWxhdGlvbiIpOwogCkBAIC0yNjYsMTMgKzI2Miw3IEBAIHZvaWQgQkJR
UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAg
IEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5z
aWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9
PSBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0
aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKLSAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkpCi0gICAgICAgICAgICBtX3Rp
ZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA9IG1ha2VVbmlxdWU8VGllclVwQ291bnQ+KCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdID0g
bnVsbHB0cjsKLSAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IG1fdGllclVwQ291bnRzW2Z1
bmN0aW9uSW5kZXhdLmdldCgpOwotICAgICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0OworICAgICAgICBF
eHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKICAgICAgICAgdW5z
aWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IDA7CiAKICAgICAgICAgLy8gRklYTUU6
IFNvbWUgd2VicGFnZXMgdXNlIHZlcnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBleGhhdXN0
cyBhbGwgZXhlY3V0YWJsZSBtZW1vcnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUgc2l6ZSBv
ZiBleGVjdXRhYmxlIG1lbW9yeSByZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1CLgpAQCAt
MjgyLDEwICsyNzIsMTEgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWly
TW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+
PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAgICAg
IGZvcmNlVXNpbmdCMyA9IHRydWU7CiAKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IG1f
Y2FsbGVlcy0+YXQoZnVuY3Rpb25JbmRleCktPnRpZXJVcENvdW50KCk7CiAgICAgICAgIGlmICgh
Zm9yY2VVc2luZ0IzICYmIE9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCi0gICAgICAgICAgICBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxhdGlvbkNv
bnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0
YS5zaXplKCksIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbklu
ZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4LCB0
aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHBhcnNlQW5kQ29tcGls
ZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rp
b25JbmRleF0sIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2ln
bmF0dXJlLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCks
IG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5k
Q29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLmRh
dGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlv
bik7CisgICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUo
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbi5kYXRhLmRhdGEo
KSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV93YXNtVG9XYXNtRXhpdFN0dWJz
LCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBt
X21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01B
WCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICAgICAgaWYgKFVOTElLRUxZ
KCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7CkBAIC0yOTcsMTEgKzI4OCwxMSBAQCB2b2lkIEJCUVBsYW46OmNvbXBp
bGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25J
bmRleF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpOwotCiAgICAgICAgIGlmICht
X2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpIHx8IG1fbW9k
dWxlSW5mb3JtYXRpb24tPnJlZmVyZW5jZWRGdW5jdGlvbnMoKS5jb250YWlucyhmdW5jdGlvbklu
ZGV4KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMu
YWRkKGZ1bmN0aW9uSW5kZXgsIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKG1fY29tcGlsYXRpb25D
b250ZXh0c1tmdW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21D
YWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBm
dW5jdGlvbkluZGV4KSk7CisgICAgICAgICAgICBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpFbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWU6OmNyZWF0ZSgpOworICAgICAgICAgICAgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsIGVtYmVkZGVyRW50
cnlwb2ludENhbGxlZS5nZXQoKSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlKTsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rp
b25zLmFkZChmdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSkp
OwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
ICAgICAgICAgfQogCkBAIC0zMTksNyArMzEwLDkgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgQ29tcGlsYXRpb25Db250
ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwogICAg
ICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAg
ICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1w
b3J0RnVuY3Rpb25Db3VudCgpOworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgaW1wb3J0RnVu
Y3Rpb25Db3VudCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsK
KyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9u
SW5kZXggKyBpbXBvcnRGdW5jdGlvbkNvdW50OworICAgICAgICAgICAgQkJRQ2FsbGVlJiBjYWxs
ZWUgPSAqbV9jYWxsZWVzLT5hdChmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIEFTU0VSVChm
dW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkluZGV4U3Bh
Y2VTaXplKCkpOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKQEAgLTMyOCw5ICszMjEsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnNbZnVuY3Rpb25JbmRleF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVl
PEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5j
YWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShjb250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMp
OworICAgICAgICAgICAgICAgIGNhbGxlZS5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtl
VW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBmdW5j
dGlvblslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRl
eHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIGNhbGwgOiBjb250ZXh0Lm91dGdvaW5nQ2FsbHMpIHsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGNhbGwudGFyZ2V0RnVuY3Rpb25JbmRleFNwYWNlID49IGltcG9ydEZ1bmN0aW9uQ291
bnQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCB0YXJnZXRGdW5jdGlvbklu
ZGV4ID0gY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGVlcy0+
YXQodGFyZ2V0RnVuY3Rpb25JbmRleCktPmFkZENhbGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsIGNh
bGwudW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlv
biA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkp
IHsKQEAgLTM0MCwyMyArMzQxLDE4IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJz
dHJhY3RMb2NrZXImIGxvY2tlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9u
PigKKyAgICAgICAgICAgICAgICBlbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5
cG9pbnQoKS5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAg
ICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRy
VGFnLCAiRW1iZWRkZXItPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIG5hbWUgJXMiLCBm
dW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0
cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwK
ICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEJ5
cHJvZHVjdHMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIGZvciAoYXV0
byYgdW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8mIGNhbGwgOiB1bmxpbmtlZCkgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGV4ZWN1dGFibGVBZGRyZXNzOwotICAgICAgICAg
ICAgICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGlu
c3RlYWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBi
ZSByZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRy
ZXNzID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5j
b2RlKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCkpLT5l
bnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigp
OwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5j
YWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZXhlY3V0YWJs
ZUFkZHJlc3MpKTsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbWJlZGRlck1vdmVBbmRD
YWxsKQorICAgICAgICAgICAgICAgICAgICBjYWxsZWUuYWRkQ2FsbGVyKGxvY2tlciwgbGlua0J1
ZmZlciwgKmNvbnRleHQuZW1iZWRkZXJNb3ZlQW5kQ2FsbCk7CiAgICAgICAgICAgICB9CisKICAg
ICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYgY2FsbGVlIDogKm1fY2FsbGVlcykKKyAgICAg
ICAgICAgIGNhbGxlZS0+cmVwYXRjaENhbGxlcnMobG9ja2VyLCAqY2FsbGVlKTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKCFpc0NvbXBsZXRlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5oCmluZGV4IGEyNjA0ZTU1NTM0MWZlMGIyZjA2YzkzMzNiMWJiNzhlNzgzNWQ1
N2YuLjgyZmNmYzJlNjc1YmE4MDVjYjIzMTJkOWVjNjNmMjQxZmM1YmQzNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6
CiAgICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24g
fTsKIAogICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVy
ZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNs
ZS4KLSAgICBCQlFQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dv
cmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21F
eGNlcHRpb24pOworICAgIEJCUVBsYW4oQ29udGV4dCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8QkJR
Q2FsbGVlPj4mLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25U
YXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBB
c3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJv
d1dhc21FeGNlcHRpb24pOwogICAgIEJCUVBsYW4oQ29udGV4dCosIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJik7CiAKQEAgLTk3LDEyICs5Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IFdURk1vdmUobV93YXNtVG9XYXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8VmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiB0YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpCi0g
ICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0g
ICAgICAgIHJldHVybiBXVEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpOwotICAgIH0K
LQogICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKICAgICAgICAgSW5pdGlhbCwKICAg
ICAgICAgVmFsaWRhdGVkLApAQCAtMTM2LDEzICsxMzAsMTIgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8dWludDhfdD4gbV9zb3VyY2U7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0lu
Zm9zOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4g
bV93YXNtVG9XYXNtRXhpdFN0dWJzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMy
X3QsIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7
Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5j
dGlvbnM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENh
bGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5h
bEZ1bmN0aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9u
Q29udGV4dHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+IG1fdGll
clVwQ291bnRzOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4qIG1fY2FsbGVl
cyB7IG51bGxwdHIgfTsKIAotICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4+IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7CiAgICAgU3RhdGUgbV9zdGF0ZTsKIAogICAg
IGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKaW5kZXggODY2MDFhYzllZjNmYjM4NWUwNjAyOTAx
YzFhMDRkNTMwYzU2M2NhOC4uOWJiYzZmMzg5NzUyZDc3MDZlNGM5ZmIxNWM4NTk5ZjU0ZjI4MmY5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5Jbmxp
bmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVz
LmgKQEAgLTM4LDIxICszOCw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiB2b2lkIEJC
UVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogewogICAg
IEFTU0VSVCghZmFpbGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbklu
ZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMu
c2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewotCi0gICAgICAgIFJlZlB0cjxXYXNt
OjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1dG8gZW1i
ZWRkZXJUb1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5n
ZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92
ZShlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVl
TW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZS5nZXQoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rp
b24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgp
OwotICAgICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbklu
ZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAg
ICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IFdhc206OkJCUUNhbGxl
ZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3Bh
Y2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNw
YWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92
ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigp
KSk7Ci0KLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsK
LSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRl
cm5hbEZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgp
OyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5j
dGlvbkluZGV4LCBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFs
RnVuY3Rpb25JbmRleCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IGNlNjEwNzZkMWFjYjc5
YWVhNGM1ZThiNzUyYjE3OTQ4NWNhZjA4ZWUuLmY3ZDQ3YmE5MDM4NmE3MzExN2QxMjY0YjcwMTI0
OGU1OWJjY2Q0NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5j
cHAKQEAgLTQ3LDYgKzQ3LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21F
bnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2kKICAgICBKSVQgaml0
OwogCiAgICAgR1BSUmVnIHNjcmF0Y2ggPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9s
b2d1ZVNjcmF0Y2goMCk7CisgICAgR1BSUmVnIGNhbGxlZSA9IHdhc21DYWxsaW5nQ29udmVudGlv
bkFpcigpLnByb2xvZ3VlU2NyYXRjaCgxKTsKICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5l
ZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgQVNTRVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRj
aCk7CiAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwpA
QCAtNTcsMTMgKzU4LDIwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50
cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpCiAgICAgaml0LmxvYWRX
YXNtQ29udGV4dEluc3RhbmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQgSW5zdGFuY2UqCiAg
ICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXYXNtOjpJbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21D
b250ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5n
IGl0cyBvd24gSW5zdGFuY2UuCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdB
c1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKGltcG9ydEluZGV4KSks
IGJhc2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCi0gICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5n
IHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0
YWlsIGNhbGwgdG8gaXQgYmVsb3cuCisgICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQg
Y2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IGFuZCBjYWxsZWUgc28gd2Ug
Y2FuIHRhaWwgY2FsbCB0byBpdCBiZWxvdy4KICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Mo
c2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFuY2U6Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24oaW1wb3J0SW5kZXgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExv
Y2F0aW9uKGltcG9ydEluZGV4KSksIGNhbGxlZSk7CiAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJ
bnN0YW5jZShiYXNlTWVtb3J5KTsKIAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXpl
UmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXpl
UmVnQXNTY3JhdGNoKTsKICAgICBqaXQuc3RvcmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpB
ZGRyZXNzKGJhc2VNZW1vcnksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkp
OwogCisgICAgLy8gU2V0IHRoZSBjYWxsZWUgc2xvdCBpbiB0aGUgY2FsbCBmcmFtZQorICAgIGpp
dC5sb2FkUHRyKGNhbGxlZSwgY2FsbGVlKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZl
IGJlZW4gY2FsbGVkLCBzbyBSZXR1cm5QQyBpcyBvbiB0aGUgc3RhY2ssIGJ1dCBoYXZlIG5vdCB5
ZXQgcHVzaGVkIHRoZSBiYXNlIHBvaW50ZXIsCisgICAgLy8gc28gd2UgaGF2ZSB0byBzdWJ0cmFj
dCB0aGUgc3BhY2UgZm9yIENhbGxlckZyYW1lIGZyb20gdGhlIGNhbGxlZSBzbG90CisgICAgaml0
LnN0b3JlUHRyKGNhbGxlZSwgSklUOjpBZGRyZXNzKEpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ1BVUmVn
aXN0ZXIpKSk7CisKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0
IGFsbCBXYXNtOjpJbnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAg
dGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNp
emUgcmVnaXN0ZXJzLgogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21DYWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxl
ZS5jcHAKaW5kZXggZThkZGYxNTNkZDlkOTAyMjljNTEyODFlYzI4MTJmN2E1OTExNDFkNi4uOTMz
MTRhYjY2Nzc4N2Y2OTE5OWIxYTQyYzNkMjlkM2ZjNGI2Yzg2NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTMyLDE2ICszMiwxNCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1DYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxh
dGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKK0NhbGxl
ZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUpCiAgICAgOiBt
X2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCi0gICAgLCBtX2VudHJ5cG9pbnQoV1RG
TW92ZShlbnRyeXBvaW50KSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVn
aXN0ZXJDYWxsZWUodGhpcyk7CiB9CiAKLUNhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQor
Q2FsbGVlOjpDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgc2l6
ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYg
bmFtZSkKICAgICA6IG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKLSAgICAsIG1f
ZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQogICAgICwgbV9pbmRleE9yTmFtZShpbmRl
eCwgV1RGTW92ZShuYW1lKSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVn
aXN0ZXJDYWxsZWUodGhpcyk7CkBAIC01Miw2ICs1MCw0OCBAQCBDYWxsZWU6On5DYWxsZWUoKQog
ICAgIENhbGxlZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwog
fQogCisKK2lubGluZSB2b2lkIHJlcGF0Y2hNb3ZlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4gbW92ZUxvY2F0aW9uLCBDYWxs
ZWUmIHRhcmdldENhbGxlZSkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
bW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKCZ0YXJnZXRDYWxsZWUpKTsKK30KKwor
aW5saW5lIHZvaWQgcmVwYXRjaENhbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBDb2RlTG9jYXRp
b25OZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbiwgQ2FsbGVlJiB0YXJnZXRD
YWxsZWUpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4odGFyZ2V0Q2FsbGVlLmNvZGUo
KSkpOworfQorCit2b2lkIEJCUUNhbGxlZTo6YWRkQ2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQorewor
ICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0
clRhZz4oY2FsbC5tb3ZlTG9jYXRpb24pOworICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsLmNhbGxMb2NhdGlv
bik7CisgICAgbV9tb3ZlTG9jYXRpb25zLmFwcGVuZChtb3ZlTG9jYXRpb24pOworICAgIG1fY2Fs
bExvY2F0aW9ucy5hcHBlbmQoY2FsbExvY2F0aW9uKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OmFk
ZEFuZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTGlua0J1ZmZlciYg
bGlua0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKGVudHJ5cG9pbnQoKS5jb21waWxhdGlvbik7CisKKyAgICBhdXRvIG1vdmVMb2NhdGlvbiA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGwubW92ZUxvY2F0aW9u
KTsKKyAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PFdhc21FbnRyeVB0clRhZz4oY2FsbC5jYWxsTG9jYXRpb24pOworICAgIG1fbW92ZUxvY2F0aW9u
cy5hcHBlbmQobW92ZUxvY2F0aW9uKTsKKyAgICBtX2NhbGxMb2NhdGlvbnMuYXBwZW5kKGNhbGxM
b2NhdGlvbik7CisKKyAgICBDYWxsZWUmIHRhcmdldENhbGxlZSA9IG1fcmVwbGFjZW1lbnQgPyBz
dGF0aWNfY2FzdDxDYWxsZWUmPigqbV9yZXBsYWNlbWVudCkgOiAqdGhpczsKKyAgICByZXBhdGNo
TW92ZShsb2NrZXIsIG1vdmVMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKKyAgICByZXBhdGNoQ2Fs
bChsb2NrZXIsIGNhbGxMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKK30KKwordm9pZCBCQlFDYWxs
ZWU6OnJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIENhbGxlZSYg
dGFyZ2V0Q2FsbGVlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldENhbGxlZS5lbnRyeXBv
aW50KCkuY29tcGlsYXRpb24pOworICAgIGZvciAoYXV0byBtb3ZlTG9jYXRpb24gOiBtX21vdmVM
b2NhdGlvbnMpCisgICAgICAgIHJlcGF0Y2hNb3ZlKGxvY2tlciwgbW92ZUxvY2F0aW9uLCB0YXJn
ZXRDYWxsZWUpOworICAgIGZvciAoYXV0byBjYWxsTG9jYXRpb24gOiBtX2NhbGxMb2NhdGlvbnMp
CisgICAgICAgIHJlcGF0Y2hDYWxsKGxvY2tlciwgY2FsbExvY2F0aW9uLCB0YXJnZXRDYWxsZWUp
OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxlZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IGY3
ZWE0ZDA1YjhkMGE3MWMxZWU2MmE1NmM0ZDM5ZGE1NDlmMDliN2IuLjk5MDlkYzQwOTU5OTE5YTVj
NjlhZmJkZjI1Mjk1ODI5M2ExMWM0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q2FsbGVlLmgKQEAgLTQwLDEyICs0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogY2xhc3MgQ2FsbGVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxlZT4g
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCB7IHJldHVybiBt
X2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+
KCk7IH0KLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
eyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisgICAgRW50cnlw
b2ludCYgZW50cnlwb2ludCgpIHsgcmV0dXJuIG1fZW50cnlwb2ludDsgfQorICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2Vu
dHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7
IH0KICAgICBJbmRleE9yTmFtZSBpbmRleE9yTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhP
ck5hbWU7IH0KICAgICBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb21waWxhdGlvbk1vZGU7IH0KIAorICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVn
aXN0ZXJzOyB9CisKICAgICBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gcmFuZ2UoKSBjb25zdAog
ICAgIHsKICAgICAgICAgdm9pZCogc3RhcnQgPSBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNv
ZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKQEAgLTU2
LDc4ICs1Nyw3MCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q2Fs
bGVlKCk7CiAKIHByb3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6
Q29tcGlsYXRpb25Nb2RlLCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiwgc2l6
ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShDb21waWxhdGlvbk1vZGUpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIENhbGxlZShDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0
IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKIAogcHJpdmF0ZToKICAgICBDb21waWxh
dGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGU7Ci0gICAgV2FzbTo6RW50cnlwb2ludCBtX2VudHJ5
cG9pbnQ7CisgICAgRW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiAgICAgSW5kZXhPck5hbWUgbV9p
bmRleE9yTmFtZTsKIH07CiAKIGNsYXNzIE9NR0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlw
b2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBS
ZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYmIHVubGlua2VkQ2FsbHMpCisgICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShzaXpl
X3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBu
YW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1v
dmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2Fs
bHMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShpbmRleCwgV1RG
TW92ZShuYW1lKSkpOwogICAgIH0KIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgd2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsg
fQotCiBwcml2YXRlOgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxs
cykKLSAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZN
b3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3dhc21U
b1dhc21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICBPTUdDYWxsZWUoc2l6
ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYg
bmFtZSkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBpbmRleCwg
V1RGTW92ZShuYW1lKSkKICAgICB7CiAgICAgfQotCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKIH07CiAKIGNsYXNzIE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBv
aW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0
aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJf
dCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2Fs
bHMpCisgICAgc3RhdGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKHNpemVfdCBp
bmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUs
IHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5Q2FsbGVl
KFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBvc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUoaW5kZXgsIFdURk1v
dmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCkpOwogICAgIH0K
IAogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVy
biBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgd2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNh
bGxzaXRlczsgfQogCiBwcml2YXRlOgotICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVu
dHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1l
KiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYmIHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RG
TW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3dhc21Ub1dhc21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxp
bmtlZENhbGxzKSkKKyAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6
cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgpCisgICAgICAgIDog
Q2FsbGVlKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBpbmRleCwgV1RGTW92
ZShuYW1lKSkKICAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSkKICAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAgICAg
ewogICAgIH0KIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBtX3dhc21Ub1dh
c21DYWxsc2l0ZXM7CiAgICAgdW5zaWduZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwog
ICAgIHVpbnQzMl90IG1fbG9vcEluZGV4OwogfTsKIAogY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxF
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlw
b2ludCkKKyAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotICAg
ICAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1v
ZGUsIFdURk1vdmUoZW50cnlwb2ludCkpCisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKCkK
KyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2Rl
KQogICAgIHsKICAgICB9CiB9OwogCiBjbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2Fs
bGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVu
dHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1l
KiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291
bnQ+JiYgdGllclVwQ291bnQpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShzaXpl
X3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBu
YW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50
KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpKSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZSh0aWVyVXBDb3VudCkpKTsKICAgICB9CiAKICAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZSog
b3NyRW50cnlDYWxsZWUoKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0x
NDcsMTMgKzE0MCwyMCBAQCBwdWJsaWM6CiAKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQo
KSB7IHJldHVybiBtX3RpZXJVcENvdW50LmdldCgpOyB9CiAKKyAgICB2b2lkIGFkZENhbGxlcihj
b25zdCBBYnN0cmFjdExvY2tlciYsIExpbmtCdWZmZXImLCBVbmxpbmtlZE1vdmVBbmRDYWxsKTsK
KyAgICB2b2lkIGFkZEFuZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5rQnVm
ZmVyJiwgVW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisKKyAgICB2b2lkIHJlcGF0Y2hDYWxsZXJzKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgQ2FsbGVlJik7CisKIHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVl
KFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxj
b25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8
VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBp
bGF0aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUo
bmFtZSkpCisgICAgQkJRQ2FsbGVlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUq
LCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3Vu
dD4mJiB0aWVyVXBDb3VudCkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpCQlFN
b2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3RpZXJVcENvdW50KFdURk1v
dmUodGllclVwQ291bnQpKQogICAgIHsKICAgICB9CiAKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4+IG1fbW92ZUxvY2F0aW9uczsKKyAgICBWZWN0
b3I8Q29kZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPj4gbV9jYWxsTG9jYXRpb25z
OwogICAgIFJlZlB0cjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKICAg
ICBSZWZQdHI8T01HQ2FsbGVlPiBtX3JlcGxhY2VtZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxU
aWVyVXBDb3VudD4gbV90aWVyVXBDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggYjQ0MmI2MTYxYmY5MjMzNzU4MTk3
NTgxM2ZmMzgwNmE3MzFhOTIyNi4uNmZhNDM2OWNjZGNhODhlNGI3MGVkNjQ2OWJiNzYzOTgxNGY4
ZTg0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgKQEAgLTg4LDM0ICs4OCwxNiBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAg
c3RhdGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsg
fQotICAgIHZvaWQgc2V0dXBGcmFtZUluUHJvbG9ndWUoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
PFdhc21FbnRyeVB0clRhZz4qIGNhbGxlZU1vdmVMb2NhdGlvbiwgQjM6OlByb2NlZHVyZSYgcHJv
YywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB2
b2lkIHNldHVwRnJhbWVJblByb2xvZ3VlKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4g
b3JpZ2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0
aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFk
ZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKICAgICAgICAgc3RhdGlj
X2Fzc2VydChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVh
ZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAKLSAgICAgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8
QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OkludDY0LCBvcmlnaW4pOwotICAgICAgICBn
ZXRDYWxsZWVQYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IHsgQjM6OlZhbHVlUmVwOjpT
b21lUmVnaXN0ZXIgfTsKLSAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIz
OjpFZmZlY3RzOjpub25lKCk7Ci0gICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAqY2FsbGVlTW92ZUxvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9u
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIEIzOjpW
YWx1ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIz
OjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7Ci0gICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDYWxs
ZWUgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGJsb2NrLT5h
cHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKLSAgICAg
ICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQsCi0gICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZnNldE9m
Q2FsbGVlKSk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3Jl
IHplcm8gaW50byB0aGUgQ29kZUJsb2NrKiBzcG90IGluIHRoZSBjYWxsIGZyYW1lLAogICAgICAg
ICAvLyBidXQgdGhlcmUgYXJlIHBsYWNlcyB0aGF0IGludGVycHJldCBub24tbnVsbCBDb2RlQmxv
Y2sgc2xvdCB0byBtZWFuIGEgdmFsaWQgQ29kZUJsb2NrLgogICAgICAgICAvLyBXaGVuIGRvaW5n
IHVud2luZGluZywgd2UnbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZW50aXJlIHJ1bnRpbWUg
aXMgT0sgd2l0aCBhIG5vbi1udWxsCiAgICAgICAgIC8vIENvZGVCbG9jayBub3QgaW1wbHlpbmcg
dGhhdCB0aGUgQ29kZUJsb2NrIGlzIHZhbGlkLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQ
b2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50
ZXIsIG9yaWdpbik7CiAgICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDb2RlQmxvY2sgPSBibG9j
ay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmRO
ZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKICAgICAgICAgICAg
IGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCAwKSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggZDRhOWNk
Njc3MTAyYjU4ZTRmYzU5ZTFhMjBhZTU2YjhlMjFjNzQzMC4uY2UwMDI2YjAyZGM3MTM4ZmMzNjYx
NDBlMDg4OTM4NmUxOTAyNGJjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvZGVCbG9jay5jcHAKQEAgLTQ3LDcgKzQ3LDE1IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENv
bnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVs
CiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRoaXM7CiAKLSAgICBt
X3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbWFrZVJlZihtb2R1bGVJbmZv
cm1hdGlvbiksIEJCUVBsYW46OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNh
bGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
XSAoUGxhbiYpIHsKKyAgICBtX2NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOworICAgIG1f
Ym94ZWRDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbV9jYWxsZWVDb3VudDsgaSsrKSB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKSArIGk7
CisgICAgICAgIG1fY2FsbGVlc1tpXSA9IEJCUUNhbGxlZTo6Y3JlYXRlKGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbW9kdWxlSW5mb3JtYXRpb24ubmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpLCBtYWtlVW5pcXVlPFRpZXJVcENvdW50PigpKTsKKyAgICAgICAgbV9ib3hlZENhbGxlZXNb
aV0gPSBDYWxsZWVCaXRzOjpib3hXYXNtKG1fY2FsbGVlc1tpXS5nZXQoKSk7CisgICAgfQorCisg
ICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIG1fY2FsbGVlcywgbWFr
ZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFy
ZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3Zl
KHByb3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOwogICAgICAgICBpZiAobV9wbGFuLT5mYWlsZWQoKSkgewogICAgICAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSBtX3BsYW4tPmVycm9yTWVzc2FnZSgpOwpAQCAtNTYsMjEgKzY0LDE4
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9k
ZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsCiAgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhN
RTogd2Ugc2hvdWxkIGV2ZW50dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUuCi0gICAgICAgIG1f
Y2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7CiAgICAgICAgIG1fb3B0aW1pemVkQ2FsbGVl
cy5yZXNpemUobV9jYWxsZWVDb3VudCk7CiAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5
UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKIAotICAgICAgICBtX3BsYW4tPmluaXRpYWxp
emVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0cjxXYXNtOjpDYWxsZWU+
JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBSZWY8V2FzbTo6Q2FsbGVlPiYmIHdhc21FbnRy
eXBvaW50Q2FsbGVlKSB7CisgICAgICAgIG1fcGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1
bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4mJiBl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpIHsKICAgICAgICAgICAgIGlmIChlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUpIHsKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJD
YWxsZWVzLnNldChjYWxsZWVJbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUp
KTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50
cnkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jYWxsZWVzW2NhbGxlZUluZGV4XSA9
IFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICAgICAgbV93YXNtSW5kaXJl
Y3RDYWxsRW50cnlQb2ludHNbY2FsbGVlSW5kZXhdID0gbV9jYWxsZWVzW2NhbGxlZUluZGV4XS0+
ZW50cnlwb2ludCgpOworICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNb
Y2FsbGVlSW5kZXhdID0gbV9jYWxsZWVzW2NhbGxlZUluZGV4XS0+Y29kZSgpOwogICAgICAgICB9
KTsKIAogICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMgPSBtX3BsYW4tPnRha2VXYXNtVG9X
YXNtRXhpdFN0dWJzKCk7Ci0gICAgICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyA9IG1fcGxhbi0+
dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKIAogICAgICAgICBzZXRDb21waWxhdGlvbkZpbmlz
aGVkKCk7CiAgICAgfSksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNt
RXhjZXB0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgK
aW5kZXggZGVhMmZmYTMxODEyMDNmNzhhYWE2MWM3MGJmMjk3MWJjMDMyNzllZC4uMmMyZjEwNTI0
MzQ0YTk4M2E1YzQ3MThmMjFjNTkxNzY3ZWI3M2YxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Db2RlQmxvY2suaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUg
Ildhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNpbmNsdWRlICJXYXNt
VGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtNDAsNyArNDEsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBDYWxsZWU7CiBzdHJ1
Y3QgQ29udGV4dDsKIGNsYXNzIEJCUVBsYW47CiBjbGFzcyBPTUdQbGFuOwpAQCAtNzYsNyArNzYs
NyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkg
dmFsaWQgb25jZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgogCi0gICAgQ2FsbGVl
JiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUmIGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3Vu
dCgpKTsKQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsZWUpOwogICAgICAgICByZXR1cm4gKmNhbGxlZTsKICAgICB9CisKICAgICBDYWxsZWUmIHdh
c21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CkBAIC05Niw3
ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2NhbGxlZXNbY2FsbGVlSW5kZXhd
LmdldCgpOwogICAgIH0KIAotICAgIENhbGxlZSYgd2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIEJCUUNhbGxlZSYgd2Fz
bUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKQEAg
LTExMSw2ICsxMTIsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJm1fd2FzbUluZGlyZWN0
Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XTsKICAgICB9CiAKKyAgICB2b2lkKiogYm94ZWRD
YWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOworICAgICAgICB1bnNpZ25lZCBjYWxsZWVJ
bmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAgICAg
ICAgcmV0dXJuICZtX2JveGVkQ2FsbGVlc1tjYWxsZWVJbmRleF07CisgICAgfQorCiAgICAgYm9v
bCBpc1NhZmVUb1J1bihNZW1vcnlNb2RlKTsKIAogICAgIE1lbW9yeU1vZGUgbW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQpAQCAtMTI0LDExICsxMzIsMTEgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKICAgICB1bnNpZ25lZCBtX2NhbGxlZUNvdW50
OwogICAgIE1lbW9yeU1vZGUgbV9tb2RlOwotICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9j
YWxsZWVzOworICAgIFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4gbV9jYWxsZWVzOwogICAgIFZl
Y3RvcjxSZWZQdHI8Q2FsbGVlPj4gbV9vcHRpbWl6ZWRDYWxsZWVzOwotICAgIEhhc2hNYXA8dWlu
dDMyX3QsIFJlZlB0cjxDYWxsZWU+LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhh
c2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVk
ZGVyQ2FsbGVlczsKKyAgICBWZWN0b3I8dm9pZCo+IG1fYm94ZWRDYWxsZWVzOworICAgIEhhc2hN
YXA8dWludDMyX3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+LCB0eXBlbmFtZSBE
ZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyQ2FsbGVlczsKICAgICBWZWN0b3I8TWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzOwotICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IG1fd2FzbVRv
V2FzbUNhbGxzaXRlczsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBSZWZQdHI8QkJRUGxhbj4gbV9w
bGFuOwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5pc2hlZCB7IGZhbHNl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCmluZGV4IGEyMzc5
ZmQ1ODljODlkZjYzNTdlNmU0NDFiZWQyYTUxODczOWNhM2UuLmM3OGI0NDNjNTkxZTg3MDM0YjQx
OTVlY2EwMjcyOGRlZjgwY2M4OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21FbWJlZGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21F
bWJlZGRlci5oCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIG5hbWVzcGFjZSBX
YXNtIHsKIAogc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dDsKK2NsYXNzIEVtYmVkZGVyRW50cnlw
b2ludENhbGxlZTsKIGNsYXNzIEluc3RhbmNlOwogc3RydWN0IEludGVybmFsRnVuY3Rpb247CiBz
dHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CkBAIC00OCw3ICs0OSw3IEBAIGNsYXNzIFNpZ25hdHVy
ZTsKIHN0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOwogCiAvLyBDcmVhdGUgd3JhcHBlciBj
b2RlIHRvIGNhbGwgZnJvbSBlbWJlZGRlciAtPiBXZWJBc3NlbWJseS4KLXVzaW5nIENyZWF0ZUVt
YmVkZGVyV3JhcHBlciA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9k
ZSwgdWludDMyX3QpPjsKK3VzaW5nIENyZWF0ZUVtYmVkZGVyV3JhcHBlciA9IFdURjo6RnVuY3Rp
b248dm9pZChDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBFbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWUqLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUpPjsK
IAogLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW4gZXhjZXB0aW9uIGlzIGRldGVjdGVkLiBUaGUgcmV0
dXJuIHZhbHVlIGlzIHRoZSBQQyB0byBjb250aW51ZSBhdC4KIHVzaW5nIFRocm93V2FzbUV4Y2Vw
dGlvbiA9IHZvaWQqICgqKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5j
ZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4IDA2NjliYjQw
N2UyOTU5MzYyMmZjY2E4ZTUxOTExOTVkZDliNDZmM2IuLmVhMGUwYjY1OGU5ZTQ1NWU5YjAxY2Rh
ZTJiNDc5NmI2MjJiODBlM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0
LmgKQEAgLTI4NywxMCArMjg3LDE1IEBAIGlubGluZSBib29sIGlzVmFsaWROYW1lVHlwZShJbnQg
dmFsKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RydWN0IFVubGlua2VkTW92ZUFuZENhbGwg
eworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxMb2NhdGlvbjsKK307CisKIHN0cnVjdCBVbmxpbmtlZFdh
c21Ub1dhc21DYWxsIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
Q29kZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPiBjYWxsTG9jYXRpb247Ci0gICAg
c2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZTsKKyAgICBzaXplX3QgdGFyZ2V0RnVuY3Rpb25JbmRl
eFNwYWNlOworICAgIFVubGlua2VkTW92ZUFuZENhbGwgdW5saW5rZWRNb3ZlQW5kQ2FsbDsKIH07
CiAKIHN0cnVjdCBFbnRyeXBvaW50IHsKQEAgLTMxMywxMCArMzE4LDEyIEBAIHN0cnVjdCBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsKICAgICB1c2luZyBMb2FkTG9jYXRpb24gPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPio7CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZUluZGV4KTsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIGVudHJ5cG9pbnRMb2FkTG9j
YXRpb24pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExv
Y2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVu
Y3Rpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKTsgfQogCiAgICAgLy8gRklYTUU6IFBhY2sg
c2lnbmF0dXJlIGluZGV4IGFuZCBjb2RlIHBvaW50ZXIgaW50byBvbmUgNjQtYml0IHZhbHVlLiBT
ZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTE+LgogICAg
IFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4IHsgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgg
fTsKICAgICBMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbjsKKyAgICB2b2lkKiog
Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb247CiB9OwogdXNpbmcgRnVuY3Rpb25JbmRleFNwYWNlID0g
VmVjdG9yPFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24+OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCmluZGV4IGY0ZjM1MDg3ZTI1NmQwOTJjZTc0YjIxYjg0
NDBhOTM3MjVkMTY2ODUuLjdlMjEyNGY3NmM2M2JmNzVlMmRiMTIzNDlkOTUwYjBlOTM2ODQwY2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCkBAIC0xMzAsNiAr
MTMwLDcgQEAgcHVibGljOgogICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpM
b2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24geyBudWxscHRyIH07CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVkZGVy
U3R1YjsKICAgICAgICAgdm9pZCogaW1wb3J0RnVuY3Rpb24geyBudWxscHRyIH07IC8vIEluIGEg
SlMgZW1iZWRkaW5nLCB0aGlzIGlzIGEgV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pi4KKyAgICAgICAg
dm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uIHsgbnVsbHB0ciB9OwogICAgIH07CiAgICAg
dW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9udW1JbXBvcnRG
dW5jdGlvbnM7IH0KICAgICBJbXBvcnRGdW5jdGlvbkluZm8qIGltcG9ydEZ1bmN0aW9uSW5mbyhz
aXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pCkBAIC0xNDEsNiArMTQyLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbihzaXplX3Qg
aW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rp
b25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBv
cnRGdW5jdGlvbkluZm8sIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKTsgfQogICAgIHN0YXRp
YyBzaXplX3Qgb2Zmc2V0T2ZXYXNtVG9FbWJlZGRlclN0dWIoc2l6ZV90IGltcG9ydEZ1bmN0aW9u
TnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9m
KEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZv
LCB3YXNtVG9FbWJlZGRlclN0dWIpOyB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9y
dEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWls
KCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JK
RUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVuY3Rpb24pOyB9CisgICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKHNpemVfdCBpbXBv
cnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51
bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1
bmN0aW9uSW5mbywgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOyB9CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaW1wb3J0RnVuY3Rpb25OdW0pIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KCZpbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0RnVu
Y3Rpb25OdW0pLT5pbXBvcnRGdW5jdGlvbik7IH0KIAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KEltcG9ydEZ1bmN0aW9uSW5mbykgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1
aW50NjRfdCk+KHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pKSwgIldlIHJlbHkgb24gdGhpcyBm
b3IgdGhlIGFsaWdubWVudCB0byBiZSBjb3JyZWN0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCmluZGV4IDg2NzEyNDI5
YTUzODM4NTRmNzg5ZGE1MTZlZjVlZDBlYzY2ZGUwMjEuLjAyMzA3MTNkZDEzODQ0NDA5MzM2MWI2
MWRiOGU3ODEyYjBmZjNlMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCkBAIC01NCwxNSArNTQsMTUgQEAgbmFtZXNw
YWNlIFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiB9CiAKLU9NR0Zvck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQ
bGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBSZWY8QkJRQ2FsbGVl
PiYmIGNhbGxlZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK09NR0Zvck9TUkVudHJ5UGxh
bjo6T01HRm9yT1NSRW50cnlQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9k
dWxlLCBSZWY8QkJRQ2FsbGVlPiYmIGNhbGxlZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWlu
dDMyX3QgbG9vcEluZGV4LCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQ29tcGxldGlvblRhc2smJiB0
YXNrKQogICAgIDogQmFzZShjb250ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3Jt
YXRpb24mPihtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92ZSh0YXNrKSkKICAg
ICAsIG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKLSAgICAsIG1fY29kZUJsb2NrKCptX21vZHVs
ZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAg
ICwgbV9jYWxsZWUoV1RGTW92ZShjYWxsZWUpKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0
aW9uSW5kZXgpCiAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiB7Ci0gICAgc2V0TW9kZSht
b2RlKTsKKyAgICBzZXRNb2RlKGNvZGVCbG9jay5tb2RlKCkpOwogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+cnVubmFibGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9k
dWxlLT5jb2RlQmxvY2tGb3IobV9tb2RlKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR0Zvck9T
UkVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgT01HRm9yT1NSRW50cnkgcGxh
biBmb3IgIiwgZnVuY3Rpb25JbmRleCwgIiBvZiBtb2R1bGU6ICIsIFJhd1BvaW50ZXIoJm1fbW9k
dWxlLmdldCgpKSk7CkBAIC04MSw0NSArODEsMzMgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46
OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUg
PSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICBBU1NFUlQo
dmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXpl
KCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCi0gICAgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7CiAgICAgQ29tcGlsYXRpb25D
b250ZXh0IGNvbnRleHQ7CiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9
IDA7Ci0gICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29u
dGV4dCwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1
cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1v
ZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21w
aWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLmRhdGEuZGF0YSgp
LCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBtX2NvZGVCbG9jay0+bV93YXNtVG9X
YXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBt
X2Z1bmN0aW9uSW5kZXgsIG1fbG9vcEluZGV4KTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VB
bmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VT
dHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVy
IHVwICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEVudHJ5cG9pbnQgb21nRW50cnlwb2ludDsKICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkpIHsKICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3Ry
aW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2hpbGUgdGllcmluZyB1cCBmdW5jdGlvbiBh
dCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1
ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVl
ID0gT01HRm9yT1NSRW50cnlDYWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgpOworICAgIGNhbGxlZS0+ZW50cnlw
b2ludCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGNvbnRleHQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyk7CisgICAgY2FsbGVlLT5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5p
cXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
QjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NR0Zvck9TUkVudHJ5IGZ1bmN0aW9u
WyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBv
aW50Qnlwcm9kdWN0cykpOwogCi0gICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJz
ID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9k
dWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVl
PiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlw
b2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rp
b24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBt
X2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSk7CiAgICAgewotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCkt
PmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsK
LSAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwotCiAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGZvciAo
YXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAg
ICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5
cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25J
bmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50
cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxX
YXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0
clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjb250ZXh0Lm91
dGdvaW5nQ2FsbHMpIHsKKyAgICAgICAgICAgIEJCUUNhbGxlZSYgdGFyZ2V0Q2FsbGVlID0gbV9j
b2RlQmxvY2stPndhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwudGFyZ2V0
RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIHRhcmdldENhbGxlZS5hZGRBbmRMaW5r
Q2FsbGVyKGxvY2tlciwgbGlua0J1ZmZlciwgY2FsbC51bmxpbmtlZE1vdmVBbmRDYWxsKTsKICAg
ICAgICAgfQogICAgIH0KICAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsK
QEAgLTEzMiwxOSArMTIwLDYgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGls
YXRpb25FZmZvcnQpCiAgICAgICAgICAgICBtX2NhbGxlZS0+dGllclVwQ291bnQoKS0+b3NyRW50
cnlUcmlnZ2VycygpW21fbG9vcEluZGV4XSA9IFRpZXJVcENvdW50OjpUcmlnZ2VyUmVhc29uOjpD
b21waWxhdGlvbkRvbmU7CiAgICAgICAgICAgICBtX2NhbGxlZS0+dGllclVwQ291bnQoKS0+bV9j
b21waWxhdGlvblN0YXR1c0Zvck9NR0Zvck9TUkVudHJ5ID0gVGllclVwQ291bnQ6OkNvbXBpbGF0
aW9uU3RhdHVzOjpDb21waWxlZDsKICAgICAgICAgfQotICAgICAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOwotICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IGEgbmV3IE9NRyBjYWxsZWUg
aXMgYWRkZWQgd2hpbGUgd2UgcmVsZWFzZSBtX2NvZGVCbG9jay0+bG9jay4KLSAgICAgICAgLy8g
VW50aWwgd2UgYWRkIE9NR0Zvck9TUkVudHJ5IGNhbGxlZSB0byBCQlFDYWxsZWUncyBtX29zckVu
dHJ5Q2FsbGVlLCB0aGlzIG5ldyBPTUcgZnVuY3Rpb24gbGlua2luZyBkb2VzIG5vdCBoYXBwZW4g
Zm9yIHRoaXMgT01HRm9yT1NSRW50cnkgY2FsbGVlLgotICAgICAgICAvLyBXZSByZS1saW5rIHRo
aXMgT01HRm9yT1NSRW50cnkgY2FsbGVlIGFnYWluIG5vdCB0byBtaXNzIHRoYXQgY2hhbmNlLgot
ICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkg
ewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50
cnlwb2ludDsKLSAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9k
dWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKLSAgICAgICAg
ICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tj
YWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBvaW50
KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwotCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKLSAgICAgICAgfQogICAgIH0KICAgICBk
YXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5p
c2hlZCBPTUdGb3JPU1JFbnRyeSAiLCBtX2Z1bmN0aW9uSW5kZXgsICIgd2l0aCB0aWVyIHVwIGNv
dW50IGF0OiAiLCBtX2NhbGxlZS0+dGllclVwQ291bnQoKS0+Y291bnQoKSk7CiAgICAgY29tcGxl
dGUoaG9sZExvY2sobV9sb2NrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgKaW5kZXggMDE1MWRhNjY1YTk2ODMyOGY5NTAzOGY1
YjUwYzA4NTc2MWYwNWRlNy4uZDU2ZWE0MjE3ZGQ3MTBkNTc1MTY0NWE5YjNlYjAxOGM0MzUwZDBk
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVu
dHJ5UGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JF
bnRyeVBsYW4uaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtdWx0aVRocmVh
ZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIE5vdGU6IENv
bXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhl
cndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdGb3JPU1JFbnRy
eVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIFJlZjxCQlFDYWxsZWU+JiYsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlv
blRhc2smJik7CisgICAgT01HRm9yT1NSRW50cnlQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlPiYm
LCBSZWY8QkJRQ2FsbGVlPiYmLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29w
SW5kZXgsIENvZGVCbG9jayYsIENvbXBsZXRpb25UYXNrJiYpOwogCiBwcml2YXRlOgogICAgIC8v
IEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFz
c2VzLi4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKaW5kZXgg
ZTU2MTNlZWI3MTQzNzc1NDY4Njg4NjAxNzE3OTNiMzU5NTliMWEwZS4uNjkxYWE0NWRkMTJmYzcy
NDgzNjdlNDgxZDk3ZTU4ODM1OGRhMDVmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmNwcApAQCAtNTQsMTMgKzU0LDEzIEBAIG5hbWVzcGFjZSBXYXNtT01HUGxh
bkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotT01H
UGxhbjo6T01HUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRh
c2spCitPTUdQbGFuOjpPTUdQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9k
dWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQogICAgIDogQmFzZShjb250ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8
TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92
ZSh0YXNrKSkKICAgICAsIG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKLSAgICAsIG1fY29kZUJs
b2NrKCptX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQorICAgICwgbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiB7Ci0gICAgc2V0
TW9kZShtb2RlKTsKKyAgICBzZXRNb2RlKGNvZGVCbG9jay5tb2RlKCkpOwogICAgIEFTU0VSVCht
X2NvZGVCbG9jay0+cnVubmFibGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09
IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobV9tb2RlKSk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbU9N
R1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlN0YXJ0aW5nIE9NRyBwbGFuIGZvciAiLCBmdW5jdGlv
bkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKQEAg
LTc5LDU3ICs3OSw0OCBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAg
ICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbi5k
YXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSkpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVu
bGlua2VkQ2FsbHM7CiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAg
ICBDb21waWxhdGlvbkNvbnRleHQgY29udGV4dDsKLSAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVu
Y3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxh
dGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CisgICAgYXV0
byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rp
b24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIG1fY29kZUJs
b2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2Rl
LCBtX2Z1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJz
ZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFr
ZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5nIHRvIHRp
ZXIgdXAgIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgRW50cnlwb2ludCBvbWdFbnRyeXBvaW50OwogICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29t
cGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9B
bGxvY2F0ZSgpKSkgewogICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VT
dHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9u
IGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5p
cXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgUmVmPE9NR0NhbGxlZT4gb21nQ2FsbGVlID0gT01H
Q2FsbGVlOjpjcmVhdGUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5u
YW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpOworICAgIG9tZ0NhbGxlZS0+ZW50
cnlwb2ludCgpLmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAg
ICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJB
c3NlbWJseSBPTUcgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1l
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3Zl
KGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdFbnRyeXBvaW50
LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1
ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIG9tZ0NhbGxlZS0+ZW50
cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGNvbnRleHQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBlbnRyeXBvaW50OworICAgIEJCUUNhbGxlZSYgYmJxQ2FsbGVlID0gKm1fY29kZUJsb2NrLT5t
X2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XTsKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2NvZGVC
bG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgICAgICBS
ZWY8T01HQ2FsbGVlPiBjYWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5
cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0
aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSk7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1
bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxl
ZS5wdHIoKSkpOwogICAgICAgICBBU1NFUlQoIW1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XSk7Ci0gICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5
cG9pbnQoKTsKIAogICAgICAgICAvLyBXZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBwdWJsaXNoIG91
ciBjYWxsZWUgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSBsaW5rIG91ciBjYWxsc2l0ZXMuIFRoaXMg
ZW5hYmxlcyB1cyB0byBlbnN1cmUgd2UKICAgICAgICAgLy8gYWx3YXlzIGNhbGwgdGhlIGZhc3Rl
c3QgY29kZS4gQW55IGZ1bmN0aW9uIGxpbmtlZCBhZnRlciB1cyB3aWxsIHNlZSBvdXIgbmV3IGNv
ZGUgYW5kIHRoZSBuZXcgY2FsbHNpdGVzLCB3aGljaCB0aGV5CiAgICAgICAgIC8vIHdpbGwgdXBk
YXRlLiBJdCdzIGFsc28gb2sgaWYgdGhleSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJl
c2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAgICAg
ICAgIC8vIHRoZSBsb2NrIG91ciBjb2RlIGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28uCiAg
ICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBt
X2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0gPSBjYWxsZWUu
Y29weVJlZigpOworICAgICAgICBtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxsZWVzW21fZnVu
Y3Rpb25JbmRleF0gPSBvbWdDYWxsZWUuY29weVJlZigpOwogICAgICAgICB7Ci0gICAgICAgICAg
ICBCQlFDYWxsZWUmIGJicUNhbGxlZSA9ICpzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NvZGVC
bG9jay0+bV9jYWxsZWVzW21fZnVuY3Rpb25JbmRleF0uZ2V0KCkpOwogICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhiYnFDYWxsZWUudGllclVwQ291bnQoKS0+Z2V0TG9jaygpKTsK
LSAgICAgICAgICAgIGJicUNhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsK
KyAgICAgICAgICAgIGJicUNhbGxlZS5zZXRSZXBsYWNlbWVudChvbWdDYWxsZWUuY29weVJlZigp
KTsKICAgICAgICAgICAgIGJicUNhbGxlZS50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3Rh
dHVzRm9yT01HID0gVGllclVwQ291bnQ6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKICAg
ICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxs
c2l0ZXMoKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0
clRhZz4gZW50cnlwb2ludDsKLSAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFj
ZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkK
LSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4
aXRTdHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9p
bnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5l
bnRyeXBvaW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwotCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKworICAgICAgICBmb3Ig
KGF1dG8mIGNhbGwgOiBjb250ZXh0Lm91dGdvaW5nQ2FsbHMpIHsKKyAgICAgICAgICAgIEJCUUNh
bGxlZSYgdGFyZ2V0Q2FsbGVlID0gbV9jb2RlQmxvY2stPndhc21CQlFDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGNhbGwudGFyZ2V0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAg
IHRhcmdldENhbGxlZS5hZGRBbmRMaW5rQ2FsbGVyKGhvbGRlciwgbGlua0J1ZmZlciwgY2FsbC51
bmxpbmtlZE1vdmVBbmRDYWxsKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTM5LDMwICsxMzAs
MTQgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIHJlc2V0SW5z
dHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFy
YW5vaWQuCiAKLSAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNb
bV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7CisgICAgbV9jb2RlQmxvY2stPm1fd2FzbUlu
ZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBvbWdDYWxsZWUtPmNvZGUo
KTsKKyAgICBtX2NvZGVCbG9jay0+bV9ib3hlZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IENh
bGxlZUJpdHM6OmJveFdhc20ob21nQ2FsbGVlLnB0cigpKTsKICAgICB7CiAgICAgICAgIExvY2tI
b2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotCi0gICAgICAgIGF1dG8gcmVwYXRj
aENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxz
aXRlcykgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7Ci0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNv
bnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlKTsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0g
ZnVuY3Rpb25JbmRleFNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdh
c21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1Bv
aW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50
ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgcmVwYXRjaENhbGxzKG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21D
YWxsc2l0ZXNbaV0pOwotICAgICAgICAgICAgaWYgKE9NR0NhbGxlZSogcmVwbGFjZW1lbnRDYWxs
ZWUgPSBzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NvZGVCbG9jay0+bV9jYWxsZWVzW2ldLmdl
dCgpKS0+cmVwbGFjZW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMocmVwbGFj
ZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAgICAgICAgICBpZiAoT01H
Rm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gc3RhdGljX2Nhc3Q8QkJRQ2FsbGVl
Kj4obV9jb2RlQmxvY2stPm1fY2FsbGVlc1tpXS5nZXQoKSktPm9zckVudHJ5Q2FsbGVlKCkpCi0g
ICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2Fs
bHNpdGVzKCkpOwotICAgICAgICB9CisgICAgICAgIGJicUNhbGxlZS5yZXBhdGNoQ2FsbGVycyho
b2xkZXIsIG9tZ0NhbGxlZS5nZXQoKSk7CiAgICAgfQogCi0gICAgZGF0YUxvZ0xuSWYoV2FzbU9N
R1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NRyAiLCBtX2Z1bmN0aW9uSW5kZXgs
ICIgd2l0aCB0aWVyIHVwIGNvdW50IGF0OiAiLCBzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2Nv
ZGVCbG9jay0+bV9jYWxsZWVzW21fZnVuY3Rpb25JbmRleF0uZ2V0KCkpLT50aWVyVXBDb3VudCgp
LT5jb3VudCgpKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3Nl
LCAiRmluaXNoZWQgT01HICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQg
YXQ6ICIsIG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKS0+dGll
clVwQ291bnQoKS0+Y291bnQoKSk7CiAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCmluZGV4IGNiNzliNDM5
ZDRlOTk0ZDg3MGU5ZGM5MDg5YzQzYTdmNTg2MDI1NjYuLmU2ODlkNTY2NTdhOGQxYmI5YmRlODJl
ZTA1MTUzNTQ4NzBiZTgzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtdWx0aVRocmVhZGVkKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIE5vdGU6IENvbXBsZXRp
b25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2Ug
dGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdQbGFuKENvbnRleHQqLCBS
ZWY8TW9kdWxlPiYmLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0
aW9uVGFzayYmKTsKKyAgICBPTUdQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlPiYmLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBDb2RlQmxvY2smLCBDb21wbGV0aW9uVGFzayYmKTsKIAogcHJpdmF0
ZToKICAgICAvLyBGb3Igc29tZSByZWFzb24gZnJpZW5kc2hpcCBkb2Vzbid0IGV4dGVuZCB0byBw
YXJlbnQgY2xhc3Nlcy4uLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJh
dGlvbnMuY3BwCmluZGV4IDFhZGU4YThlOTQ0OWRhOGIzZjA2Y2QzZDY5NDI1NzkyZTZjNWRmOWEu
LjVhMjgxODBkYzZkMWI0NjM5YTg4OTVkMmRlYmNjYzc3NzA4OTVjMDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKQEAgLTgyLDcgKzgyLDcgQEAg
c3RhdGljIHZvaWQgdHJpZ2dlck9NR1JlcGxhY2VtZW50Q29tcGlsZShUaWVyVXBDb3VudCYgdGll
clVwLCBPTUdDYWxsZWUqIHJlcGxhY2UKICAgICBpZiAoY29tcGlsZSkgewogICAgICAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HUmVwbGFjZW1lbnQgZm9y
ICIsIGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNv
ZGUuCi0gICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKGluc3Rh
bmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIGZ1
bmN0aW9uSW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7Cisg
ICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKGluc3RhbmNlLT5j
b250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIGZ1bmN0aW9u
SW5kZXgsIGNvZGVCbG9jaywgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAgZW5zdXJl
V29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5
KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYg
YwogI2VuZGlmCiAgICAgLy8gNC4gQ29uZmlndXJlIGFyZ3VtZW50IHJlZ2lzdGVycyB0byBqdW1w
IHRvIE9TUiBlbnRyeSBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBydW50aW1lIGZ1bmN0aW9uLgog
ICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSBiaXR3aXNlX2Nhc3Q8VUNQ
VVJlZ2lzdGVyPihidWZmZXIpOwotICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BS
MSkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihvc3JFbnRyeUNhbGxlZS5lbnRyeXBvaW50
KCkuZXhlY3V0YWJsZUFkZHJlc3M8PigpKTsKKyAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1
bWVudEdQUjEpID0gYml0d2lzZV9jYXN0PFVDUFVSZWdpc3Rlcj4ob3NyRW50cnlDYWxsZWUuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzPD4oKSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiB0cmln
Z2VyT1NSRW50cnlOb3coUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCkBAIC0zNjUsNyArMzY1LDcg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhQcm9iZTo6Q29udGV4dCYg
Y29udGV4dCkKIAogICAgIGlmIChzdGFydE9TUkVudHJ5Q29tcGlsYXRpb24pIHsKICAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAidHJpZ2dlck9NR09TUiBmb3IgIiwg
ZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBP
TUdGb3JPU1JFbnRyeVBsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4o
aW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVmPFdhc206OkJCUUNhbGxlZT4oY2FsbGVlKSwgZnVuY3Rp
b25JbmRleCwgbG9vcEluZGV4LCBjb2RlQmxvY2subW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUo
KSkpOworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50
cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5t
b2R1bGUoKSksIFJlZjxXYXNtOjpCQlFDYWxsZWU+KGNhbGxlZSksIGZ1bmN0aW9uSW5kZXgsIGxv
b3BJbmRleCwgY29kZUJsb2NrLCBQbGFuOjpkb250RmluYWxpemUoKSkpOwogICAgICAgICBlbnN1
cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAgICAgICBpZiAoVU5MSUtF
TFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCiAgICAgICAgICAgICBwbGFuLT53YWl0
Rm9yQ29tcGxldGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20u
Y3BwCmluZGV4IDczNTIyMDI4OTM3YzZkYWMxZmM0NzNjN2U0Y2RjNjQ5NThjZThlYTYuLmYxM2Y2
NDUwMjBiMmY3NjBiMjRlY2NiZjczYTBjN2IzY2Q5ZDRkZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKQEAgLTQyLDIxICs0MiwxNSBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1zdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRp
b25Db250ZXh0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkKK3Zv
aWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25D
b250ZXh0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgRW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlKiBzZWxmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2Rl
KQogewogICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRl
ckVudHJ5cG9pbnRKSVQ7CiAKLSAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxG
dW5jdGlvbj4oKTsKICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKIAogICAgIC8vIEZJ
WE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCiAgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgY2FsbGVlTW92
ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgaml0
LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGxpbmtlZENhbGxlZU1vdmUgPSAmcmVz
dWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2FsbGVlTW92ZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGxlZU1vdmVMb2NhdGlvbik7Ci0gICAg
fSk7CisgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihDYWxsZWVC
aXRzOjpib3hXYXNtKHNlbGYpKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7CiAKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5l
ZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwogICAgIFJlZ2lzdGVyU2V0IHRvU2F2
ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1vZGUpOwpAQCAtNjksNyArNjMsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9u
Q29udGV4dCYgY29tcAogI2VuZGlmCiAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3Rl
cnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpG
cmFtZVBvaW50ZXJCYXNlZCk7Ci0gICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdp
c3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOworICAgIHNlbGYtPmVudHJ5cG9pbnQoKS5jYWxsZWVT
YXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9TcGlsbDsKIAogICAgIHVuc2lnbmVkIHRvdGFsRnJh
bWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yodm9pZCopOwogICAgIHRv
dGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6ZUluQnl0ZXMo
KTsKQEAgLTEyNSw5ICsxMTksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAKICAgICAgICAg
fQogCiAgICAgICAgIGVtaXRUaHJvd1dhc21Ub0pTRXhjZXB0aW9uKGppdCwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyLCBhcmd1bWVudHNJbmNsdWRlSTY0ID8gRXhjZXB0aW9uVHlwZTo6STY0QXJndW1l
bnRUeXBlIDogRXhjZXB0aW9uVHlwZTo6STY0UmV0dXJuVHlwZSk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBjb21waWxhdGlvbkNvbnRleHQu
ZW1iZWRkZXJNb3ZlQW5kQ2FsbCA9IFVubGlua2VkTW92ZUFuZENhbGwgeyB9OwogICAgIEdQUlJl
ZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29udGV4dEluc3RhbmNl
UG9pbnRlcjsKIAogICAgIHsKQEAgLTE5OCw2ICsxOTMsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQm
IGNvbXAKIAogICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
ICAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4
dC5lbWJlZGRlck1vdmVBbmRDYWxsLT5tb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAg
ICAgaml0LnN0b3JlUHRyKGNhbGxlZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJh
bWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCiAgICAgaWYgKCEh
aW5mby5tZW1vcnkpIHsKQEAgLTIyMSwxMiArMjIwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNv
bXAKICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJh
c2VNZW1vcnksIHNjcmF0Y2hPclNpemUsIHNjcmF0Y2hPclNpemUpOwogICAgIH0KIAotICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgp
OwotICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbmZv
LmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwg
aW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAgIGppdC5hZGRMaW5rVGFzayhbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhTcGFjZV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVu
ZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCks
IGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsKLSAgICB9KTsKKyAgICBjb21waWxhdGlvbkNvbnRleHQu
ZW1iZWRkZXJNb3ZlQW5kQ2FsbC0+Y2FsbExvY2F0aW9uID0gaml0LnRocmVhZFNhZmVQYXRjaGFi
bGVOZWFyQ2FsbCgpOwogCiAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9m
ZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKICAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zm
c2V0LnJlZygpLmdwcigpOwpAQCAtMjY2LDggKzI2MCw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21wCiAKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKaW5kZXggYjRiOThkMTU5YjI4NGI3
ZWMzMjNhYTUwMmMwM2Y5MjFjMTJiMDNhOS4uOTNhYTI0ZDk2ODBhZmZmZDNiN2E5NmQxOTFmY2Y4
YzM5MWQwMjMxYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc20uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCkBA
IC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgV2FzbSB7CiAKLXN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29t
cGlsYXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4KTsKK3ZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9u
Q29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSosIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSk7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggMDU3YWE3MDE4YjQ0YThmYmI0YThkNDcxMTNiZGJl
Yjg3NDlkZWM4Ny4uZmQzYWUxODIwNGYzNTdiYjMxMzVjZTM1NWU5ZTZjY2QyMmE4MzllNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAKQEAgLTQ2NSw2ICs0NjUsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAg
ICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGp1c3QgZG8gYW4gaW5kaXJlY3QganVtcC4gQnV0
IHdlIHNob3VsZCB0ZWFjaCB0aGUgTW9kdWxlCiAgICAgICAgIC8vIGhvdyB0byByZXBhdGNoIHVz
OgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2
NTcwCisgICAgICAgIGppdC5sb2FkUHRyKGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCksIHNjcmF0
Y2hHUFIpOworICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsK
ICAgICAgICAgaml0LmxvYWRQdHIoZW50cnlwb2ludExvYWRMb2NhdGlvbigpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgaml0LmNhbGwoc2NyYXRjaEdQUiwgV2FzbUVudHJ5UHRyVGFnKTsKICAgICB9
CkBAIC01MzYsMTAgKzUzOCwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgIHJldHVy
biBtX2pzQ2FsbEVudHJ5cG9pbnQuY29kZSgpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uKiBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZSYg
anNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9j
YXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5j
dGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwg
V2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dh
c21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24s
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogewogICAgIE5hdGl2ZUV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5RnVu
Y3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0
ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1i
bHlGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGpzRW50cnlwb2ludCwgd2Fz
bVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKKyAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdl
YkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtVG9XYXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAg
ICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSwg
aW5zdGFuY2UpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9uLT5pc0xhcmdlQWxs
b2NhdGlvbigpLCAiV2ViQXNzZW1ibHlGdW5jdGlvbiBzaG91bGQgYmUgYWxsb2NhdGVkIG5vdCBp
biBsYXJnZSBhbGxvY2F0aW9uIHNpbmNlIGl0IGlzIEpTQ2FsbGVlLiIpOwogICAgIHJldHVybiBm
dW5jdGlvbjsKQEAgLTU1MSwxMCArNTUzLDEwIEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlGdW5j
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAot
V2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsZWUm
IGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExv
Y2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVu
Y3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2Nh
dGlvbiwgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCkKICAgICA6IEJhc2UgeyB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUgfQotICAgICwgbV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9pbnQuZW50cnlwb2ludCgpIH0K
LSAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uIH0KKyAgICAsIG1fanNFbnRyeXBvaW50IHsganNFbnRyeXBv
aW50LmNvZGUoKSB9CisgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4
LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24gfQogeyB9CiAKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCmluZGV4IDk4YzM0NjRjZDA3MmQ2
NDQ1ZTc3ZGU0Zjg4ZGUwY2NlM2I0OTVlMzQuLjdkZGYzOWQwMDhmNGI2NDI5ZjlmN2ExMzFmN2Y5
ZDM5YTcwMWQxNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmgKQEAgLTYyLDExICs2MiwxMiBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
dW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OkNh
bGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9j
YXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwg
V2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
OkxvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgdm9pZCoqIGJveGVkQ2Fs
bGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAog
ICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbXBvcnRhYmxlRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KICAgICBXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLmVudHJ5cG9pbnRMb2FkTG9jYXRpb247
IH0KKyAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2ltcG9ydGFibGVGdW5jdGlvbi5ib3hlZENhbGxlZUxvYWRMb2NhdGlvbjsgfQogICAgIFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaW1wb3J0YWJsZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb247IH0KIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+IGpzRW50cnlwb2ludChBcml0eUNoZWNrTW9kZSBhcml0eSkKQEAgLTc4
LDYgKzc5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFz
c2VtYmx5RnVuY3Rpb24sIG1faW1wb3J0YWJsZUZ1bmN0aW9uKSArIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpOyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb24sIG1faW1wb3J0YWJsZUZ1bmN0aW9u
KSArIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mQm94ZWRDYWxsZWVMb2Fk
TG9jYXRpb24oKTsgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGpzQ2FsbEVudHJ5cG9pbnQoKQogICAgIHsKQEAgLTkxLDcgKzkzLDcgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25h
dHVyZUluZGV4KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHZvaWQq
KiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93
KCk7CiAgICAgcHRyZGlmZl90IHByZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmNwcAppbmRleCA5MmRkY2Y3ODZlODEwMDVhMjFlMWY4YjFmNTBhOWQyMDlmOWU2OTI5
Li43YWYxYTA0NTJhZTBkZjdlYmRjM2MyNGQwOWZmZmJlMDdjMTBlMGI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwCkBAIC0xOTMsNiArMTkzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKIAogICAg
ICAgICAgICAgV2FzbTo6SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0gbnVsbHB0cjsKICAgICAg
ICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBv
aW50TG9hZExvY2F0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxl
ZUxvYWRMb2NhdGlvbiA9IG51bGxwdHI7CiAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb24g
PSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CiAKICAgICAgICAgICAgIC8vIGlpLiBJZiB2IGlz
IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CkBAIC0yMDUsNiArMjA2LDcgQEAg
dm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWdu
YXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICAgICAgICAg
ICAgICAgICAgY2FsbGVlSW5zdGFuY2UgPSAmd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0
YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gd2Fz
bUZ1bmN0aW9uLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgICAg
IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uID0gd2FzbUZ1bmN0aW9uLT5ib3hlZENhbGxlZUxvYWRM
b2NhdGlvbigpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJ
bmRleCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xv
c3VyZV1dLgpAQCAtMjIzLDYgKzIyNSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqCiAgICAg
ICAgICAgICBhdXRvKiBpbmZvID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlv
bkluZm8oaW1wb3J0LmtpbmRJbmRleCk7CiAgICAgICAgICAgICBpbmZvLT50YXJnZXRJbnN0YW5j
ZSA9IGNhbGxlZUluc3RhbmNlOwogICAgICAgICAgICAgaW5mby0+d2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24gPSBlbnRyeXBvaW50TG9hZExvY2F0aW9uOworICAgICAgICAgICAgaW5mby0+Ym94
ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSBib3hlZENhbGxlZUxvYWRMb2NhdGlvbjsKICAgICAgICAg
ICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb248V3JpdGVCYXJyaWVyPEpT
T2JqZWN0Pj4oaW1wb3J0LmtpbmRJbmRleCktPnNldCh2bSwgbV9pbnN0YW5jZS5nZXQoKSwgZnVu
Y3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM0Nyw5ICszNTAsMTAg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgICAgIC8vICAgICBjLiBSZXR1cm4g
ZnVuYy4KICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
ID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGluZGV4KTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5lbnRy
eXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CisgICAgICAg
ICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmJveGVkQ2Fs
bGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CiAgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJl
SW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgICAgIGNvbnN0IFdh
c206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5j
dGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENh
bGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9u
U3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIGZpZWxkLCBtX2luc3RhbmNl
LmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24s
IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICB3
cmFwcGVyID0gZnVuY3Rpb247CiAgICAgICAgIH0KIApAQCAtNDYwLDcgKzQ2NCw4IEBAIHZvaWQg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBK
U09iamVjdCogaW1wb3J0T2JqCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBXYXNtOjpD
YWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+ZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFj
ZSk7CiAgICAgICAgICAgICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2Fk
TG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+ZW50cnlwb2ludExv
YWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2Up
OwotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICJzdGFy
dCIsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2lu
dExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgdm9pZCoqIGJveGVk
Q2FsbGVlTG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5ib3hlZENhbGxlZUxvYWRMb2NhdGlvbkZy
b21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9u
U3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICJzdGFydCIsIG1faW5zdGFu
Y2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlv
biwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAg
IG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTU3NSwxMyArNTgwLDE0IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVyRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBX
YXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2lu
dExvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+ZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICB2b2lkKiogYm94ZWRD
YWxsZWVMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIGNvbnN0IFdh
c206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2F5IHdlIGV4cG9ydCBs
b2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBpbmRleCAwLgogICAgICAgICAgICAgLy8g
V2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4gRWxlbWVudCB3LyBpbmRleCAw
LgogICAgICAgICAgICAgLy8gRG9lcyAobmV3IEluc3RhbmNlKC4uLikpLmV4cG9ydHMuZm9vID09
PSB0YWJsZS5nZXQoMCk/CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1ODI1CiAgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICB2
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgU3RyaW5nKCksIG1faW5zdGFuY2UuZ2V0
KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2ln
bmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgc2ln
bmF0dXJlSW5kZXgpOwogCiAgICAgICAgICAgICBtX2luc3RhbmNlLT50YWJsZSh0YWJsZUluZGV4
KS0+c2V0KGVsZW1lbnRJbmRleCwgZnVuY3Rpb24pOwogICAgICAgICAgICAgKytlbGVtZW50SW5k
ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggY2RlNGYzY2YyNjA0YWRkNzZjYzA0ZmIy
MjRmOWE1MmJkMmRhMDM3Ni4uNjI4NjJiNDExNzg0NjRlNjEzZTNlNzkzMDQyNjczMzA2NTBlODEw
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtNjAsNyArNjAsOSBAQCBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsTwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9uLT5pbmhlcml0
czxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0pLCAiV2Ugc2hvdWxkIG5ldmVyIGRvdWJs
ZSB3cmFwIGEgd3JhcHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9ICIiOwogICAg
IE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFz
Q29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiB7
IHNpZ25hdHVyZUluZGV4LCAmaW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZv
KGltcG9ydEluZGV4KS0+d2FzbVRvRW1iZWRkZXJTdHViIH0gKTsKKyAgICBhdXRvIGltcG9ydEZ1
bmN0aW9uSW5mbyA9IGluc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBv
cnRJbmRleCk7CisgICAgc3RhdGljIHZvaWQqIG51bGxCb3hlZENhbGxlZSA9IG51bGxwdHI7Cisg
ICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZpbXBvcnRGdW5jdGlv
bkluZm8tPndhc21Ub0VtYmVkZGVyU3R1YiwgJm51bGxCb3hlZENhbGxlZSB9KTsKICAgICBjb25z
dCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4
ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0
YW5jZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378828</attachid>
            <date>2019-09-15 15:44:59 -0700</date>
            <delta_ts>2019-09-15 22:40:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201799-20190915154456.patch</filename>
            <type>text/plain</type>
            <size>110938</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDRkYmQ0YWUxODlmMDYyMGQ2N2I3YzlkZmMyZTg4NDc5ZGExZTQ0Li5jMjY1NTJlMGMyZjA2Mjhi
ZjZlMzM2MGZkZDBmMGZjYTRiMmRlZWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NSBAQAorMjAxOS0wOS0xNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBI
b3dldmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGlu
dGVycHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGlj
aCBmdW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMg
dGhlIGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRl
ciwgc28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdy
aXRpbmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0
aGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0
byB0aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBn
ZW5lcmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdl
IGtlZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAg
Y29kZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAg
LSBDYWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBj
YWxscywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBK
Uy10by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogd2Fz
bS10by13YXNtIHN0dWIsIEpTLXRvLXdhc20gc3R1YiAoY2FsbGVlIGZyYW1lKSwgd2FzbS10by1K
UyBzdHViCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhbHNvIGNoYW5nZSBpdCBzbyB0aGF0IHRo
ZSBjYWxsZWUga2VlcHMgdHJhY2sgb2YgaXRzIGNhbGxlcnMsIGluc3RlYWQgb2YgaGF2aW5nIGEg
Z2xvYmFsIG1hcHBpbmcKKyAgICAgICAgb2YgY2FsbHMgaW4gdGhlIFdhc206OkNvZGVCbG9jay4g
VGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVwYXRjaCBhbGwgY2FsbGVycyBvZiBhIGdpdmVuIENh
bGxlZSB3aGVuIGl0IHRpZXJzIHVwLgorCisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAqIHdhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6Cisg
ICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBs
YW46OkJCUVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwcmVwYXJlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAgIChK
U0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFu
Lmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUJp
bmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3
YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OkNhbGxlZSk6
CisgICAgICAgIChKU0M6Oldhc206OnJlcGF0Y2hNb3ZlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
cmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFDYWxsZWU6OmFkZENhbGxlcik6
CisgICAgICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6YWRkQW5kTGlua0NhbGxlcik6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6cmVwYXRjaENhbGxlcnMpOgorICAgICAgICAqIHdh
c20vV2FzbUNhbGxlZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmVudHJ5cG9pbnQp
OgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmNvZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpDYWxsZWU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20vV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252ZW50
aW9uOjpzZXR1cEZyYW1lSW5Qcm9sb2d1ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgor
ICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2Rl
QmxvY2s6OmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Ondhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpib3hlZENhbGxlZUxv
YWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAgICAqIHdhc20vV2FzbUVt
YmVkZGVyLmg6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgIChKU0M6Oldh
c206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mQm94ZWRDYWxsZWVMb2Fk
TG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6
Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKToKKyAgICAg
ICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpPTUdGb3JPU1JFbnRyeVBsYW46Ok9NR0Zvck9TUkVudHJ5UGxhbik6CisgICAgICAgIChKU0M6
Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtT01H
Rm9yT1NSRW50cnlQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206Ok9NR1BsYW46Ok9NR1BsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpP
TUdQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmg6CisgICAgICAgICog
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPTUdS
ZXBsYWNlbWVudENvbXBpbGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpkb09TUkVudHJ5KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9TUkVudHJ5Tm93KToKKyAgICAgICAgKiB3YXNtL2pz
L0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVy
KToKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6
anNDYWxsRW50cnlwb2ludFNsb3cpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9u
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6Y3JlYXRlKToKKwogMjAxOS0wOS0xNSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIExlYWsgb2YgTlNNYXBUYWJsZSBpbiAtW0pTVmlydHVhbE1h
Y2hpbmUgYWRkTWFuYWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6XQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKaW5kZXggMzE5YWE1YmYwNzVj
YmYwYWUwMTViMTIwNjljZDA0MTljOTg5YjEyZC4uYzY3MTU2MzI2NTY1MGZmZGI4NGI4MWY1NDc5
MTdiYWI3ZmVhY2M4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAo
MCkKIAotICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlBy
b2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIFRo
cm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgQWlySVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNt
RW50cnlQdHJUYWc+PiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJV
cENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKTsKIAogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1
cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBl
LCB1aW50MzJfdCk7CkBAIC02MzksNyArNjM5LDggQEAgcHJpdmF0ZToKICAgICBCYXNpY0Jsb2Nr
KiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBCYXNpY0Jsb2NrKiBtX3Jvb3RCbG9j
ayB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8VHlwZWRUbXA+IG1fbG9jYWxzOwotICAgIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsgLy8g
TGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJlc3Mg
aXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIG1fb3V0Z29pbmdDYWxsczsKKyAgICBjb25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAgICAgR1BS
UmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV9tZW1v
cnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBtX3dhc21Db250ZXh0SW5z
dGFuY2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CkBAIC03MDgsMTQgKzcwOSwxNSBAQCB2b2lkIEFp
cklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBibG9j
aywgVHlwZWRUbXAgaW5zdAogICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBU
bXAoKSwgaW5zdGFuY2UpOwogfQogCi1BaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50
ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCitBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBvdXRnb2lu
Z0NhbGxzLCBjb25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRh
Zz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dh
c21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQogICAgIDogbV9pbmZvKGlu
Zm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbklu
ZGV4KQogICAgICwgbV90aWVyVXAodGllclVwKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKICAg
ICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQotICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
cyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKKyAgICAsIG1fb3V0Z29pbmdDYWxscyhvdXRnb2lu
Z0NhbGxzKQorICAgICwgbV93YXNtVG9XYXNtRXhpdFN0dWJzKHdhc21Ub1dhc21FeGl0U3R1YnMp
CiAgICAgLCBtX251bUltcG9ydEZ1bmN0aW9ucyhpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkK
IHsKICAgICBtX2N1cnJlbnRCbG9jayA9IG1fY29kZS5hZGRCbG9jaygpOwpAQCAtNzYxLDE2ICs3
NjMsNyBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHBybwogICAgIFJlZjxCMzo6QWlyOjpQcm9sb2d1
ZUdlbmVyYXRvcj4gcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEIzOjpBaXI6
OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEIzOjpB
aXI6OkNvZGUmIGNvZGUpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICBjb2RlLmVtaXREZWZhdWx0UHJvbG9ndWUoaml0
KTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOwotICAgICAgICAgICAgYXV0byBt
b3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKLSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
Y29tcGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjYWxsZWVHUFIs
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7Ci0gICAgICAgIH0K
KyAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihudWxscHRyLCBDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IENoZWNrZWQ8
aW50MzJfdD4gd2FzbUZyYW1lU2l6ZSA9IG1fY29kZS5mcmFtZVNpemUoKTsKQEAgLTE5MzYsOCAr
MTkyOSw2IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgaWYgKHJldHVyblR5cGUgIT0g
VHlwZTo6Vm9pZCkKICAgICAgICAgcmVzdWx0ID0gdG1wRm9yVHlwZShyZXR1cm5UeXBlKTsKIAot
ICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsKLQogICAgIGlmIChtX2luZm8uaXNJbXBv
cnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KSkgewogICAg
ICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJn
dW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIApAQCAtMTk3Mywx
MSArMTk2NCwxMiBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICAgICAgICAgIHBh
dGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAg
ICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBm
dW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVu
dHJ5UHRyVGFnPiB3YXNtVG9XYXNtRXhpdFN0dWIgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnNbZnVu
Y3Rpb25JbmRleF07CisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3dhc21U
b1dhc21FeGl0U3R1Yl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBm
dW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAg
ICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoV2FzbUVu
dHJ5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGwsIHdhc21U
b1dhc21FeGl0U3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0
clRhZz4od2FzbVRvV2FzbUV4aXRTdHViLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgfSk7CiAKQEAgLTIwMjQsMTggKzIwMTYsMjAgQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwKICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQodG9CM1R5
cGUocmV0dXJuVHlwZSkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVl
OworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKIAogICAgICAg
ICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKICAgICAgICAgd2FzbUNhbGxpbmdD
b252ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2hwb2ludCwg
dG9UbXBWZWN0b3IoYXJncyksIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgewogICAg
ICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOwogICAgICAgICB9KTsKIAot
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
Y2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5k
ZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdh
c21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7Ci0gICAgICAgICAgICB9KTsK
KyAgICAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiBvdXRnb2luZ0NhbGxzID0g
Jm1fb3V0Z29pbmdDYWxsczsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtvdXRn
b2luZ0NhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BSUmVnIGNh
bGxlZUdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAgICAgICAgICBhdXRvIG1vdmVMb2Nh
dGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExv
Y2F0aW9uID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAg
b3V0Z29pbmdDYWxscy0+YXBwZW5kKHsgZnVuY3Rpb25JbmRleCwgeyBtb3ZlTG9jYXRpb24sIGNh
bGxMb2NhdGlvbiB9fSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGVtaXRQYXRjaHBvaW50KG1f
Y3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUocGF0Y2hBcmdzKSk7CkBA
IC0yMDg5LDYgKzIwODMsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qo
dW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYQogICAgIH0pOwogCiAg
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IGc2NCgpOworICAgIEV4cHJlc3Npb25UeXBl
IGNhbGxlZSA9IGc2NCgpOwogICAgIHsKICAgICAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlU2ln
bmF0dXJlSW5kZXggPSBnNjQoKTsKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRo
ZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCkBAIC0yMDk3LDYgKzIwOTIs
NyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJ
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYQogICAgICAgICBhcHBlbmQoQWRkNjQsIGNhbGxh
YmxlRnVuY3Rpb25CdWZmZXIsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgCiAgICAg
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSwg
Y2FsbGVlQ29kZSk7IC8vIFBvaW50ZXIgdG8gY2FsbGVlIGNvZGUuCisgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246Om9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSksIGNhbGxlZSk7IC8v
IFBvaW50ZXIgdG8gYm94ZWQgY2FsbGVlCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBp
c24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0
aWFsaXplZC4KICAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJzLCB3
ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxpZElu
ZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcyMTAK
QEAgLTIxODksNiArMjE4NSwxMCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYQogCiAgICAgVmVj
dG9yPENvbnN0cmFpbmVkVG1wPiBlbWl0QXJnczsKICAgICBlbWl0QXJncy5hcHBlbmQoY2FsbGVl
Q29kZSk7CisKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZSksIGNhbGxlZSk7Cisg
ICAgZW1pdEFyZ3MuYXBwZW5kKHsgY2FsbGVlLCBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkgfSk7CisKICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENh
bGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaCwgdG9UbXBWZWN0b3IoYXJncyksIFsmXSAoVG1w
IHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgewogICAgICAgICBlbWl0QXJncy5hcHBlbmQoeyB0bXAs
IHJlcCB9KTsKICAgICB9KTsKQEAgLTIyMjksMTAgKzIyMjksOCBAQCBhdXRvIEFpcklSR2VuZXJh
dG9yOjpvcmlnaW4oKSAtPiBCMzo6T3JpZ2luCiAgICAgcmV0dXJuIEIzOjpPcmlnaW4oKTsKIH0K
IAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
Y29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0
aHJvd1dhc21FeGNlcHRpb24pCitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rp
b25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0
aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVy
bmFsRnVuY3Rpb24+KCk7Ci0KICAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJFbnRyeXBv
aW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgY29tcGlsYXRpb25Db250
ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAKQEAg
LTIyNTIsNyArMjI1MCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpCiAgICAgCiAgICAgcHJv
Y2VkdXJlLnNldE9wdExldmVsKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyT3B0aW1pemF0aW9u
TGV2ZWwoKSk7CiAKLSAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1
cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG1vZGUsIGZ1bmN0aW9u
SW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uLCBzaWduYXR1cmUpOworICAgIEFpcklS
R2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgY29tcGlsYXRpb25Db250ZXh0
Lm91dGdvaW5nQ2FsbHMsIHdhc21Ub1dhc21FeGl0U3R1YnMsIG1vZGUsIGZ1bmN0aW9uSW5kZXgs
IHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uLCBzaWduYXR1cmUpOwogICAgIEZ1bmN0aW9uUGFy
c2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0
YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIApAQCAtMjI3MiwxMCArMjI3MCwx
MCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aQogICAgICAgICBCMzo6QWlyOjpwcmVwYXJlRm9y
R2VuZXJhdGlvbihjb2RlKTsKICAgICAgICAgQjM6OkFpcjo6Z2VuZXJhdGUoY29kZSwgKmNvbXBp
bGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVj
dHMoKTsKLSAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBj
b2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgICAgICBjb21waWxhdGlv
bkNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4geyB9
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgKaW5kZXggMzMxYjRiMGFkMzEzZTYyM2Nh
N2ZmNGJkOGRlOGExNTg2ZmM3ZDUwNS4uODI3MmNlMzU5NWZmMjhiM2Y5Y2M4ODk2NWFkYjJhODRj
OWU4NWE3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2Vu
ZXJhdG9yLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlv
bkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxw
dHIpOworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRp
b25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCAzZDhkZjhlNjg3MTAyMTMxYjY0YzFhNmQ2NWU2ZmNj
YzEwM2I1ZTc1Li5lMDAwM2VjYjcwZDZmMmFjZWNhZGRkM2Y0Mjg0NjRlN2EwYjM4ZmU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBA
IC0xNzIsNyArMTcyLDYgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBTdHJpbmcgRXJyb3JUeXBl
OwogICAgIHR5cGVkZWYgVW5leHBlY3RlZDxFcnJvclR5cGU+IFVuZXhwZWN0ZWRSZXN1bHQ7Ci0g
ICAgdHlwZWRlZiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIEVy
cm9yVHlwZT4gUmVzdWx0OwogICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9pZCwgRXJyb3JUeXBlPiBQ
YXJ0aWFsUmVzdWx0OwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgogICAgIE5FVkVS
X0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsKEFyZ3MuLi4g
YXJncykgY29uc3QKQEAgLTE4NSw3ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0g
ICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIElu
dGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25l
ZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2Rl
LCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwg
VGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIEIzSVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+
JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUsIENvbXBp
bGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9y
T1NSRW50cnksIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1
aW50MzJfdCk7CkBAIC0yODMsNiArMjgyLDcgQEAgcHJpdmF0ZToKIAogICAgIEZ1bmN0aW9uUGFy
c2VyPEIzSVJHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsKICAgICBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgbV9vdXRnb2luZ0NhbGxzOwogICAgIGNvbnN0IE1lbW9yeU1vZGUgbV9tb2RlIHsgTWVtb3J5
TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKICAgICBjb25zdCBDb21waWxhdGlvbk1vZGUgbV9jb21w
aWxhdGlvbk1vZGUgeyBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUgfTsKICAgICBjb25zdCB1bnNp
Z25lZCBtX2Z1bmN0aW9uSW5kZXggeyBVSU5UX01BWCB9OwpAQCAtMjk0LDcgKzI5NCw3IEBAIHBy
aXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAg
VmVjdG9yPHVpbnQzMl90PiBtX291dGVyTG9vcHM7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9s
b2NhbHM7Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5k
ZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIG1fd2FzbVRvV2FzbUV4aXRT
dHViczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3Nl
IGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KICAgICB1bnNpZ25lZCYgbV9vc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIEhhc2hNYXA8VmFsdWVLZXksIFZhbHVlKj4gbV9j
b25zdGFudFBvb2w7CiAgICAgSW5zZXJ0aW9uU2V0IG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXM7
CkBAIC0zNTUsMTUgKzM1NSwxNiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlKFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvYwogICAgIH0pOwog
fQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRp
b24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlIG1vZGUs
IENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgs
IHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgb3V0Z29pbmdDYWxscywgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRT
dHVicywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUgbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXAsIFRo
cm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBtX2luZm8oaW5mbykK
KyAgICAsIG1fb3V0Z29pbmdDYWxscyhvdXRnb2luZ0NhbGxzKQogICAgICwgbV9tb2RlKG1vZGUp
CiAgICAgLCBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCiAgICAgLCBtX2Z1bmN0
aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKICAgICAsIG1fbG9vcEluZGV4Rm9yT1NSRW50cnkobG9v
cEluZGV4Rm9yT1NSRW50cnkpCiAgICAgLCBtX3RpZXJVcCh0aWVyVXApCiAgICAgLCBtX3Byb2Mo
cHJvY2VkdXJlKQotICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscyh1bmxpbmtlZFdhc21U
b1dhc21DYWxscykKKyAgICAsIG1fd2FzbVRvV2FzbUV4aXRTdHVicyh3YXNtVG9XYXNtRXhpdFN0
dWJzKQogICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUpCiAgICAgLCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzKG1fcHJvYykKICAgICAs
IG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQpAQCAtNDE3
LDcgKzQxOCw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmY29tcGls
YXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50Qmxv
Y2spOworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKG1f
cHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKIAogICAgIHsKICAgICAgICAgQjM6OlZh
bHVlKiBmcmFtZVBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
bV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBPcmlnaW4oKSk7CkBAIC0xNDAyLDggKzE0MDMsNiBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKIAogICAg
IFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7Ci0gICAgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzOwotCiAgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25G
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgIG1fbWF4TnVt
SlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCkBAIC0xNDE3LDYgKzE0MTYsNyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9
IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGlzV2FzbUNhbGwsIEZyZXF1
ZW50ZWRCbG9jayhpc1dhc21CbG9jayksIEZyZXF1ZW50ZWRCbG9jayhpc0VtYmVkZGVyQmxvY2sp
KTsKIAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiB3YXNt
VG9XYXNtRXhpdFN0dWIgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnNbZnVuY3Rpb25JbmRleF07CiAg
ICAgICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNl
dHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0
dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkg
ewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1
ZTsKQEAgLTE0MjUsMTEgKzE0MjUsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAg
ICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UgY291bGQgYmUgY2FsbGlu
ZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50
LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2Rl
OjpCb3VuZHNDaGVja2luZykpOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3dhc21Ub1dhc21FeGl0U3R1Yl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewog
ICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
ID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlv
bkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChXYXNt
RW50cnlQdHJUYWcpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGws
IHdhc21Ub1dhc21FeGl0U3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxX
YXNtRW50cnlQdHJUYWc+KHdhc21Ub1dhc21FeGl0U3R1Yi5jb2RlKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKQEAgLTE0
NzMsMTcgKzE0NzMsMTggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICAvLyBUaGUg
Y2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJseSBpbnN0YW5jZSwgYW5k
IC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgogICAgICAgICByZXN0b3JlV2Vi
QXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdDo6WWVzLCBtX2luZm8u
bWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgY29udGludWF0aW9uKTsKICAgICB9IGVs
c2UgeworICAgICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIG91dGdvaW5nQ2Fs
bHMgPSAmbV9vdXRnb2luZ0NhbGxzOwogICAgICAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3Ms
IHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRl
c1Bpbm5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFk
c1Bpbm5lZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhy
ZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzKys7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gcGFyYW1zLmdwU2Ny
YXRjaCgwKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBqaXQubW92
ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVl
R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
TG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAgICAg
ICAgICAgICAgIG91dGdvaW5nQ2FsbHMtPmFwcGVuZCh7IGZ1bmN0aW9uSW5kZXgsIHsgbW92ZUxv
Y2F0aW9uLCBjYWxsTG9jYXRpb24gfX0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfSk7CiAgICAgfQpAQCAtMTYyNCw2ICsxNjI1LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sCiAgICAg
ICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpv
ZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSkpKTsKIAorICAgIEV4cHJlc3Npb25UeXBl
IGNhbGxlZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KCksIGNhbGxhYmxlRnVuY3Rpb24sCisgICAgICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9u
KCkpKSk7CisKICAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwog
ICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1f
Y3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAg
ICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CkBAIC0xNjM1LDggKzE2NDAs
OCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUlu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBub3QgaGF2ZSB0byBkbyB0aGlzLCBidXQgdGhlIHdhc20tPndhc20gc3R1YiBhc3N1bWVz
IGl0IGNhbgogICAgICAgICAgICAgLy8gdXNlIGFsbCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhcyBz
Y3JhdGNoOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86Omdl
dCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwotCiAgICAgICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoY2FsbGVlQ29kZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7Cisg
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoY2FsbGVlLCBCMzo6VmFsdWVSZXA6OnN0YWNr
QXJndW1lbnQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJh
bXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwpA
QCAtMTY5NywxMCArMTcwMiw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gT3Jp
Z2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KG9yaWdpbik7CiB9CiAKLUV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENv
bXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0
aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCB1bnNpZ25lZCYg
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8s
IE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENv
dW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitFeHBl
Y3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNv
bXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5
UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2Rl
LCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9
IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKLQogICAgIGNvbXBpbGF0aW9uQ29udGV4
dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAg
ICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxs
SGVscGVycz4oKTsKIApAQCAtMTcyMSw3ICsxNzI0LDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlv
bkMKICAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUIzT3B0aW1pemF0aW9uTGV2ZWwo
KQogICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwoKSk7
CiAKLSAgICBCM0lSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0
LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSwgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhGb3JPU1JF
bnRyeSwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEIzSVJHZW5lcmF0b3IgaXJH
ZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCBjb21waWxhdGlvbkNvbnRleHQub3V0Z29pbmdDYWxs
cywgd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbW9kZSwg
Y29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgdGll
clVwLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0
b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRh
dGEuc2l6ZSgpLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJ
TFMocGFyc2VyLnBhcnNlKCkpOwogCkBAIC0xNzM5LDEwICsxNzQyLDEwIEBAIEV4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUo
Q29tcGlsYXRpb25DCiAgICAgICAgIEIzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jZWR1cmUp
OwogICAgICAgICBCMzo6Z2VuZXJhdGUocHJvY2VkdXJlLCAqY29tcGlsYXRpb25Db250ZXh0Lndh
c21FbnRyeXBvaW50SklUKTsKICAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBv
aW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOwotICAgICAgICBy
ZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVT
YXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0LmNh
bGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRM
aXN0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4geyB9OwogfQog
CiAvLyBDdXN0b20gd2FzbSBvcHMuIFRoZXNlIGFyZSB0aGUgb25lcyB0b28gbWVzc3kgdG8gZG8g
aW4gd2FzbS5qc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmgKaW5kZXggZWE1NTAyNDAxOGQzMGQzOGZmMWVhN2E3YWJmMWMxNjViY2Y1NjdmOC4u
MzQ4YjU0N2VlM2Q3ODdiNjEyYzNmZDM2MDQyZDc3ZGU4MjIwYTdkOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBAIC00OSw5ICs0OSwxMiBA
QCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9w
YXF1ZUJ5cHJvZHVjdHM+IGVtYmVkZGVyRW50cnlwb2ludEJ5cHJvZHVjdHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENDYWxsSGVscGVycz4gd2FzbUVudHJ5cG9pbnRKSVQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2ludEJ5cHJvZHVjdHM7Cisg
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IG91dGdvaW5nQ2FsbHM7CisgICAgT3B0
aW9uYWw8VW5saW5rZWRNb3ZlQW5kQ2FsbD4gZW1iZWRkZXJNb3ZlQW5kQ2FsbDsKKyAgICBSZWdp
c3RlckF0T2Zmc2V0TGlzdCBjYWxsZWVTYXZlUmVnaXN0ZXJzOwogfTsKIAotRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShD
b21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUm
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCBDb21w
aWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZv
ck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBu
dWxscHRyKTsKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mLCB1bnNpZ25lZCYgb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlN
b2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxv
b3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNl
cHRpb24gPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IDBlODNkNTNmMzEyMzkz
N2ZjOWNjMDNkM2U1ZWUxODRkNTE3MTNkNGYuLmI0ODU3Yzc2YTE4N2JkZTUxZTI2NTBkN2FjNDJm
YzI0N2I1ZTUwNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAKQEAgLTUyLDkgKzUyLDEwIEBAIG5hbWVzcGFjZSBXYXNtQkJRUGxhbkludGVybmFsIHsKIHN0
YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotQkJRUGxhbjo6QkJRUGxhbihD
b250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3
b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0
ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikK
K0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9yPFJlZlB0cjxC
QlFDYWxsZWU+PiYgY2FsbGVlcywgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dv
cmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBj
cmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRp
b24pCiAgICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdURk1vdmUodGFzayksIFdU
Rk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgICwg
bV9zdHJlYW1pbmdQYXJzZXIobV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgKnRoaXMpCisgICAg
LCBtX2NhbGxlZXMoJmNhbGxlZXMpCiAgICAgLCBtX3N0YXRlKFN0YXRlOjpWYWxpZGF0ZWQpCiAg
ICAgLCBtX2FzeW5jV29yayh3b3JrKQogewpAQCAtMTU5LDE2ICsxNjAsMTAgQEAgdm9pZCBCQlFQ
bGFuOjpwcmVwYXJlKCkKIAogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5m
b3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICBpZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21U
b1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCksICIgV2ViQXNzZW1ibHkgdG8gSmF2YVNjcmlwdCBzdHVicyIpCi0g
ICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
ZnVuY3Rpb25zLnNpemUoKSwgIiB1bmxpbmtlZCBXZWJBc3NlbWJseSB0byBXZWJBc3NlbWJseSBj
YWxscyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtSW50ZXJuYWxGdW5j
dGlvbnMsIGZ1bmN0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVuY3Rpb25zIikKLSAgICAg
ICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMsIGZ1bmN0aW9u
cy5zaXplKCksICIgY29tcGlsYXRpb24gY29udGV4dHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2
ZUNhcGFjaXR5KG1fdGllclVwQ291bnRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHRpZXItdXAgY291
bnRzIikpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9jb21waWxhdGlvbkNvbnRl
eHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRleHRzIikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMucmVzaXplKGZ1bmN0aW9u
cy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJlc2l6ZShmdW5jdGlvbnMu
c2l6ZSgpKTsKICAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXplKGZ1bmN0aW9ucy5zaXpl
KCkpOwotICAgIG1fdGllclVwQ291bnRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKIAogICAg
IGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBvcnRJbmRleCA8IG1fbW9kdWxlSW5m
b3JtYXRpb24tPmltcG9ydHMuc2l6ZSgpOyArK2ltcG9ydEluZGV4KSB7CiAgICAgICAgIEltcG9y
dCogaW1wb3J0ID0gJm1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydHNbaW1wb3J0SW5kZXhdOwpA
QCAtMjMwLDYgKzIyNSw3IEBAIHB1YmxpYzoKIAogdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rp
b25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2Nh
bGxlZXMpOwogICAgIEFTU0VSVChtX3N0YXRlID49IFN0YXRlOjpQcmVwYXJlZCk7CiAgICAgZGF0
YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlN0YXJ0aW5nIGNvbXBpbGF0
aW9uIik7CiAKQEAgLTI2NiwxMyArMjYyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rp
b25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUX1VOVVNFRChmdW5j
dGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsK
ICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCi0gICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsK
LSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygpKQotICAgICAgICAgICAg
bV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gPSBtYWtlVW5pcXVlPFRpZXJVcENvdW50Pigp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XSA9IG51bGxwdHI7Ci0gICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBtX3RpZXJVcENvdW50
c1tmdW5jdGlvbkluZGV4XS5nZXQoKTsKLSAgICAgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKKyAgICAg
ICAgRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQ7CiAgICAgICAg
IHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBTb21lIHdlYnBhZ2VzIHVzZSB2ZXJ5IGxhcmdlIFdhc20gbW9kdWxlLCBhbmQgaXQgZXho
YXVzdHMgYWxsIGV4ZWN1dGFibGUgbWVtb3J5IGluIEFSTTY0IGRldmljZXMgc2luY2UgdGhlIHNp
emUgb2YgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9uIGlzIG9ubHkgbGltaXRlZCB0byAxMjhNQi4K
QEAgLTI4MiwxMCArMjcyLDExIEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21w
aWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIGlmIChPcHRpb25zOjp3ZWJBc3NlbWJseUJC
UUFpck1vZGVUaHJlc2hvbGQoKSAmJiBtX21vZHVsZUluZm9ybWF0aW9uLT5jb2RlU2VjdGlvblNp
emUgPj0gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNob2xkKCkpCiAgICAgICAg
ICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogCisgICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAg
PSBtX2NhbGxlZXMtPmF0KGZ1bmN0aW9uSW5kZXgpLT50aWVyVXBDb3VudCgpOwogICAgICAgICBp
ZiAoIWZvcmNlVXNpbmdCMyAmJiBPcHRpb25zOjp3YXNtQkJRVXNlc0FpcigpKQotICAgICAgICAg
ICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKG1fY29tcGlsYXRp
b25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsK
KyAgICAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpciht
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBzaWduYXR1cmUs
IG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2Rl
LCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
KG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIHNpZ25hdHVy
ZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxh
dGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCwgbV90
aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0g
cGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVu
Y3Rpb24sIHNpZ25hdHVyZSwgbV93YXNtVG9XYXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9u
TW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCwgdGllclVwLCBtX3Rocm93
V2FzbUV4Y2VwdGlvbik7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVS
ZXN1bHQpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CkBA
IC0yOTQsMTEgKzI4NSwxMSBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0gPSBXVEZNb3ZlKCpw
YXJzZUFuZENvbXBpbGVSZXN1bHQpOwotCiAgICAgICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25J
bmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpIHx8IG1fbW9kdWxlSW5mb3JtYXRpb24tPnJl
ZmVyZW5jZWRGdW5jdGlvbnMoKS5jb250YWlucyhmdW5jdGlvbkluZGV4KSkgewogICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5kZXgs
IG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbklu
ZGV4XSwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KSk7Cisg
ICAgICAgICAgICBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUgPSBXYXNtOjpFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU6OmNyZWF0ZSgpOwor
ICAgICAgICAgICAgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9jb21waWxhdGlvbkNvbnRleHRz
W2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQo
KSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlKTsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbklu
ZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSkpOwogICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgfQogCkBAIC0z
MTYsNyArMzA3LDkgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyKQogICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgU2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJ
bmRleCk7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBm
dW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgp
OworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICAgICAgICAgIGNvbnN0
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBpbXBvcnRGdW5j
dGlvbkNvdW50OworICAgICAgICAgICAgQkJRQ2FsbGVlJiBjYWxsZWUgPSAqbV9jYWxsZWVzLT5h
dChmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2Ug
PCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53
YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAgLTMy
NSw5ICszMTgsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRl
eF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4o
CisgICAgICAgICAgICAgICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5jYWxsZWVTYXZlUmVnaXN0ZXJz
ID0gV1RGTW92ZShjb250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgICAgICAgICAgICAg
IGNhbGxlZS5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxh
dGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjND
b21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBmdW5jdGlvblslaV0gJXMgbmFtZSAl
cyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBt
YWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRh
KCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRC
eXByb2R1Y3RzKSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjb250ZXh0
Lm91dGdvaW5nQ2FsbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0
RnVuY3Rpb25JbmRleFNwYWNlID49IGltcG9ydEZ1bmN0aW9uQ291bnQpOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50MzJfdCB0YXJnZXRGdW5jdGlvbkluZGV4ID0gY2FsbC50YXJnZXRG
dW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNv
dW50KCk7CisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGVlcy0+YXQodGFyZ2V0RnVuY3Rpb25J
bmRleCktPmFkZENhbGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsIGNhbGwudW5saW5rZWRNb3ZlQW5k
Q2FsbCk7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkpIHsKQEAgLTMzNywyMyArMzM4
LDE4IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tl
cikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludC5j
b21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICAgICAgICAgICAg
ICBlbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQoKS5jb21waWxhdGlv
biA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICAgICAgRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiRW1iZWRkZXItPldl
YkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIG5hbWUgJXMiLCBmdW5jdGlvbkluZGV4LCBzaWdu
YXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShm
dW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQo
ZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgICAgICAgICAg
ICAgV1RGTW92ZShjb250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIGZvciAoYXV0byYgdW5saW5rZWQgOiBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiB1
bmxpbmtlZCkgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+IGV4ZWN1dGFibGVBZGRyZXNzOwotICAgICAgICAgICAgICAgIGlmIChtX21vZHVs
ZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNh
bGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRSBp
bXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3RlYWQgb2YgZ2VuZXJhdGlu
ZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJF
TEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
NDYyCi0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93YXNtVG9XYXNt
RXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5jb2RlKCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNzID0gbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCkpLT5lbnRyeXBvaW50LmNvbXBpbGF0
aW9uLT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZXhlY3V0YWJsZUFkZHJlc3MpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsKQorICAgICAgICAgICAg
ICAgICAgICBjYWxsZWUuYWRkQ2FsbGVyKGxvY2tlciwgbGlua0J1ZmZlciwgKmNvbnRleHQuZW1i
ZWRkZXJNb3ZlQW5kQ2FsbCk7CiAgICAgICAgICAgICB9CisKICAgICAgICAgfQorCisgICAgICAg
IGZvciAoYXV0byYgY2FsbGVlIDogKm1fY2FsbGVlcykKKyAgICAgICAgICAgIGNhbGxlZS0+cmVw
YXRjaENhbGxlcnMobG9ja2VyLCAqY2FsbGVlKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFpc0Nv
bXBsZXRlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmluZGV4
IDg4MzYxN2ZjNjdmZmViODA1MTIwOGM3NDBlMmYxZjkxODhiNDEzMGQuLmUzZTZlZTY2MGJiMTdm
MzliYmRmYTRiNGEwYjg0ZjA1YzI1MmJiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJCUVBsYW4uaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBBc3luY1dv
cmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKIAogICAgIC8vIE5vdGU6
IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBv
dGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBCQlFQbGFuKENv
bnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNr
JiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIEJC
UVBsYW4oQ29udGV4dCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4mLCBSZWY8TW9k
dWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVk
ZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IEJCUVBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRp
b25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwog
ICAgIEJCUVBsYW4oQ29udGV4dCosIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAKQEAg
LTk4LDEyICs5OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV93YXNtVG9X
YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+PiB0YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpCi0gICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBXVEZN
b3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpOwotICAgIH0KLQogICAgIGVudW0gY2xhc3Mg
U3RhdGUgOiB1aW50OF90IHsKICAgICAgICAgSW5pdGlhbCwKICAgICAgICAgVmFsaWRhdGVkLApA
QCAtMTM5LDE0ICsxMzMsMTMgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dWludDhfdD4gbV9zb3Vy
Y2U7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0
dWJzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5cGVuYW1lIERlZmF1
bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0gICAgSGFzaE1hcDx1aW50
MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0
SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgSGFzaE1h
cDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERl
ZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBW
ZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CiAgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+IG1fdGllclVwQ291bnRzOwogCi0gICAg
VmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsczsKICAgICBTdHJlYW1pbmdQYXJzZXIgbV9zdHJlYW1pbmdQYXJzZXI7CisgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxCQlFDYWxsZWU+PiogbV9jYWxsZWVzIHsgbnVsbHB0ciB9OwogICAg
IFN0YXRlIG1fc3RhdGU7CiAKICAgICBjb25zdCBBc3luY1dvcmsgbV9hc3luY1dvcms7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCmluZGV4IDg2
NjAxYWM5ZWYzZmIzODVlMDYwMjkwMWMxYTA0ZDUzMGM1NjNjYTguLjliYmM2ZjM4OTc1MmQ3NzA2
ZTRjOWZiMTVjODU5OWY1NGYyODJmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCkBAIC0zOCwyMSArMzgsOCBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgogdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5j
dG9yJiBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1f
d2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsK
LQotICAgICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7
Ci0gICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9X
YXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKLSAgICAg
ICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2lu
dCkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVy
VG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIElu
dGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJu
YWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLSAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IGludGVybmFsRnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1
bmN0aW9uQ291bnQoKTsKLSAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRD
YWxsZWUgPSBXYXNtOjpCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBv
aW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlv
bi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJu
YWxGdW5jdGlvbkluZGV4XSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNt
RW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwotCi0gICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVu
Y3Rpb25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdh
c21FbnRyeXBvaW50Q2FsbGVlKSk7Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxG
dW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpCisgICAgICAg
IGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgbV9lbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKTsKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cAppbmRleCBjZTYxMDc2ZDFhY2I3OWFlYTRjNWU4Yjc1MmIxNzk0ODVjYWYwOGVlLi5mN2Q0N2Jh
OTAzODZhNzMxMTdkMTI2NGI3MDEyNDhlNTliY2NkNDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC00Nyw2ICs0Nyw3IEBAIEV4cGVjdGVkPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRv
V2FzbSh1bnNpCiAgICAgSklUIGppdDsKIAogICAgIEdQUlJlZyBzY3JhdGNoID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAgIEdQUlJlZyBjYWxsZWUg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMSk7CiAgICAgR1BS
UmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwogICAgIEFTU0VS
VChiYXNlTWVtb3J5ICE9IHNjcmF0Y2gpOwogICAgIEFTU0VSVChwaW5uZWRSZWdzLnNpemVSZWdp
c3RlciAhPSBiYXNlTWVtb3J5KTsKQEAgLTU3LDEzICs1OCwyMCBAQCBFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dh
c20odW5zaQogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNo
KTsgLy8gT2xkIEluc3RhbmNlKgogICAgIC8vIEdldCB0aGUgY2FsbGVlJ3MgV2FzbTo6SW5zdGFu
Y2UgYW5kIHNldCBpdCBhcyBXYXNtQ29udGV4dCdzIGluc3RhbmNlLiBUaGUgY2FsbGVyIHdpbGwg
dGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgogICAgIGppdC5sb2FkUHRy
KEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJ
bnN0YW5jZShpbXBvcnRJbmRleCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAgIC8v
IFdoaWxlIHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQgdGhlIHdhc20g
ZW50cnlwb2ludCBzbyB3ZSBjYW4gdGFpbCBjYWxsIHRvIGl0IGJlbG93LgorICAgIC8vIFdoaWxl
IHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQgdGhlIHdhc20gZW50cnlw
b2ludCBhbmQgY2FsbGVlIHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCiAgICAgaml0
LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRP
Zldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOworICAg
IGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbihpbXBvcnRJbmRleCkpLCBjYWxsZWUpOwogICAg
IGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7CiAKICAgICBqaXQubG9h
ZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkU3RhY2tMaW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRjaCk7CiAgICAgaml0LnN0b3JlUHRyKHNp
emVSZWdBc1NjcmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKIAorICAgIC8vIFNldCB0aGUgY2FsbGVlIHNsb3QgaW4g
dGhlIGNhbGwgZnJhbWUKKyAgICBqaXQubG9hZFB0cihjYWxsZWUsIGNhbGxlZSk7CisgICAgLy8g
QXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBiZWVuIGNhbGxlZCwgc28gUmV0dXJuUEMgaXMgb24gdGhl
IHN0YWNrLCBidXQgaGF2ZSBub3QgeWV0IHB1c2hlZCB0aGUgYmFzZSBwb2ludGVyLAorICAgIC8v
IHNvIHdlIGhhdmUgdG8gc3VidHJhY3QgdGhlIHNwYWNlIGZvciBDYWxsZXJGcmFtZSBmcm9tIHRo
ZSBjYWxsZWUgc2xvdAorICAgIGppdC5zdG9yZVB0cihjYWxsZWUsIEpJVDo6QWRkcmVzcyhKSVQ6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVn
aXN0ZXIpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSkpOworCiAgICAgLy8gRklYTUUgdGhlIGZvbGxv
d2luZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwgV2FzbTo6SW5zdGFuY2UgaGF2ZSB0aGUgc2FtZSBw
aW5uZWQgcmVnaXN0ZXJzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyOTUyCiAgICAgLy8gU2V0IHVwIHRoZSBjYWxsZWUncyBiYXNlTWVtb3J5IHJlZ2lzdGVyIGFz
IHdlbGwgYXMgdGhlIG1lbW9yeSBzaXplIHJlZ2lzdGVycy4KICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCmluZGV4IGU4ZGRmMTUzZGQ5ZDkwMjI5YzUxMjgx
ZWMyODEyZjdhNTkxMTQxZDYuLjkzMzE0YWI2Njc3ODdmNjkxOTliMWE0MmMzZDI5ZDNmYzRiNmM4
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCkBAIC0zMiwx
NiArMzIsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotQ2FsbGVl
OjpDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgRW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQpCitDYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29t
cGlsYXRpb25Nb2RlKQogICAgIDogbV9jb21waWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQot
ICAgICwgbV9lbnRyeXBvaW50KFdURk1vdmUoZW50cnlwb2ludCkpCiB7CiAgICAgQ2FsbGVlUmVn
aXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwogfQogCi1DYWxsZWU6OkNh
bGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSkKK0NhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZSBjb21waWxhdGlvbk1vZGUsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBS
ZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCiAgICAgOiBtX2NvbXBpbGF0aW9uTW9kZShjb21w
aWxhdGlvbk1vZGUpCi0gICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50KSkKICAg
ICAsIG1faW5kZXhPck5hbWUoaW5kZXgsIFdURk1vdmUobmFtZSkpCiB7CiAgICAgQ2FsbGVlUmVn
aXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwpAQCAtNTIsNiArNTAsNDgg
QEAgQ2FsbGVlOjp+Q2FsbGVlKCkKICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkudW5y
ZWdpc3RlckNhbGxlZSh0aGlzKTsKIH0KIAorCitpbmxpbmUgdm9pZCByZXBhdGNoTW92ZShjb25z
dCBBYnN0cmFjdExvY2tlciYsIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJU
YWc+IG1vdmVMb2NhdGlvbiwgQ2FsbGVlJiB0YXJnZXRDYWxsZWUpCit7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSgm
dGFyZ2V0Q2FsbGVlKSk7Cit9CisKK2lubGluZSB2b2lkIHJlcGF0Y2hDYWxsKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgQ29kZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPiBjYWxsTG9j
YXRpb24sIENhbGxlZSYgdGFyZ2V0Q2FsbGVlKQoreworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoTmVhckNhbGwoY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJU
YWc+KHRhcmdldENhbGxlZS5jb2RlKCkpKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OmFkZENhbGxl
cihjb25zdCBBYnN0cmFjdExvY2tlciYsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIFVubGlua2Vk
TW92ZUFuZENhbGwgY2FsbCkKK3sKKyAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGwubW92ZUxvY2F0aW9uKTsKKyAgICBhdXRv
IGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0
clRhZz4oY2FsbC5jYWxsTG9jYXRpb24pOworICAgIG1fbW92ZUxvY2F0aW9ucy5hcHBlbmQobW92
ZUxvY2F0aW9uKTsKKyAgICBtX2NhbGxMb2NhdGlvbnMuYXBwZW5kKGNhbGxMb2NhdGlvbik7Cit9
CisKK3ZvaWQgQkJRQ2FsbGVlOjphZGRBbmRMaW5rQ2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiBsb2NrZXIsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIFVubGlua2VkTW92ZUFuZENhbGwgY2Fs
bCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChlbnRyeXBvaW50KCkuY29tcGlsYXRpb24pOworCisg
ICAgYXV0byBtb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRy
VGFnPihjYWxsLm1vdmVMb2NhdGlvbik7CisgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwuY2FsbExvY2F0aW9u
KTsKKyAgICBtX21vdmVMb2NhdGlvbnMuYXBwZW5kKG1vdmVMb2NhdGlvbik7CisgICAgbV9jYWxs
TG9jYXRpb25zLmFwcGVuZChjYWxsTG9jYXRpb24pOworCisgICAgQ2FsbGVlJiB0YXJnZXRDYWxs
ZWUgPSBtX3JlcGxhY2VtZW50ID8gc3RhdGljX2Nhc3Q8Q2FsbGVlJj4oKm1fcmVwbGFjZW1lbnQp
IDogKnRoaXM7CisgICAgcmVwYXRjaE1vdmUobG9ja2VyLCBtb3ZlTG9jYXRpb24sIHRhcmdldENh
bGxlZSk7CisgICAgcmVwYXRjaENhbGwobG9ja2VyLCBjYWxsTG9jYXRpb24sIHRhcmdldENhbGxl
ZSk7Cit9CisKK3ZvaWQgQkJRQ2FsbGVlOjpyZXBhdGNoQ2FsbGVycyhjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCBDYWxsZWUmIHRhcmdldENhbGxlZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VCh0YXJnZXRDYWxsZWUuZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uKTsKKyAgICBmb3IgKGF1dG8g
bW92ZUxvY2F0aW9uIDogbV9tb3ZlTG9jYXRpb25zKQorICAgICAgICByZXBhdGNoTW92ZShsb2Nr
ZXIsIG1vdmVMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKKyAgICBmb3IgKGF1dG8gY2FsbExvY2F0
aW9uIDogbV9jYWxsTG9jYXRpb25zKQorICAgICAgICByZXBhdGNoQ2FsbChsb2NrZXIsIGNhbGxM
b2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21DYWxsZWUuaAppbmRleCBmN2VhNGQwNWI4ZDBhNzFjMWVlNjJhNTZjNGQzOWRhNTQ5ZjA5
YjdiLi45OTA5ZGM0MDk1OTkxOWE1YzY5YWZiZGYyNTI5NTgyOTNhMTFjNGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCkBAIC00MCwxMiArNDAsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIENhbGxlZSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxDYWxsZWU+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBv
aW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0
YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9Ci0KLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCog
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVyczsgfQorICAgIEVudHJ5cG9pbnQmIGVudHJ5cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5
cG9pbnQ7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBjb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdn
ZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9CiAgICAgSW5kZXhPck5hbWUgaW5kZXhPck5hbWUoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4T3JOYW1lOyB9CiAgICAgQ29tcGlsYXRpb25Nb2RlIGNvbXBp
bGF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsYXRpb25Nb2RlOyB9CiAKKyAgICBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2Vu
dHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQorCiAgICAgc3RkOjp0dXBsZTx2b2lkKiwg
dm9pZCo+IHJhbmdlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHZvaWQqIHN0YXJ0ID0gbV9lbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgp
LnVudGFnZ2VkUHRyKCk7CkBAIC01Niw3OCArNTcsNzAgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgfkNhbGxlZSgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSwgV2FzbTo6RW50cnlwb2ludCYm
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlLCBX
YXNtOjpFbnRyeXBvaW50JiYsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8
TmFtZVNlY3Rpb24+PiYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoQ29tcGlsYXRp
b25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlLCBz
aXplX3QsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJik7CiAK
IHByaXZhdGU6CiAgICAgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRpb25Nb2RlOwotICAgIFdh
c206OkVudHJ5cG9pbnQgbV9lbnRyeXBvaW50OworICAgIEVudHJ5cG9pbnQgbV9lbnRyeXBvaW50
OwogICAgIEluZGV4T3JOYW1lIG1faW5kZXhPck5hbWU7CiB9OwogCiBjbGFzcyBPTUdDYWxsZWUg
ZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9NR0NhbGxl
ZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIHN0YXRpYyBSZWY8
T01HQ2FsbGVlPiBjcmVhdGUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE9NR0NhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBPTUdDYWxsZWUoaW5kZXgsIFdURk1vdmUobmFtZSkpKTsKICAgICB9CiAKLSAgICBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHdhc21Ub1dhc21DYWxsc2l0ZXMoKSB7IHJldHVybiBt
X3dhc21Ub1dhc21DYWxsc2l0ZXM7IH0KLQogcHJpdmF0ZToKLSAgICBPTUdDYWxsZWUoV2FzbTo6
RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZTo6T01HTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSkpCi0gICAgICAgICwgbV93YXNtVG9XYXNtQ2FsbHNpdGVzKFdURk1vdmUodW5saW5rZWRDYWxs
cykpCisgICAgT01HQ2FsbGVlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBS
ZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCisgICAgICAgIDogQ2FsbGVlKENvbXBpbGF0aW9u
TW9kZTo6T01HTW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCiAgICAgewogICAgIH0KLQotICAg
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiB9
OwogCiBjbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0ZShXYXNt
OjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3Qg
TmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlD
YWxsZWU+IGNyZWF0ZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCB1aW50MzJfdCBsb29wSW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBPTUdGb3JPU1JFbnRyeUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92
ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbG9vcEluZGV4LCBXVEZNb3ZlKHVu
bGlua2VkQ2FsbHMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCBsb29wSW5kZXgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOyB9CiAg
ICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9sb29wSW5kZXg7IH0KLSAg
ICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHdhc21Ub1dhc21DYWxsc2l0ZXMoKSB7
IHJldHVybiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7IH0KIAogcHJpdmF0ZToKLSAgICBPTUdGb3JP
U1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5z
aWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IENh
bGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSwgV1RGTW92ZShl
bnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCi0gICAgICAgICwgbV93YXNtVG9XYXNt
Q2FsbHNpdGVzKFdURk1vdmUodW5saW5rZWRDYWxscykpCisgICAgT01HRm9yT1NSRW50cnlDYWxs
ZWUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3Qg
bG9vcEluZGV4KQorICAgICAgICA6IENhbGxlZShDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVu
dHJ5TW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV9vc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgICAgICwgbV9sb29w
SW5kZXgobG9vcEluZGV4KQogICAgIHsKICAgICB9CiAKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIHVuc2lnbmVkIG1fb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICB1aW50MzJfdCBtX2xvb3BJbmRleDsKIH07CiAKIGNs
YXNzIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiBjcmVhdGUoV2Fz
bTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCisgICAgc3RhdGljIFJlZjxFbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWU+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoKSk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXYXNtOjpFbnRyeXBv
aW50JiYgZW50cnlwb2ludCkKLSAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2Rl
OjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpKQorICAgIEVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZSgpCisgICAgICAgIDogQ2FsbGVlKENvbXBpbGF0aW9uTW9kZTo6
RW1iZWRkZXJFbnRyeXBvaW50TW9kZSkKICAgICB7CiAgICAgfQogfTsKIAogY2xhc3MgQkJRQ2Fs
bGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCQlFD
YWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3Rk
Ojp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50KQorICAgIHN0YXRpYyBSZWY8
QkJRQ2FsbGVlPiBjcmVhdGUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYm
IHRpZXJVcENvdW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2Fs
bGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRp
ZXJVcENvdW50KSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoaW5k
ZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpKSk7CiAgICAgfQogCiAgICAg
T01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlKCkgeyByZXR1cm4gbV9vc3JFbnRy
eUNhbGxlZS5nZXQoKTsgfQpAQCAtMTQ3LDEzICsxNDAsMjAgQEAgcHVibGljOgogCiAgICAgVGll
clVwQ291bnQqIHRpZXJVcENvdW50KCkgeyByZXR1cm4gbV90aWVyVXBDb3VudC5nZXQoKTsgfQog
CisgICAgdm9pZCBhZGRDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5rQnVmZmVyJiwg
VW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisgICAgdm9pZCBhZGRBbmRMaW5rQ2FsbGVyKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZlciYsIFVubGlua2VkTW92ZUFuZENhbGwpOworCisgICAg
dm9pZCByZXBhdGNoQ2FsbGVycyhjb25zdCBBYnN0cmFjdExvY2tlciYsIENhbGxlZSYpOworCiBw
cml2YXRlOgotICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6
ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYg
bmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50KQotICAgICAg
ICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIFdURk1vdmUoZW50cnlw
b2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQorICAgIEJCUUNhbGxlZShzaXplX3QgaW5kZXgs
IHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6
OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCisgICAgICAgIDogQ2FsbGVl
KENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCiAgICAgICAg
ICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50KSkKICAgICB7CiAgICAgfQogCisg
ICAgVmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+PiBtX21v
dmVMb2NhdGlvbnM7CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbk5lYXJDYWxsPFdhc21FbnRyeVB0
clRhZz4+IG1fY2FsbExvY2F0aW9uczsKICAgICBSZWZQdHI8T01HRm9yT1NSRW50cnlDYWxsZWU+
IG1fb3NyRW50cnlDYWxsZWU7CiAgICAgUmVmUHRyPE9NR0NhbGxlZT4gbV9yZXBsYWNlbWVudDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+IG1fdGllclVwQ291bnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCmluZGV4
IGI0NDJiNjE2MWJmOTIzMzc1ODE5NzU4MTNmZjM4MDZhNzMxYTkyMjYuLjZmYTQzNjljY2RjYTg4
ZTRiNzBlZDY0NjliYjc2Mzk4MTRmOGU4NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCkBAIC04OCwzNCArODgsMTYgQEAgcHJp
dmF0ZToKIAogcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBoZWFkZXJTaXplSW5CeXRlcygp
IHsgcmV0dXJuIGhlYWRlclNpemU7IH0KLSAgICB2b2lkIHNldHVwRnJhbWVJblByb2xvZ3VlKENv
ZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+KiBjYWxsZWVNb3ZlTG9jYXRp
b24sIEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBCMzo6QmFzaWNCbG9j
ayogYmxvY2spIGNvbnN0CisgICAgdm9pZCBzZXR1cEZyYW1lSW5Qcm9sb2d1ZShCMzo6UHJvY2Vk
dXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6OkJhc2ljQmxvY2sqIGJsb2NrKSBjb25z
dAogICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
aXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBu
b3cuIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICog
c2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSByZWx5IG9uIHRoaXMgaGVyZSBmb3Ig
bm93LiIpOwogCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGdldENhbGxlZVBhdGNocG9p
bnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KHByb2MsIEIzOjpJbnQ2
NCwgb3JpZ2luKTsKLSAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWlu
dHMgPSB7IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyIH07Ci0gICAgICAgIGdldENhbGxlZVBh
dGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOwotICAgICAgICBnZXRDYWxs
ZWVQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAg
ICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcGFyYW1zWzBdLmdwcigpOwotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uID0gaml0Lm1v
dmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsZWVNb3ZlTG9jYXRpb24s
IG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgKmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50
cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9KTsKLQotICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwotICAgICAgICBC
Mzo6VmFsdWUqIG9mZnNldE9mQ2FsbGVlID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3Q2NFZh
bHVlPihwcm9jLCBvcmlnaW4sIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3Rl
cikpOwotICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywgQjM6
OlN0b3JlLCBvcmlnaW4sCi0gICAgICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50LAotICAgICAg
ICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpBZGQsIG9yaWdpbiwg
ZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNhbGxlZSkpOwotCiAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGRuJ3QgaGF2ZSB0byBzdG9yZSB6ZXJvIGludG8gdGhlIENvZGVCbG9jayogc3BvdCBpbiB0
aGUgY2FsbCBmcmFtZSwKICAgICAgICAgLy8gYnV0IHRoZXJlIGFyZSBwbGFjZXMgdGhhdCBpbnRl
cnByZXQgbm9uLW51bGwgQ29kZUJsb2NrIHNsb3QgdG8gbWVhbiBhIHZhbGlkIENvZGVCbG9jay4K
ICAgICAgICAgLy8gV2hlbiBkb2luZyB1bndpbmRpbmcsIHdlJ2xsIG5lZWQgdG8gdmVyaWZ5IHRo
YXQgdGhlIGVudGlyZSBydW50aW1lIGlzIE9LIHdpdGggYSBub24tbnVsbAogICAgICAgICAvLyBD
b2RlQmxvY2sgbm90IGltcGx5aW5nIHRoYXQgdGhlIENvZGVCbG9jayBpcyB2YWxpZC4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQorICAg
ICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
Pihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwogICAgICAgICBCMzo6VmFsdWUqIG9m
ZnNldE9mQ29kZUJsb2NrID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3Q2NFZhbHVlPihwcm9j
LCBvcmlnaW4sIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikpOwog
ICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywgQjM6OlN0b3Jl
LCBvcmlnaW4sCiAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+
KHByb2MsIG9yaWdpbiwgMCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suY3BwCmluZGV4IGQ0YTljZDY3NzEwMmI1OGU0ZmM1OWUxYTIwYWU1NmI4ZTIxYzc0MzAu
LmNlMDAyNmIwMmRjNzEzOGZjMzY2MTQwZTA4ODkzODZlMTkwMjRiYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCkBAIC00Nyw3ICs0NywxNSBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1v
ZHVsZUluZm9ybWF0aW9uJiBtb2R1bAogewogICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb3RlY3Rl
ZFRoaXMgPSB0aGlzOwogCi0gICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRl
eHQsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3Jl
YXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgbV9jYWxsZWVzLnJlc2l6ZSht
X2NhbGxlZUNvdW50KTsKKyAgICBtX2JveGVkQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fY2FsbGVlQ291bnQ7IGkrKykgeworICAg
ICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBv
cnRGdW5jdGlvbkNvdW50KCkgKyBpOworICAgICAgICBtX2NhbGxlZXNbaV0gPSBCQlFDYWxsZWU6
OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1vZHVsZUluZm9ybWF0aW9uLm5hbWVTZWN0aW9u
LT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgbWFrZVVuaXF1ZTxUaWVyVXBDb3VudD4oKSk7Cisg
ICAgICAgIG1fYm94ZWRDYWxsZWVzW2ldID0gQ2FsbGVlQml0czo6Ym94V2FzbShtX2NhbGxlZXNb
aV0uZ2V0KCkpOworICAgIH0KKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihj
b250ZXh0LCBtX2NhbGxlZXMsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpG
dWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CiAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgaWYgKG1fcGxhbi0+ZmFp
bGVkKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5lcnJvck1lc3Nh
Z2UoKTsKQEAgLTU2LDIxICs2NCwxOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBj
b250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bAogICAgICAg
ICB9CiAKICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBldmVudHVhbGx5IGNvbGxlY3QgdGhl
IEJCUSBjb2RlLgotICAgICAgICBtX2NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOwogICAg
ICAgICBtX29wdGltaXplZENhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOwogICAgICAgICBt
X3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50cy5yZXNpemUobV9jYWxsZWVDb3VudCk7CiAKLSAg
ICAgICAgbV9wbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4
LCBSZWZQdHI8V2FzbTo6Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgUmVmPFdh
c206OkNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICBtX3BsYW4tPmlu
aXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0cjxFbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAgICAg
ICAgICBpZiAoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2FsbGVlSW5kZXgsIFdURk1vdmUoZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1f
Y2FsbGVlc1tjYWxsZWVJbmRleF0gPSBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKLSAg
ICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1f
Y2FsbGVlc1tjYWxsZWVJbmRleF0tPmVudHJ5cG9pbnQoKTsKKyAgICAgICAgICAgIG1fd2FzbUlu
ZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1fY2FsbGVlc1tjYWxsZWVJbmRl
eF0tPmNvZGUoKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJz
ID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOwotICAgICAgICBtX3dhc21Ub1dh
c21DYWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7CiAKICAgICAg
ICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIH0pLCBXVEZNb3ZlKGNyZWF0ZUVtYmVk
ZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IGRlYTJmZmEzMTgxMjAzZjc4YWFhNjFjNzBiZjI5
NzFiYzAzMjc5ZWQuLjJjMmYxMDUyNDM0NGE5ODNhNWM0NzE4ZjIxYzU5MTc2N2ViNzNmMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTI4LDYgKzI4
LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUVtYmVk
ZGVyLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0xvY2su
aD4KQEAgLTQwLDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsK
IAotY2xhc3MgQ2FsbGVlOwogc3RydWN0IENvbnRleHQ7CiBjbGFzcyBCQlFQbGFuOwogY2xhc3Mg
T01HUGxhbjsKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhlc2UgdHdvIGNh
bGxlZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2ZSBiZWVuIHBv
cHVsYXRlZC4KIAotICAgIENhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgRW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChydW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNl
ID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CkBAIC04Niw2ICs4Niw3IEBAIHB1YmxpYzoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlKTsKICAgICAgICAgcmV0dXJuICpjYWxsZWU7CiAg
ICAgfQorCiAgICAgQ2FsbGVlJiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgQVNTRVJU
KHJ1bm5hYmxlKCkpOwpAQCAtOTYsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAq
bV9jYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICBDYWxsZWUmIHdhc21C
QlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFj
ZSkKKyAgICBCQlFDYWxsZWUmIHdhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVu
c2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChydW5uYWJs
ZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0
aW9uSW1wb3J0Q291bnQoKSk7CkBAIC0xMTEsNiArMTEyLDEzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuICZtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF07CiAgICAg
fQogCisgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKKyAg
ICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlv
bkltcG9ydENvdW50KCk7CisgICAgICAgIHJldHVybiAmbV9ib3hlZENhbGxlZXNbY2FsbGVlSW5k
ZXhdOworICAgIH0KKwogICAgIGJvb2wgaXNTYWZlVG9SdW4oTWVtb3J5TW9kZSk7CiAKICAgICBN
ZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KQEAgLTEyNCwxMSArMTMy
LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDb21waWxhdGlvbkZpbmlzaGVkKCk7CiAgICAg
dW5zaWduZWQgbV9jYWxsZWVDb3VudDsKICAgICBNZW1vcnlNb2RlIG1fbW9kZTsKLSAgICBWZWN0
b3I8UmVmUHRyPENhbGxlZT4+IG1fY2FsbGVlczsKKyAgICBWZWN0b3I8UmVmUHRyPEJCUUNhbGxl
ZT4+IG1fY2FsbGVlczsKICAgICBWZWN0b3I8UmVmUHRyPENhbGxlZT4+IG1fb3B0aW1pemVkQ2Fs
bGVlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8Q2FsbGVlPiwgdHlwZW5hbWUgRGVm
YXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlckNhbGxlZXM7CisgICAgVmVjdG9yPHZvaWQqPiBtX2Jv
eGVkQ2FsbGVlczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlckNhbGxlZXM7
CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+PiBtX3dh
c21JbmRpcmVjdENhbGxFbnRyeVBvaW50czsKLSAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+PiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7CiAg
ICAgUmVmUHRyPEJCUVBsYW4+IG1fcGxhbjsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX2NvbXBp
bGF0aW9uRmluaXNoZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RW1iZWRkZXIuaAppbmRleCBhMjM3OWZkNTg5Yzg5ZGY2MzU3ZTZlNDQxYmVkMmE1MTg3MzljYTNl
Li5jNzhiNDQzYzU5MWU4NzAzNGI0MTk1ZWNhMDI3MjhkZWY4MGNjODkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaApAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBF
eGVjU3RhdGU7CiBuYW1lc3BhY2UgV2FzbSB7CiAKIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7
CitjbGFzcyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CiBjbGFzcyBJbnN0YW5jZTsKIHN0cnVj
dCBJbnRlcm5hbEZ1bmN0aW9uOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwpAQCAtNDgsNyAr
NDksNyBAQCBjbGFzcyBTaWduYXR1cmU7CiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsK
IAogLy8gQ3JlYXRlIHdyYXBwZXIgY29kZSB0byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNz
ZW1ibHkuCi11c2luZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90KT47Cit1c2luZyBDcmVhdGVFbWJlZGRl
cldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3Qg
U2lnbmF0dXJlJiwgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBNZW1vcnlNb2RlKT47CiAKIC8vIENhbGxlZCBhcyBzb29uIGFzIGFuIGV4Y2VwdGlv
biBpcyBkZXRlY3RlZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMgdG8gY29udGludWUgYXQu
CiB1c2luZyBUaHJvd1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhlY1N0YXRlKiwgV2FzbTo6
RXhjZXB0aW9uVHlwZSwgSW5zdGFuY2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
b3JtYXQuaAppbmRleCAwNjY5YmI0MDdlMjk1OTM2MjJmY2NhOGU1MTkxMTk1ZGQ5YjQ2ZjNiLi5l
YTBlMGI2NThlOWU0NTVlOWIwMWNkYWUyYjQ3OTZiNjIyYjgwZTNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0yODcsMTAgKzI4NywxNSBAQCBpbmxpbmUgYm9v
bCBpc1ZhbGlkTmFtZVR5cGUoSW50IHZhbCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0cnVj
dCBVbmxpbmtlZE1vdmVBbmRDYWxsIHsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRy
IG1vdmVMb2NhdGlvbjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsTG9jYXRpb247Cit9
OworCiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbCB7CiAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPFdhc21FbnRyeVB0clRh
Zz4gY2FsbExvY2F0aW9uOwotICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2U7CisgICAgc2l6
ZV90IHRhcmdldEZ1bmN0aW9uSW5kZXhTcGFjZTsKKyAgICBVbmxpbmtlZE1vdmVBbmRDYWxsIHVu
bGlua2VkTW92ZUFuZENhbGw7CiB9OwogCiBzdHJ1Y3QgRW50cnlwb2ludCB7CkBAIC0zMTMsMTAg
KzMxOCwxMiBAQCBzdHJ1Y3QgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiB7CiAgICAgdXNp
bmcgTG9hZExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4q
OwogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBzaWduYXR1cmVJ
bmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRMb2Nh
dGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbik7IH0K
IAogICAgIC8vIEZJWE1FOiBQYWNrIHNpZ25hdHVyZSBpbmRleCBhbmQgY29kZSBwb2ludGVyIGlu
dG8gb25lIDY0LWJpdCB2YWx1ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY1NTExPi4KICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCB7IFNp
Z25hdHVyZTo6aW52YWxpZEluZGV4IH07CiAgICAgTG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2Fk
TG9jYXRpb247CisgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOwogfTsKIHVzaW5n
IEZ1bmN0aW9uSW5kZXhTcGFjZSA9IFZlY3RvcjxXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
PjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAppbmRleCBmNGYz
NTA4N2UyNTZkMDkyY2U3NGIyMWI4NDQwYTkzNzI1ZDE2Njg1Li43ZTIxMjRmNzZjNjNiZjc1ZTJk
YjEyMzQ5ZDk1MGIwZTkzNjg0MGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuaApAQCAtMTMwLDYgKzEzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uIHsgbnVsbHB0ciB9OwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiB3YXNtVG9FbWJlZGRlclN0dWI7CiAgICAgICAgIHZvaWQqIGltcG9ydEZ1bmN0aW9u
IHsgbnVsbHB0ciB9OyAvLyBJbiBhIEpTIGVtYmVkZGluZywgdGhpcyBpcyBhIFdyaXRlQmFycmll
cjxKU09iamVjdD4uCisgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiB7IG51
bGxwdHIgfTsKICAgICB9OwogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtSW1wb3J0RnVuY3Rpb25zOyB9CiAgICAgSW1wb3J0RnVuY3Rpb25JbmZv
KiBpbXBvcnRGdW5jdGlvbkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKQpAQCAtMTQxLDYg
KzE0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mV2FzbUVudHJ5cG9p
bnRMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRP
ZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykg
KyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbik7IH0KICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHVi
KHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBv
cnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNF
VE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbVRvRW1iZWRkZXJTdHViKTsgfQogICAgIHN0YXRp
YyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0p
IHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1w
b3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIGlt
cG9ydEZ1bmN0aW9uKTsgfQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZCb3hlZENhbGxlZUxv
YWRMb2NhdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFp
bCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9C
SkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9u
KTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGltcG9ydEZ1bmN0aW9uKHVuc2lnbmVk
IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPigmaW1wb3J0
RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKS0+aW1wb3J0RnVuY3Rpb24pOyB9CiAKICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pID09IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxzaXplb2YodWludDY0X3QpPihzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZv
KSksICJXZSByZWx5IG9uIHRoaXMgZm9yIHRoZSBhbGlnbm1lbnQgdG8gYmUgY29ycmVjdCIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5
UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQ
bGFuLmNwcAppbmRleCBhMGJiNmNmNmQ5MDMwNjc0NDM1NmQyODhlYWIwYzJiNTI1MjA1NjJhLi5j
ZmFlYWYyZWJjMGIxNjQzY2UzZGE2YjE4ZjEwZTUwZTc3MGIwYTU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcApAQCAt
NTQsMTUgKzU0LDE1IEBAIG5hbWVzcGFjZSBXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWwg
ewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdGb3JPU1JFbnRy
eVBsYW46Ok9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYm
IG1vZHVsZSwgUmVmPEJCUUNhbGxlZT4mJiBjYWxsZWUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IHVpbnQzMl90IGxvb3BJbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21wbGV0aW9uVGFzayYmIHRh
c2spCitPTUdGb3JPU1JFbnRyeVBsYW46Ok9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0KiBjb250
ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgUmVmPEJCUUNhbGxlZT4mJiBjYWxsZWUsIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgQ29kZUJsb2NrJiBjb2RlQmxv
Y2ssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IEJhc2UoY29udGV4dCwgbWFrZVJlZihj
b25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
KSksIFdURk1vdmUodGFzaykpCiAgICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCi0gICAg
LCBtX2NvZGVCbG9jaygqbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKSkKKyAgICAsIG1fY29k
ZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fY2FsbGVlKFdURk1vdmUoY2FsbGVlKSkKICAgICAs
IG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogICAgICwgbV9sb29wSW5kZXgobG9vcElu
ZGV4KQogewotICAgIHNldE1vZGUobW9kZSk7CisgICAgc2V0TW9kZShjb2RlQmxvY2subW9kZSgp
KTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1fbW9kZSkpOwogICAgIGRh
dGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlN0YXJ0
aW5nIE9NR0Zvck9TUkVudHJ5IHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5kZXgsICIgb2YgbW9kdWxl
OiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOwpAQCAtODEsNDUgKzgxLDMzIEBAIHZv
aWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7CiAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVy
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRl
eHQ7CiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IDA7Ci0gICAgYXV0
byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rp
b24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR0Zv
ck9TUkVudHJ5TW9kZSwgbV9mdW5jdGlvbkluZGV4LCBtX2xvb3BJbmRleCk7CisgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24s
IHNpZ25hdHVyZSwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21w
aWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSwgbV9mdW5jdGlvbkluZGV4LCBtX2xvb3BJ
bmRleCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAg
ICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJl
c3VsdC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJlciht
X2Z1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFbnRyeXBv
aW50IG9tZ0VudHJ5cG9pbnQ7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndh
c21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlm
IChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgIEJh
c2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUg
bWVtb3J5IHdoaWxlIHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1i
ZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgb21n
RW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAg
ICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVl
OjpjcmVhdGUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IG1fbG9vcEluZGV4KTsKKyAgICBjYWxsZWUtPmVudHJ5cG9pbnQoKS5jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gV1RGTW92ZShjb250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgIGNhbGxlZS0+
ZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAog
ICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJX
ZWJBc3NlbWJseSBPTUdGb3JPU1JFbnRyeSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVu
Y3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJp
bmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5u
YW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAg
ICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAg
IG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21w
aWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7Ci0KLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAg
IEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUo
KSkpOwotICAgIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50
cnlDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3Bh
Y2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNw
YWNlKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5s
aW5rZWRDYWxscykpOwogICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2lu
dGVyKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENh
bGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7Ci0gICAgICAgIGVudHJ5cG9pbnQgPSBj
YWxsZWUtPmVudHJ5cG9pbnQoKTsKLQogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
Y29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndh
c21Ub1dhc21DYWxsc2l0ZXMoKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKLSAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0
aW9uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1f
d2FzbVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+
d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25J
bmRleFNwYWNlKS5lbnRyeXBvaW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwotCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBjYWxsIDogY29udGV4dC5vdXRnb2luZ0NhbGxzKSB7CisgICAgICAg
ICAgICBCQlFDYWxsZWUmIHRhcmdldENhbGxlZSA9IG1fY29kZUJsb2NrLT53YXNtQkJRQ2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLnRhcmdldEZ1bmN0aW9uSW5kZXhTcGFjZSk7Cisg
ICAgICAgICAgICB0YXJnZXRDYWxsZWUuYWRkQW5kTGlua0NhbGxlcihsb2NrZXIsIGxpbmtCdWZm
ZXIsIGNhbGwudW5saW5rZWRNb3ZlQW5kQ2FsbCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmVz
ZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CkBAIC0xMzIsMTkgKzEyMCw2IEBAIHZv
aWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICAg
ICAgbV9jYWxsZWUtPnRpZXJVcENvdW50KCktPm9zckVudHJ5VHJpZ2dlcnMoKVttX2xvb3BJbmRl
eF0gPSBUaWVyVXBDb3VudDo6VHJpZ2dlclJlYXNvbjo6Q29tcGlsYXRpb25Eb25lOwogICAgICAg
ICAgICAgbV9jYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUdG
b3JPU1JFbnRyeSA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CiAg
ICAgICAgIH0KLSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgLy8gSXQg
aXMgcG9zc2libGUgdGhhdCBhIG5ldyBPTUcgY2FsbGVlIGlzIGFkZGVkIHdoaWxlIHdlIHJlbGVh
c2UgbV9jb2RlQmxvY2stPmxvY2suCi0gICAgICAgIC8vIFVudGlsIHdlIGFkZCBPTUdGb3JPU1JF
bnRyeSBjYWxsZWUgdG8gQkJRQ2FsbGVlJ3MgbV9vc3JFbnRyeUNhbGxlZSwgdGhpcyBuZXcgT01H
IGZ1bmN0aW9uIGxpbmtpbmcgZG9lcyBub3QgaGFwcGVuIGZvciB0aGlzIE9NR0Zvck9TUkVudHJ5
IGNhbGxlZS4KLSAgICAgICAgLy8gV2UgcmUtbGluayB0aGlzIE9NR0Zvck9TUkVudHJ5IGNhbGxl
ZSBhZ2FpbiBub3QgdG8gbWlzcyB0aGF0IGNoYW5jZS4KLSAgICAgICAgZm9yIChhdXRvJiBjYWxs
IDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBp
ZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24o
KS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1f
Y29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2Vd
LmNvZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0g
bV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShj
YWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0
clRhZz4oKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChj
YWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRy
eXBvaW50KSk7Ci0gICAgICAgIH0KICAgICB9CiAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR0Zvck9T
UkVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HRm9yT1NSRW50cnkgIiwg
bV9mdW5jdGlvbkluZGV4LCAiIHdpdGggdGllciB1cCBjb3VudCBhdDogIiwgbV9jYWxsZWUtPnRp
ZXJVcENvdW50KCktPmNvdW50KCkpOwogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5
UGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxh
bi5oCmluZGV4IDAxNTFkYTY2NWE5NjgzMjhmOTUwMzhmNWI1MGMwODU3NjFmMDVkZTcuLmQ1NmVh
NDIxN2RkNzEwZDU3NTE2NDVhOWIzZWIwMThjNDM1MGQwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIGJvb2wgbXVsdGlUaHJlYWRlZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91bGQgbm90
IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSBy
ZWZlcmVuY2UgY3ljbGUuCi0gICAgT01HRm9yT1NSRW50cnlQbGFuKENvbnRleHQqLCBSZWY8TW9k
dWxlPiYmLCBSZWY8QkJRQ2FsbGVlPiYmLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJf
dCBsb29wSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworICAgIE9NR0Zvck9T
UkVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgUmVmPEJCUUNhbGxlZT4mJiwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBDb2RlQmxvY2smLCBDb21w
bGV0aW9uVGFzayYmKTsKIAogcHJpdmF0ZToKICAgICAvLyBGb3Igc29tZSByZWFzb24gZnJpZW5k
c2hpcCBkb2Vzbid0IGV4dGVuZCB0byBwYXJlbnQgY2xhc3Nlcy4uLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCmluZGV4IGE4MDVkMDE2ZmI5OTI4NjRjN2EwM2M4
MjY2Y2M1ZDRmYjk4NjVhNjkuLmUwYjEwMTAxNGNjM2ZiZTE0ZGIzYzcwYjJhMDVkY2RiYzU5MWYx
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKQEAgLTU0
LDEzICs1NCwxMyBAQCBuYW1lc3BhY2UgV2FzbU9NR1BsYW5JbnRlcm5hbCB7CiBzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLU9NR1BsYW46Ok9NR1BsYW4oQ29udGV4dCog
Y29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1l
bW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorT01HUGxhbjo6T01HUGxhbihD
b250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6
IEJhc2UoY29udGV4dCwgbWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9k
dWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSksIFdURk1vdmUodGFzaykpCiAgICAgLCBtX21vZHVs
ZShXVEZNb3ZlKG1vZHVsZSkpCi0gICAgLCBtX2NvZGVCbG9jaygqbV9tb2R1bGUtPmNvZGVCbG9j
a0Zvcihtb2RlKSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fZnVuY3Rp
b25JbmRleChmdW5jdGlvbkluZGV4KQogewotICAgIHNldE1vZGUobW9kZSk7CisgICAgc2V0TW9k
ZShjb2RlQmxvY2subW9kZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnJ1bm5hYmxlKCkp
OwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9y
KG1fbW9kZSkpOwogICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJTdGFydGluZyBPTUcgcGxhbiBmb3IgIiwgZnVuY3Rpb25JbmRleCwgIiBvZiBtb2R1bGU6ICIs
IFJhd1BvaW50ZXIoJm1fbW9kdWxlLmdldCgpKSk7CkBAIC03OSw1NyArNzksNDggQEAgdm9pZCBP
TUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAg
QVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSkpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVu
bGlua2VkQ2FsbHM7CiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAg
ICBDb21waWxhdGlvbkNvbnRleHQgY29udGV4dDsKLSAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCB1bmxp
bmtlZENhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlvbkluZGV4
LCBVSU5UMzJfTUFYKTsKKyAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5k
Q29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX2NvZGVCbG9jay0+bV93YXNt
VG9XYXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9y
bWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgbV9mdW5jdGlv
bkluZGV4LCBVSU5UMzJfTUFYKTsKIAogICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxl
UmVzdWx0KSkgewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFy
c2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0
cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEVudHJ5cG9pbnQgb21nRW50cnlwb2ludDsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7CiAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkp
IHsKICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKCJPdXQg
b2YgZXhlY3V0YWJsZSBtZW1vcnkgd2hpbGUgdGllcmluZyB1cCBmdW5jdGlvbiBhdCBpbmRleCAi
LCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29t
cGlsYXRpb24+KAorICAgIFJlZjxPTUdDYWxsZWU+IG9tZ0NhbGxlZSA9IE9NR0NhbGxlZTo6Y3Jl
YXRlKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24t
PmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKKyAgICBvbWdDYWxsZWUtPmVudHJ5cG9pbnQoKS5j
b21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01H
IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbklu
ZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25J
bmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndh
c21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCi0gICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZl
UmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlw
b2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBvbWdDYWxsZWUtPmVudHJ5cG9pbnQoKS5j
YWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShjb250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMp
OwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2lu
dDsKKyAgICBCQlFDYWxsZWUmIGJicUNhbGxlZSA9ICptX2NvZGVCbG9jay0+bV9jYWxsZWVzW21f
ZnVuY3Rpb25JbmRleF07CiAgICAgewogICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkg
PT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICAgICAgUmVmPE9NR0NhbGxl
ZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCkt
PmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsK
ICAgICAgICAgQVNTRVJUKCFtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0pOwotICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CiAK
ICAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBvdXIgY2FsbGVlIGF0
IHRoZSBzYW1lIHRpbWUgYXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlzIGVuYWJsZXMgdXMg
dG8gZW5zdXJlIHdlCiAgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0IGNvZGUuIEFu
eSBmdW5jdGlvbiBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2RlIGFuZCB0aGUg
bmV3IGNhbGxzaXRlcywgd2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBh
bHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5z
dHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQogICAgICAgICAvLyB0aGUg
bG9jayBvdXIgY29kZSBpcyByZWFkeSB0byBiZSBwdWJsaXNoZWQgdG9vLgogICAgICAgICBMb2Nr
SG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxvY2st
Pm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gY2FsbGVlLmNvcHlSZWYoKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhd
ID0gb21nQ2FsbGVlLmNvcHlSZWYoKTsKICAgICAgICAgewotICAgICAgICAgICAgQkJRQ2FsbGVl
JiBiYnFDYWxsZWUgPSAqc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4obV9jb2RlQmxvY2stPm1fY2Fs
bGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKTsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2soYmJxQ2FsbGVlLnRpZXJVcENvdW50KCktPmdldExvY2soKSk7Ci0gICAgICAgICAg
ICBiYnFDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7CisgICAgICAgICAg
ICBiYnFDYWxsZWUuc2V0UmVwbGFjZW1lbnQob21nQ2FsbGVlLmNvcHlSZWYoKSk7CiAgICAgICAg
ICAgICBiYnFDYWxsZWUudGllclVwQ291bnQoKS0+bV9jb21waWxhdGlvblN0YXR1c0Zvck9NRyA9
IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5
cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVs
ZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAg
ICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2Fs
bC5mdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgp
LnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8
V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CisKKyAgICAgICAgZm9yIChhdXRvJiBjYWxs
IDogY29udGV4dC5vdXRnb2luZ0NhbGxzKSB7CisgICAgICAgICAgICBCQlFDYWxsZWUmIHRhcmdl
dENhbGxlZSA9IG1fY29kZUJsb2NrLT53YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShjYWxsLnRhcmdldEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICB0YXJnZXRDYWxs
ZWUuYWRkQW5kTGlua0NhbGxlcihob2xkZXIsIGxpbmtCdWZmZXIsIGNhbGwudW5saW5rZWRNb3Zl
QW5kQ2FsbCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzOSwzMCArMTMwLDE0IEBAIHZvaWQg
T01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICByZXNldEluc3RydWN0aW9uQ2Fj
aGVPbkFsbFRocmVhZHMoKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIHBy
b2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgogCi0g
ICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25J
bmRleF0gPSBlbnRyeXBvaW50OworICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxF
bnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gb21nQ2FsbGVlLT5jb2RlKCk7CisgICAgbV9j
b2RlQmxvY2stPm1fYm94ZWRDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0gPSBDYWxsZWVCaXRzOjpi
b3hXYXNtKG9tZ0NhbGxlZS5wdHIoKSk7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGhvbGRl
cihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLQotICAgICAgICBhdXRvIHJlcGF0Y2hDYWxscyA9IFsm
XSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKLSAg
ICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgewotICAgICAgICAgICAgICAg
IGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJDb25zaWRlcmluZyBy
ZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxv
Y2F0aW9uKCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlID09IGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbklu
dGVybmFsOjp2ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwu
Y2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBSYXdQb2ludGVyKGVudHJ5cG9p
bnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIHJlcGF0Y2hDYWxscyhtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ld
KTsKLSAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gc3RhdGlj
X2Nhc3Q8QkJRQ2FsbGVlKj4obV9jb2RlQmxvY2stPm1fY2FsbGVlc1tpXS5nZXQoKSktPnJlcGxh
Y2VtZW50KCkpCi0gICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKHJlcGxhY2VtZW50Q2FsbGVl
LT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5
Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJs
b2NrLT5tX2NhbGxlZXNbaV0uZ2V0KCkpLT5vc3JFbnRyeUNhbGxlZSgpKQotICAgICAgICAgICAg
ICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsK
LSAgICAgICAgfQorICAgICAgICBiYnFDYWxsZWUucmVwYXRjaENhbGxlcnMoaG9sZGVyLCBvbWdD
YWxsZWUuZ2V0KCkpOwogICAgIH0KIAotICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJu
YWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUcgIiwgbV9mdW5jdGlvbkluZGV4LCAiIHdpdGggdGll
ciB1cCBjb3VudCBhdDogIiwgc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4obV9jb2RlQmxvY2stPm1f
Y2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKS0+dGllclVwQ291bnQoKS0+Y291bnQoKSk7
CisgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVk
IE9NRyAiLCBtX2Z1bmN0aW9uSW5kZXgsICIgd2l0aCB0aWVyIHVwIGNvdW50IGF0OiAiLCBtX2Nv
ZGVCbG9jay0+bV9jYWxsZWVzW21fZnVuY3Rpb25JbmRleF0uZ2V0KCktPnRpZXJVcENvdW50KCkt
PmNvdW50KCkpOwogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAppbmRleCBjYjc5YjQzOWQ0ZTk5NGQ4NzBl
OWRjOTA4OWM0M2E3ZjU4NjAyNTY2Li5lNjg5ZDU2NjU3YThkMWJiOWJkZTgyZWUwNTE1MzU0ODcw
YmU4MzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIGJvb2wgbXVsdGlUaHJlYWRlZCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBOb3RlOiBDb21wbGV0aW9uVGFzayBzaG91
bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRoZXJlIHdpbGwg
YmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4m
JiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7
CisgICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgQ29kZUJsb2NrJiwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8g
Rm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNz
ZXMuLi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApp
bmRleCAxYWRlOGE4ZTk0NDlkYThiM2YwNmNkM2Q2OTQyNTc5MmU2YzVkZjlhLi41YTI4MTgwZGM2
ZDFiNDYzOWE4ODk1ZDJkZWJjY2M3NzcwODk1YzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyB2b2lk
IHRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUoVGllclVwQ291bnQmIHRpZXJVcCwgT01HQ2Fs
bGVlKiByZXBsYWNlCiAgICAgaWYgKGNvbXBpbGUpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dmVyYm9zZU9TUigpLCAidHJpZ2dlck9NR1JlcGxhY2VtZW50IGZvciAiLCBmdW5jdGlv
bkluZGV4KTsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgotICAgICAg
ICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5jZS0+Y29udGV4
dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBmdW5jdGlvbkluZGV4
LCBjb2RlQmxvY2subW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkpOworICAgICAgICBSZWY8
UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBS
ZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBmdW5jdGlvbkluZGV4LCBjb2Rl
QmxvY2ssIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdvcmtsaXN0KCku
ZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6
dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9u
KCk7CkBAIC0xOTksNyArMTk5LDcgQEAgc3RhdGljIHZvaWQgZG9PU1JFbnRyeShJbnN0YW5jZSog
aW5zdGFuY2UsIFByb2JlOjpDb250ZXh0JiBjb250ZXh0LCBCQlFDYWxsZWUmIGMKICNlbmRpZgog
ICAgIC8vIDQuIENvbmZpZ3VyZSBhcmd1bWVudCByZWdpc3RlcnMgdG8ganVtcCB0byBPU1IgZW50
cnkgZnJvbSB0aGUgY2FsbGVyIG9mIHRoaXMgcnVudGltZSBmdW5jdGlvbi4KICAgICBjb250ZXh0
LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjApID0gYml0d2lzZV9jYXN0PFVDUFVSZWdpc3Rlcj4o
YnVmZmVyKTsKLSAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjEpID0gYml0d2lz
ZV9jYXN0PFVDUFVSZWdpc3Rlcj4ob3NyRW50cnlDYWxsZWUuZW50cnlwb2ludCgpLmV4ZWN1dGFi
bGVBZGRyZXNzPD4oKSk7CisgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSA9
IGJpdHdpc2VfY2FzdDxVQ1BVUmVnaXN0ZXI+KG9zckVudHJ5Q2FsbGVlLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzczw+KCkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5
Tm93KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KQpAQCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgSklU
X09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCiAK
ICAgICBpZiAoc3RhcnRPU1JFbnRyeUNvbXBpbGF0aW9uKSB7CiAgICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgInRyaWdnZXJPTUdPU1IgZm9yICIsIGZ1bmN0aW9uSW5k
ZXgpOwotICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50
cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5t
b2R1bGUoKSksIFJlZjxXYXNtOjpCQlFDYWxsZWU+KGNhbGxlZSksIGZ1bmN0aW9uSW5kZXgsIGxv
b3BJbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICAg
ICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5UGxhbihpbnN0
YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBS
ZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXgsIGNv
ZGVCbG9jaywgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAgZW5zdXJlV29ya2xpc3Qo
KS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25z
Ojp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRp
b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNt
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAppbmRleCA3
MzUyMjAyODkzN2M2ZGFjMWZjNDczYzdlNGNkYzY0OTU4Y2U4ZWE2Li5mMTNmNjQ1MDIwYjJmNzYw
YjI0ZWNjYmY3M2EwYzdiM2NkOWQ0ZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc20uY3BwCkBAIC00MiwyMSArNDIsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0
ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCit2b2lkIGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSogc2VsZiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSkKIHsKICAgICBD
Q2FsbEhlbHBlcnMmIGppdCA9ICpjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50
SklUOwogCi0gICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7
CiAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAKICAgICAvLyBGSVhNRSBTdG9wIHVz
aW5nIDAgYXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTMyMQogICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDAp
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbiA9
IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5zdG9yZVB0cihH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjxXYXNtRW50cnlQdHJUYWc+KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVl
TW92ZUxvY2F0aW9uOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8V2FzbUVudHJ5UHRyVGFnPihjYWxsZWVNb3ZlTG9jYXRpb24pOwotICAgIH0pOworICAgIGpp
dC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoQ2FsbGVlQml0czo6Ym94V2Fz
bShzZWxmKSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSkpOwogCiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRS
ZWdzLnRvU2F2ZShtb2RlKTsKQEAgLTY5LDcgKzYzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNv
bXAKICNlbmRpZgogCiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCh0
b1NhdmUsIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVy
QmFzZWQpOwotICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVn
aXN0ZXJzVG9TcGlsbDsKKyAgICBzZWxmLT5lbnRyeXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVy
cyA9IHJlZ2lzdGVyc1RvU3BpbGw7CiAKICAgICB1bnNpZ25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJl
Z2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsKICAgICB0b3RhbEZyYW1lU2l6
ZSArPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzKCk7CkBAIC0xMjUs
OSArMTE5LDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1Rv
V2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAgICAgICAgIH0KIAogICAgICAg
ICBlbWl0VGhyb3dXYXNtVG9KU0V4Y2VwdGlvbihqaXQsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwg
YXJndW1lbnRzSW5jbHVkZUk2NCA/IEV4Y2VwdGlvblR5cGU6Okk2NEFyZ3VtZW50VHlwZSA6IEV4
Y2VwdGlvblR5cGU6Okk2NFJldHVyblR5cGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyTW92
ZUFuZENhbGwgPSBVbmxpbmtlZE1vdmVBbmRDYWxsIHsgfTsKICAgICBHUFJSZWcgd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CiAK
ICAgICB7CkBAIC0xOTgsNiArMTkzLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAKICAg
ICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIH0K
KworICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCku
cHJvbG9ndWVTY3JhdGNoKDApOworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJN
b3ZlQW5kQ2FsbC0+bW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgIGppdC5zdG9y
ZVB0cihjYWxsZWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAogICAgIGlmICghIWluZm8ubWVtb3J5
KSB7CkBAIC0yMjEsMTIgKzIyMCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAgICAgICAg
IGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBz
Y3JhdGNoT3JTaXplLCBzY3JhdGNoT3JTaXplKTsKICAgICB9CiAKLSAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW5mby5pbXBvcnRGdW5j
dGlvbkNvdW50KCk7Ci0gICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGluZm8uZnVuY3Rp
b25JbmRleFNwYWNlU2l6ZSgpKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4U3BhY2VdIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbklu
ZGV4U3BhY2UgfSk7Ci0gICAgfSk7CisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyTW92
ZUFuZENhbGwtPmNhbGxMb2NhdGlvbiA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwo
KTsKIAogICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdp
c3RlcnNUb1NwaWxsKSB7CiAgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5n
cHIoKTsKQEAgLTI2Niw4ICsyNjAsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogCiAgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCmluZGV4IGI0Yjk4ZDE1OWIyODRiN2VjMzIzYWE1MDJj
MDNmOTIxYzEyYjAzYTkuLjkzYWEyNGQ5NjgwYWZmZmQzYjdhOTZkMTkxZmNmOGMzOTFkMDIzMWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApAQCAtNDEsNyArNDEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdhc20gewogCi1zdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29u
dGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPios
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCk7Cit2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCBTaWduYXR1cmUmLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uY3BwCmluZGV4IDA1N2FhNzAxOGI0NGE4ZmJiNGE4ZDQ3MTEzYmRiZWI4NzQ5ZGVjODcu
LmZkM2FlMTgyMDRmMzU3YmIzMTM1Y2UzNTVlOWU2Y2NkMjJhODM5ZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBA
IC00NjUsNiArNDY1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdl
YkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICAgICAgLy8gRklY
TUU6IEN1cnJlbnRseSB3ZSBqdXN0IGRvIGFuIGluZGlyZWN0IGp1bXAuIEJ1dCB3ZSBzaG91bGQg
dGVhY2ggdGhlIE1vZHVsZQogICAgICAgICAvLyBob3cgdG8gcmVwYXRjaCB1czoKICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU3MAorICAgICAg
ICBqaXQubG9hZFB0cihib3hlZENhbGxlZUxvYWRMb2NhdGlvbigpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
aXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgICAgIGpp
dC5sb2FkUHRyKGVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7CiAgICAgICAg
IGppdC5jYWxsKHNjcmF0Y2hHUFIsIFdhc21FbnRyeVB0clRhZyk7CiAgICAgfQpAQCAtNTM2LDEw
ICs1MzgsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICByZXR1cm4gbV9qc0NhbGxF
bnRyeXBvaW50LmNvZGUoKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlG
dW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2lu
dCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21U
b1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2lu
dExvYWRMb2NhdGlvbiwgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCBOb0lu
dHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwot
ICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24o
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRy
eXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgV2ViQXNzZW1ibHlGdW5j
dGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1
bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIGpzRW50cnlwb2ludCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24s
IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAgICAgZnVuY3Rpb24t
PmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUsIGluc3RhbmNlKTsK
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aXNMYXJnZUFsbG9jYXRpb24oKSwg
IldlYkFzc2VtYmx5RnVuY3Rpb24gc2hvdWxkIGJlIGFsbG9jYXRlZCBub3QgaW4gbGFyZ2UgYWxs
b2NhdGlvbiBzaW5jZSBpdCBpcyBKU0NhbGxlZS4iKTsKICAgICByZXR1cm4gZnVuY3Rpb247CkBA
IC01NTEsMTAgKzU1MywxMCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpT
RnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLVdlYkFzc2VtYmx5
RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9p
bnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNt
VG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdh
c206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHZvaWQq
KiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgpCiAgICAgOiBCYXNlIHsgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlIH0KLSAgICAs
IG1fanNFbnRyeXBvaW50IHsganNFbnRyeXBvaW50LmVudHJ5cG9pbnQoKSB9Ci0gICAgLCBtX2lt
cG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbiB9CisgICAgLCBtX2pzRW50cnlwb2ludCB7IGpzRW50cnlwb2ludC5jb2RlKCkg
fQorICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2Fz
bUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uIH0KIHsgfQog
CiB2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAppbmRleCA5OGMzNDY0Y2QwNzJkNjQ0NWU3N2RlNGY4
OGRlMGNjZTNiNDk1ZTM0Li43ZGRmMzlkMDA4ZjRiNjQyOWY5ZjdhMTMxZjdmOWQzOWE3MDFkMTYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5oCkBAIC02MiwxMSArNjIsMTIgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2lnbmVkLCBj
b25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50
cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uLCBXYXNt
OjpTaWduYXR1cmVJbmRleCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdW5z
aWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OkNhbGxl
ZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRp
b24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2Nh
dGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJs
ZUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4OyB9CiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2ltcG9ydGFibGVGdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0aW9uOyB9CisgICAgdm9p
ZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxl
RnVuY3Rpb24uYm94ZWRDYWxsZWVMb2FkTG9jYXRpb247IH0KICAgICBXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uIGltcG9ydGFibGVGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0
YWJsZUZ1bmN0aW9uOyB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPiBqc0VudHJ5cG9pbnQoQXJpdHlDaGVja01vZGUgYXJpdHkpCkBAIC03OCw2ICs3OSw3IEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2lu
dExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0
aW9uLCBtX2ltcG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
OjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2ltcG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCk7
IH0KIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRy
eXBvaW50KCkKICAgICB7CkBAIC05MSw3ICs5Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAg
V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2Fz
bTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Okxv
YWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7
CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwogICAgIHB0
cmRpZmZfdCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAK
aW5kZXggOTJkZGNmNzg2ZTgxMDA1YTIxZTFmOGIxZjUwYTlkMjA5ZjllNjkyOS4uN2FmMWEwNDUy
YWUwZGY3ZWJkYzNjMjRkMDlmZmZiZTA3YzEwZTBiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAt
MTkzLDYgKzE5Myw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqCiAKICAgICAgICAgICAgIFdh
c206Okluc3RhbmNlKiBjYWxsZWVJbnN0YW5jZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2Nh
dGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24gPSBudWxscHRyOwogICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpT
T2JqZWN0Kj4odmFsdWUpOwogCiAgICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBFeHBvcnRl
ZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0OgpAQCAtMjA1LDYgKzIwNiw3IEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVj
dCogaW1wb3J0T2JqCiAgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXgg
PSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIGNh
bGxlZUluc3RhbmNlID0gJndhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IHdhc21GdW5jdGlvbi0+
ZW50cnlwb2ludExvYWRMb2NhdGlvbigpOworICAgICAgICAgICAgICAgICAgICBib3hlZENhbGxl
ZUxvYWRMb2NhdGlvbiA9IHdhc21GdW5jdGlvbi0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNp
Z25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAg
ICAgICAgICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KQEAg
LTIyMyw2ICsyMjUsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAgICAgICAgYXV0
byogaW5mbyA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9y
dC5raW5kSW5kZXgpOwogICAgICAgICAgICAgaW5mby0+dGFyZ2V0SW5zdGFuY2UgPSBjYWxsZWVJ
bnN0YW5jZTsKICAgICAgICAgICAgIGluZm8tPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uID0g
ZW50cnlwb2ludExvYWRMb2NhdGlvbjsKKyAgICAgICAgICAgIGluZm8tPmJveGVkQ2FsbGVlTG9h
ZExvY2F0aW9uID0gYm94ZWRDYWxsZWVMb2FkTG9jYXRpb247CiAgICAgICAgICAgICBtX2luc3Rh
bmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uPFdyaXRlQmFycmllcjxKU09iamVjdD4+KGlt
cG9ydC5raW5kSW5kZXgpLT5zZXQodm0sIG1faW5zdGFuY2UuZ2V0KCksIGZ1bmN0aW9uKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNDcsOSArMzUwLDEwIEBAIHZvaWQgV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09i
amVjdCogaW1wb3J0T2JqCiAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCiAgICAg
ICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9j
ay0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7
CiAgICAgICAgICAgICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9j
YXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+ZW50cnlwb2ludExvYWRM
b2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOworICAgICAgICAgICAgdm9pZCoq
IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5ib3hlZENhbGxlZUxvYWRMb2Nh
dGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJl
SW5kZXgpOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53
ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCks
IGZpZWxkLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5
cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgp
LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBmaWVsZCwgbV9pbnN0YW5jZS5nZXQoKSwgZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxl
ZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgd3JhcHBlciA9IGZ1
bmN0aW9uOwogICAgICAgICB9CiAKQEAgLTQ2MCw3ICs0NjQsOCBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGlt
cG9ydE9iagogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAg
ICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25G
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAg
ICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlv
blN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBtX2luc3Rh
bmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRM
b2NhdGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25J
bmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgp
LCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBtX2luc3RhbmNlLmdldCgpLCBl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIGJveGVkQ2Fs
bGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVu
Y3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC01NzUs
MTMgKzU4MCwxNCBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShF
eGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6V2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExv
Y2F0aW9uID0gY29kZUJsb2NrLT5ib3hlZENhbGxlZUxvYWRMb2NhdGlvbkZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJl
SW5kZXgpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBleHBvcnQgbG9jYWwgZnVuY3Rp
b24gImZvbyIgYXQgZnVuY3Rpb24gaW5kZXggMC4KICAgICAgICAgICAgIC8vIFdoYXQgaWYgd2Ug
YWxzbyBzZXQgaXQgdG8gdGhlIHRhYmxlIGFuIEVsZW1lbnQgdy8gaW5kZXggMC4KICAgICAgICAg
ICAgIC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4pKS5leHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0
KDApPwogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTgyNQogICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4
KTsKKyAgICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFz
c2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgU3Ry
aW5nKCksIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlw
b2ludExvYWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4
KTsKIAogICAgICAgICAgICAgbV9pbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPnNldChlbGVt
ZW50SW5kZXgsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgICsrZWxlbWVudEluZGV4OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwCmluZGV4IGNkZTRmM2NmMjYwNGFkZDc2Y2MwNGZiMjI0ZjlhNTJiZDJk
YTAzNzYuLjYyODYyYjQxMTc4NDY0ZTYxM2UzZTc5MzA0MjY3MzMwNjUwZTgxMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAKQEAgLTYwLDcgKzYwLDkgQEAgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2Jh
bE8KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHM8V2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24+KHZtKSwgIldlIHNob3VsZCBuZXZlciBkb3VibGUgd3JhcCBhIHdy
YXBwZXIgZnVuY3Rpb24uIik7CiAgICAgU3RyaW5nIG5hbWUgPSAiIjsKICAgICBOYXRpdmVFeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9y
LCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+
KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJ
bmRleCwgJmluc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRJbmRl
eCktPndhc21Ub0VtYmVkZGVyU3R1YiB9ICk7CisgICAgYXV0byBpbXBvcnRGdW5jdGlvbkluZm8g
PSBpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgpOwor
ICAgIHN0YXRpYyB2b2lkKiBudWxsQm94ZWRDYWxsZWUgPSBudWxscHRyOworICAgIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCAmaW1wb3J0RnVuY3Rpb25JbmZvLT53YXNt
VG9FbWJlZGRlclN0dWIsICZudWxsQm94ZWRDYWxsZWUgfSk7CiAgICAgY29uc3QgV2FzbTo6U2ln
bmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFuY2UpOwogICAg
IHJldHVybiByZXN1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378844</attachid>
            <date>2019-09-15 22:40:52 -0700</date>
            <delta_ts>2019-09-16 07:31:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201799-20190915224050.patch</filename>
            <type>text/plain</type>
            <size>111331</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDRkYmQ0YWUxODlmMDYyMGQ2N2I3YzlkZmMyZTg4NDc5ZGExZTQ0Li4zNGU5ODlhMDE4YzU4YzE4
YmU0ZTU1ZDE1MTQ2YzE0MjYwOTM2YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NSBAQAorMjAxOS0wOS0xNSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBI
b3dldmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGlu
dGVycHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGlj
aCBmdW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMg
dGhlIGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRl
ciwgc28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdy
aXRpbmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0
aGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0
byB0aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBn
ZW5lcmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdl
IGtlZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAg
Y29kZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAg
LSBDYWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBj
YWxscywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBK
Uy10by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogd2Fz
bS10by13YXNtIHN0dWIsIEpTLXRvLXdhc20gc3R1YiAoY2FsbGVlIGZyYW1lKSwgd2FzbS10by1K
UyBzdHViLCBPTUcgb3NyIGVudHJ5CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhbHNvIGNoYW5n
ZSBpdCBzbyB0aGF0IHRoZSBjYWxsZWUga2VlcHMgdHJhY2sgb2YgaXRzIGNhbGxlcnMsIGluc3Rl
YWQgb2YgaGF2aW5nIGEgZ2xvYmFsIG1hcHBpbmcKKyAgICAgICAgb2YgY2FsbHMgaW4gdGhlIFdh
c206OkNvZGVCbG9jay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVwYXRjaCBhbGwgY2FsbGVy
cyBvZiBhIGdpdmVuIENhbGxlZSB3aGVuIGl0IHRpZXJzIHVwLgorCisgICAgICAgICogd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5k
aXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAg
ICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkJCUVBsYW46OkJCUVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFu
OjpwcmVwYXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9u
cyk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3
YXNtL1dhc21CQlFQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAg
ICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNt
KToKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpD
YWxsZWU6OkNhbGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OnJlcGF0Y2hNb3ZlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6cmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFDYWxs
ZWU6OmFkZENhbGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6YWRkQW5kTGlu
a0NhbGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6cmVwYXRjaENhbGxlcnMp
OgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxs
ZWU6OmVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmNvZGUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAg
ICAgICAqIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206
OkNhbGxpbmdDb252ZW50aW9uOjpzZXR1cEZyYW1lSW5Qcm9sb2d1ZSBjb25zdCk6CisgICAgICAg
ICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2Nr
OjpDb2RlQmxvY2spOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5oOgorICAgICAgICAo
SlNDOjpXYXNtOjpDb2RlQmxvY2s6OmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Ondhc21CQlFDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2Nr
Ojpib3hlZENhbGxlZUxvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAg
ICAqIHdhc20vV2FzbUVtYmVkZGVyLmg6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6Cisg
ICAgICAgIChKU0M6Oldhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9m
Qm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6
CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExv
Y2F0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46Ok9NR0Zvck9TUkVudHJ5UGxhbik6
CisgICAgICAgIChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAg
ICogd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtT01H
UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46Ok9NR1BsYW4pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFu
Lmg6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206OnRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpk
b09TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9TUkVudHJ5Tm93KToKKyAg
ICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRl
SlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmg6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3cpOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0
aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKwogMjAxOS0wOS0xNSAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIExlYWsgb2YgTlNNYXBUYWJsZSBp
biAtW0pTVmlydHVhbE1hY2hpbmUgYWRkTWFuYWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6XQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKaW5k
ZXggMzE5YWE1YmYwNzVjYmYwYWUwMTViMTIwNjljZDA0MTljOTg5YjEyZC4uYzY3MTU2MzI2NTY1
MGZmZGI4NGI4MWY1NDc5MTdiYWI3ZmVhY2M4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBc
CiAgICAgfSB3aGlsZSAoMCkKIAotICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBU
aWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CisgICAg
QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1
cmUmKTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50
cyhjb25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC02MzksNyArNjM5LDggQEAgcHJpdmF0ZToK
ICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBCYXNpY0Js
b2NrKiBtX3Jvb3RCbG9jayB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8VHlwZWRUbXA+IG1fbG9j
YWxzOwotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21U
b1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4
IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fb3V0Z29pbmdDYWxsczsKKyAgICBjb25zdCBWZWN0b3I8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiBtX3dhc21Ub1dhc21FeGl0
U3R1YnM7CiAgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAg
ICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBt
X3dhc21Db250ZXh0SW5zdGFuY2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CkBAIC03MDgsMTQgKzcw
OSwxNSBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShC
YXNpY0Jsb2NrKiBibG9jaywgVHlwZWRUbXAgaW5zdAogICAgIGVtaXRQYXRjaHBvaW50KGJsb2Nr
LCBwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOwogfQogCi1BaXJJUkdlbmVyYXRvcjo6QWly
SVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUm
IHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNt
RXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUp
CitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiBvdXRnb2luZ0NhbGxzLCBjb25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFdhc21FbnRyeVB0clRhZz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJzLCBNZW1vcnlNb2RlIG1vZGUs
IHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4
Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQog
ICAgIDogbV9pbmZvKGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fZnVuY3Rpb25J
bmRleChmdW5jdGlvbkluZGV4KQogICAgICwgbV90aWVyVXAodGllclVwKQogICAgICwgbV9wcm9j
KHByb2NlZHVyZSkKICAgICAsIG1fY29kZShtX3Byb2MuY29kZSgpKQotICAgICwgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKKyAgICAsIG1fb3V0Z29p
bmdDYWxscyhvdXRnb2luZ0NhbGxzKQorICAgICwgbV93YXNtVG9XYXNtRXhpdFN0dWJzKHdhc21U
b1dhc21FeGl0U3R1YnMpCiAgICAgLCBtX251bUltcG9ydEZ1bmN0aW9ucyhpbmZvLmltcG9ydEZ1
bmN0aW9uQ291bnQoKSkKIHsKICAgICBtX2N1cnJlbnRCbG9jayA9IG1fY29kZS5hZGRCbG9jaygp
OwpAQCAtNzYxLDE2ICs3NjMsNyBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHBybwogICAgIFJlZjxC
Mzo6QWlyOjpQcm9sb2d1ZUdlbmVyYXRvcj4gcHJvbG9ndWVHZW5lcmF0b3IgPSBjcmVhdGVTaGFy
ZWRUYXNrPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEIzOjpBaXI6OkNvZGUmIGNvZGUpIHsKICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICBjb2RlLmVtaXREZWZh
dWx0UHJvbG9ndWUoaml0KTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBHUFJSZWcgY2FsbGVl
R1BSID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOwotICAg
ICAgICAgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVlR1BSKTsKLSAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbY29tcGlsYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9u
KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihjYWxsZWVHUFIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgICAgICAgICBqaXQu
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayk7Ci0gICAgICAgIH0KKyAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihudWxs
cHRyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogCiAgICAgICAgIHsKICAgICAgICAgICAg
IGNvbnN0IENoZWNrZWQ8aW50MzJfdD4gd2FzbUZyYW1lU2l6ZSA9IG1fY29kZS5mcmFtZVNpemUo
KTsKQEAgLTE5MzYsOCArMTkyOSw2IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgaWYg
KHJldHVyblR5cGUgIT0gVHlwZTo6Vm9pZCkKICAgICAgICAgcmVzdWx0ID0gdG1wRm9yVHlwZShy
ZXR1cm5UeXBlKTsKIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsczsKLQogICAgIGlm
IChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlv
bkluZGV4KSkgewogICAgICAgICBtX21heE51bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1f
bWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkp
KTsKIApAQCAtMTk3MywxMSArMTk2NCwxMiBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxs
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAg
ICAgICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKICAgICAgICAgICAg
IH0pOwogCi0gICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiB3YXNtVG9XYXNtRXhpdFN0dWIgPSBtX3dhc21Ub1dh
c21FeGl0U3R1YnNbZnVuY3Rpb25JbmRleF07CisgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoW3dhc21Ub1dhc21FeGl0U3R1Yl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNh
bGwoKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rp
b25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
aml0LmNhbGwoV2FzbUVudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soW2NhbGwsIHdhc21Ub1dhc21FeGl0U3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxh
YmVsPFdhc21FbnRyeVB0clRhZz4od2FzbVRvV2FzbUV4aXRTdHViLmNvZGUoKSkpOwogICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKQEAgLTIwMjQsMTggKzIwMTYsMjAgQEAg
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBh
dGNocG9pbnQodG9CM1R5cGUocmV0dXJuVHlwZSkpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVh
ZHNQaW5uZWQgPSB0cnVlOworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3Rl
cnMrKzsKIAogICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJnczsKICAgICAg
ICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBDYWxsKG1fY29kZSwgcmV0dXJuVHlw
ZSwgcGF0Y2hwb2ludCwgdG9UbXBWZWN0b3IoYXJncyksIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVl
UmVwIHJlcCkgewogICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOwog
ICAgICAgICB9KTsKIAotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsK
LSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNh
bGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7Ci0g
ICAgICAgICAgICB9KTsKKyAgICAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiBv
dXRnb2luZ0NhbGxzID0gJm1fb3V0Z29pbmdDYWxsczsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFtvdXRnb2luZ0NhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CisgICAgICAgICAg
ICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKGNhbGxlZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0
ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgY2FsbExvY2F0aW9uID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgp
OworICAgICAgICAgICAgb3V0Z29pbmdDYWxscy0+YXBwZW5kKHsgZnVuY3Rpb25JbmRleCwgeyBt
b3ZlTG9jYXRpb24sIGNhbGxMb2NhdGlvbiB9fSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGVt
aXRQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCBwYXRjaHBvaW50LCByZXN1bHQsIFdURk1vdmUo
cGF0Y2hBcmdzKSk7CkBAIC0yMDg5LDYgKzIwODMsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YQogICAgIH0pOwogCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IGc2NCgpOworICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxlZSA9IGc2NCgpOwogICAgIHsKICAgICAgICAgRXhwcmVzc2lv
blR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBnNjQoKTsKICAgICAgICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCkBA
IC0yMDk3LDYgKzIwOTIsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qo
dW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYQogICAgICAgICBhcHBl
bmQoQWRkNjQsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIsIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsK
ICAgICAgICAgCiAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJl
SW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExv
YWRMb2NhdGlvbigpKSwgY2FsbGVlQ29kZSk7IC8vIFBvaW50ZXIgdG8gY2FsbGVlIGNvZGUuCisg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24o
KSksIGNhbGxlZSk7IC8vIFBvaW50ZXIgdG8gYm94ZWQgY2FsbGVlCiAKICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCB0aGUgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4g
V2UgdHJhcCBpZiBpdCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRl
cyBpdCdzIG5vdCBpbml0aWFsaXplZC4KICAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0
cmFwIGhhbmRsZXJzLCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25h
dHVyZTo6aW52YWxpZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzcyMTAKQEAgLTIxODksNiArMjE4NSwxMCBAQCBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYQogCiAgICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBlbWl0QXJnczsKICAgICBlbWl0QXJn
cy5hcHBlbmQoY2FsbGVlQ29kZSk7CisKKyAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxl
ZSksIGNhbGxlZSk7CisgICAgZW1pdEFyZ3MuYXBwZW5kKHsgY2FsbGVlLCBCMzo6VmFsdWVSZXA6
OnN0YWNrQXJndW1lbnQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkgfSk7CisKICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRp
b25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaCwgdG9UbXBWZWN0b3Io
YXJncyksIFsmXSAoVG1wIHRtcCwgQjM6OlZhbHVlUmVwIHJlcCkgewogICAgICAgICBlbWl0QXJn
cy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKICAgICB9KTsKQEAgLTIyMjksMTAgKzIyMjksOCBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBCMzo6T3JpZ2luCiAgICAgcmV0dXJuIEIz
OjpPcmlnaW4oKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBp
bGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2Rl
IG1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4
dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21U
b1dhc21FeGl0U3R1YnMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2Rl
IG1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgYXV0byByZXN1bHQgPSBt
YWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7Ci0KICAgICBjb21waWxhdGlvbkNvbnRleHQu
ZW1iZWRkZXJFbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAg
Y29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhl
bHBlcnM+KCk7CiAKQEAgLTIyNTIsNyArMjI1MCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRp
CiAgICAgCiAgICAgcHJvY2VkdXJlLnNldE9wdExldmVsKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJR
QWlyT3B0aW1pemF0aW9uTGV2ZWwoKSk7CiAKLSAgICBBaXJJUkdlbmVyYXRvciBpckdlbmVyYXRv
cihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IG1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uLCBzaWduYXR1
cmUpOworICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgY29t
cGlsYXRpb25Db250ZXh0Lm91dGdvaW5nQ2FsbHMsIHdhc21Ub1dhc21FeGl0U3R1YnMsIG1vZGUs
IGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uLCBzaWduYXR1cmUpOwog
ICAgIEZ1bmN0aW9uUGFyc2VyPEFpcklSR2VuZXJhdG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1
bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZv
KTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlci5wYXJzZSgpKTsKIApAQCAt
MjI3MiwxMCArMjI3MCwxMCBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aQogICAgICAgICBCMzo6
QWlyOjpwcmVwYXJlRm9yR2VuZXJhdGlvbihjb2RlKTsKICAgICAgICAgQjM6OkFpcjo6Z2VuZXJh
dGUoY29kZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCk7CiAgICAgICAg
IGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUu
cmVsZWFzZUJ5cHJvZHVjdHMoKTsKLSAgICAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNh
dmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAg
ICAgICBjb21waWxhdGlvbkNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4geyB9OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50VHlwZT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgKaW5kZXggMzMx
YjRiMGFkMzEzZTYyM2NhN2ZmNGJkOGRlOGExNTg2ZmM3ZDUwNS4uODI3MmNlMzU5NWZmMjhiM2Y5
Y2M4ODk2NWFkYjJhODRjOWU4NWE3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFs
RnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQm
LCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4
Y2VwdGlvbiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2ln
bmF0dXJlJiwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0
cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCAzZDhkZjhlNjg3MTAyMTMx
YjY0YzFhNmQ2NWU2ZmNjYzEwM2I1ZTc1Li5lMDAwM2VjYjcwZDZmMmFjZWNhZGRkM2Y0Mjg0NjRl
N2EwYjM4ZmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCkBAIC0xNzIsNyArMTcyLDYgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JUeXBlOwogICAgIHR5cGVkZWYgVW5leHBlY3RlZDxFcnJvclR5cGU+IFVuZXhw
ZWN0ZWRSZXN1bHQ7Ci0gICAgdHlwZWRlZiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIEVycm9yVHlwZT4gUmVzdWx0OwogICAgIHR5cGVkZWYgRXhwZWN0ZWQ8dm9p
ZCwgRXJyb3JUeXBlPiBQYXJ0aWFsUmVzdWx0OwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSAuLi5B
cmdzPgogICAgIE5FVkVSX0lOTElORSBVbmV4cGVjdGVkUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBmYWlsKEFyZ3MuLi4gYXJncykgY29uc3QKQEAgLTE4NSw3ICsxODQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9
IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwg
Q29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5k
ZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAgIEIz
SVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1l
bW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWdu
ZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9u
KTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhj
b25zdCBTaWduYXR1cmUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC0yODMsNiArMjgyLDcgQEAgcHJpdmF0ZToKIAog
ICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+KiBtX3BhcnNlciB7IG51bGxwdHIgfTsK
ICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOworICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgbV9vdXRnb2luZ0NhbGxzOwogICAgIGNvbnN0IE1lbW9yeU1vZGUg
bV9tb2RlIHsgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgfTsKICAgICBjb25zdCBDb21waWxh
dGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGUgeyBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUgfTsK
ICAgICBjb25zdCB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXggeyBVSU5UX01BWCB9OwpAQCAtMjk0
LDcgKzI5NCw3IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2sgeyBu
dWxscHRyIH07CiAgICAgVmVjdG9yPHVpbnQzMl90PiBtX291dGVyTG9vcHM7CiAgICAgVmVjdG9y
PFZhcmlhYmxlKj4gbV9sb2NhbHM7Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0
aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRo
LgorICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIG1f
d2FzbVRvV2FzbUV4aXRTdHViczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0
aW9uIGluZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KICAgICB1
bnNpZ25lZCYgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIEhhc2hNYXA8VmFsdWVL
ZXksIFZhbHVlKj4gbV9jb25zdGFudFBvb2w7CiAgICAgSW5zZXJ0aW9uU2V0IG1fY29uc3RhbnRJ
bnNlcnRpb25WYWx1ZXM7CkBAIC0zNTUsMTUgKzM1NSwxNiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6
OnJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayog
YmxvYwogICAgIH0pOwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5j
dGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3Vu
dCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgb3V0Z29p
bmdDYWxscywgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYg
d2FzbVRvV2FzbUV4aXRTdHVicywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENv
dW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAg
OiBtX2luZm8oaW5mbykKKyAgICAsIG1fb3V0Z29pbmdDYWxscyhvdXRnb2luZ0NhbGxzKQogICAg
ICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUp
CiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKICAgICAsIG1fbG9vcEluZGV4
Rm9yT1NSRW50cnkobG9vcEluZGV4Rm9yT1NSRW50cnkpCiAgICAgLCBtX3RpZXJVcCh0aWVyVXAp
CiAgICAgLCBtX3Byb2MocHJvY2VkdXJlKQotICAgICwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
cyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKKyAgICAsIG1fd2FzbVRvV2FzbUV4aXRTdHVicyh3
YXNtVG9XYXNtRXhpdFN0dWJzKQogICAgICwgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgLCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVz
KG1fcHJvYykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rpb25D
b3VudCgpKQpAQCAtNDE3LDcgKzQxOCw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Q
cm9sb2d1ZSgmY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4o
KSwgbV9jdXJyZW50QmxvY2spOworICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJh
bWVJblByb2xvZ3VlKG1fcHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJsb2NrKTsKIAogICAgIHsK
ICAgICAgICAgQjM6OlZhbHVlKiBmcmFtZVBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBPcmlnaW4oKSk7CkBAIC0x
NDAyLDggKzE0MDMsNiBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgbV9tYWtlc0NhbGxz
ID0gdHJ1ZTsKIAogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7
Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwotCiAgICAgaWYgKG1faW5mby5pc0lt
cG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CiAg
ICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxB
cmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCkBAIC0xNDE3
LDYgKzE0MTYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIEJhc2ljQmxvY2sq
IGNvbnRpbnVhdGlvbiA9IG1fcHJvYy5hZGRCbG9jaygpOwogICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCksIGlz
V2FzbUNhbGwsIEZyZXF1ZW50ZWRCbG9jayhpc1dhc21CbG9jayksIEZyZXF1ZW50ZWRCbG9jayhp
c0VtYmVkZGVyQmxvY2spKTsKIAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVu
dHJ5UHRyVGFnPiB3YXNtVG9XYXNtRXhpdFN0dWIgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnNbZnVu
Y3Rpb25JbmRleF07CiAgICAgICAgIFZhbHVlKiB3YXNtQ2FsbFJlc3VsdCA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIGlzV2FzbUJsb2NrLCBvcmlnaW4oKSwgYXJn
cywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3Jp
dGVzUGlubmVkID0gdHJ1ZTsKQEAgLTE0MjUsMTEgKzE0MjUsMTEgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLAogICAgICAgICAgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2Ug
Y291bGQgYmUgY2FsbGluZyB0byBzb21ldGhpbmcgdGhhdCBpcyBib3VuZHMgY2hlY2tpbmcuCiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAg
ICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRv
U2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwotICAgICAgICAgICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5k
ZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3dhc21Ub1dh
c21FeGl0U3R1Yl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgewogICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9u
SW5kZXggfSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwg
PSBqaXQuY2FsbChXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soW2NhbGwsIHdhc21Ub1dhc21FeGl0U3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2Rl
TG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KHdhc21Ub1dhc21FeGl0U3R1Yi5jb2RlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICB9KTsKQEAgLTE0NzMsMTcgKzE0NzMsMTggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAog
ICAgICAgICAvLyBUaGUgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdG8gYW5vdGhlciBXZWJBc3NlbWJs
eSBpbnN0YW5jZSwgYW5kIC8gb3IgY291bGQgaGF2ZSBtb2RpZmllZCBvdXIgTWVtb3J5LgogICAg
ICAgICByZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3JlQ2FjaGVkU3RhY2tMaW1p
dDo6WWVzLCBtX2luZm8ubWVtb3J5LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgY29udGludWF0
aW9uKTsKICAgICB9IGVsc2UgeworICAgICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4qIG91dGdvaW5nQ2FsbHMgPSAmbV9vdXRnb2luZ0NhbGxzOwogICAgICAgICByZXN1bHQgPSB3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1cnJlbnRCbG9jaywg
b3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAgICAgICAgWz1dIChQ
YXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50
LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1
bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsK
LSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+bnVt
R1BTY3JhdGNoUmVnaXN0ZXJzKys7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BS
ID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBtb3ZlTG9j
YXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKGNh
bGxlZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxs
KCk7CisgICAgICAgICAgICAgICAgICAgIG91dGdvaW5nQ2FsbHMtPmFwcGVuZCh7IGZ1bmN0aW9u
SW5kZXgsIHsgbW92ZUxvY2F0aW9uLCBjYWxsTG9jYXRpb24gfX0pOwogICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTYyNCw2ICsxNjI1LDEwIEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxl
RnVuY3Rpb24sCiAgICAgICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSkpKTsKIAorICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxlZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sCisgICAgICAgICAgICBzYWZlQ2Fz
dDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkJveGVkQ2Fs
bGVlTG9hZExvY2F0aW9uKCkpKSk7CisKICAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUu
cmV0dXJuVHlwZSgpOwogICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVw
Q2FsbChtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0
dXJuVHlwZSksCiAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CkBA
IC0xNjM1LDggKzE2NDAsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1
bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBub3QgaGF2ZSB0byBkbyB0aGlzLCBidXQgdGhlIHdhc20tPndh
c20gc3R1YiBhc3N1bWVzIGl0IGNhbgogICAgICAgICAgICAgLy8gdXNlIGFsbCB0aGUgcGlubmVk
IHJlZ2lzdGVycyBhcyBzY3JhdGNoOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShQaW5uZWRS
ZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwot
CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoY2FsbGVlQ29kZSwgVmFsdWVSZXA6OlNv
bWVSZWdpc3Rlcik7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoY2FsbGVlLCBCMzo6
VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJl
Z2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgICAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgICAg
ICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpLCBXYXNt
RW50cnlQdHJUYWcpOwpAQCAtMTY5NywxMCArMTcwMiw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
b3JpZ2luKCkgLT4gT3JpZ2luCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxPcmlnaW4+KG9yaWdp
bik7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3Ry
aW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRl
eHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0
aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NS
RW50cnksIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21F
eGNlcHRpb24pCitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxh
dGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5j
dGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMsIHVuc2lnbmVkJiBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
TWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKLQogICAgIGNv
bXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxs
SGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBt
YWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIApAQCAtMTcyMSw3ICsxNzI0LDcgQEAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZShDb21waWxhdGlvbkMKICAgICAgICAgPyBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUIzT3B0
aW1pemF0aW9uTGV2ZWwoKQogICAgICAgICA6IE9wdGlvbnM6OndlYkFzc2VtYmx5T01HT3B0aW1p
emF0aW9uTGV2ZWwoKSk7CiAKLSAgICBCM0lSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHBy
b2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCBs
b29wSW5kZXhGb3JPU1JFbnRyeSwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOworICAgIEIz
SVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCBjb21waWxhdGlvbkNvbnRl
eHQub3V0Z29pbmdDYWxscywgd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgbW9kZSwgY29tcGlsYXRpb25Nb2RlLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXhG
b3JPU1JFbnRyeSwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIEZ1bmN0aW9uUGFy
c2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRh
KCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCkBAIC0xNzM5LDEwICsxNzQyLDEw
IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25DCiAgICAgICAgIEIzOjpwcmVwYXJlRm9yR2VuZXJh
dGlvbihwcm9jZWR1cmUpOwogICAgICAgICBCMzo6Z2VuZXJhdGUocHJvY2VkdXJlLCAqY29tcGls
YXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKICAgICAgICAgY29tcGlsYXRpb25Db250
ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0
cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHBy
b2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICAgICAgY29tcGls
YXRpb25Db250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2ZVJl
Z2lzdGVyQXRPZmZzZXRMaXN0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiAvLyBDdXN0b20gd2FzbSBvcHMuIFRoZXNlIGFyZSB0aGUgb25lcyB0
b28gbWVzc3kgdG8gZG8gaW4gd2FzbS5qc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKaW5kZXggZWE1NTAyNDAxOGQzMGQzOGZmMWVhN2E3YWJm
MWMxNjViY2Y1NjdmOC4uMzQ4YjU0N2VlM2Q3ODdiNjEyYzNmZDM2MDQyZDc3ZGU4MjIwYTdkOSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCkBA
IC00OSw5ICs0OSwxMiBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IGVtYmVkZGVyRW50cnlwb2ludEJ5cHJvZHVj
dHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENDYWxsSGVscGVycz4gd2FzbUVudHJ5cG9pbnRKSVQ7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPiB3YXNtRW50cnlwb2lu
dEJ5cHJvZHVjdHM7CisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IG91dGdvaW5n
Q2FsbHM7CisgICAgT3B0aW9uYWw8VW5saW5rZWRNb3ZlQW5kQ2FsbD4gZW1iZWRkZXJNb3ZlQW5k
Q2FsbDsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBjYWxsZWVTYXZlUmVnaXN0ZXJzOwogfTsK
IAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25l
ZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBN
ZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQz
Ml90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dh
c21FeGNlcHRpb24gPSBudWxscHRyKTsKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4m
LCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRy
LCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBs
YW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4
IDBlODNkNTNmMzEyMzkzN2ZjOWNjMDNkM2U1ZWUxODRkNTE3MTNkNGYuLmI0ODU3Yzc2YTE4N2Jk
ZTUxZTI2NTBkN2FjNDJmYzI0N2I1ZTUwNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5jcHAKQEAgLTUyLDkgKzUyLDEwIEBAIG5hbWVzcGFjZSBXYXNtQkJRUGxh
bkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotQkJR
UGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGlu
Zm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKK0JCUVBsYW46OkJCUVBsYW4oQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxCQlFDYWxsZWU+PiYgY2FsbGVlcywgUmVmPE1vZHVsZUluZm9ybWF0aW9u
PiBpbmZvLCBBc3luY1dvcmsgd29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJl
ZGRlcldyYXBwZXImJiBjcmVhdGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0
aHJvd1dhc21FeGNlcHRpb24pCiAgICAgOiBCYXNlKGNvbnRleHQsIFdURk1vdmUoaW5mbyksIFdU
Rk1vdmUodGFzayksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVyKSwgdGhyb3dXYXNtRXhj
ZXB0aW9uKQogICAgICwgbV9zdHJlYW1pbmdQYXJzZXIobV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSwgKnRoaXMpCisgICAgLCBtX2NhbGxlZXMoJmNhbGxlZXMpCiAgICAgLCBtX3N0YXRlKFN0YXRl
OjpWYWxpZGF0ZWQpCiAgICAgLCBtX2FzeW5jV29yayh3b3JrKQogewpAQCAtMTU5LDE2ICsxNjAs
MTAgQEAgdm9pZCBCQlFQbGFuOjpwcmVwYXJlKCkKIAogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9u
cyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICBpZiAoIXRyeVJlc2VydmVD
YXBhY2l0eShtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9y
dEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCksICIgV2ViQXNzZW1ibHkgdG8gSmF2YVNj
cmlwdCBzdHVicyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgZnVuY3Rpb25zLnNpemUoKSwgIiB1bmxpbmtlZCBXZWJBc3NlbWJseSB0
byBXZWJBc3NlbWJseSBjYWxscyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV93
YXNtSW50ZXJuYWxGdW5jdGlvbnMsIGZ1bmN0aW9ucy5zaXplKCksICIgV2ViQXNzZW1ibHkgZnVu
Y3Rpb25zIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29u
dGV4dHMsIGZ1bmN0aW9ucy5zaXplKCksICIgY29tcGlsYXRpb24gY29udGV4dHMiKQotICAgICAg
ICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdGllclVwQ291bnRzLCBmdW5jdGlvbnMuc2l6ZSgp
LCAiIHRpZXItdXAgY291bnRzIikpCisgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9j
b21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRl
eHRzIikpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMu
cmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwotICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnJl
c2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsKICAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHMucmVzaXpl
KGZ1bmN0aW9ucy5zaXplKCkpOwotICAgIG1fdGllclVwQ291bnRzLnJlc2l6ZShmdW5jdGlvbnMu
c2l6ZSgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBpbXBvcnRJbmRl
eCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydHMuc2l6ZSgpOyArK2ltcG9ydEluZGV4KSB7
CiAgICAgICAgIEltcG9ydCogaW1wb3J0ID0gJm1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydHNb
aW1wb3J0SW5kZXhdOwpAQCAtMjMwLDYgKzIyNSw3IEBAIHB1YmxpYzoKIAogdm9pZCBCQlFQbGFu
Ojpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2NhbGxlZXMpOwogICAgIEFTU0VSVChtX3N0YXRlID49IFN0YXRlOjpQcmVw
YXJlZCk7CiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlN0
YXJ0aW5nIGNvbXBpbGF0aW9uIik7CiAKQEAgLTI2NiwxMyArMjYyLDcgQEAgdm9pZCBCQlFQbGFu
Ojpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNT
RVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNp
Z25hdHVyZUluZGV4KTsKICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24s
IHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCi0gICAgICAgIG1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4oKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygp
KQotICAgICAgICAgICAgbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gPSBtYWtlVW5pcXVl
PFRpZXJVcENvdW50PigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3RpZXJVcENvdW50
c1tmdW5jdGlvbkluZGV4XSA9IG51bGxwdHI7Ci0gICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAg
PSBtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XS5nZXQoKTsKLSAgICAgICAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZVJlc3VsdDsKKyAgICAgICAgRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVS
ZXN1bHQ7CiAgICAgICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwog
CiAgICAgICAgIC8vIEZJWE1FOiBTb21lIHdlYnBhZ2VzIHVzZSB2ZXJ5IGxhcmdlIFdhc20gbW9k
dWxlLCBhbmQgaXQgZXhoYXVzdHMgYWxsIGV4ZWN1dGFibGUgbWVtb3J5IGluIEFSTTY0IGRldmlj
ZXMgc2luY2UgdGhlIHNpemUgb2YgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9uIGlzIG9ubHkgbGlt
aXRlZCB0byAxMjhNQi4KQEAgLTI4MiwxMCArMjcyLDExIEBAIHZvaWQgQkJRUGxhbjo6Y29tcGls
ZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIGlmIChPcHRpb25z
Ojp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSAmJiBtX21vZHVsZUluZm9ybWF0aW9u
LT5jb2RlU2VjdGlvblNpemUgPj0gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJNb2RlVGhyZXNo
b2xkKCkpCiAgICAgICAgICAgICBmb3JjZVVzaW5nQjMgPSB0cnVlOwogCisgICAgICAgIFRpZXJV
cENvdW50KiB0aWVyVXAgPSBtX2NhbGxlZXMtPmF0KGZ1bmN0aW9uSW5kZXgpLT50aWVyVXBDb3Vu
dCgpOwogICAgICAgICBpZiAoIWZvcmNlVXNpbmdCMyAmJiBPcHRpb25zOjp3YXNtQkJRVXNlc0Fp
cigpKQotICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxl
QWlyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIHNpZ25h
dHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dX
YXNtRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZUFpcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0
aW9uLCBzaWduYXR1cmUsIG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlv
bi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0
aW9uKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0g
cGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVu
Y3Rpb24sIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4
XSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwg
bV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9N
QVgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICAgICAgcGFyc2VBbmRD
b21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XSwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV93YXNtVG9XYXNtRXhpdFN0dWJzLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCwg
dGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCFw
YXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CkBAIC0yOTQsMTEgKzI4NSwxMSBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVG
dW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRl
eF0gPSBXVEZNb3ZlKCpwYXJzZUFuZENvbXBpbGVSZXN1bHQpOwotCiAgICAgICAgIGlmIChtX2V4
cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpIHx8IG1fbW9kdWxl
SW5mb3JtYXRpb24tPnJlZmVyZW5jZWRGdW5jdGlvbnMoKS5jb250YWlucyhmdW5jdGlvbkluZGV4
KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuYWRk
KGZ1bmN0aW9uSW5kZXgsIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKG1fY29tcGlsYXRpb25Db250
ZXh0c1tmdW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
c1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5j
dGlvbkluZGV4KSk7CisgICAgICAgICAgICBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
PiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpFbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWU6OmNyZWF0ZSgpOworICAgICAgICAgICAgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9jb21w
aWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZS5nZXQoKSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlKTsKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25z
LmFkZChmdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSkpOwog
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAg
ICAgICAgfQogCkBAIC0zMTYsNyArMzA3LDkgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgQ29tcGlsYXRpb25Db250ZXh0
JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAg
ICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKICAgICAg
ICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0
RnVuY3Rpb25Db3VudCgpOworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgaW1wb3J0RnVuY3Rp
b25Db3VudCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAg
ICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5k
ZXggKyBpbXBvcnRGdW5jdGlvbkNvdW50OworICAgICAgICAgICAgQkJRQ2FsbGVlJiBjYWxsZWUg
PSAqbV9jYWxsZWVzLT5hdChmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIEFTU0VSVChmdW5j
dGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCkpOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKQEAgLTMyNSw5ICszMTgsMTcgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlv
bnNbZnVuY3Rpb25JbmRleF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIz
OjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShjb250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwor
ICAgICAgICAgICAgICAgIGNhbGxlZS5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5p
cXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUo
bGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBmdW5jdGlv
blslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2Up
KSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQu
d2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8m
IGNhbGwgOiBjb250ZXh0Lm91dGdvaW5nQ2FsbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGNhbGwudGFyZ2V0RnVuY3Rpb25JbmRleFNwYWNlID49IGltcG9ydEZ1bmN0aW9uQ291bnQp
OworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCB0YXJnZXRGdW5jdGlvbkluZGV4
ID0gY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5p
bXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGVlcy0+YXQo
dGFyZ2V0RnVuY3Rpb25JbmRleCktPmFkZENhbGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsIGNhbGwu
dW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9
IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoZnVuY3Rpb25JbmRleCkpIHsK
QEAgLTMzNywyMyArMzM4LDE4IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlv
bi0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigK
KyAgICAgICAgICAgICAgICBlbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9p
bnQoKS5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAg
ICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFn
LCAiRW1iZWRkZXItPldlYkFzc2VtYmx5IGVudHJ5cG9pbnRbJWldICVzIG5hbWUgJXMiLCBmdW5j
dGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmlu
ZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAg
ICAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEJ5cHJv
ZHVjdHMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIGZvciAoYXV0byYg
dW5saW5rZWQgOiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKSB7Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGNhbGwgOiB1bmxpbmtlZCkgewotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGV4ZWN1dGFibGVBZGRyZXNzOwotICAgICAgICAgICAg
ICAgIGlmIChtX21vZHVsZUluZm9ybWF0aW9uLT5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRSBpbXBvcnRzIGNvdWxkIGhhdmUgYmVlbiBsaW5rZWQgaW4gQjMsIGluc3Rl
YWQgb2YgZ2VuZXJhdGluZyBhIHBhdGNocG9pbnQuIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSBy
ZXBsYWNlZCBieSBhIFJFTEVBU0VfQVNTRVJULiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2NDYyCi0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVBZGRyZXNz
ID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5jb2Rl
KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFi
bGVBZGRyZXNzID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4
U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCkpLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxs
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZXhlY3V0YWJsZUFk
ZHJlc3MpKTsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxs
KQorICAgICAgICAgICAgICAgICAgICBjYWxsZWUuYWRkQ2FsbGVyKGxvY2tlciwgbGlua0J1ZmZl
ciwgKmNvbnRleHQuZW1iZWRkZXJNb3ZlQW5kQ2FsbCk7CiAgICAgICAgICAgICB9CisKICAgICAg
ICAgfQorCisgICAgICAgIGZvciAoYXV0byYgY2FsbGVlIDogKm1fY2FsbGVlcykKKyAgICAgICAg
ICAgIGNhbGxlZS0+cmVwYXRjaENhbGxlcnMobG9ja2VyLCAqY2FsbGVlKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKCFpc0NvbXBsZXRlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5oCmluZGV4IDg4MzYxN2ZjNjdmZmViODA1MTIwOGM3NDBlMmYxZjkxODhiNDEzMGQu
LmUzZTZlZTY2MGJiMTdmMzliYmRmYTRiNGEwYjg0ZjA1YzI1MmJiM2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAg
ICAgZW51bSBBc3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsK
IAogICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5j
ZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4K
LSAgICBCQlFQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmss
IENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNl
cHRpb24pOworICAgIEJCUVBsYW4oQ29udGV4dCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8QkJRQ2Fs
bGVlPj4mLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNr
JiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJCUVBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3lu
Y1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dh
c21FeGNlcHRpb24pOwogICAgIEJCUVBsYW4oQ29udGV4dCosIEFzeW5jV29yaywgQ29tcGxldGlv
blRhc2smJik7CiAKQEAgLTk4LDEyICs5OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUobV93YXNtVG9XYXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8VmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiB0YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpCi0gICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAg
ICAgIHJldHVybiBXVEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpOwotICAgIH0KLQog
ICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKICAgICAgICAgSW5pdGlhbCwKICAgICAg
ICAgVmFsaWRhdGVkLApAQCAtMTM5LDE0ICsxMzMsMTMgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
dWludDhfdD4gbV9zb3VyY2U7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9z
OwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93
YXNtVG9XYXNtRXhpdFN0dWJzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4+IG1fd2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3Qs
IHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0g
ICAgSGFzaE1hcDx1aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0
eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlv
bnM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uczsKICAgICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29u
dGV4dHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+IG1fdGllclVw
Q291bnRzOwogCi0gICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxsczsKICAgICBTdHJlYW1pbmdQYXJzZXIgbV9zdHJlYW1pbmdQ
YXJzZXI7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxCQlFDYWxsZWU+PiogbV9jYWxsZWVzIHsg
bnVsbHB0ciB9OwogICAgIFN0YXRlIG1fc3RhdGU7CiAKICAgICBjb25zdCBBc3luY1dvcmsgbV9h
c3luY1dvcms7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5s
aW5lcy5oCmluZGV4IDg2NjAxYWM5ZWYzZmIzODVlMDYwMjkwMWMxYTA0ZDUzMGM1NjNjYTguLjli
YmM2ZjM4OTc1MmQ3NzA2ZTRjOWZiMTVjODU5OWY1NGYyODJmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCkBAIC0zOCwyMSArMzgsOCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2Fs
bGVlcyhjb25zdCBGdW5jdG9yJiBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoIWZhaWxlZCgpKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVu
Y3Rpb25JbmRleCA8IG1fd2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1
bmN0aW9uSW5kZXgpIHsKLQotICAgICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWU7Ci0gICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24g
PSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25J
bmRleCkpIHsKLSAgICAgICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVt
YmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5j
dGlvbi0+ZW50cnlwb2ludCkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQ
b2ludGVyKGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVl
Qml0czo6Ym94V2FzbShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxG
dW5jdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLSAgICAgICAgc2l6ZV90IGZ1
bmN0aW9uSW5kZXhTcGFjZSA9IGludGVybmFsRnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICAgICAgUmVmPFdhc206OkNhbGxlZT4g
d2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBXYXNtOjpCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1
bmN0aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVy
VXBDb3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0
czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwotCi0gICAgICAgIGNhbGxi
YWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUpLCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7Ci0gICAgfQorICAgIGZvciAodW5z
aWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9u
SW5kZXgpCisgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgbV9lbWJlZGRl
clRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmNwcAppbmRleCBjZTYxMDc2ZDFhY2I3OWFlYTRjNWU4Yjc1MmIxNzk0ODVj
YWYwOGVlLi5mN2Q0N2JhOTAzODZhNzMxMTdkMTI2NGI3MDEyNDhlNTliY2NkNDY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC00Nyw2ICs0Nyw3IEBA
IEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5n
RmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpCiAgICAgSklUIGppdDsKIAogICAgIEdQUlJlZyBzY3Jh
dGNoID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAg
IEdQUlJlZyBjYWxsZWUgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0
Y2goMSk7CiAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2lu
dGVyOwogICAgIEFTU0VSVChiYXNlTWVtb3J5ICE9IHNjcmF0Y2gpOwogICAgIEFTU0VSVChwaW5u
ZWRSZWdzLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKQEAgLTU3LDEzICs1OCwyMCBAQCBF
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub1dhc20odW5zaQogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShz
aXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgogICAgIC8vIEdldCB0aGUgY2FsbGVl
J3MgV2FzbTo6SW5zdGFuY2UgYW5kIHNldCBpdCBhcyBXYXNtQ29udGV4dCdzIGluc3RhbmNlLiBU
aGUgY2FsbGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgog
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZUYXJnZXRJbnN0YW5jZShpbXBvcnRJbmRleCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5z
dGFuY2UqLgotICAgIC8vIFdoaWxlIHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxz
byBnZXQgdGhlIHdhc20gZW50cnlwb2ludCBzbyB3ZSBjYW4gdGFpbCBjYWxsIHRvIGl0IGJlbG93
LgorICAgIC8vIFdoaWxlIHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQg
dGhlIHdhc20gZW50cnlwb2ludCBhbmQgY2FsbGVlIHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQg
YmVsb3cuCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIElu
c3RhbmNlOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKGltcG9ydEluZGV4KSks
IHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNo
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbihpbXBvcnRJbmRleCkp
LCBjYWxsZWUpOwogICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7
CiAKICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRjaCk7CiAgICAg
aml0LnN0b3JlUHRyKHNpemVSZWdBc1NjcmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKIAorICAgIC8vIFNldCB0aGUg
Y2FsbGVlIHNsb3QgaW4gdGhlIGNhbGwgZnJhbWUKKyAgICBqaXQubG9hZFB0cihjYWxsZWUsIGNh
bGxlZSk7CisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBiZWVuIGNhbGxlZCwgc28gUmV0
dXJuUEMgaXMgb24gdGhlIHN0YWNrLCBidXQgaGF2ZSBub3QgeWV0IHB1c2hlZCB0aGUgYmFzZSBw
b2ludGVyLAorICAgIC8vIHNvIHdlIGhhdmUgdG8gc3VidHJhY3QgdGhlIHNwYWNlIGZvciBDYWxs
ZXJGcmFtZSBmcm9tIHRoZSBjYWxsZWUgc2xvdAorICAgIGppdC5zdG9yZVB0cihjYWxsZWUsIEpJ
VDo6QWRkcmVzcyhKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENQVVJlZ2lzdGVyKSkpOworCiAgICAgLy8g
RklYTUUgdGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwgV2FzbTo6SW5zdGFuY2Ug
aGF2ZSB0aGUgc2FtZSBwaW5uZWQgcmVnaXN0ZXJzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCiAgICAgLy8gU2V0IHVwIHRoZSBjYWxsZWUncyBiYXNlTWVt
b3J5IHJlZ2lzdGVyIGFzIHdlbGwgYXMgdGhlIG1lbW9yeSBzaXplIHJlZ2lzdGVycy4KICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwCmluZGV4IGU4ZGRmMTUz
ZGQ5ZDkwMjI5YzUxMjgxZWMyODEyZjdhNTkxMTQxZDYuLjkzMzE0YWI2Njc3ODdmNjkxOTliMWE0
MmMzZDI5ZDNmYzRiNmM4NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21DYWxsZWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWUuY3BwCkBAIC0zMiwxNiArMzIsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKIAotQ2FsbGVlOjpDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9u
TW9kZSwgRW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCitDYWxsZWU6OkNhbGxlZShXYXNtOjpDb21w
aWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKQogICAgIDogbV9jb21waWxhdGlvbk1vZGUoY29t
cGlsYXRpb25Nb2RlKQotICAgICwgbV9lbnRyeXBvaW50KFdURk1vdmUoZW50cnlwb2ludCkpCiB7
CiAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwog
fQogCi1DYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2Rl
LCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3Qg
TmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKK0NhbGxlZTo6Q2FsbGVlKFdhc206
OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHNpemVfdCBpbmRleCwgc3RkOjpwYWly
PGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCiAgICAgOiBtX2NvbXBp
bGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCi0gICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShl
bnRyeXBvaW50KSkKICAgICAsIG1faW5kZXhPck5hbWUoaW5kZXgsIFdURk1vdmUobmFtZSkpCiB7
CiAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwpA
QCAtNTIsNiArNTAsNDggQEAgQ2FsbGVlOjp+Q2FsbGVlKCkKICAgICBDYWxsZWVSZWdpc3RyeTo6
c2luZ2xldG9uKCkudW5yZWdpc3RlckNhbGxlZSh0aGlzKTsKIH0KIAorCitpbmxpbmUgdm9pZCBy
ZXBhdGNoTW92ZShjb25zdCBBYnN0cmFjdExvY2tlciYsIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0
cjxXYXNtRW50cnlQdHJUYWc+IG1vdmVMb2NhdGlvbiwgQ2FsbGVlJiB0YXJnZXRDYWxsZWUpCit7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKG1vdmVMb2NhdGlvbiwgQ2FsbGVl
Qml0czo6Ym94V2FzbSgmdGFyZ2V0Q2FsbGVlKSk7Cit9CisKK2lubGluZSB2b2lkIHJlcGF0Y2hD
YWxsKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQ29kZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5
UHRyVGFnPiBjYWxsTG9jYXRpb24sIENhbGxlZSYgdGFyZ2V0Q2FsbGVlKQoreworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bDxXYXNtRW50cnlQdHJUYWc+KHRhcmdldENhbGxlZS5jb2RlKCkpKTsKK30KKwordm9pZCBCQlFD
YWxsZWU6OmFkZENhbGxlcihjb25zdCBBYnN0cmFjdExvY2tlciYsIExpbmtCdWZmZXImIGxpbmtC
dWZmZXIsIFVubGlua2VkTW92ZUFuZENhbGwgY2FsbCkKK3sKKyAgICBhdXRvIG1vdmVMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGwubW92ZUxvY2F0
aW9uKTsKKyAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbC5jYWxsTG9jYXRpb24pOworICAgIG1fbW92ZUxvY2F0
aW9ucy5hcHBlbmQobW92ZUxvY2F0aW9uKTsKKyAgICBtX2NhbGxMb2NhdGlvbnMuYXBwZW5kKGNh
bGxMb2NhdGlvbik7Cit9CisKK3ZvaWQgQkJRQ2FsbGVlOjphZGRBbmRMaW5rQ2FsbGVyKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIFVubGlua2Vk
TW92ZUFuZENhbGwgY2FsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChlbnRyeXBvaW50KCkuY29t
cGlsYXRpb24pOworCisgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8V2FzbUVudHJ5UHRyVGFnPihjYWxsLm1vdmVMb2NhdGlvbik7CisgICAgYXV0byBjYWxsTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNh
bGwuY2FsbExvY2F0aW9uKTsKKyAgICBtX21vdmVMb2NhdGlvbnMuYXBwZW5kKG1vdmVMb2NhdGlv
bik7CisgICAgbV9jYWxsTG9jYXRpb25zLmFwcGVuZChjYWxsTG9jYXRpb24pOworCisgICAgQ2Fs
bGVlJiB0YXJnZXRDYWxsZWUgPSBtX3JlcGxhY2VtZW50ID8gc3RhdGljX2Nhc3Q8Q2FsbGVlJj4o
Km1fcmVwbGFjZW1lbnQpIDogKnRoaXM7CisgICAgcmVwYXRjaE1vdmUobG9ja2VyLCBtb3ZlTG9j
YXRpb24sIHRhcmdldENhbGxlZSk7CisgICAgcmVwYXRjaENhbGwobG9ja2VyLCBjYWxsTG9jYXRp
b24sIHRhcmdldENhbGxlZSk7Cit9CisKK3ZvaWQgQkJRQ2FsbGVlOjpyZXBhdGNoQ2FsbGVycyhj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBDYWxsZWUmIHRhcmdldENhbGxlZSkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVCh0YXJnZXRDYWxsZWUuZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uKTsK
KyAgICBmb3IgKGF1dG8gbW92ZUxvY2F0aW9uIDogbV9tb3ZlTG9jYXRpb25zKQorICAgICAgICBy
ZXBhdGNoTW92ZShsb2NrZXIsIG1vdmVMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKKyAgICBmb3Ig
KGF1dG8gY2FsbExvY2F0aW9uIDogbV9jYWxsTG9jYXRpb25zKQorICAgICAgICByZXBhdGNoQ2Fs
bChsb2NrZXIsIGNhbGxMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAppbmRleCBmN2VhNGQwNWI4ZDBhNzFjMWVlNjJh
NTZjNGQzOWRhNTQ5ZjA5YjdiLi45OTA5ZGM0MDk1OTkxOWE1YzY5YWZiZGYyNTI5NTgyOTNhMTFj
NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCkBAIC00MCwxMiAr
NDAsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIGNsYXNzIENhbGxlZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDYWxsZWU+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBlbnRyeXBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0
aW9uLT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9Ci0KLSAgICBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuICZtX2VudHJ5cG9p
bnQuY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQorICAgIEVudHJ5cG9pbnQmIGVudHJ5cG9pbnQoKSB7
IHJldHVybiBtX2VudHJ5cG9pbnQ7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9u
LT5jb2RlKCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOyB9CiAgICAgSW5kZXhPck5hbWUg
aW5kZXhPck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4T3JOYW1lOyB9CiAgICAgQ29tcGls
YXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsYXRpb25N
b2RlOyB9CiAKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygp
IHsgcmV0dXJuICZtX2VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQorCiAgICAgc3Rk
Ojp0dXBsZTx2b2lkKiwgdm9pZCo+IHJhbmdlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHZvaWQq
IHN0YXJ0ID0gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1l
bW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCk7CkBAIC01Niw3OCArNTcsNzAgQEAgcHVibGlj
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkNhbGxlZSgpOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSwgV2Fz
bTo6RW50cnlwb2ludCYmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29t
cGlsYXRpb25Nb2RlLCBXYXNtOjpFbnRyeXBvaW50JiYsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0
IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBD
YWxsZWUoQ29tcGlsYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoQ29t
cGlsYXRpb25Nb2RlLCBzaXplX3QsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVT
ZWN0aW9uPj4mJik7CiAKIHByaXZhdGU6CiAgICAgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGlsYXRp
b25Nb2RlOwotICAgIFdhc206OkVudHJ5cG9pbnQgbV9lbnRyeXBvaW50OworICAgIEVudHJ5cG9p
bnQgbV9lbnRyeXBvaW50OwogICAgIEluZGV4T3JOYW1lIG1faW5kZXhPck5hbWU7CiB9OwogCiBj
bGFzcyBPTUdDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE9NR0NhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQor
ICAgIHN0YXRpYyBSZWY8T01HQ2FsbGVlPiBjcmVhdGUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRl
eCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBPTUdDYWxsZWUoaW5kZXgsIFdURk1vdmUobmFtZSkpKTsKICAgICB9
CiAKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHdhc21Ub1dhc21DYWxsc2l0
ZXMoKSB7IHJldHVybiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7IH0KLQogcHJpdmF0ZToKLSAgICBP
TUdDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3Rk
OjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDogQ2FsbGVl
KFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5k
ZXgsIFdURk1vdmUobmFtZSkpCi0gICAgICAgICwgbV93YXNtVG9XYXNtQ2FsbHNpdGVzKFdURk1v
dmUodW5saW5rZWRDYWxscykpCisgICAgT01HQ2FsbGVlKHNpemVfdCBpbmRleCwgc3RkOjpwYWly
PGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCisgICAgICAgIDogQ2Fs
bGVlKENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCiAgICAg
ewogICAgIH0KLQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBtX3dhc21Ub1dh
c21DYWxsc2l0ZXM7CiB9OwogCiBjbGFzcyBPTUdGb3JPU1JFbnRyeUNhbGxlZSBmaW5hbCA6IHB1
YmxpYyBDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HRm9yT1NSRW50cnlDYWxs
ZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBz
dGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWdu
ZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3QgbG9vcEluZGV4LCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQorICAgIHN0YXRpYyBSZWY8
T01HRm9yT1NSRW50cnlDYWxsZWU+IGNyZWF0ZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQp
LCBpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbG9vcElu
ZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplOyB9CiAgICAgdWludDMyX3QgbG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9s
b29wSW5kZXg7IH0KLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHdhc21Ub1dh
c21DYWxsc2l0ZXMoKSB7IHJldHVybiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7IH0KIAogcHJpdmF0
ZToKLSAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgdWludDMyX3Qg
bG9vcEluZGV4LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxz
KQotICAgICAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5
TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCi0gICAgICAg
ICwgbV93YXNtVG9XYXNtQ2FsbHNpdGVzKFdURk1vdmUodW5saW5rZWRDYWxscykpCisgICAgT01H
Rm9yT1NSRW50cnlDYWxsZWUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgdWludDMyX3QgbG9vcEluZGV4KQorICAgICAgICA6IENhbGxlZShDb21waWxhdGlvbk1v
ZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwg
bV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAg
ICAgICAgICwgbV9sb29wSW5kZXgobG9vcEluZGV4KQogICAgIHsKICAgICB9CiAKLSAgICBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIHVu
c2lnbmVkIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICB1aW50MzJfdCBtX2xvb3BJ
bmRleDsKIH07CiAKIGNsYXNzIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSBmaW5hbCA6IHB1Ymxp
YyBDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQpCisgICAgc3RhdGljIFJl
ZjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV1RGTW92ZShlbnRyeXBv
aW50KSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWUoKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKLSAgICAgICAgOiBDYWxsZWUoV2FzbTo6
Q29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlLCBXVEZNb3ZlKGVudHJ5cG9p
bnQpKQorICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSgpCisgICAgICAgIDogQ2FsbGVlKENv
bXBpbGF0aW9uTW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSkKICAgICB7CiAgICAgfQogfTsK
IAogY2xhc3MgQkJRQ2FsbGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlv
bj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50KQor
ICAgIHN0YXRpYyBSZWY8QkJRQ2FsbGVlPiBjcmVhdGUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8
Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRy
PFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQkJRQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5h
bWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBCQlFDYWxsZWUoaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpKSk7
CiAgICAgfQogCiAgICAgT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlKCkgeyBy
ZXR1cm4gbV9vc3JFbnRyeUNhbGxlZS5nZXQoKTsgfQpAQCAtMTQ3LDEzICsxNDAsMjAgQEAgcHVi
bGljOgogCiAgICAgVGllclVwQ291bnQqIHRpZXJVcENvdW50KCkgeyByZXR1cm4gbV90aWVyVXBD
b3VudC5nZXQoKTsgfQogCisgICAgdm9pZCBhZGRDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCBMaW5rQnVmZmVyJiwgVW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisgICAgdm9pZCBhZGRBbmRMaW5r
Q2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZlciYsIFVubGlua2VkTW92ZUFu
ZENhbGwpOworCisgICAgdm9pZCByZXBhdGNoQ2FsbGVycyhjb25zdCBBYnN0cmFjdExvY2tlciYs
IENhbGxlZSYpOworCiBwcml2YXRlOgotICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYg
ZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxO
YW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJV
cENvdW50KQotICAgICAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUs
IFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQorICAgIEJCUUNhbGxl
ZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9u
Pj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCisg
ICAgICAgIDogQ2FsbGVlKENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgaW5kZXgsIFdURk1vdmUo
bmFtZSkpCiAgICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50KSkKICAg
ICB7CiAgICAgfQogCisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50
cnlQdHJUYWc+PiBtX21vdmVMb2NhdGlvbnM7CisgICAgVmVjdG9yPENvZGVMb2NhdGlvbk5lYXJD
YWxsPFdhc21FbnRyeVB0clRhZz4+IG1fY2FsbExvY2F0aW9uczsKICAgICBSZWZQdHI8T01HRm9y
T1NSRW50cnlDYWxsZWU+IG1fb3NyRW50cnlDYWxsZWU7CiAgICAgUmVmUHRyPE9NR0NhbGxlZT4g
bV9yZXBsYWNlbWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+IG1fdGllclVw
Q291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGlu
Z0NvbnZlbnRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29u
dmVudGlvbi5oCmluZGV4IGI0NDJiNjE2MWJmOTIzMzc1ODE5NzU4MTNmZjM4MDZhNzMxYTkyMjYu
LjZmYTQzNjljY2RjYTg4ZTRiNzBlZDY0NjliYjc2Mzk4MTRmOGU4NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCkBAIC04OCwz
NCArODgsMTYgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBoZWFk
ZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0KLSAgICB2b2lkIHNldHVwRnJh
bWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJUYWc+KiBj
YWxsZWVNb3ZlTG9jYXRpb24sIEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2lu
LCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgdm9pZCBzZXR1cEZyYW1lSW5Qcm9s
b2d1ZShCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6OkJhc2ljQmxv
Y2sqIGJsb2NrKSBjb25zdAogICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVT
bG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24g
dGhpcyBoZXJlIGZvciBub3cuIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSByZWx5IG9u
IHRoaXMgaGVyZSBmb3Igbm93LiIpOwogCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGdl
dENhbGxlZVBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+
KHByb2MsIEIzOjpJbnQ2NCwgb3JpZ2luKTsKLSAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludC0+
cmVzdWx0Q29uc3RyYWludHMgPSB7IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyIH07Ci0gICAg
ICAgIGdldENhbGxlZVBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9uZSgpOwot
ICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICBb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcGFyYW1zWzBdLmdw
cigpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbW92ZUxv
Y2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bnVsbHB0ciksIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxs
ZWVNb3ZlTG9jYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgKmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9
IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmln
aW4pOwotICAgICAgICBCMzo6VmFsdWUqIG9mZnNldE9mQ2FsbGVlID0gYmxvY2stPmFwcGVuZE5l
dzxCMzo6Q29uc3Q2NFZhbHVlPihwcm9jLCBvcmlnaW4sIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAq
IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlW
YWx1ZT4ocHJvYywgQjM6OlN0b3JlLCBvcmlnaW4sCi0gICAgICAgICAgICBnZXRDYWxsZWVQYXRj
aHBvaW50LAotICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIz
OjpBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNhbGxlZSkpOwotCiAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSB6ZXJvIGludG8gdGhlIENvZGVC
bG9jayogc3BvdCBpbiB0aGUgY2FsbCBmcmFtZSwKICAgICAgICAgLy8gYnV0IHRoZXJlIGFyZSBw
bGFjZXMgdGhhdCBpbnRlcnByZXQgbm9uLW51bGwgQ29kZUJsb2NrIHNsb3QgdG8gbWVhbiBhIHZh
bGlkIENvZGVCbG9jay4KICAgICAgICAgLy8gV2hlbiBkb2luZyB1bndpbmRpbmcsIHdlJ2xsIG5l
ZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGVudGlyZSBydW50aW1lIGlzIE9LIHdpdGggYSBub24tbnVs
bAogICAgICAgICAvLyBDb2RlQmxvY2sgbm90IGltcGx5aW5nIHRoYXQgdGhlIENvZGVCbG9jayBp
cyB2YWxpZC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTMyMQorICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwogICAgICAg
ICBCMzo6VmFsdWUqIG9mZnNldE9mQ29kZUJsb2NrID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29u
c3Q2NFZhbHVlPihwcm9jLCBvcmlnaW4sIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVv
ZihSZWdpc3RlcikpOwogICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4o
cHJvYywgQjM6OlN0b3JlLCBvcmlnaW4sCiAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIz
OjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgMCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCmluZGV4IGQ0YTljZDY3NzEwMmI1OGU0ZmM1OWUxYTIw
YWU1NmI4ZTIxYzc0MzAuLmNlMDAyNmIwMmRjNzEzOGZjMzY2MTQwZTA4ODkzODZlMTkwMjRiYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCkBAIC00
Nyw3ICs0NywxNSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1v
cnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bAogewogICAgIFJlZlB0cjxDb2Rl
QmxvY2s+IHByb3RlY3RlZFRoaXMgPSB0aGlzOwogCi0gICAgbV9wbGFuID0gYWRvcHRSZWYoKm5l
dyBCQlFQbGFuKGNvbnRleHQsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpG
dWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgbV9j
YWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICBtX2JveGVkQ2FsbGVlcy5yZXNpemUo
bV9jYWxsZWVDb3VudCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fY2FsbGVlQ291
bnQ7IGkrKykgeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtb2R1bGVJ
bmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkgKyBpOworICAgICAgICBtX2NhbGxlZXNb
aV0gPSBCQlFDYWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1vZHVsZUluZm9ybWF0
aW9uLm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgbWFrZVVuaXF1ZTxUaWVy
VXBDb3VudD4oKSk7CisgICAgICAgIG1fYm94ZWRDYWxsZWVzW2ldID0gQ2FsbGVlQml0czo6Ym94
V2FzbShtX2NhbGxlZXNbaV0uZ2V0KCkpOworICAgIH0KKworICAgIG1fcGxhbiA9IGFkb3B0UmVm
KCpuZXcgQkJRUGxhbihjb250ZXh0LCBtX2NhbGxlZXMsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRp
b24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFj
a1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBs
YW4mKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAg
aWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9w
bGFuLT5lcnJvck1lc3NhZ2UoKTsKQEAgLTU2LDIxICs2NCwxOCBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9u
JiBtb2R1bAogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBldmVudHVh
bGx5IGNvbGxlY3QgdGhlIEJCUSBjb2RlLgotICAgICAgICBtX2NhbGxlZXMucmVzaXplKG1fY2Fs
bGVlQ291bnQpOwogICAgICAgICBtX29wdGltaXplZENhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291
bnQpOwogICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50cy5yZXNpemUobV9jYWxs
ZWVDb3VudCk7CiAKLSAgICAgICAgbV9wbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2ln
bmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8V2FzbTo6Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZSwgUmVmPFdhc206OkNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAg
ICAgICBtX3BsYW4tPmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgs
IFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlKSB7CiAgICAgICAgICAgICBpZiAoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAg
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2FsbGVlSW5k
ZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0gPSBXVEZNb3ZlKHdhc21FbnRyeXBv
aW50Q2FsbGVlKTsKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2Nh
bGxlZUluZGV4XSA9IG1fY2FsbGVlc1tjYWxsZWVJbmRleF0tPmVudHJ5cG9pbnQoKTsKKyAgICAg
ICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1fY2Fs
bGVlc1tjYWxsZWVJbmRleF0tPmNvZGUoKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgbV93YXNt
VG9XYXNtRXhpdFN0dWJzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOwotICAg
ICAgICBtX3dhc21Ub1dhc21DYWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNp
dGVzKCk7CiAKICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIH0pLCBXVEZN
b3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IGRlYTJmZmEzMTgxMjAz
Zjc4YWFhNjFjNzBiZjI5NzFiYzAzMjc5ZWQuLjJjMmYxMDUyNDM0NGE5ODNhNWM0NzE4ZjIxYzU5
MTc2N2ViNzNmMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2Nr
LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5j
bHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5j
bHVkZSA8d3RmL0xvY2suaD4KQEAgLTQwLDcgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5h
bWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgQ2FsbGVlOwogc3RydWN0IENvbnRleHQ7CiBjbGFzcyBC
QlFQbGFuOwogY2xhc3MgT01HUGxhbjsKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogCiAgICAg
Ly8gVGhlc2UgdHdvIGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxl
ZXMgaGF2ZSBiZWVuIHBvcHVsYXRlZC4KIAotICAgIENhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2Up
CisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVu
Y3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CkBAIC04Niw2ICs4Niw3
IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlKTsKICAgICAgICAgcmV0
dXJuICpjYWxsZWU7CiAgICAgfQorCiAgICAgQ2FsbGVlJiB3YXNtRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwpAQCAtOTYsNyArOTcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiAqbV9jYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9CiAKLSAg
ICBDYWxsZWUmIHdhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBCQlFDYWxsZWUmIHdhc21CQlFDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRl
eFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CkBAIC0xMTEsNiArMTEyLDEzIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICZtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxs
ZWVJbmRleF07CiAgICAgfQogCisgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBv
cnRDb3VudCgpKTsKKyAgICAgICAgdW5zaWduZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4
U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7CisgICAgICAgIHJldHVybiAmbV9ib3hlZENh
bGxlZXNbY2FsbGVlSW5kZXhdOworICAgIH0KKwogICAgIGJvb2wgaXNTYWZlVG9SdW4oTWVtb3J5
TW9kZSk7CiAKICAgICBNZW1vcnlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0K
QEAgLTEyNCwxMSArMTMyLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDb21waWxhdGlvbkZp
bmlzaGVkKCk7CiAgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKICAgICBNZW1vcnlNb2RlIG1f
bW9kZTsKLSAgICBWZWN0b3I8UmVmUHRyPENhbGxlZT4+IG1fY2FsbGVlczsKKyAgICBWZWN0b3I8
UmVmUHRyPEJCUUNhbGxlZT4+IG1fY2FsbGVlczsKICAgICBWZWN0b3I8UmVmUHRyPENhbGxlZT4+
IG1fb3B0aW1pemVkQ2FsbGVlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8Q2FsbGVl
PiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlckNhbGxlZXM7CisgICAgVmVj
dG9yPHZvaWQqPiBtX2JveGVkQ2FsbGVlczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+
OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9l
bWJlZGRlckNhbGxlZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+PiBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50czsKLSAgICBWZWN0b3I8VmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAg
VmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dh
c21FeGl0U3R1YnM7CiAgICAgUmVmUHRyPEJCUVBsYW4+IG1fcGxhbjsKICAgICBzdGQ6OmF0b21p
Yzxib29sPiBtX2NvbXBpbGF0aW9uRmluaXNoZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAppbmRleCBhMjM3OWZkNTg5Yzg5ZGY2MzU3ZTZlNDQx
YmVkMmE1MTg3MzljYTNlLi5jNzhiNDQzYzU5MWU4NzAzNGI0MTk1ZWNhMDI3MjhkZWY4MGNjODkz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaApAQCAtNDEsNiAr
NDEsNyBAQCBjbGFzcyBFeGVjU3RhdGU7CiBuYW1lc3BhY2UgV2FzbSB7CiAKIHN0cnVjdCBDb21w
aWxhdGlvbkNvbnRleHQ7CitjbGFzcyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7CiBjbGFzcyBJ
bnN0YW5jZTsKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uOwogc3RydWN0IE1vZHVsZUluZm9ybWF0
aW9uOwpAQCAtNDgsNyArNDksNyBAQCBjbGFzcyBTaWduYXR1cmU7CiBzdHJ1Y3QgVW5saW5rZWRX
YXNtVG9XYXNtQ2FsbDsKIAogLy8gQ3JlYXRlIHdyYXBwZXIgY29kZSB0byBjYWxsIGZyb20gZW1i
ZWRkZXIgLT4gV2ViQXNzZW1ibHkuCi11c2luZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6
OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPihDb21waWxhdGlvbkNv
bnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4q
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90KT47Cit1c2lu
ZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoQ29tcGlsYXRpb25D
b250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKiwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlKT47CiAKIC8vIENhbGxlZCBhcyBzb29u
IGFzIGFuIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMg
dG8gY29udGludWUgYXQuCiB1c2luZyBUaHJvd1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoRXhl
Y1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSW5zdGFuY2UqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCAwNjY5YmI0MDdlMjk1OTM2MjJmY2NhOGU1MTkx
MTk1ZGQ5YjQ2ZjNiLi5lYTBlMGI2NThlOWU0NTVlOWIwMWNkYWUyYjQ3OTZiNjIyYjgwZTNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0yODcsMTAgKzI4Nywx
NSBAQCBpbmxpbmUgYm9vbCBpc1ZhbGlkTmFtZVR5cGUoSW50IHZhbCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZE1vdmVBbmRDYWxsIHsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6RGF0YUxhYmVsUHRyIG1vdmVMb2NhdGlvbjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsTG9jYXRpb247Cit9OworCiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbCB7CiAgICAg
V1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwotICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
PFdhc21FbnRyeVB0clRhZz4gY2FsbExvY2F0aW9uOwotICAgIHNpemVfdCBmdW5jdGlvbkluZGV4
U3BhY2U7CisgICAgc2l6ZV90IHRhcmdldEZ1bmN0aW9uSW5kZXhTcGFjZTsKKyAgICBVbmxpbmtl
ZE1vdmVBbmRDYWxsIHVubGlua2VkTW92ZUFuZENhbGw7CiB9OwogCiBzdHJ1Y3QgRW50cnlwb2lu
dCB7CkBAIC0zMTMsMTAgKzMxOCwxMiBAQCBzdHJ1Y3QgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbiB7CiAgICAgdXNpbmcgTG9hZExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4qOwogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaWduYXR1cmVJ
bmRleCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uLCBzaWduYXR1cmVJbmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50
cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uKTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBib3hlZENhbGxlZUxv
YWRMb2NhdGlvbik7IH0KIAogICAgIC8vIEZJWE1FOiBQYWNrIHNpZ25hdHVyZSBpbmRleCBhbmQg
Y29kZSBwb2ludGVyIGludG8gb25lIDY0LWJpdCB2YWx1ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTExPi4KICAgICBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCB7IFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IH07CiAgICAgTG9hZExvY2F0aW9u
IGVudHJ5cG9pbnRMb2FkTG9jYXRpb247CisgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0
aW9uOwogfTsKIHVzaW5nIEZ1bmN0aW9uSW5kZXhTcGFjZSA9IFZlY3RvcjxXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uPjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFu
Y2UuaAppbmRleCBmNGYzNTA4N2UyNTZkMDkyY2U3NGIyMWI4NDQwYTkzNzI1ZDE2Njg1Li43ZTIx
MjRmNzZjNjNiZjc1ZTJkYjEyMzQ5ZDk1MGIwZTkzNjg0MGNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAtMTMwLDYgKzEzMCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21FbnRy
eXBvaW50TG9hZExvY2F0aW9uIHsgbnVsbHB0ciB9OwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiB3YXNtVG9FbWJlZGRlclN0dWI7CiAgICAgICAgIHZvaWQq
IGltcG9ydEZ1bmN0aW9uIHsgbnVsbHB0ciB9OyAvLyBJbiBhIEpTIGVtYmVkZGluZywgdGhpcyBp
cyBhIFdyaXRlQmFycmllcjxKU09iamVjdD4uCisgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxv
YWRMb2NhdGlvbiB7IG51bGxwdHIgfTsKICAgICB9OwogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1
bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtSW1wb3J0RnVuY3Rpb25zOyB9CiAgICAgSW1w
b3J0RnVuY3Rpb25JbmZvKiBpbXBvcnRGdW5jdGlvbkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9u
TnVtKQpAQCAtMTQxLDYgKzE0Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7
IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9y
dEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbik7IH0KICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mV2Fz
bVRvRW1iZWRkZXJTdHViKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0
T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8p
ICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbVRvRW1iZWRkZXJTdHVi
KTsgfQogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1w
b3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25O
dW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRG
dW5jdGlvbkluZm8sIGltcG9ydEZ1bmN0aW9uKTsgfQorICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0
T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0
dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVu
Y3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIGJveGVkQ2Fs
bGVlTG9hZExvY2F0aW9uKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGltcG9ydEZ1
bmN0aW9uKHVuc2lnbmVkIGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PFQqPigmaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKS0+aW1wb3J0RnVu
Y3Rpb24pOyB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8p
ID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YodWludDY0X3QpPihzaXplb2YoSW1w
b3J0RnVuY3Rpb25JbmZvKSksICJXZSByZWx5IG9uIHRoaXMgZm9yIHRoZSBhbGlnbm1lbnQgdG8g
YmUgY29ycmVjdCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HRm9yT1NSRW50cnlQbGFuLmNwcAppbmRleCBhMGJiNmNmNmQ5MDMwNjc0NDM1NmQyODhlYWIw
YzJiNTI1MjA1NjJhLi5jZmFlYWYyZWJjMGIxNjQzY2UzZGE2YjE4ZjEwZTUwZTc3MGIwYTU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQ
bGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50
cnlQbGFuLmNwcApAQCAtNTQsMTUgKzU0LDE1IEBAIG5hbWVzcGFjZSBXYXNtT01HRm9yT1NSRW50
cnlQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQog
Ci1PTUdGb3JPU1JFbnRyeVBsYW46Ok9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0KiBjb250ZXh0
LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgUmVmPEJCUUNhbGxlZT4mJiBjYWxsZWUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgTWVtb3J5TW9kZSBtb2RlLCBDb21w
bGV0aW9uVGFzayYmIHRhc2spCitPTUdGb3JPU1JFbnRyeVBsYW46Ok9NR0Zvck9TUkVudHJ5UGxh
bihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgUmVmPEJCUUNhbGxlZT4m
JiBjYWxsZWUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgQ29k
ZUJsb2NrJiBjb2RlQmxvY2ssIENvbXBsZXRpb25UYXNrJiYgdGFzaykKICAgICA6IEJhc2UoY29u
dGV4dCwgbWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUluZm9ybWF0aW9uJj4obW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpKSksIFdURk1vdmUodGFzaykpCiAgICAgLCBtX21vZHVsZShXVEZNb3Zl
KG1vZHVsZSkpCi0gICAgLCBtX2NvZGVCbG9jaygqbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2Rl
KSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fY2FsbGVlKFdURk1vdmUo
Y2FsbGVlKSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogICAgICwgbV9s
b29wSW5kZXgobG9vcEluZGV4KQogewotICAgIHNldE1vZGUobW9kZSk7CisgICAgc2V0TW9kZShj
b2RlQmxvY2subW9kZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnJ1bm5hYmxlKCkpOwog
ICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1f
bW9kZSkpOwogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIlN0YXJ0aW5nIE9NR0Zvck9TUkVudHJ5IHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5k
ZXgsICIgb2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOwpAQCAtODEs
NDUgKzgxLDMzIEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZm
b3J0KQogICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVu
Y3Rpb24sIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCi0gICAgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7CiAgICAgQ29tcGlsYXRp
b25Db250ZXh0IGNvbnRleHQ7CiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSA9IDA7Ci0gICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUo
Y29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxh
dGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSwgbV9mdW5jdGlvbkluZGV4LCBtX2xvb3BJbmRl
eCk7CisgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29u
dGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRT
dHVicywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR0Zvck9TUkVudHJ5TW9kZSwgbV9mdW5jdGlv
bkluZGV4LCBtX2xvb3BJbmRleCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGls
ZVJlc3VsdCkpIHsKICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHBh
cnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBT
dHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBFbnRyeXBvaW50IG9tZ0VudHJ5cG9pbnQ7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
KSB7CiAgICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygiT3V0
IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxlIHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQgaW5kZXgg
IiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNv
bXBpbGF0aW9uPigKKyAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zv
ck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4KTsKKyAgICBjYWxsZWUtPmVudHJ5cG9pbnQoKS5j
YWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShjb250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMp
OworICAgIGNhbGxlZS0+ZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6
Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGls
YXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUdGb3JPU1JFbnRyeSBmdW5jdGlvblslaV0gJXMg
bmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5k
YXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2Np
aSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJv
ZHVjdHMpKTsKIAotICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1v
dmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBl
bnRyeXBvaW50OwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29k
ZUJsb2NrRm9yKG1vZGUoKSkpOwotICAgIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVl
ID0gT01HRm9yT1NSRW50cnlDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBm
dW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQo
ZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5k
ZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykpOwogICAgIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hQb2ludGVyKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVN
b3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7Ci0gICAgICAg
IGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5cG9pbnQoKTsKLQogICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBmb3IgKGF1dG8mIGNh
bGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgewotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKLSAgICAgICAgICAg
IGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlv
bigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0g
bV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFj
ZV0uY29kZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQg
PSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBvaW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5
UHRyVGFnPigpOwotCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxs
KGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVu
dHJ5cG9pbnQpKTsKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY29udGV4dC5vdXRnb2luZ0Nh
bGxzKSB7CisgICAgICAgICAgICBCQlFDYWxsZWUmIHRhcmdldENhbGxlZSA9IG1fY29kZUJsb2Nr
LT53YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLnRhcmdldEZ1bmN0aW9u
SW5kZXhTcGFjZSk7CisgICAgICAgICAgICB0YXJnZXRDYWxsZWUuYWRkQW5kTGlua0NhbGxlcihs
b2NrZXIsIGxpbmtCdWZmZXIsIGNhbGwudW5saW5rZWRNb3ZlQW5kQ2FsbCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CkBAIC0xMzIs
MTkgKzEyMCw2IEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZm
b3J0KQogICAgICAgICAgICAgbV9jYWxsZWUtPnRpZXJVcENvdW50KCktPm9zckVudHJ5VHJpZ2dl
cnMoKVttX2xvb3BJbmRleF0gPSBUaWVyVXBDb3VudDo6VHJpZ2dlclJlYXNvbjo6Q29tcGlsYXRp
b25Eb25lOwogICAgICAgICAgICAgbV9jYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRp
b25TdGF0dXNGb3JPTUdGb3JPU1JFbnRyeSA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ7CiAgICAgICAgIH0KLSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
LSAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCBhIG5ldyBPTUcgY2FsbGVlIGlzIGFkZGVk
IHdoaWxlIHdlIHJlbGVhc2UgbV9jb2RlQmxvY2stPmxvY2suCi0gICAgICAgIC8vIFVudGlsIHdl
IGFkZCBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgdG8gQkJRQ2FsbGVlJ3MgbV9vc3JFbnRyeUNhbGxl
ZSwgdGhpcyBuZXcgT01HIGZ1bmN0aW9uIGxpbmtpbmcgZG9lcyBub3QgaGFwcGVuIGZvciB0aGlz
IE9NR0Zvck9TUkVudHJ5IGNhbGxlZS4KLSAgICAgICAgLy8gV2UgcmUtbGluayB0aGlzIE9NR0Zv
ck9TUkVudHJ5IGNhbGxlZSBhZ2FpbiBub3QgdG8gbWlzcyB0aGF0IGNoYW5jZS4KLSAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7
Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9k
dWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAgICAgICAg
ZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5j
dGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFn
Z2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVu
dHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0gICAgICAgIH0KICAgICB9CiAgICAgZGF0YUxvZ0xu
SWYoV2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01H
Rm9yT1NSRW50cnkgIiwgbV9mdW5jdGlvbkluZGV4LCAiIHdpdGggdGllciB1cCBjb3VudCBhdDog
IiwgbV9jYWxsZWUtPnRpZXJVcENvdW50KCktPmNvdW50KCkpOwogICAgIGNvbXBsZXRlKGhvbGRM
b2NrKG1fbG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR0Zvck9TUkVudHJ5UGxhbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbi5oCmluZGV4IDAxNTFkYTY2NWE5NjgzMjhmOTUwMzhmNWI1MGMwODU3
NjFmMDVkZTcuLmQ1NmVhNDIxN2RkNzEwZDU3NTE2NDVhOWIzZWIwMThjNDM1MGQwZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFu
LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIGJvb2wgbXVsdGlUaHJlYWRlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBOb3RlOiBDb21wbGV0aW9u
VGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3aXNlIHRo
ZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgT01HRm9yT1NSRW50cnlQbGFuKENv
bnRleHQqLCBSZWY8TW9kdWxlPiYmLCBSZWY8QkJRQ2FsbGVlPiYmLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYp
OworICAgIE9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgUmVmPEJC
UUNhbGxlZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBD
b2RlQmxvY2smLCBDb21wbGV0aW9uVGFzayYmKTsKIAogcHJpdmF0ZToKICAgICAvLyBGb3Igc29t
ZSByZWFzb24gZnJpZW5kc2hpcCBkb2Vzbid0IGV4dGVuZCB0byBwYXJlbnQgY2xhc3Nlcy4uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCmluZGV4IGE4MDVkMDE2
ZmI5OTI4NjRjN2EwM2M4MjY2Y2M1ZDRmYjk4NjVhNjkuLmUwYjEwMTAxNGNjM2ZiZTE0ZGIzYzcw
YjJhMDVkY2RiYzU5MWYxMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01H
UGxhbi5jcHAKQEAgLTU0LDEzICs1NCwxMyBAQCBuYW1lc3BhY2UgV2FzbU9NR1BsYW5JbnRlcm5h
bCB7CiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLU9NR1BsYW46Ok9N
R1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorT01H
UGxhbjo6T01HUGxhbihDb250ZXh0KiBjb250ZXh0LCBSZWY8TW9kdWxlPiYmIG1vZHVsZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgQ29kZUJsb2NrJiBjb2RlQmxvY2ssIENvbXBsZXRpb25UYXNr
JiYgdGFzaykKICAgICA6IEJhc2UoY29udGV4dCwgbWFrZVJlZihjb25zdF9jYXN0PE1vZHVsZUlu
Zm9ybWF0aW9uJj4obW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpKSksIFdURk1vdmUodGFzaykp
CiAgICAgLCBtX21vZHVsZShXVEZNb3ZlKG1vZHVsZSkpCi0gICAgLCBtX2NvZGVCbG9jaygqbV9t
b2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
ICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogewotICAgIHNldE1vZGUobW9k
ZSk7CisgICAgc2V0TW9kZShjb2RlQmxvY2subW9kZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPnJ1bm5hYmxlKCkpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVs
ZS0+Y29kZUJsb2NrRm9yKG1fbW9kZSkpOwogICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50
ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUcgcGxhbiBmb3IgIiwgZnVuY3Rpb25JbmRleCwg
IiBvZiBtb2R1bGU6ICIsIFJhd1BvaW50ZXIoJm1fbW9kdWxlLmdldCgpKSk7CkBAIC03OSw1NyAr
NzksNDggQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7CiAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb24sIHNpZ25hdHVy
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+IHVubGlua2VkQ2FsbHM7CiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZTsKICAgICBDb21waWxhdGlvbkNvbnRleHQgY29udGV4dDsKLSAgICBhdXRvIHBh
cnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwg
c2lnbmF0dXJlLCB1bmxpbmtlZENhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21v
ZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSwg
bV9mdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYKTsKKyAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJl
c3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX2Nv
ZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01H
TW9kZSwgbV9mdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYKTsKIAogICAgIGlmIChVTkxJS0VMWSgh
cGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBmYWlsKGhvbGRMb2NrKG1fbG9jayks
IG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9yKCksICJ3aGVuIHRyeWluZyB0
byB0aWVyIHVwICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIEVudHJ5cG9pbnQgb21nRW50cnlwb2ludDsKICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQsIG51bGxwdHIsIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgQmFzZTo6ZmFpbChob2xkTG9jayhtX2xvY2spLCBt
YWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2hpbGUgdGllcmluZyB1cCBmdW5j
dGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFr
ZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgIFJlZjxPTUdDYWxsZWU+IG9tZ0NhbGxlZSA9
IE9NR0NhbGxlZTo6Y3JlYXRlKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKTsKKyAgICBvbWdDYWxsZWUt
PmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigK
ICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAi
V2ViQXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4
LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9y
TmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9u
LT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RG
TW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCi0gICAgb21nRW50cnlw
b2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQu
dmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBvbWdDYWxsZWUt
PmVudHJ5cG9pbnQoKS5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShjb250ZXh0LmNhbGxl
ZVNhdmVSZWdpc3RlcnMpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0
clRhZz4gZW50cnlwb2ludDsKKyAgICBCQlFDYWxsZWUmIGJicUNhbGxlZSA9ICptX2NvZGVCbG9j
ay0+bV9jYWxsZWVzW21fZnVuY3Rpb25JbmRleF07CiAgICAgewogICAgICAgICBBU1NFUlQobV9j
b2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICAg
ICAgUmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdF
bnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1l
U2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5rZWRDYWxscykp
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21waWxl
UmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShj
YWxsZWUucHRyKCkpKTsKICAgICAgICAgQVNTRVJUKCFtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRD
YWxsZWVzW21fZnVuY3Rpb25JbmRleF0pOwotICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5l
bnRyeXBvaW50KCk7CiAKICAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlz
aCBvdXIgY2FsbGVlIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBU
aGlzIGVuYWJsZXMgdXMgdG8gZW5zdXJlIHdlCiAgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBm
YXN0ZXN0IGNvZGUuIEFueSBmdW5jdGlvbiBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5l
dyBjb2RlIGFuZCB0aGUgbmV3IGNhbGxzaXRlcywgd2hpY2ggdGhleQogICAgICAgICAvLyB3aWxs
IHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3
ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQog
ICAgICAgICAvLyB0aGUgbG9jayBvdXIgY29kZSBpcyByZWFkeSB0byBiZSBwdWJsaXNoZWQgdG9v
LgogICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gY2Fs
bGVlLmNvcHlSZWYoKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1tt
X2Z1bmN0aW9uSW5kZXhdID0gb21nQ2FsbGVlLmNvcHlSZWYoKTsKICAgICAgICAgewotICAgICAg
ICAgICAgQkJRQ2FsbGVlJiBiYnFDYWxsZWUgPSAqc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4obV9j
b2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKTsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmJxQ2FsbGVlLnRpZXJVcENvdW50KCktPmdldExvY2so
KSk7Ci0gICAgICAgICAgICBiYnFDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYo
KSk7CisgICAgICAgICAgICBiYnFDYWxsZWUuc2V0UmVwbGFjZW1lbnQob21nQ2FsbGVlLmNvcHlS
ZWYoKSk7CiAgICAgICAgICAgICBiYnFDYWxsZWUudGllclVwQ291bnQoKS0+bV9jb21waWxhdGlv
blN0YXR1c0Zvck9NRyA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7
CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNt
Q2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4
U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50
KCkpCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dh
c21FeGl0U3R1YnNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFj
ZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLQotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CisKKyAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogY29udGV4dC5vdXRnb2luZ0NhbGxzKSB7CisgICAgICAgICAgICBC
QlFDYWxsZWUmIHRhcmdldENhbGxlZSA9IG1fY29kZUJsb2NrLT53YXNtQkJRQ2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShjYWxsLnRhcmdldEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAg
ICAgICB0YXJnZXRDYWxsZWUuYWRkQW5kTGlua0NhbGxlcihob2xkZXIsIGxpbmtCdWZmZXIsIGNh
bGwudW5saW5rZWRNb3ZlQW5kQ2FsbCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzOSwzMCAr
MTMwLDE0IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICByZXNl
dEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQgaXQncyBnb29kIHRvIGJl
IHBhcmFub2lkLgogCi0gICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OworICAgIG1fY29kZUJsb2NrLT5tX3dh
c21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gb21nQ2FsbGVlLT5j
b2RlKCk7CisgICAgbV9jb2RlQmxvY2stPm1fYm94ZWRDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0g
PSBDYWxsZWVCaXRzOjpib3hXYXNtKG9tZ0NhbGxlZS5wdHIoKSk7CiAgICAgewogICAgICAgICBM
b2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLQotICAgICAgICBhdXRvIHJl
cGF0Y2hDYWxscyA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBj
YWxsc2l0ZXMpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgewot
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJDb25zaWRlcmluZyByZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxs
TG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0aW9u
SW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNl
ID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5J
ZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAiLCBS
YXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBSYXdQ
b2ludGVyKGVudHJ5cG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhtX2NvZGVCbG9jay0+bV93YXNtVG9X
YXNtQ2FsbHNpdGVzW2ldKTsKLSAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50
Q2FsbGVlID0gc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4obV9jb2RlQmxvY2stPm1fY2FsbGVlc1tp
XS5nZXQoKSktPnJlcGxhY2VtZW50KCkpCi0gICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKHJl
cGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgaWYg
KE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IHN0YXRpY19jYXN0PEJCUUNh
bGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbaV0uZ2V0KCkpLT5vc3JFbnRyeUNhbGxlZSgp
KQotICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2Fz
bUNhbGxzaXRlcygpKTsKLSAgICAgICAgfQorICAgICAgICBiYnFDYWxsZWUucmVwYXRjaENhbGxl
cnMoaG9sZGVyLCBvbWdDYWxsZWUuZ2V0KCkpOwogICAgIH0KIAotICAgIGRhdGFMb2dMbklmKFdh
c21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUcgIiwgbV9mdW5jdGlvbklu
ZGV4LCAiIHdpdGggdGllciB1cCBjb3VudCBhdDogIiwgc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4o
bV9jb2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKS0+dGllclVwQ291
bnQoKS0+Y291bnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVy
Ym9zZSwgIkZpbmlzaGVkIE9NRyAiLCBtX2Z1bmN0aW9uSW5kZXgsICIgd2l0aCB0aWVyIHVwIGNv
dW50IGF0OiAiLCBtX2NvZGVCbG9jay0+bV9jYWxsZWVzW21fZnVuY3Rpb25JbmRleF0uZ2V0KCkt
PnRpZXJVcENvdW50KCktPmNvdW50KCkpOwogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAppbmRleCBjYjc5
YjQzOWQ0ZTk5NGQ4NzBlOWRjOTA4OWM0M2E3ZjU4NjAyNTY2Li5lNjg5ZDU2NjU3YThkMWJiOWJk
ZTgyZWUwNTE1MzU0ODcwYmU4MzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
TUdQbGFuLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIGJvb2wgbXVsdGlUaHJlYWRl
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBOb3RlOiBDb21w
bGV0aW9uVGFzayBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFBsYW4gb3RoZXJ3
aXNlIHRoZXJlIHdpbGwgYmUgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgT01HUGxhbihDb250ZXh0
KiwgUmVmPE1vZHVsZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSwgQ29t
cGxldGlvblRhc2smJik7CisgICAgT01HUGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgQ29kZUJsb2NrJiwgQ29tcGxldGlvblRhc2smJik7CiAKIHBy
aXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQg
dG8gcGFyZW50IGNsYXNzZXMuLi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
cGVyYXRpb25zLmNwcAppbmRleCAxYWRlOGE4ZTk0NDlkYThiM2YwNmNkM2Q2OTQyNTc5MmU2YzVk
ZjlhLi5hMWU1N2Q0MzMwMGRkMzhiZGMzZjE5YTFlZjUzOGE0NjBiMWE5ZDhkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCkBAIC04Miw3ICs4Miw3
IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUoVGllclVwQ291bnQm
IHRpZXJVcCwgT01HQ2FsbGVlKiByZXBsYWNlCiAgICAgaWYgKGNvbXBpbGUpIHsKICAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAidHJpZ2dlck9NR1JlcGxhY2VtZW50
IGZvciAiLCBmdW5jdGlvbkluZGV4KTsKICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIHRo
ZSBjb2RlLgotICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihp
bnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkp
LCBmdW5jdGlvbkluZGV4LCBjb2RlQmxvY2subW9kZSgpLCBQbGFuOjpkb250RmluYWxpemUoKSkp
OworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HUGxhbihpbnN0YW5j
ZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBmdW5j
dGlvbkluZGV4LCBjb2RlQmxvY2ssIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVu
c3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWSghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndh
aXRGb3JDb21wbGV0aW9uKCk7CkBAIC0xOTcsOSArMTk3LDE0IEBAIHN0YXRpYyB2b2lkIGRvT1NS
RW50cnkoSW5zdGFuY2UqIGluc3RhbmNlLCBQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJRQ2Fs
bGVlJiBjCiAjZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZS4KICNlbmRpZgot
ICAgIC8vIDQuIENvbmZpZ3VyZSBhcmd1bWVudCByZWdpc3RlcnMgdG8ganVtcCB0byBPU1IgZW50
cnkgZnJvbSB0aGUgY2FsbGVyIG9mIHRoaXMgcnVudGltZSBmdW5jdGlvbi4KKworICAgIC8vIDQu
IFVwZGF0ZSB0aGUgY2FsbGVlIHNsb3QgaW4gdGhlIGNhbGwgZnJhbWUgdG8gdGhlIE9TUiBlbnRy
eSBjYWxsZWUuCisgICAgdm9pZCoqIHN0YWNrUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx2b2lkKio+
KGNvbnRleHQuc3AoKSk7CisgICAgKihzdGFja1BvaW50ZXIgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgLSAxKSA9IENhbGxlZUJpdHM6OmJveFdhc20oJm9zckVudHJ5Q2FsbGVlKTsKKworICAgIC8v
IDUuIENvbmZpZ3VyZSBhcmd1bWVudCByZWdpc3RlcnMgdG8ganVtcCB0byBPU1IgZW50cnkgZnJv
bSB0aGUgY2FsbGVyIG9mIHRoaXMgcnVudGltZSBmdW5jdGlvbi4KICAgICBjb250ZXh0LmdwcihH
UFJJbmZvOjphcmd1bWVudEdQUjApID0gYml0d2lzZV9jYXN0PFVDUFVSZWdpc3Rlcj4oYnVmZmVy
KTsKLSAgICBjb250ZXh0LmdwcihHUFJJbmZvOjphcmd1bWVudEdQUjEpID0gYml0d2lzZV9jYXN0
PFVDUFVSZWdpc3Rlcj4ob3NyRW50cnlDYWxsZWUuZW50cnlwb2ludCgpLmV4ZWN1dGFibGVBZGRy
ZXNzPD4oKSk7CisgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSA9IGJpdHdp
c2VfY2FzdDxVQ1BVUmVnaXN0ZXI+KG9zckVudHJ5Q2FsbGVlLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzczw+KCkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KFBy
b2JlOjpDb250ZXh0JiBjb250ZXh0KQpAQCAtMzY1LDcgKzM3MCw3IEBAIHZvaWQgSklUX09QRVJB
VElPTiB0cmlnZ2VyT1NSRW50cnlOb3coUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCiAKICAgICBp
ZiAoc3RhcnRPU1JFbnRyeUNvbXBpbGF0aW9uKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgInRyaWdnZXJPTUdPU1IgZm9yICIsIGZ1bmN0aW9uSW5kZXgpOwot
ICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlQbGFu
KGluc3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUo
KSksIFJlZjxXYXNtOjpCQlFDYWxsZWU+KGNhbGxlZSksIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRl
eCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICAgICAgUmVm
PFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5UGxhbihpbnN0YW5jZS0+
Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2Fz
bTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXgsIGNvZGVCbG9j
aywgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAgZW5zdXJlV29ya2xpc3QoKS5lbnF1
ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFPcHRpb25zOjp1c2VD
b25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+d2FpdEZvckNvbXBsZXRpb24oKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAppbmRleCA3MzUyMjAy
ODkzN2M2ZGFjMWZjNDczYzdlNGNkYzY0OTU4Y2U4ZWE2Li5mMTNmNjQ1MDIwYjJmNzYwYjI0ZWNj
YmY3M2EwYzdiM2NkOWQ0ZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1RvV2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNU
b1dhc20uY3BwCkBAIC00MiwyMSArNDIsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9X
YXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1v
cnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCit2b2lkIGNyZWF0ZUpTVG9XYXNt
V3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSogc2VsZiwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSkKIHsKICAgICBDQ2FsbEhl
bHBlcnMmIGppdCA9ICpjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50SklUOwog
Ci0gICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAgICAg
aml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAKICAgICAvLyBGSVhNRSBTdG9wIHVzaW5nIDAg
YXMgY29kZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTMyMQogICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbiA9IGppdC5t
b3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwotICAgIGppdC5zdG9yZVB0cihHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxX
YXNtRW50cnlQdHJUYWc+KiBsaW5rZWRDYWxsZWVNb3ZlID0gJnJlc3VsdC0+Y2FsbGVlTW92ZUxv
Y2F0aW9uOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgKmxpbmtlZENhbGxlZU1vdmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2Fz
bUVudHJ5UHRyVGFnPihjYWxsZWVNb3ZlTG9jYXRpb24pOwotICAgIH0pOworICAgIGppdC5zdG9y
ZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoQ2FsbGVlQml0czo6Ym94V2FzbShzZWxm
KSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OwogCiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVn
aXN0ZXJJbmZvOjpnZXQoKTsKICAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRv
U2F2ZShtb2RlKTsKQEAgLTY5LDcgKzYzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAKICNl
bmRpZgogCiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCh0b1NhdmUs
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQp
OwotICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJz
VG9TcGlsbDsKKyAgICBzZWxmLT5lbnRyeXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJl
Z2lzdGVyc1RvU3BpbGw7CiAKICAgICB1bnNpZ25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVy
c1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsKICAgICB0b3RhbEZyYW1lU2l6ZSArPSBX
YXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzKCk7CkBAIC0xMjUsOSArMTE5
LDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdy
YXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0
VGhyb3dXYXNtVG9KU0V4Y2VwdGlvbihqaXQsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgYXJndW1l
bnRzSW5jbHVkZUk2NCA/IEV4Y2VwdGlvblR5cGU6Okk2NEFyZ3VtZW50VHlwZSA6IEV4Y2VwdGlv
blR5cGU6Okk2NFJldHVyblR5cGUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyTW92ZUFuZENh
bGwgPSBVbmxpbmtlZE1vdmVBbmRDYWxsIHsgfTsKICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0
YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CiAKICAgICB7
CkBAIC0xOTgsNiArMTkzLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBj
cmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAKICAgICAgICAg
ICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIH0KKworICAg
ICAgICBHUFJSZWcgY2FsbGVlR1BSID0gd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9n
dWVTY3JhdGNoKDApOworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQuZW1iZWRkZXJNb3ZlQW5k
Q2FsbC0+bW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgIGppdC5zdG9yZVB0cihj
YWxsZWVHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAogICAgIGlmICghIWluZm8ubWVtb3J5KSB7CkBA
IC0yMjEsMTIgKzIyMCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVh
dGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAgICAgICAgIGppdC5j
YWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBzY3JhdGNo
T3JTaXplLCBzY3JhdGNoT3JTaXplKTsKICAgICB9CiAKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
Y2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW5mby5pbXBvcnRGdW5jdGlvbkNv
dW50KCk7Ci0gICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IGluZm8uZnVuY3Rpb25JbmRl
eFNwYWNlU2l6ZSgpKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4U3BhY2VdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4U3Bh
Y2UgfSk7Ci0gICAgfSk7CisgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyTW92ZUFuZENh
bGwtPmNhbGxMb2NhdGlvbiA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKIAog
ICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNU
b1NwaWxsKSB7CiAgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsK
QEAgLTI2Niw4ICsyNjAsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3Jl
YXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogCiAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1RvV2FzbS5oCmluZGV4IGI0Yjk4ZDE1OWIyODRiN2VjMzIzYWE1MDJjMDNmOTIx
YzEyYjAzYTkuLjkzYWEyNGQ5NjgwYWZmZmQzYjdhOTZkMTkxZmNmOGMzOTFkMDIzMWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApAQCAtNDEsNyArNDEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdhc20gewogCi1zdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7
Cit2b2lkIGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBT
aWduYXR1cmUmLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIE1lbW9yeU1vZGUpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCmluZGV4IDA1N2FhNzAxOGI0NGE4ZmJiNGE4ZDQ3MTEzYmRiZWI4NzQ5ZGVjODcuLmZkM2Fl
MTgyMDRmMzU3YmIzMTM1Y2UzNTVlOWU2Y2NkMjJhODM5ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC00NjUs
NiArNDY1LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICAgICAgLy8gRklYTUU6IEN1
cnJlbnRseSB3ZSBqdXN0IGRvIGFuIGluZGlyZWN0IGp1bXAuIEJ1dCB3ZSBzaG91bGQgdGVhY2gg
dGhlIE1vZHVsZQogICAgICAgICAvLyBob3cgdG8gcmVwYXRjaCB1czoKICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU3MAorICAgICAgICBqaXQu
bG9hZFB0cihib3hlZENhbGxlZUxvYWRMb2NhdGlvbigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
aml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2Yo
UmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgICAgIGppdC5sb2Fk
UHRyKGVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5j
YWxsKHNjcmF0Y2hHUFIsIFdhc21FbnRyeVB0clRhZyk7CiAgICAgfQpAQCAtNTM2LDEwICs1Mzgs
MTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVu
Y3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICByZXR1cm4gbV9qc0NhbGxFbnRyeXBv
aW50LmNvZGUoKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlv
bjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2Fz
bTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCkKK1dlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiwgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCkKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCBOb0ludHJpbnNp
YywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiog
ZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9u
Pih2bS5oZWFwKSkgV2ViQXNzZW1ibHlGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIGpzRW50cnlwb2ludCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIGJveGVk
Q2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAgICAgZnVuY3Rpb24tPmZpbmlz
aENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUsIGluc3RhbmNlKTsKICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aXNMYXJnZUFsbG9jYXRpb24oKSwgIldlYkFz
c2VtYmx5RnVuY3Rpb24gc2hvdWxkIGJlIGFsbG9jYXRlZCBub3QgaW4gbGFyZ2UgYWxsb2NhdGlv
biBzaW5jZSBpdCBpcyBKU0NhbGxlZS4iKTsKICAgICByZXR1cm4gZnVuY3Rpb247CkBAIC01NTEs
MTAgKzU1MywxMCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rp
b25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rp
b246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdh
c206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNh
bGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpM
b2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHZvaWQqKiBib3hl
ZENhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgp
CiAgICAgOiBCYXNlIHsgdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlIH0KLSAgICAsIG1fanNF
bnRyeXBvaW50IHsganNFbnRyeXBvaW50LmVudHJ5cG9pbnQoKSB9Ci0gICAgLCBtX2ltcG9ydGFi
bGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2Nh
dGlvbiB9CisgICAgLCBtX2pzRW50cnlwb2ludCB7IGpzRW50cnlwb2ludC5jb2RlKCkgfQorICAg
ICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uIH0KIHsgfQogCiB2b2lk
IFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uaAppbmRleCA5OGMzNDY0Y2QwNzJkNjQ0NWU3N2RlNGY4OGRlMGNj
ZTNiNDk1ZTM0Li43ZGRmMzlkMDA4ZjRiNjQyOWY5ZjdhMTMxZjdmOWQzOWE3MDFkMTYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCkBAIC02MiwxMSArNjIsMTIgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBj
cmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2lnbmVkLCBjb25zdCBT
dHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2lu
dCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uLCBXYXNtOjpTaWdu
YXR1cmVJbmRleCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdW5zaWduZWQs
IGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OkNhbGxlZSYganNF
bnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2Fz
bUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwg
V2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0
aW9uLnNpZ25hdHVyZUluZGV4OyB9CiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lt
cG9ydGFibGVGdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0aW9uOyB9CisgICAgdm9pZCoqIGJv
eGVkQ2FsbGVlTG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rp
b24uYm94ZWRDYWxsZWVMb2FkTG9jYXRpb247IH0KICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uIGltcG9ydGFibGVGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1
bmN0aW9uOyB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBq
c0VudHJ5cG9pbnQoQXJpdHlDaGVja01vZGUgYXJpdHkpCkBAIC03OCw2ICs3OSw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRM
b2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBt
X2ltcG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZz
ZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihX
ZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2ltcG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCk7IH0KIAog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50
KCkKICAgICB7CkBAIC05MSw3ICs5Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2Fs
bGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2Nh
dGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CisgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2Fz
bTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Okxv
YWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVMb2Fk
TG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwogICAgIHB0cmRpZmZf
dCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXgg
OTJkZGNmNzg2ZTgxMDA1YTIxZTFmOGIxZjUwYTlkMjA5ZjllNjkyOS4uN2FmMWEwNDUyYWUwZGY3
ZWJkYzNjMjRkMDlmZmZiZTA3YzEwZTBiNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtMTkzLDYg
KzE5Myw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqCiAKICAgICAgICAgICAgIFdhc206Oklu
c3RhbmNlKiBjYWxsZWVJbnN0YW5jZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9
IG51bGxwdHI7CisgICAgICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSBu
dWxscHRyOwogICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uID0ganNDYXN0PEpTT2JqZWN0
Kj4odmFsdWUpOwogCiAgICAgICAgICAgICAvLyBpaS4gSWYgdiBpcyBhbiBFeHBvcnRlZCBGdW5j
dGlvbiBFeG90aWMgT2JqZWN0OgpAQCAtMjA1LDYgKzIwNiw3IEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1w
b3J0T2JqCiAgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNt
RnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxlZUlu
c3RhbmNlID0gJndhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKTsKICAgICAgICAg
ICAgICAgICAgICAgZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IHdhc21GdW5jdGlvbi0+ZW50cnlw
b2ludExvYWRMb2NhdGlvbigpOworICAgICAgICAgICAgICAgICAgICBib3hlZENhbGxlZUxvYWRM
b2NhdGlvbiA9IHdhc21GdW5jdGlvbi0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVy
ZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKICAgICAgICAg
ICAgICAgICAgICAgLy8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KQEAgLTIyMyw2
ICsyMjUsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAgICAgICAgYXV0byogaW5m
byA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydC5raW5k
SW5kZXgpOwogICAgICAgICAgICAgaW5mby0+dGFyZ2V0SW5zdGFuY2UgPSBjYWxsZWVJbnN0YW5j
ZTsKICAgICAgICAgICAgIGluZm8tPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uID0gZW50cnlw
b2ludExvYWRMb2NhdGlvbjsKKyAgICAgICAgICAgIGluZm8tPmJveGVkQ2FsbGVlTG9hZExvY2F0
aW9uID0gYm94ZWRDYWxsZWVMb2FkTG9jYXRpb247CiAgICAgICAgICAgICBtX2luc3RhbmNlLT5p
bnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uPFdyaXRlQmFycmllcjxKU09iamVjdD4+KGltcG9ydC5r
aW5kSW5kZXgpLT5zZXQodm0sIG1faW5zdGFuY2UuZ2V0KCksIGZ1bmN0aW9uKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNDcsOSArMzUwLDEwIEBAIHZvaWQgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCog
aW1wb3J0T2JqCiAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCiAgICAgICAgICAg
ICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+ZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CiAgICAg
ICAgICAgICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24g
ZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+ZW50cnlwb2ludExvYWRMb2NhdGlv
bkZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOworICAgICAgICAgICAgdm9pZCoqIGJveGVk
Q2FsbGVlTG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5ib3hlZENhbGxlZUxvYWRMb2NhdGlvbkZy
b21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShpbmRleCk7CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIGZpZWxk
LCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRM
b2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpLCBmaWVsZCwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRM
b2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgd3JhcHBlciA9IGZ1bmN0aW9u
OwogICAgICAgICB9CiAKQEAgLTQ2MCw3ICs0NjQsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9i
agogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAg
V2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9p
bnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVj
dHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBtX2luc3RhbmNlLmdl
dCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNp
Z25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlv
biA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpLCAic3RhcnQiLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9h
ZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVuY3Rpb24u
c2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC01NzUsMTMgKzU4
MCwxNCBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCiAKICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBj
b2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9u
ID0gY29kZUJsb2NrLT5ib3hlZENhbGxlZUxvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwogICAgICAgICAgICAgLy8gRklYTUU6IFNheSB3ZSBleHBvcnQgbG9jYWwgZnVuY3Rpb24gImZv
byIgYXQgZnVuY3Rpb24gaW5kZXggMC4KICAgICAgICAgICAgIC8vIFdoYXQgaWYgd2UgYWxzbyBz
ZXQgaXQgdG8gdGhlIHRhYmxlIGFuIEVsZW1lbnQgdy8gaW5kZXggMC4KICAgICAgICAgICAgIC8v
IERvZXMgKG5ldyBJbnN0YW5jZSguLi4pKS5leHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0KDApPwog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTgyNQogICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5
RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgU3RyaW5nKCks
IG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExv
YWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKIAog
ICAgICAgICAgICAgbV9pbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPnNldChlbGVtZW50SW5k
ZXgsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgICsrZWxlbWVudEluZGV4OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwCmluZGV4IGNkZTRmM2NmMjYwNGFkZDc2Y2MwNGZiMjI0ZjlhNTJiZDJkYTAzNzYu
LjYyODYyYjQxMTc4NDY0ZTYxM2UzZTc5MzA0MjY3MzMwNjUwZTgxMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHAKQEAgLTYwLDcgKzYwLDkgQEAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE8KICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJpdHM8V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24+KHZtKSwgIldlIHNob3VsZCBuZXZlciBkb3VibGUgd3JhcCBhIHdyYXBwZXIg
ZnVuY3Rpb24uIik7CiAgICAgU3RyaW5nIG5hbWUgPSAiIjsKICAgICBOYXRpdmVFeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxs
cHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhl
YXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwg
Jmluc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRJbmRleCktPndh
c21Ub0VtYmVkZGVyU3R1YiB9ICk7CisgICAgYXV0byBpbXBvcnRGdW5jdGlvbkluZm8gPSBpbnN0
YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgpOworICAgIHN0
YXRpYyB2b2lkKiBudWxsQm94ZWRDYWxsZWUgPSBudWxscHRyOworICAgIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCAmaW1wb3J0RnVuY3Rpb25JbmZvLT53YXNtVG9FbWJl
ZGRlclN0dWIsICZudWxsQm94ZWRDYWxsZWUgfSk7CiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJl
JiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFuY2UpOwogICAgIHJldHVy
biByZXN1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378859</attachid>
            <date>2019-09-16 07:31:22 -0700</date>
            <delta_ts>2019-09-16 07:55:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201799-20190916073119.patch</filename>
            <type>text/plain</type>
            <size>118871</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDRkYmQ0YWUxODlmMDYyMGQ2N2I3YzlkZmMyZTg4NDc5ZGExZTQ0Li5iYjc4MGVlZDVmNWMzN2Q4
NDNkYTE4MGY5MjM3OWI4OGQ0YWY5YjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NiBAQAorMjAxOS0wOS0xNiAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBI
b3dldmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGlu
dGVycHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGlj
aCBmdW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMg
dGhlIGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRl
ciwgc28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdy
aXRpbmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0
aGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0
byB0aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBn
ZW5lcmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdl
IGtlZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAg
Y29kZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAg
LSBDYWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBj
YWxscywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBK
Uy10by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogd2Fz
bS10by13YXNtIHN0dWIsIEpTLXRvLXdhc20gc3R1YiAoY2FsbGVlIGZyYW1lKSwgd2FzbS10by1K
UyBzdHViLCBPTUcgb3NyIGVudHJ5CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhbHNvIGNoYW5n
ZSBpdCBzbyB0aGF0IHRoZSBjYWxsZWUga2VlcHMgdHJhY2sgb2YgaXRzIGNhbGxlcnMsIGluc3Rl
YWQgb2YgaGF2aW5nIGEgZ2xvYmFsIG1hcHBpbmcKKyAgICAgICAgb2YgY2FsbHMgaW4gdGhlIFdh
c206OkNvZGVCbG9jay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVwYXRjaCBhbGwgY2FsbGVy
cyBvZiBhIGdpdmVuIENhbGxlZSB3aGVuIGl0IHRpZXJzIHVwLgorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpB
aXJJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRD
YWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUFpcik6CisgICAgICAgICog
d2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6QkJRUGxhbjo6QkJRUGxhbik6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OnBy
ZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGxldGUpOgorICAgICAgICAqIHdhc20v
V2FzbUJCUVBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICog
d2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub1dhc20pOgor
ICAgICAgICAqIHdhc20vV2FzbUNhbGxlZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxl
ZTo6Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVwYXRjaE1vdmUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6
YWRkQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRQ2FsbGVlOjphZGRBbmRMaW5rQ2Fs
bGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRQ2FsbGVlOjpyZXBhdGNoQ2FsbGVycyk6Cisg
ICAgICAgICogd2FzbS9XYXNtQ2FsbGVlLmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6
ZW50cnlwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Y29kZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAg
ICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2Fs
bGluZ0NvbnZlbnRpb246OnNldHVwRnJhbWVJblByb2xvZ3VlIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OkNv
ZGVCbG9jayk6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6
Oldhc206OkNvZGVCbG9jazo6ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6d2FzbUJCUUNhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmJv
eGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgICog
d2FzbS9XYXNtRW1iZWRkZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hl
ZENhbGxlZUxvYWRMb2NhdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtSW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQbGFuKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3
YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFu
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6T01HUGxhbik6CisgICAgICAgIChK
U0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
dHJpZ2dlck9NR1JlcGxhY2VtZW50Q29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmRvT1NS
RW50cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmlnZ2VyT1NSRW50cnlOb3cpOgorICAgICAg
ICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1Rv
V2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDoKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdyk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5RnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246
OldlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayk6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZSk6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUpOgorCiAyMDE5LTA5LTE1ICBEYXZpZCBLaWx6ZXIg
IDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgTGVhayBvZiBOU01hcFRhYmxlIGluIC1b
SlNWaXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOndpdGhPd25lcjpdCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUyMmMxNGZhYWFhYzM4MzA3MThjMWIxZmU4MDk3OWNm
Y2Q3Zjg1YmEuLjYyZWRjYTliOGZhMGIyNmMzMDU4YmNmZmVjZGEyNzVlYWYyNWNjN2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJMEYzMzhERjYx
QkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERjQxQkU5M0Q1NTAwMTNDODhGIC8q
IEIzQ29uc3RyYWluZWRWYWx1ZS5oICovOyB9OwogCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYg
LyogQjNDQ2FsbFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggKi87IH07
CiAJCTBGMzM4REZFMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERkMxQkVENTEyNzAw
MTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggKi87IH07Ci0JCTBGMzM4RTBDMUJGMDI3NkMwMDEz
Qzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjMzOEUwMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5o
ICovOyB9OworCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDAxQkYw
Mjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNE
YXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCAqLzsgfTsKIAkJ
MEYzMzhFMTAxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDQxQkYwMjc2QzAwMTND
ODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oICovOyB9OwogCQkwRjMzOEUxMTFCRjAyNzZDMDAxM0M4
OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA1MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJv
ZHVjdC5oICovOyB9OwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJCTBGRUM4NTA0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xp
c3QuaCAqLzsgfTsKIAkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
QzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLzsgfTsKIAkJMEZFQzg1MDgx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hl
Y2tWYWx1ZS5oICovOyB9OwotCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9OworCQkwRkVDODUwQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUM4NTBDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuaCAqLzsgfTsKIAkJMEZFQzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
c3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLzsgfTsKIAkJ
MEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsKQEAgLTY3NSw3ICs2NzUsNyBAQAogCQkwRkVD
ODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CiAJCTBGRUM4NTM4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENh
c2UuaCAqLzsgfTsKIAkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTNDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLzsg
fTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi87IH07CiAJCTBGRUM4NTQwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmgg
Ki87IH07CiAJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGODFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovOyB9OwpAQCAtNzE0MywxMSArNzE0MywxMSBAQAog
CQkJCTg2ODkyMUMxMUY5QzBDQjcwMDExNTlGNiAvKiBKU0JpZ0ludC5oICovLAogCQkJCTg2RkE5
RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAogCQkJCTg2RkE5
RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKLQkJCQlGRTQ4QkQ0
MzIzMjQ1RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmNwcCAqLywKLQkJCQlGRTQ4QkQ0MjIzMjQ1
RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFD
QkYyIC8qIEpTQ2FsbGVlLmNwcCAqLywKIAkJCQk2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyog
SlNDYWxsZWUuaCAqLywKIAkJCQk1M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0Lmgg
Ki8sCisJCQkJRkU0OEJENDMyMzI0NUU4NzAwRjEzNkQwIC8qIEpTQ0NvbmZpZy5jcHAgKi8sCisJ
CQkJRkU0OEJENDIyMzI0NUU4NzAwRjEzNkQwIC8qIEpTQ0NvbmZpZy5oICovLAogCQkJCUJDN0Y4
RkJBMEUxOUQxRUYwMDg2MzJDMCAvKiBKU0NlbGwuY3BwICovLAogCQkJCUJDMTE2N0Q4MEUxOUJD
QzkwMDgwNjZERCAvKiBKU0NlbGwuaCAqLywKIAkJCQkwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEg
LyogSlNDZWxsSW5saW5lcy5oICovLApAQCAtOTM0OCw3ICs5MzQ4LDYgQEAKIAkJCQkwRkVBMEEx
MDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0IzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0Q4OUQwMjE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAotCQkJCUZFMzg0MjMyMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25F
bnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMUMxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TE9TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJERDE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTAxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTM4LDcgKzk1
MzcsNiBAQAogCQkJCUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMg
LyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
MkJCRkYyMUIwNDRBOEIwMDY2NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyogSlNDQ29uZmlnLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MDhFQkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBp
biBIZWFkZXJzICovLAogCQkJCTUzNEUwMzU0MUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2MDksNiArOTYwNyw3IEBACiAJ
CQkJNjU3Q0Y0NTkxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1M0I2MDFFQzIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0Q4MDFBOTE4ODBENkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZFNDhCRDQ0MjMyNDVFOTMwMEYxMzZEMCAvKiBKU0NDb25maWcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMTE2N0RBMEUxOUJDQzkwMDgwNjZERCAvKiBKU0NlbGwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOTc0OTcxMTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFERDg0QTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODg1LDcgKzk4ODQsOSBAQAogCQkJCTBGMkJEQzJDMTUx
RkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUEx
N0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFMzg0MjMyMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25FbnRyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZFMzg0MjMzMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25zTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTM1Njk4NzIyMjg0MTE4NzAwOENEQ0NCIC8qIFBhY2tlZENlbGxQdHIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxl
bFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNEU2NTc1MjA2NjhFQUEwMEZC
ODFBQyAvKiBQYXJzZUhhc2guaCBpbiBIZWFkZXJzICovLApAQCAtOTk5Miw3ICs5OTkzLDYgQEAK
IAkJCQkwRkUwNTAyODFBQTkwOTU2MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUwNTAyOTFBQTkwOTU2MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRz
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDJCMUFBOTA5NTYwMEQzM0IzMyAvKiBT
Y29wZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1
IC8qIE9wdGlvbnNMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MjE3RUUyNzQ5MDBB
QkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NUZEMDA2ODE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTAzRkEyMTE4OEVGRjY4MDAxMTBGMTQgLyogU2NyaXB0QnJlYWtwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcAppbmRleCAzMTlhYTViZjA3NWNiZjBhZTAxNWIxMjA2OWNkMDQxOWM5ODli
MTJkLi5jNjcxNTYzMjY1NjUwZmZkYjg0YjgxZjU0NzkxN2JhYjdmZWFjYzg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTIy
OSw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1Nf
Xyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlv
biosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBT
aWduYXR1cmUmKTsKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IEIzOjpQcm9jZWR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBW
ZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgTWVtb3J5TW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRp
b24sIGNvbnN0IFNpZ25hdHVyZSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTYzOSw3ICs2
MzksOCBAQCBwcml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0
ciB9OwogICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIFZlY3Rv
cjxUeXBlZFRtcD4gbV9sb2NhbHM7Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0
aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRo
LgorICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV9vdXRnb2luZ0NhbGxzOwor
ICAgIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4m
IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52
YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlkR1BSUmVn
IH07CiAgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRHUFJSZWcg
fTsKQEAgLTcwOCwxNCArNzA5LDE1IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNt
Q29udGV4dEluc3RhbmNlKEJhc2ljQmxvY2sqIGJsb2NrLCBUeXBlZFRtcCBpbnN0CiAgICAgZW1p
dFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CiB9CiAKLUFp
cklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlv
biwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCog
dGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSkKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG91dGdvaW5nQ2FsbHMsIGNvbnN0IFZlY3RvcjxNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMs
IE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRp
ZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUpCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQog
ICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiAgICAgLCBtX3RpZXJVcCh0aWVy
VXApCiAgICAgLCBtX3Byb2MocHJvY2VkdXJlKQogICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkp
Ci0gICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
KQorICAgICwgbV9vdXRnb2luZ0NhbGxzKG91dGdvaW5nQ2FsbHMpCisgICAgLCBtX3dhc21Ub1dh
c21FeGl0U3R1YnMod2FzbVRvV2FzbUV4aXRTdHVicykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rp
b25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQogewogICAgIG1fY3VycmVudEJsb2NrID0g
bV9jb2RlLmFkZEJsb2NrKCk7CkBAIC03NjEsMTYgKzc2Myw3IEBAIEFpcklSR2VuZXJhdG9yOjpB
aXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVy
ZSYgcHJvCiAgICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVy
YXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlv
bj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgewogICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAg
ICAgIGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOwotCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1
ZVNjcmF0Y2goMCk7Ci0gICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0
aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIp
OwotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9u
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9u
LT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRy
VGFnPihtb3ZlTG9jYXRpb24pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBqaXQuZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsK
LSAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKTsKLSAgICAgICAgfQorICAgICAgICBqaXQuZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAKICAgICAg
ICAgewogICAgICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3YXNtRnJhbWVTaXplID0g
bV9jb2RlLmZyYW1lU2l6ZSgpOwpAQCAtMTkzNiw4ICsxOTI5LDYgQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwKICAgICBpZiAocmV0dXJuVHlwZSAhPSBUeXBlOjpWb2lkKQogICAgICAgICByZXN1
bHQgPSB0bXBGb3JUeXBlKHJldHVyblR5cGUpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzOwotCiAgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1l
bnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhcmdzLnNpemUoKSkpOwogCkBAIC0xOTczLDExICsxOTY0LDEyIEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVw
IH0pOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0
U3R1YiA9IG1fd2FzbVRvV2FzbUV4aXRTdHVic1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbd2FzbVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNh
ZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJU
YWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPih3YXNtVG9XYXNtRXhpdFN0dWIu
Y29kZSgpKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMjAy
NCwxOCArMjAxNiwyMCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBhdXRvKiBw
YXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CiAgICAgICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHBhdGNocG9pbnQtPm51
bUdQU2NyYXRjaFJlZ2lzdGVycysrOwogCiAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4g
cGF0Y2hBcmdzOwogICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwo
bV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChU
bXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CiAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5k
KHsgdG1wLCByZXAgfSk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRj
aGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVu
Y3Rpb25JbmRleCB9KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4qIG91dGdvaW5nQ2FsbHMgPSAmbV9vdXRnb2luZ0NhbGxzOworICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW291dGdvaW5nQ2FsbHMsIGZ1bmN0aW9uSW5kZXhd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gcGFyYW1zLmdwU2NyYXRj
aCgwKTsKKyAgICAgICAgICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2go
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBh
dGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAgICAgICBvdXRnb2luZ0NhbGxzLT5hcHBlbmQoeyBm
dW5jdGlvbkluZGV4LCB7IG1vdmVMb2NhdGlvbiwgY2FsbExvY2F0aW9uIH19KTsKICAgICAgICAg
fSk7CiAKICAgICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQs
IHJlc3VsdCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKQEAgLTIwODksNiArMjA4Myw3IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hCiAgICAgfSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVD
b2RlID0gZzY0KCk7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlID0gZzY0KCk7CiAgICAgewog
ICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IGc2NCgpOwogICAg
ICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFy
ZSBsb29raW5nIGZvci4KQEAgLTIwOTcsNiArMjA5Miw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hCiAgICAgICAgIGFwcGVuZChBZGQ2NCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgY2FsbGVl
U2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRk
cihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zm
c2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpLCBjYWxsZWVDb2RlKTsgLy8gUG9pbnRlciB0
byBjYWxsZWUgY29kZS4KKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWdu
YXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENh
bGxlZUxvYWRMb2NhdGlvbigpKSwgY2FsbGVlKTsgLy8gUG9pbnRlciB0byBib3hlZCBjYWxsZWUK
IAogICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
IGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0
dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgogICAgICAgICAvLyBGSVhN
RTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBm
YWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMApAQCAtMjE4OSw2ICsyMTg1LDEwIEBAIGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hCiAKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGVtaXRB
cmdzOwogICAgIGVtaXRBcmdzLmFwcGVuZChjYWxsZWVDb2RlKTsKKworICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmFkZHIoY2FsbGVlKSwgY2FsbGVlKTsKKyAgICBlbWl0QXJncy5hcHBlbmQoeyBjYWxs
ZWUsIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
aXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSB9KTsKKwogICAgIHdh
c21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBh
dGNoLCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7
CiAgICAgICAgIGVtaXRBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOwogICAgIH0pOwpAQCAtMjIy
OSwxMCArMjIyOSw4IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmln
aW4KICAgICByZXR1cm4gQjM6Ok9yaWdpbigpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0
aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0
aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVj
dGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYg
Y29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50
cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKLQogICAgIGNv
bXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxs
SGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBt
YWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIApAQCAtMjI1Miw3ICsyMjUwLDcgQEAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZUFpcihDb21waWxhdGkKICAgICAKICAgICBwcm9jZWR1cmUuc2V0T3B0TGV2ZWwoT3B0aW9u
czo6d2ViQXNzZW1ibHlCQlFBaXJPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEFpcklSR2Vu
ZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21F
eGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5m
bywgcHJvY2VkdXJlLCBjb21waWxhdGlvbkNvbnRleHQub3V0Z29pbmdDYWxscywgd2FzbVRvV2Fz
bUV4aXRTdHVicywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRp
b24sIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNl
cihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgp
LCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2Vy
LnBhcnNlKCkpOwogCkBAIC0yMjcyLDEwICsyMjcwLDEwIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGls
YXRpCiAgICAgICAgIEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOwogICAgICAg
ICBCMzo6QWlyOjpnZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBv
aW50SklUKTsKICAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9k
dWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVu
dHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC5jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBJbnRUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5l
cmF0b3IuaAppbmRleCAzMzFiNGIwYWQzMTNlNjIzY2E3ZmY0YmQ4ZGU4YTE1ODZmYzdkNTA1Li44
MjcyY2UzNTk1ZmYyOGIzZjljYzg4OTY1YWRiMmE4NGM5ZTg1YTc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaApAQCAtMzEsNyArMzEsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1FeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENv
bXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVs
bHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CitFeHBlY3RlZDx2b2lkLCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlv
bkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21F
eGNlcHRpb24gPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4
IDNkOGRmOGU2ODcxMDIxMzFiNjRjMWE2ZDY1ZTZmY2NjMTAzYjVlNzUuLmUwMDAzZWNiNzBkNmYy
YWNlY2FkZGQzZjQyODQ2NGU3YTBiMzhmZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTE3Miw3ICsxNzIsNiBAQCBwdWJsaWM6
CiAKICAgICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVk
PEVycm9yVHlwZT4gVW5leHBlY3RlZFJlc3VsdDsKLSAgICB0eXBlZGVmIEV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAgdHlw
ZWRlZiBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdApAQCAtMTg1LDcgKzE4
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAg
ICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgs
IHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4
Y2VwdGlvbik7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFBy
b2NlZHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5j
dGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqLCBU
aHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTI4Myw2ICsyODIs
NyBAQCBwcml2YXRlOgogCiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFy
c2VyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87Cisg
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX291dGdvaW5nQ2FsbHM7CiAgICAg
Y29uc3QgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9Owog
ICAgIGNvbnN0IENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9u
TW9kZTo6QkJRTW9kZSB9OwogICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJ
TlRfTUFYIH07CkBAIC0yOTQsNyArMjk0LDcgQEAgcHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBt
X2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8dWludDMyX3Q+IG1fb3V0ZXJM
b29wczsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKLSAgICBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFj
aCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3Vs
ZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNt
RW50cnlQdHJUYWc+PiYgbV93YXNtVG9XYXNtRXhpdFN0dWJzOyAvLyBMaXN0IGVhY2ggY2FsbCBz
aXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0
Y2hlZCB3aXRoLgogICAgIHVuc2lnbmVkJiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAg
ICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiBtX2NvbnN0YW50UG9vbDsKICAgICBJbnNlcnRp
b25TZXQgbV9jb25zdGFudEluc2VydGlvblZhbHVlczsKQEAgLTM1NSwxNSArMzU1LDE2IEBAIHZv
aWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBw
cm9jLCBCYXNpY0Jsb2NrKiBibG9jCiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0
aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NS
RW50cnksIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21F
eGNlcHRpb24pCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiBvdXRnb2luZ0NhbGxzLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJzLCB1bnNpZ25lZCYgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGls
YXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JP
U1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2Fz
bUV4Y2VwdGlvbikKICAgICA6IG1faW5mbyhpbmZvKQorICAgICwgbV9vdXRnb2luZ0NhbGxzKG91
dGdvaW5nQ2FsbHMpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2Rl
KGNvbXBpbGF0aW9uTW9kZSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQog
ICAgICwgbV9sb29wSW5kZXhGb3JPU1JFbnRyeShsb29wSW5kZXhGb3JPU1JFbnRyeSkKICAgICAs
IG1fdGllclVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCi0gICAgLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgICwgbV93YXNt
VG9XYXNtRXhpdFN0dWJzKHdhc21Ub1dhc21FeGl0U3R1YnMpCiAgICAgLCBtX29zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICAsIG1fY29uc3Rh
bnRJbnNlcnRpb25WYWx1ZXMobV9wcm9jKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5m
by5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCkBAIC00MTcsNyArNDE4LDcgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUKICAgICAgICAgfQogICAgIH0KIAotICAgIHdhc21DYWxsaW5nQ29udmVudGlv
bigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9u
LCBtX3Byb2MsIE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CisgICAgd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUobV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50
QmxvY2spOwogCiAgICAgewogICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIs
IE9yaWdpbigpKTsKQEAgLTE0MDIsOCArMTQwMyw2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwK
ICAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwogCiAgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0
dXJlLnJldHVyblR5cGUoKTsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7Ci0KICAg
ICBpZiAobV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleCkpIHsKICAgICAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1h
eChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6
ZSgpKSk7CiAKQEAgLTE0MTcsNiArMTQxNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAg
ICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJh
bmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwg
RnJlcXVlbnRlZEJsb2NrKGlzRW1iZWRkZXJCbG9jaykpOwogCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1YiA9IG1fd2FzbVRv
V2FzbUV4aXRTdHVic1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgVmFsdWUqIHdhc21DYWxsUmVz
dWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxv
Y2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9
XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMTQyNSwxMSArMTQyNSwxMSBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0
aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJv
dW5kcyBjaGVja2luZy4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhh
dmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MjE4MQogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAg
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbd2FzbVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJs
ZU5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFn
PihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKFdhc21FbnRyeVB0clRhZyk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4od2FzbVRvV2Fz
bUV4aXRTdHViLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtMTQ3MywxNyArMTQ3MywxOCBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBh
bm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVk
IG91ciBNZW1vcnkuCiAgICAgICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwg
bV9wcm9jLCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7CisgICAgICAgIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiogb3V0Z29pbmdDYWxscyA9ICZtX291dGdvaW5nQ2FsbHM7CiAg
ICAgICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2Ms
IG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAg
ICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLQotICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwo
KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQo
eyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBm
dW5jdGlvbkluZGV4IH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAg
IEdQUlJlZyBjYWxsZWVHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICAgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNp
emVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb2NhdGlvbiA9IGppdC50aHJlYWRTYWZl
UGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0Z29pbmdDYWxscy0+
YXBwZW5kKHsgZnVuY3Rpb25JbmRleCwgeyBtb3ZlTG9jYXRpb24sIGNhbGxMb2NhdGlvbiB9fSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC0xNjI0LDYg
KzE2MjUsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQg
dGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+
KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2Nh
dGlvbigpKSkpOwogCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKKyAg
ICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
Om9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSkpKTsKKwogICAgIFR5cGUgcmV0dXJu
VHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CiAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBh
cmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQpIHsKQEAgLTE2MzUsOCArMTY0MCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMs
IGJ1dCB0aGUgd2FzbS0+d2FzbSBzdHViIGFzc3VtZXMgaXQgY2FuCiAgICAgICAgICAgICAvLyB1
c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nKSk7Ci0KICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVD
b2RlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChjYWxsZWUsIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OwogICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAw
IDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CkBAIC0xNjk3LDEwICsxNzAyLDggQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PE9yaWdpbj4ob3JpZ2luKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQm
IGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxh
dGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJf
dCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBG
dW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRT
dHVicywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9T
UkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0
aW9uPigpOwotCiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9
IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNt
RW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCkBAIC0xNzIxLDcg
KzE3MjQsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/IE9wdGlvbnM6Ondl
YkFzc2VtYmx5QkJRQjNPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2Vi
QXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJH
ZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUs
IGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4
Y2VwdGlvbik7CisgICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUs
IGNvbXBpbGF0aW9uQ29udGV4dC5vdXRnb2luZ0NhbGxzLCB3YXNtVG9XYXNtRXhpdFN0dWJzLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9u
SW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7
CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBm
dW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5m
byk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAg
LTE3MzksMTAgKzE3NDIsMTAgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAgICAgICAgQjM6
OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZSk7CiAgICAgICAgIEIzOjpnZW5lcmF0ZShw
cm9jZWR1cmUsICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAg
ICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJl
LnJlbGVhc2VCeXByb2R1Y3RzKCk7Ci0gICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgp
OworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2Nl
ZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiB7IH07CiB9CiAKIC8vIEN1c3RvbSB3YXNtIG9wcy4gVGhl
c2UgYXJlIHRoZSBvbmVzIHRvbyBtZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlYTU1MDI0MDE4
ZDMwZDM4ZmYxZWE3YTdhYmYxYzE2NWJjZjU2N2Y4Li4zNDhiNTQ3ZWUzZDc4N2I2MTJjM2ZkMzYw
NDJkNzdkZTgyMjBhN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmgKQEAgLTQ5LDkgKzQ5LDEyIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRl
eHQgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gZW1iZWRkZXJF
bnRyeXBvaW50Qnlwcm9kdWN0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3
YXNtRW50cnlwb2ludEpJVDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVj
dHM+IHdhc21FbnRyeXBvaW50Qnlwcm9kdWN0czsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4gb3V0Z29pbmdDYWxsczsKKyAgICBPcHRpb25hbDxVbmxpbmtlZE1vdmVBbmRDYWxs
PiBlbWJlZGRlck1vdmVBbmRDYWxsOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNh
dmVSZWdpc3RlcnM7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9
IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8dm9pZCwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rp
b25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxX
YXNtRW50cnlQdHJUYWc+PiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJV
cENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5jcHAKaW5kZXggMGU4M2Q1M2YzMTIzOTM3ZmM5Y2MwM2QzZTVlZTE4NGQ1MTcxM2Q0
Zi4uYjQ4NTdjNzZhMTg3YmRlNTFlMjY1MGQ3YWM0MmZjMjQ3YjVlNTA3OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtNTIsOSArNTIsMTAgQEAgbmFt
ZXNwYWNlIFdhc21CQlFQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwogfQogCi1CQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gaW5mbywgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFz
aywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dh
c21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+JiBjYWxsZWVzLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYm
IHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IEJhc2UoY29udGV4dCwg
V1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBw
ZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgLCBtX3N0cmVhbWluZ1BhcnNlcihtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKKyAgICAsIG1fY2FsbGVlcygmY2FsbGVlcykKICAg
ICAsIG1fc3RhdGUoU3RhdGU6OlZhbGlkYXRlZCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7
CkBAIC0xNTksMTYgKzE2MCwxMCBAQCB2b2lkIEJCUVBsYW46OnByZXBhcmUoKQogCiAgICAgY29u
c3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwogICAg
IGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJB
c3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBh
Y2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlu
a2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikKLSAgICAgICAgfHwgIXRyeVJl
c2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25zLnNpemUoKSwg
IiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBj
b250ZXh0cyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMs
IGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkKKyAgICAgICAgfHwgIXRyeVJl
c2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
Y29tcGlsYXRpb24gY29udGV4dHMiKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxscy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7Ci0gICAgbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRp
b25Db250ZXh0cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7Ci0gICAgbV90aWVyVXBDb3VudHMu
cmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRl
eCA9IDA7IGltcG9ydEluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7
ICsraW1wb3J0SW5kZXgpIHsKICAgICAgICAgSW1wb3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZv
cm1hdGlvbi0+aW1wb3J0c1tpbXBvcnRJbmRleF07CkBAIC0yMzAsNiArMjI1LDcgQEAgcHVibGlj
OgogCiB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FsbGVlcyk7CiAgICAgQVNTRVJUKG1fc3Rh
dGUgPj0gU3RhdGU6OlByZXBhcmVkKTsKICAgICBkYXRhTG9nTG5JZihXYXNtQkJRUGxhbkludGVy
bmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24iKTsKIApAQCAtMjY2LDEzICsyNjIs
NyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBBU1NFUlQodmFsaWRhdGVG
dW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7
CiAKLSAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICBpZiAoT3B0aW9uczo6dXNl
QkJRVGllclVwQ2hlY2tzKCkpCi0gICAgICAgICAgICBtX3RpZXJVcENvdW50c1tmdW5jdGlvbklu
ZGV4XSA9IG1ha2VVbmlxdWU8VGllclVwQ291bnQ+KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdID0gbnVsbHB0cjsKLSAgICAgICAgVGll
clVwQ291bnQqIHRpZXJVcCA9IG1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdLmdldCgpOwot
ICAgICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmlu
Zz4gcGFyc2VBbmRDb21waWxlUmVzdWx0OworICAgICAgICBFeHBlY3RlZDx2b2lkLCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKICAgICAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSA9IDA7CiAKICAgICAgICAgLy8gRklYTUU6IFNvbWUgd2VicGFnZXMgdXNlIHZl
cnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBleGhhdXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1v
cnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUgc2l6ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSBy
ZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1CLgpAQCAtMjgyLDEwICsyNzIsMTEgQEAgdm9p
ZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAg
ICAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1f
bW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJs
eUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7
CiAKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IG1fY2FsbGVlcy0+YXQoZnVuY3Rpb25J
bmRleCktPnRpZXJVcENvdW50KCk7CiAgICAgICAgIGlmICghZm9yY2VVc2luZ0IzICYmIE9wdGlv
bnM6Ondhc21CQlFVc2VzQWlyKCkpCi0gICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQg
PSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhd
LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgs
IHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICAgICAgcGFyc2VBbmRDb21w
aWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XSwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV93YXNtVG9XYXNtRXhpdFN0dWJzLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwg
bV90aHJvd1dhc21FeGNlcHRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1
bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzW2Z1bmN0aW9uSW5kZXhdLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rp
b25JbmRleCwgVUlOVDMyX01BWCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAg
ICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3dhc21U
b1dhc21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbklu
ZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAg
ICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTI5NCwxMSArMjg1LDExIEBAIHZvaWQg
QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0K
ICAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25J
bmRleCkgfHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9ucygpLmNvbnRh
aW5zKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRl
cm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIo
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxFbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBtX2NyZWF0ZUVtYmVk
ZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVy
ZSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLmdldCgpLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNt
SW50ZXJuYWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LmlzTmV3RW50cnkpOwogICAgICAgICB9CiAKQEAgLTMxNiw3ICszMDcsOSBAQCB2b2lkIEJCUVBs
YW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICBD
b21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0
aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgICAgICAgICBjb25zdCB1aW50
MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVu
Y3Rpb25Db3VudCgpOworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNw
YWNlID0gZnVuY3Rpb25JbmRleCArIGltcG9ydEZ1bmN0aW9uQ291bnQ7CisgICAgICAgICAgICBC
QlFDYWxsZWUmIGNhbGxlZSA9ICptX2NhbGxlZXMtPmF0KGZ1bmN0aW9uSW5kZXgpOwogICAgICAg
ICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRy
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAtMzI1LDkgKzMxOCwxNyBAQCB2b2lkIEJCUVBs
YW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+ZW50cnlwb2ludC5jb21waWxhdGlv
biA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICAgICAgICAgICAgICBjYWxsZWUu
ZW50cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGNvbnRleHQuY2FsbGVl
U2F2ZVJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5jb21w
aWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICAg
ICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNz
ZW1ibHkgQkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0
dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAg
IFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKworICAgICAgICAg
ICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UgPj0gaW1w
b3J0RnVuY3Rpb25Db3VudCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHRh
cmdldEZ1bmN0aW9uSW5kZXggPSBjYWxsLnRhcmdldEZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9k
dWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jYWxsZWVzLT5hdCh0YXJnZXRGdW5jdGlvbkluZGV4KS0+YWRkQ2FsbGVyKGxvY2tlciwg
bGlua0J1ZmZlciwgY2FsbC51bmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAgICAgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21J
bnRlcm5hbEZ1bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChm
dW5jdGlvbkluZGV4KSkgewpAQCAtMzM3LDIzICszMzgsMTggQEAgdm9pZCBCQlFQbGFuOjpjb21w
bGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxC
Mzo6Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxG
dW5jdGlvbi0+ZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGls
YXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIz
Q29tcGlsYXRpb25QdHJUYWcsICJFbWJlZGRlci0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0g
JXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCku
ZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNj
aWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuZW1iZWRk
ZXJFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAg
ICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZXhlY3V0YWJsZUFkZHJl
c3M7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRG
dW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxp
bmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25k
aXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKLSAgICAgICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChj
YWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0
aW9uQ291bnQoKSktPmVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNt
RW50cnlQdHJUYWc+KCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRy
VGFnPihleGVjdXRhYmxlQWRkcmVzcykpOworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVt
YmVkZGVyTW92ZUFuZENhbGwpCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZS5hZGRDYWxsZXIo
bG9ja2VyLCBsaW5rQnVmZmVyLCAqY29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsKTsKICAgICAg
ICAgICAgIH0KKwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsZWUgOiAqbV9j
YWxsZWVzKQorICAgICAgICAgICAgY2FsbGVlLT5yZXBhdGNoQ2FsbGVycyhsb2NrZXIsICpjYWxs
ZWUpOwogICAgIH0KICAgICAKICAgICBpZiAoIWlzQ29tcGxldGUoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKaW5kZXggODgzNjE3ZmM2N2ZmZWI4MDUxMjA4Yzc0
MGUyZjFmOTE4OGI0MTMwZC4uZTNlNmVlNjYwYmIxN2YzOWJiZGZhNGI0YTBiODRmMDVjMjUyYmIz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBAIC01MSw3ICs1
MSw3IEBAIHB1YmxpYzoKICAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGls
ZSwgVmFsaWRhdGlvbiB9OwogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5v
dCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEg
cmVmZXJlbmNlIGN5Y2xlLgotICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVy
JiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgY29uc3QgVmVj
dG9yPFJlZlB0cjxCQlFDYWxsZWU+PiYsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29y
aywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4
Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgVmVjdG9y
PHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5
bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIApAQCAtOTgsMTIgKzk4LDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21Ub1dhc21FeGl0U3R1YnMpOwogICAgIH0KIAot
ICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IHRha2VXYXNtVG9XYXNt
Q2FsbHNpdGVzKCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAh
aGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21D
YWxscyk7Ci0gICAgfQotCiAgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgewogICAgICAg
ICBJbml0aWFsLAogICAgICAgICBWYWxpZGF0ZWQsCkBAIC0xMzksMTQgKzEzMywxMyBAQCBwcml2
YXRlOgogICAgIFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNt
RW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAg
SGFzaFNldDx1aW50MzJfdCwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1
bmN0aW9uSW5kaWNlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8RW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNo
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRl
clRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+
IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRpZXJV
cENvdW50Pj4gbV90aWVyVXBDb3VudHM7CiAKLSAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwogICAgIFN0cmVhbWluZ1Bh
cnNlciBtX3N0cmVhbWluZ1BhcnNlcjsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEJCUUNhbGxl
ZT4+KiBtX2NhbGxlZXMgeyBudWxscHRyIH07CiAgICAgU3RhdGUgbV9zdGF0ZTsKIAogICAgIGNv
bnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKaW5kZXggODY2MDFhYzllZjNmYjM4NWUwNjAyOTAxYzFh
MDRkNTMwYzU2M2NhOC4uOWJiYzZmMzg5NzUyZDc3MDZlNGM5ZmIxNWM4NTk5ZjU0ZjI4MmY5ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgK
QEAgLTM4LDIxICszOCw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiB2b2lkIEJCUVBs
YW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogewogICAgIEFT
U0VSVCghZmFpbGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4
ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6
ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewotCi0gICAgICAgIFJlZlB0cjxXYXNtOjpD
YWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1dG8gZW1iZWRk
ZXJUb1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQo
aW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShl
bWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92
ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5n
ZXQoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24g
PSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwot
ICAgICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4
ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBS
ZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IFdhc206OkJCUUNhbGxlZTo6
Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxv
Y2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7
Ci0KLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKLSAg
ICB9CisgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5h
bEZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyAr
K2ludGVybmFsRnVuY3Rpb25JbmRleCkKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlv
bkluZGV4LCBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVu
Y3Rpb25JbmRleCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IGNlNjEwNzZkMWFjYjc5YWVh
NGM1ZThiNzUyYjE3OTQ4NWNhZjA4ZWUuLmY3ZDQ3YmE5MDM4NmE3MzExN2QxMjY0YjcwMTI0OGU1
OWJjY2Q0NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5k
aW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAK
QEAgLTQ3LDYgKzQ3LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2kKICAgICBKSVQgaml0Owog
CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1
ZVNjcmF0Y2goMCk7CisgICAgR1BSUmVnIGNhbGxlZSA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFp
cigpLnByb2xvZ3VlU2NyYXRjaCgxKTsKICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgQVNTRVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7
CiAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwpAQCAt
NTcsMTMgKzU4LDIwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpCiAgICAgaml0LmxvYWRXYXNt
Q29udGV4dEluc3RhbmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQgSW5zdGFuY2UqCiAgICAg
Ly8gR2V0IHRoZSBjYWxsZWUncyBXYXNtOjpJbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250
ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0
cyBvd24gSW5zdGFuY2UuCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1Nj
cmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKGltcG9ydEluZGV4KSksIGJh
c2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCi0gICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRo
YXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWls
IGNhbGwgdG8gaXQgYmVsb3cuCisgICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2Fj
aGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IGFuZCBjYWxsZWUgc28gd2UgY2Fu
IHRhaWwgY2FsbCB0byBpdCBiZWxvdy4KICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6
ZVJlZ0FzU2NyYXRjaCwgSW5zdGFuY2U6Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRp
b24oaW1wb3J0SW5kZXgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0
aW9uKGltcG9ydEluZGV4KSksIGNhbGxlZSk7CiAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0
YW5jZShiYXNlTWVtb3J5KTsKIAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVn
QXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVn
QXNTY3JhdGNoKTsKICAgICBqaXQuc3RvcmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwog
CisgICAgLy8gU2V0IHRoZSBjYWxsZWUgc2xvdCBpbiB0aGUgY2FsbCBmcmFtZQorICAgIGppdC5s
b2FkUHRyKGNhbGxlZSwgY2FsbGVlKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGJl
ZW4gY2FsbGVkLCBzbyBSZXR1cm5QQyBpcyBvbiB0aGUgc3RhY2ssIGJ1dCBoYXZlIG5vdCB5ZXQg
cHVzaGVkIHRoZSBiYXNlIHBvaW50ZXIsCisgICAgLy8gc28gd2UgaGF2ZSB0byBzdWJ0cmFjdCB0
aGUgc3BhY2UgZm9yIENhbGxlckZyYW1lIGZyb20gdGhlIGNhbGxlZSBzbG90CisgICAgaml0LnN0
b3JlUHRyKGNhbGxlZSwgSklUOjpBZGRyZXNzKEpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ1BVUmVnaXN0
ZXIpKSk7CisKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFs
bCBXYXNtOjpJbnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhl
IGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUg
cmVnaXN0ZXJzLgogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21DYWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5j
cHAKaW5kZXggZThkZGYxNTNkZDlkOTAyMjljNTEyODFlYzI4MTJmN2E1OTExNDFkNi4uOTMzMTRh
YjY2Nzc4N2Y2OTE5OWIxYTQyYzNkMjlkM2ZjNGI2Yzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTMyLDE2ICszMiwxNCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1DYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlv
bk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKK0NhbGxlZTo6
Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUpCiAgICAgOiBtX2Nv
bXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCi0gICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92
ZShlbnRyeXBvaW50KSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0
ZXJDYWxsZWUodGhpcyk7CiB9CiAKLUNhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgs
IHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorQ2Fs
bGVlOjpDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgc2l6ZV90
IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFt
ZSkKICAgICA6IG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKLSAgICAsIG1fZW50
cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQogICAgICwgbV9pbmRleE9yTmFtZShpbmRleCwg
V1RGTW92ZShuYW1lKSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0
ZXJDYWxsZWUodGhpcyk7CkBAIC01Miw2ICs1MCw0OCBAQCBDYWxsZWU6On5DYWxsZWUoKQogICAg
IENhbGxlZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwogfQog
CisKK2lubGluZSB2b2lkIHJlcGF0Y2hNb3ZlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4gbW92ZUxvY2F0aW9uLCBDYWxsZWUm
IHRhcmdldENhbGxlZSkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92
ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKCZ0YXJnZXRDYWxsZWUpKTsKK30KKworaW5s
aW5lIHZvaWQgcmVwYXRjaENhbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBDb2RlTG9jYXRpb25O
ZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbiwgQ2FsbGVlJiB0YXJnZXRDYWxs
ZWUpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4odGFyZ2V0Q2FsbGVlLmNvZGUoKSkp
OworfQorCit2b2lkIEJCUUNhbGxlZTo6YWRkQ2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
TGlua0J1ZmZlciYgbGlua0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAg
IGF1dG8gbW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRh
Zz4oY2FsbC5tb3ZlTG9jYXRpb24pOworICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsLmNhbGxMb2NhdGlvbik7
CisgICAgbV9tb3ZlTG9jYXRpb25zLmFwcGVuZChtb3ZlTG9jYXRpb24pOworICAgIG1fY2FsbExv
Y2F0aW9ucy5hcHBlbmQoY2FsbExvY2F0aW9uKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OmFkZEFu
ZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTGlua0J1ZmZlciYgbGlu
a0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGVudHJ5cG9pbnQoKS5jb21waWxhdGlvbik7CisKKyAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGwubW92ZUxvY2F0aW9uKTsK
KyAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdh
c21FbnRyeVB0clRhZz4oY2FsbC5jYWxsTG9jYXRpb24pOworICAgIG1fbW92ZUxvY2F0aW9ucy5h
cHBlbmQobW92ZUxvY2F0aW9uKTsKKyAgICBtX2NhbGxMb2NhdGlvbnMuYXBwZW5kKGNhbGxMb2Nh
dGlvbik7CisKKyAgICBDYWxsZWUmIHRhcmdldENhbGxlZSA9IG1fcmVwbGFjZW1lbnQgPyBzdGF0
aWNfY2FzdDxDYWxsZWUmPigqbV9yZXBsYWNlbWVudCkgOiAqdGhpczsKKyAgICByZXBhdGNoTW92
ZShsb2NrZXIsIG1vdmVMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKKyAgICByZXBhdGNoQ2FsbChs
b2NrZXIsIGNhbGxMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKK30KKwordm9pZCBCQlFDYWxsZWU6
OnJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIENhbGxlZSYgdGFy
Z2V0Q2FsbGVlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldENhbGxlZS5lbnRyeXBvaW50
KCkuY29tcGlsYXRpb24pOworICAgIGZvciAoYXV0byBtb3ZlTG9jYXRpb24gOiBtX21vdmVMb2Nh
dGlvbnMpCisgICAgICAgIHJlcGF0Y2hNb3ZlKGxvY2tlciwgbW92ZUxvY2F0aW9uLCB0YXJnZXRD
YWxsZWUpOworICAgIGZvciAoYXV0byBjYWxsTG9jYXRpb24gOiBtX2NhbGxMb2NhdGlvbnMpCisg
ICAgICAgIHJlcGF0Y2hDYWxsKGxvY2tlciwgY2FsbExvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxl
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IGY3ZWE0
ZDA1YjhkMGE3MWMxZWU2MmE1NmM0ZDM5ZGE1NDlmMDliN2IuLjk5MDlkYzQwOTU5OTE5YTVjNjlh
ZmJkZjI1Mjk1ODI5M2ExMWM0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21DYWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2Fs
bGVlLmgKQEAgLTQwLDEyICs0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogY2xhc3MgQ2FsbGVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxlZT4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Vu
dHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7
IH0KLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyBy
ZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisgICAgRW50cnlwb2lu
dCYgZW50cnlwb2ludCgpIHsgcmV0dXJuIG1fZW50cnlwb2ludDsgfQorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7IH0K
ICAgICBJbmRleE9yTmFtZSBpbmRleE9yTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhPck5h
bWU7IH0KICAgICBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9jb21waWxhdGlvbk1vZGU7IH0KIAorICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0
ZXJzOyB9CisKICAgICBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gcmFuZ2UoKSBjb25zdAogICAg
IHsKICAgICAgICAgdm9pZCogc3RhcnQgPSBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVS
ZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKQEAgLTU2LDc4
ICs1Nyw3MCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q2FsbGVl
KCk7CiAKIHByb3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29t
cGlsYXRpb25Nb2RlLCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiwgc2l6ZV90
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIENhbGxlZShDb21waWxhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENhbGxlZShDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKIAogcHJpdmF0ZToKICAgICBDb21waWxhdGlv
bk1vZGUgbV9jb21waWxhdGlvbk1vZGU7Ci0gICAgV2FzbTo6RW50cnlwb2ludCBtX2VudHJ5cG9p
bnQ7CisgICAgRW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiAgICAgSW5kZXhPck5hbWUgbV9pbmRl
eE9yTmFtZTsKIH07CiAKIGNsYXNzIE9NR0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQ
dHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYm
IHVubGlua2VkQ2FsbHMpCisgICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUo
ZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMp
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShpbmRleCwgV1RGTW92
ZShuYW1lKSkpOwogICAgIH0KIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
d2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQot
CiBwcml2YXRlOgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykK
LSAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZNb3Zl
KGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3dhc21Ub1dh
c21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICBPTUdDYWxsZWUoc2l6ZV90
IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFt
ZSkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBpbmRleCwgV1RG
TW92ZShuYW1lKSkKICAgICB7CiAgICAgfQotCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKIH07CiAKIGNsYXNzIE9NR0Zvck9TUkVudHJ5
Q2FsbGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxP
TUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50
LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9u
Pj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBs
b29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMp
CisgICAgc3RhdGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKHNpemVfdCBpbmRl
eCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVu
c2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdU
Rk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUoaW5kZXgsIFdURk1vdmUo
bmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCkpOwogICAgIH0KIAog
ICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBt
X29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYgd2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxz
aXRlczsgfQogCiBwcml2YXRlOgotICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5
cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYmIHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92
ZShuYW1lKSkKLSAgICAgICAgLCBtX3dhc21Ub1dhc21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtl
ZENhbGxzKSkKKyAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFp
cjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgpCisgICAgICAgIDogQ2Fs
bGVlKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBpbmRleCwgV1RGTW92ZShu
YW1lKSkKICAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSkKICAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAgICAgewog
ICAgIH0KIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBtX3dhc21Ub1dhc21D
YWxsc2l0ZXM7CiAgICAgdW5zaWduZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAg
IHVpbnQzMl90IG1fbG9vcEluZGV4OwogfTsKIAogY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCkKKyAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVt
YmVkZGVyRW50cnlwb2ludENhbGxlZSgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotICAgICAg
ICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUs
IFdURk1vdmUoZW50cnlwb2ludCkpCisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKCkKKyAg
ICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlKQog
ICAgIHsKICAgICB9CiB9OwogCiBjbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5
cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+
JiYgdGllclVwQ291bnQpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
LCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwg
aW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92
ZSh0aWVyVXBDb3VudCkpKTsKICAgICB9CiAKICAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3Ny
RW50cnlDYWxsZWUoKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0xNDcs
MTMgKzE0MCwyMCBAQCBwdWJsaWM6CiAKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7
IHJldHVybiBtX3RpZXJVcENvdW50LmdldCgpOyB9CiAKKyAgICB2b2lkIGFkZENhbGxlcihjb25z
dCBBYnN0cmFjdExvY2tlciYsIExpbmtCdWZmZXImLCBVbmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAg
ICB2b2lkIGFkZEFuZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5rQnVmZmVy
JiwgVW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisKKyAgICB2b2lkIHJlcGF0Y2hDYWxsZXJzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgQ2FsbGVlJik7CisKIHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVlKFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGll
clVwQ291bnQ+JiYgdGllclVwQ291bnQpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSkpCisgICAgQkJRQ2FsbGVlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBS
ZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4m
JiB0aWVyVXBDb3VudCkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2Rl
LCBpbmRleCwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3RpZXJVcENvdW50KFdURk1vdmUo
dGllclVwQ291bnQpKQogICAgIHsKICAgICB9CiAKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4+IG1fbW92ZUxvY2F0aW9uczsKKyAgICBWZWN0b3I8
Q29kZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPj4gbV9jYWxsTG9jYXRpb25zOwog
ICAgIFJlZlB0cjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKICAgICBS
ZWZQdHI8T01HQ2FsbGVlPiBtX3JlcGxhY2VtZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaWVy
VXBDb3VudD4gbV90aWVyVXBDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggYjQ0MmI2MTYxYmY5MjMzNzU4MTk3NTgx
M2ZmMzgwNmE3MzFhOTIyNi4uNmZhNDM2OWNjZGNhODhlNGI3MGVkNjQ2OWJiNzYzOTgxNGY4ZTg0
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgKQEAgLTg4LDM0ICs4OCwxNiBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgc3Rh
dGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQot
ICAgIHZvaWQgc2V0dXBGcmFtZUluUHJvbG9ndWUoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdh
c21FbnRyeVB0clRhZz4qIGNhbGxlZU1vdmVMb2NhdGlvbiwgQjM6OlByb2NlZHVyZSYgcHJvYywg
QjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB2b2lk
IHNldHVwRnJhbWVJblByb2xvZ3VlKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3Jp
Z2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0aWNf
YXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJT
aXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKICAgICAgICAgc3RhdGljX2Fz
c2VydChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVy
U2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAKLSAgICAgICAgQjM6OlBh
dGNocG9pbnRWYWx1ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6
OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OkludDY0LCBvcmlnaW4pOwotICAgICAgICBnZXRD
YWxsZWVQYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IHsgQjM6OlZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIgfTsKLSAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpF
ZmZlY3RzOjpub25lKCk7Ci0gICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1
bHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIEIzOjpWYWx1
ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpG
cmFtZVBvaW50ZXIsIG9yaWdpbik7Ci0gICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUg
PSBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGJsb2NrLT5hcHBl
bmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKLSAgICAgICAg
ICAgIGdldENhbGxlZVBhdGNocG9pbnQsCi0gICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ2Fs
bGVlKSk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIHpl
cm8gaW50byB0aGUgQ29kZUJsb2NrKiBzcG90IGluIHRoZSBjYWxsIGZyYW1lLAogICAgICAgICAv
LyBidXQgdGhlcmUgYXJlIHBsYWNlcyB0aGF0IGludGVycHJldCBub24tbnVsbCBDb2RlQmxvY2sg
c2xvdCB0byBtZWFuIGEgdmFsaWQgQ29kZUJsb2NrLgogICAgICAgICAvLyBXaGVuIGRvaW5nIHVu
d2luZGluZywgd2UnbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZW50aXJlIHJ1bnRpbWUgaXMg
T0sgd2l0aCBhIG5vbi1udWxsCiAgICAgICAgIC8vIENvZGVCbG9jayBub3QgaW1wbHlpbmcgdGhh
dCB0aGUgQ29kZUJsb2NrIGlzIHZhbGlkLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2lu
dGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIs
IG9yaWdpbik7CiAgICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDb2RlQmxvY2sgPSBibG9jay0+
YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8
QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKICAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCAwKSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggZDRhOWNkNjc3
MTAyYjU4ZTRmYzU5ZTFhMjBhZTU2YjhlMjFjNzQzMC4uN2Q1NTQ3NmQyNmMwZGQ3MGFjZjRmNWEw
MjMxMzNhMTg5MTM0ZGQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVCbG9jay5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
ICNpbmNsdWRlICJXYXNtQkJRUGxhbklubGluZXMuaCIKLSNpbmNsdWRlICJXYXNtQ2FsbGVlLmgi
CiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBA
IC00Nyw3ICs0NiwxNSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBN
ZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bAogewogICAgIFJlZlB0cjxD
b2RlQmxvY2s+IHByb3RlY3RlZFRoaXMgPSB0aGlzOwogCi0gICAgbV9wbGFuID0gYWRvcHRSZWYo
Km5ldyBCQlFQbGFuKGNvbnRleHQsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFu
OjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAg
bV9jYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICBtX2JveGVkQ2FsbGVlcy5yZXNp
emUobV9jYWxsZWVDb3VudCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fY2FsbGVl
Q291bnQ7IGkrKykgeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkgKyBpOworICAgICAgICBtX2NhbGxl
ZXNbaV0gPSBCQlFDYWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1vZHVsZUluZm9y
bWF0aW9uLm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgbWFrZVVuaXF1ZTxU
aWVyVXBDb3VudD4oKSk7CisgICAgICAgIG1fYm94ZWRDYWxsZWVzW2ldID0gQ2FsbGVlQml0czo6
Ym94V2FzbShtX2NhbGxlZXNbaV0uZ2V0KCkpOworICAgIH0KKworICAgIG1fcGxhbiA9IGFkb3B0
UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBtX2NhbGxlZXMsIG1ha2VSZWYobW9kdWxlSW5mb3Jt
YXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxs
YmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0g
KFBsYW4mKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAg
ICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0g
bV9wbGFuLT5lcnJvck1lc3NhZ2UoKTsKQEAgLTU2LDIxICs2MywxOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bAogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBldmVu
dHVhbGx5IGNvbGxlY3QgdGhlIEJCUSBjb2RlLgotICAgICAgICBtX2NhbGxlZXMucmVzaXplKG1f
Y2FsbGVlQ291bnQpOwogICAgICAgICBtX29wdGltaXplZENhbGxlZXMucmVzaXplKG1fY2FsbGVl
Q291bnQpOwogICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50cy5yZXNpemUobV9j
YWxsZWVDb3VudCk7CiAKLSAgICAgICAgbV9wbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVu
c2lnbmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8V2FzbTo6Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSwgUmVmPFdhc206OkNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENhbGxlZSkgewor
ICAgICAgICBtX3BsYW4tPmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5k
ZXgsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlKSB7CiAgICAgICAgICAgICBpZiAoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAg
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2FsbGVl
SW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0gPSBXVEZNb3ZlKHdhc21FbnRy
eXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRz
W2NhbGxlZUluZGV4XSA9IG1fY2FsbGVlc1tjYWxsZWVJbmRleF0tPmVudHJ5cG9pbnQoKTsKKyAg
ICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1f
Y2FsbGVlc1tjYWxsZWVJbmRleF0tPmNvZGUoKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgbV93
YXNtVG9XYXNtRXhpdFN0dWJzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOwot
ICAgICAgICBtX3dhc21Ub1dhc21DYWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2Fs
bHNpdGVzKCk7CiAKICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIH0pLCBX
VEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IGRlYTJmZmEzMTgx
MjAzZjc4YWFhNjFjNzBiZjI5NzFiYzAzMjc5ZWQuLmMxMDc3ZDVkN2Y3NjljMzk3ZmY2ZWNlYTJl
ODk5ZjNjMzQyNGM5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJs
b2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAj
aW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTQwLDkgKzQxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgQ2FsbGVlOwotc3RydWN0IENvbnRleHQ7CiBjbGFz
cyBCQlFQbGFuOworc3RydWN0IENvbnRleHQ7CiBjbGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uOwogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7CkBAIC03Niw3ICs3
Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRoZXNlIHR3byBjYWxsZWUgZ2V0dGVycyBhcmUgb25s
eSB2YWxpZCBvbmNlIHRoZSBjYWxsZWVzIGhhdmUgYmVlbiBwb3B1bGF0ZWQuCiAKLSAgICBDYWxs
ZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSYgZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5j
dGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENv
dW50KCkpOwpAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxlZSk7CiAgICAgICAgIHJldHVybiAqY2FsbGVlOwogICAgIH0KKwogICAgIENhbGxlZSYg
d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKQEAgLTk2
LDcgKzk3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRl
eF0uZ2V0KCk7CiAgICAgfQogCi0gICAgQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgQkJRQ2FsbGVlJiB3
YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4
U3BhY2UpCiAgICAgewogICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwpA
QCAtMTExLDYgKzExMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmbV93YXNtSW5kaXJl
Y3RDYWxsRW50cnlQb2ludHNbY2FsbGVlSW5kZXhdOwogICAgIH0KIAorICAgIHZvaWQqKiBib3hl
ZENhbGxlZUxvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRl
eFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CisgICAgICAgIHVuc2lnbmVkIGNhbGxl
ZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOworICAg
ICAgICByZXR1cm4gJm1fYm94ZWRDYWxsZWVzW2NhbGxlZUluZGV4XTsKKyAgICB9CisKICAgICBi
b29sIGlzU2FmZVRvUnVuKE1lbW9yeU1vZGUpOwogCiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlOyB9CkBAIC0xMjQsMTEgKzEzMiwxMSBAQCBwcml2YXRlOgogICAg
IHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291
bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7Ci0gICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBt
X2NhbGxlZXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX29wdGltaXplZENhbGxlZXM7
Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRI
YXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOworICAgIFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVl
Pj4gbV9jYWxsZWVzOworICAgIFZlY3RvcjxSZWZQdHI8T01HQ2FsbGVlPj4gbV9vcHRpbWl6ZWRD
YWxsZWVzOworICAgIFZlY3Rvcjx2b2lkKj4gbV9ib3hlZENhbGxlZXM7CisgICAgSGFzaE1hcDx1
aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERlZmF1
bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7
Ci0gICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNt
Q2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRy
VGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47
CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKaW5kZXggYTIzNzlmZDU4
OWM4OWRmNjM1N2U2ZTQ0MWJlZDJhNTE4NzM5Y2EzZS4uYzc4YjQ0M2M1OTFlODcwMzRiNDE5NWVj
YTAyNzI4ZGVmODBjYzg5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUVtYmVkZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVk
ZGVyLmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogbmFtZXNwYWNlIFdhc20g
ewogCiBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0OworY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlOwogY2xhc3MgSW5zdGFuY2U7CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbjsKIHN0cnVj
dCBNb2R1bGVJbmZvcm1hdGlvbjsKQEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgU2lnbmF0dXJlOwog
c3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7CiAKIC8vIENyZWF0ZSB3cmFwcGVyIGNvZGUg
dG8gY2FsbCBmcm9tIGVtYmVkZGVyIC0+IFdlYkFzc2VtYmx5LgotdXNpbmcgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4oQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1
aW50MzJfdCk+OwordXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjx2
b2lkKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIEVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSk+OwogCiAv
LyBDYWxsZWQgYXMgc29vbiBhcyBhbiBleGNlcHRpb24gaXMgZGV0ZWN0ZWQuIFRoZSByZXR1cm4g
dmFsdWUgaXMgdGhlIFBDIHRvIGNvbnRpbnVlIGF0LgogdXNpbmcgVGhyb3dXYXNtRXhjZXB0aW9u
ID0gdm9pZCogKCopKEV4ZWNTdGF0ZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMDY2OWJiNDA3ZTI5
NTkzNjIyZmNjYThlNTE5MTE5NWRkOWI0NmYzYi4uZWEwZTBiNjU4ZTllNDU1ZTliMDFjZGFlMmI0
Nzk2YjYyMmI4MGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApA
QCAtMjg3LDEwICsyODcsMTUgQEAgaW5saW5lIGJvb2wgaXNWYWxpZE5hbWVUeXBlKEludCB2YWwp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdHJ1Y3QgVW5saW5rZWRNb3ZlQW5kQ2FsbCB7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRpb247CisgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbExvY2F0aW9uOworfTsKKwogc3RydWN0IFVubGlua2VkV2FzbVRv
V2FzbUNhbGwgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBDb2Rl
TG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbjsKLSAgICBzaXpl
X3QgZnVuY3Rpb25JbmRleFNwYWNlOworICAgIHNpemVfdCB0YXJnZXRGdW5jdGlvbkluZGV4U3Bh
Y2U7CisgICAgVW5saW5rZWRNb3ZlQW5kQ2FsbCB1bmxpbmtlZE1vdmVBbmRDYWxsOwogfTsKIAog
c3RydWN0IEVudHJ5cG9pbnQgewpAQCAtMzEzLDEwICszMTgsMTIgQEAgc3RydWN0IFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb24gewogICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+KjsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mU2lnbmF0dXJlSW5kZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgZW50cnlwb2ludExvYWRMb2NhdGlv
bik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
biwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOyB9CiAKICAgICAvLyBGSVhNRTogUGFjayBzaWdu
YXR1cmUgaW5kZXggYW5kIGNvZGUgcG9pbnRlciBpbnRvIG9uZSA2NC1iaXQgdmFsdWUuIFNlZSA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMT4uCiAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggeyBTaWduYXR1cmU6OmludmFsaWRJbmRleCB9Owog
ICAgIExvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uOworICAgIHZvaWQqKiBib3hl
ZENhbGxlZUxvYWRMb2NhdGlvbjsKIH07CiB1c2luZyBGdW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0
b3I8V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUluc3RhbmNlLmgKaW5kZXggZjRmMzUwODdlMjU2ZDA5MmNlNzRiMjFiODQ0MGE5
MzcyNWQxNjY4NS4uN2UyMTI0Zjc2YzYzYmY3NWUyZGIxMjM0OWQ5NTBiMGU5MzY4NDBjYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTEzMCw2ICsxMzAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRM
b2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB7IG51bGxwdHIgfTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHVi
OwogICAgICAgICB2b2lkKiBpbXBvcnRGdW5jdGlvbiB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBl
bWJlZGRpbmcsIHRoaXMgaXMgYSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+LgorICAgICAgICB2b2lk
KiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24geyBudWxscHRyIH07CiAgICAgfTsKICAgICB1bnNp
Z25lZCBudW1JbXBvcnRGdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX251bUltcG9ydEZ1bmN0
aW9uczsgfQogICAgIEltcG9ydEZ1bmN0aW9uSW5mbyogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVf
dCBpbXBvcnRGdW5jdGlvbk51bSkKQEAgLTE0MSw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKHNpemVfdCBpbXBv
cnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51
bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1
bmN0aW9uSW5mbywgd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZldhc21Ub0VtYmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0p
IHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1w
b3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdh
c21Ub0VtYmVkZGVyU3R1Yik7IH0KICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVu
Y3Rpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSAr
IGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBzdGF0
aWMgc2l6ZV90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1
bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICog
c2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rp
b25JbmZvLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUKiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oJmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlv
bk51bSktPmltcG9ydEZ1bmN0aW9uKTsgfQogCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoSW1w
b3J0RnVuY3Rpb25JbmZvKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2
NF90KT4oc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykpLCAiV2UgcmVseSBvbiB0aGlzIGZvciB0
aGUgYWxpZ25tZW50IHRvIGJlIGNvcnJlY3QiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKaW5kZXggYTBiYjZjZjZkOTAz
MDY3NDQzNTZkMjg4ZWFiMGMyYjUyNTIwNTYyYS4uY2ZhZWFmMmViYzBiMTY0M2NlM2RhNmIxOGYx
MGU1MGU3NzBiMGE1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKQEAgLTU0LDE1ICs1NCwxNSBAQCBuYW1lc3BhY2Ug
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJv
c2UgPSBmYWxzZTsKIH0KIAotT01HRm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4o
Q29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYg
Y2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9y
eU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorT01HRm9yT1NSRW50cnlQbGFuOjpP
TUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUs
IFJlZjxCQlFDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJf
dCBsb29wSW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
CiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlv
biY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQogICAgICwg
bV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5j
b2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBt
X2NhbGxlZShXVEZNb3ZlKGNhbGxlZSkpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25J
bmRleCkKICAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUp
OworICAgIHNldE1vZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5ydW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUt
PmNvZGVCbG9ja0ZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50
cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZv
ciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUu
Z2V0KCkpKTsKQEAgLTgxLDQ1ICs4MSwzMyBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VSVCh2YWxp
ZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCkpKTsKIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxz
OwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwogICAgIHVuc2lnbmVkIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0g
cGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2Fs
bHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCks
IG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25J
bmRleCwgbV9sb29wSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fY29kZUJsb2NrLT5t
X3dhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRy
eU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOwogCiAgICAgaWYgKFVOTElLRUxZ
KCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2Nr
KSwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5n
IHRvIHRpZXIgdXAgIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgRW50cnlwb2ludCBvbWdFbnRyeXBvaW50OwogICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwg
SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSkgewogICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayks
IG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1
bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBt
YWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVl
PiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCk7CisgICAgY2FsbGVl
LT5lbnRyeXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoY29udGV4dC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBjYWxsZWUtPmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9
IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkg
ZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2Fz
bUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBv
aW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkg
PT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50
cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShv
bWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5u
YW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKICAgICB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQu
dmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5w
dHIoKSkpOwotICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7Ci0KICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9p
bnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+
bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAgICAg
ICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJl
dGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2Fz
bUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNv
bnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxs
ZWUgPSBtX2NvZGVCbG9jay0+d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2Fs
bC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFk
ZEFuZExpbmtDYWxsZXIobG9ja2VyLCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENh
bGwpOwogICAgICAgICB9CiAgICAgfQogICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhy
ZWFkcygpOwpAQCAtMTMyLDE5ICsxMjAsNiBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgp
LT5vc3JFbnRyeVRyaWdnZXJzKClbbV9sb29wSW5kZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJS
ZWFzb246OkNvbXBpbGF0aW9uRG9uZTsKICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3Vu
dCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01HRm9yT1NSRW50cnkgPSBUaWVyVXBDb3VudDo6
Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAgICB9Ci0gICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgT01H
IGNhbGxlZSBpcyBhZGRlZCB3aGlsZSB3ZSByZWxlYXNlIG1fY29kZUJsb2NrLT5sb2NrLgotICAg
ICAgICAvLyBVbnRpbCB3ZSBhZGQgT01HRm9yT1NSRW50cnkgY2FsbGVlIHRvIEJCUUNhbGxlZSdz
IG1fb3NyRW50cnlDYWxsZWUsIHRoaXMgbmV3IE9NRyBmdW5jdGlvbiBsaW5raW5nIGRvZXMgbm90
IGhhcHBlbiBmb3IgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUuCi0gICAgICAgIC8vIFdlIHJl
LWxpbmsgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgYWdhaW4gbm90IHRvIG1pc3MgdGhhdCBj
aGFuY2UuCi0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxz
aXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNl
IDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQot
ICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhp
dFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVu
dHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwotICAgICAgICB9CiAgICAg
fQogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRp
ZXIgdXAgY291bnQgYXQ6ICIsIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAg
ICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaAppbmRleCAwMTUxZGE2NjVhOTY4MzI4
Zjk1MDM4ZjViNTBjMDg1NzYxZjA1ZGU3Li5kNTZlYTQyMTdkZDcxMGQ1NzUxNjQ1YTliM2ViMDE4
YzQzNTBkMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01H
Rm9yT1NSRW50cnlQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbi5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29sIG11
bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8g
Tm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQ
bGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zv
ck9TUkVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgUmVmPEJCUUNhbGxlZT4mJiwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBD
b21wbGV0aW9uVGFzayYmKTsKKyAgICBPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxN
b2R1bGU+JiYsIFJlZjxCQlFDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQz
Ml90IGxvb3BJbmRleCwgQ29kZUJsb2NrJiwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6
CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFy
ZW50IGNsYXNzZXMuLi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAppbmRleCBhODA1ZDAxNmZiOTkyODY0YzdhMDNjODI2NmNjNWQ0ZmI5ODY1YTY5Li5lMGIxMDEw
MTRjYzNmYmUxNGRiM2M3MGIyYTA1ZGNkYmM1OTFmMTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC01NCwxMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdh
c21PTUdQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
fQogCi1PTUdQbGFuOjpPTUdQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9k
dWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25U
YXNrJiYgdGFzaykKK09NR1BsYW46Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVs
ZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2Nr
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29u
c3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkp
LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwg
bV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsK
LSAgICBzZXRNb2RlKG1vZGUpOworICAgIHNldE1vZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2su
cHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0ZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5J
ZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgT01HIHBsYW4gZm9yICIs
IGZ1bmN0aW9uSW5kZXgsICIgb2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQo
KSkpOwpAQCAtNzksNTcgKzc5LDQ4IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9ydCkKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1
bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIHVuc2lnbmVk
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRl
eHQ7Ci0gICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29u
dGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlv
bk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CisgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24s
IHNpZ25hdHVyZSwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21w
aWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CiAKICAg
ICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgZmFpbCho
b2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigp
LCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5k
ZXgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFbnRyeXBvaW50IG9tZ0VudHJ5
cG9pbnQ7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50
SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShs
aW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgIEJhc2U6OmZhaWwoaG9s
ZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxl
IHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlv
bkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgb21nRW50cnlwb2ludC5j
b21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICBSZWY8T01HQ2Fs
bGVlPiBvbWdDYWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7
CisgICAgb21nQ2FsbGVlLT5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIz
OjpDb21waWxhdGlvbj4oCiAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21w
aWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NRyBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIs
IG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1h
a2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEo
KSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsK
IAotICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VB
bmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7
CisgICAgb21nQ2FsbGVlLT5lbnRyeXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1v
dmUoY29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgQkJRQ2FsbGVlJiBiYnFDYWxs
ZWUgPSAqbV9jb2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdOwogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3Io
bW9kZSgpKSk7Ci0gICAgICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3Zl
KHVubGlua2VkQ2FsbHMpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVy
KHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxl
ZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxv
Y2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsKLSAgICAgICAgZW50cnlw
b2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWFr
ZSBzdXJlIHdlIHB1Ymxpc2ggb3VyIGNhbGxlZSBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGxpbmsg
b3VyIGNhbGxzaXRlcy4gVGhpcyBlbmFibGVzIHVzIHRvIGVuc3VyZSB3ZQogICAgICAgICAvLyBh
bHdheXMgY2FsbCB0aGUgZmFzdGVzdCBjb2RlLiBBbnkgZnVuY3Rpb24gbGlua2VkIGFmdGVyIHVz
IHdpbGwgc2VlIG91ciBuZXcgY29kZSBhbmQgdGhlIG5ldyBjYWxsc2l0ZXMsIHdoaWNoIHRoZXkK
ICAgICAgICAgLy8gd2lsbCB1cGRhdGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhl
aXIgY29kZSBiZWZvcmUgd2UgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFm
dGVyIHdlIHJlbGVhc2UKICAgICAgICAgLy8gdGhlIGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8g
YmUgcHVibGlzaGVkIHRvby4KICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5j
dGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX29w
dGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IG9tZ0NhbGxlZS5jb3B5UmVmKCk7CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEJCUUNhbGxlZSYgYmJxQ2FsbGVlID0gKnN0YXRpY19jYXN0
PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQo
KSk7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJicUNhbGxlZS50aWVyVXBD
b3VudCgpLT5nZXRMb2NrKCkpOwotICAgICAgICAgICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50
KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50
KG9tZ0NhbGxlZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgYmJxQ2FsbGVlLnRpZXJVcENvdW50
KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25T
dGF0dXM6OkNvbXBpbGVkOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNh
bGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNh
bGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1w
b3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVC
bG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2Rl
KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29k
ZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+
KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5j
YWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2lu
dCkpOworCisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykg
eworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxsZWUgPSBtX2NvZGVCbG9jay0+d2Fz
bUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4
U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtDYWxsZXIoaG9sZGVy
LCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0xMzksMzAgKzEzMCwxNCBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25F
ZmZvcnQpCiAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CiAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0
IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KIAotICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRp
cmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKKyAgICBt
X2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4
XSA9IG9tZ0NhbGxlZS0+Y29kZSgpOworICAgIG1fY29kZUJsb2NrLT5tX2JveGVkQ2FsbGVlc1tt
X2Z1bmN0aW9uSW5kZXhdID0gQ2FsbGVlQml0czo6Ym94V2FzbShvbWdDYWxsZWUucHRyKCkpOwog
ICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0K
LSAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwg
OiBjYWxsc2l0ZXMpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbklu
dGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQ
b2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMg
IiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlJlcGF0Y2hp
bmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxs
LmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBv
aW50KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNt
Q2FsbHNpdGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbHMobV9jb2Rl
QmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7Ci0gICAgICAgICAgICBpZiAoT01HQ2Fs
bGVlKiByZXBsYWNlbWVudENhbGxlZSA9IHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJs
b2NrLT5tX2NhbGxlZXNbaV0uZ2V0KCkpLT5yZXBsYWNlbWVudCgpKQotICAgICAgICAgICAgICAg
IHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsK
LSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBz
dGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NvZGVCbG9jay0+bV9jYWxsZWVzW2ldLmdldCgpKS0+
b3NyRW50cnlDYWxsZWUoKSkKLSAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlD
YWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgYmJxQ2Fs
bGVlLnJlcGF0Y2hDYWxsZXJzKGhvbGRlciwgb21nQ2FsbGVlLmdldCgpKTsKICAgICB9CiAKLSAg
ICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01H
ICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIHN0YXRpY19j
YXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5n
ZXQoKSktPnRpZXJVcENvdW50KCktPmNvdW50KCkpOworICAgIGRhdGFMb2dMbklmKFdhc21PTUdQ
bGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUcgIiwgbV9mdW5jdGlvbkluZGV4LCAi
IHdpdGggdGllciB1cCBjb3VudCBhdDogIiwgbV9jb2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0
aW9uSW5kZXhdLmdldCgpLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0ZSho
b2xkTG9jayhtX2xvY2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQ
bGFuLmgKaW5kZXggY2I3OWI0MzlkNGU5OTRkODcwZTlkYzkwODljNDNhN2Y1ODYwMjU2Ni4uZTY4
OWQ1NjY1N2E4ZDFiYjliZGU4MmVlMDUxNTM1NDg3MGJlODMwOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBi
b29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRv
IHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAg
IE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworICAgIE9NR1BsYW4oQ29udGV4dCosIFJl
ZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYsIENvbXBsZXRp
b25UYXNrJiYpOwogCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlw
IGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggMWFkZThhOGU5NDQ5ZGE4YjNmMDZj
ZDNkNjk0MjU3OTJlNmM1ZGY5YS4uYTFlNTdkNDMzMDBkZDM4YmRjM2YxOWExZWY1MzhhNDYwYjFh
OWQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNw
cApAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21w
aWxlKFRpZXJVcENvdW50JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFjZQogICAgIGlmIChjb21w
aWxlKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgInRyaWdn
ZXJPTUdSZXBsYWNlbWVudCBmb3IgIiwgZnVuY3Rpb25JbmRleCk7CiAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5z
dGFuY2UtPm1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6
ZG9udEZpbmFsaXplKCkpKTsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3
IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2Ut
Pm1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBQbGFuOjpkb250RmluYWxpemUo
KSkpOwogICAgICAgICBlbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCiAgICAg
ICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigpOwpAQCAtMTk3LDkgKzE5NywxNCBAQCBz
dGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQm
IGNvbnRleHQsIEJCUUNhbGxlZSYgYwogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRl
Y3R1cmUuCiAjZW5kaWYKLSAgICAvLyA0LiBDb25maWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRv
IGp1bXAgdG8gT1NSIGVudHJ5IGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rp
b24uCisKKyAgICAvLyA0LiBVcGRhdGUgdGhlIGNhbGxlZSBzbG90IGluIHRoZSBjYWxsIGZyYW1l
IHRvIHRoZSBPU1IgZW50cnkgY2FsbGVlLgorICAgIHZvaWQqKiBzdGFja1BvaW50ZXIgPSBiaXR3
aXNlX2Nhc3Q8dm9pZCoqPihjb250ZXh0LnNwKCkpOworICAgICooc3RhY2tQb2ludGVyICsgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlIC0gMSkgPSBDYWxsZWVCaXRzOjpib3hXYXNtKCZvc3JFbnRyeUNh
bGxlZSk7CisKKyAgICAvLyA1LiBDb25maWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRvIGp1bXAg
dG8gT1NSIGVudHJ5IGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rpb24uCiAg
ICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDxVQ1BV
UmVnaXN0ZXI+KGJ1ZmZlcik7Ci0gICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIx
KSA9IGJpdHdpc2VfY2FzdDxVQ1BVUmVnaXN0ZXI+KG9zckVudHJ5Q2FsbGVlLmVudHJ5cG9pbnQo
KS5leGVjdXRhYmxlQWRkcmVzczw+KCkpOworICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihvc3JFbnRyeUNhbGxlZS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3M8PigpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJPU1JFbnRyeU5vdyhQcm9iZTo6Q29udGV4dCYgY29udGV4dCkKQEAgLTM2NSw3ICszNzAsNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KFByb2JlOjpDb250ZXh0JiBj
b250ZXh0KQogCiAgICAgaWYgKHN0YXJ0T1NSRW50cnlDb21waWxhdGlvbikgewogICAgICAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HT1NSIGZvciAiLCBm
dW5jdGlvbkluZGV4KTsKLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9N
R0Zvck9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihp
bnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlv
bkluZGV4LCBsb29wSW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgp
KSk7CisgICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRy
eVBsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1v
ZHVsZSgpKSwgUmVmPFdhc206OkJCUUNhbGxlZT4oY2FsbGVlKSwgZnVuY3Rpb25JbmRleCwgbG9v
cEluZGV4LCBjb2RlQmxvY2ssIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3Vy
ZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VM
WSghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRG
b3JDb21wbGV0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5j
cHAKaW5kZXggNzM1MjIwMjg5MzdjNmRhYzFmYzQ3M2M3ZTRjZGM2NDk1OGNlOGVhNi4uZjEzZjY0
NTAyMGIyZjc2MGIyNGVjY2JmNzNhMGM3YjNjZDlkNGRkMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtNDIsMjEgKzQyLDE1IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlv
bkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQordm9p
ZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNv
bnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUqIHNlbGYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUp
CiB7CiAgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVy
RW50cnlwb2ludEpJVDsKIAotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1
bmN0aW9uPigpOwogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogCiAgICAgLy8gRklY
TUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjUzMjEKICAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3Zl
TG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQu
c3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1
bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbGVlTW92ZUxvY2F0aW9uKTsKLSAgICB9
KTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKENhbGxlZUJp
dHM6OmJveFdhc20oc2VsZikpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKIAogICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVk
UmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAgICAgUmVnaXN0ZXJTZXQgdG9TYXZl
ID0gcGlubmVkUmVncy50b1NhdmUobW9kZSk7CkBAIC02OSw3ICs2Myw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25D
b250ZXh0JiBjb21wCiAjZW5kaWYKIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVy
c1RvU3BpbGwodG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6OkZy
YW1lUG9pbnRlckJhc2VkKTsKLSAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lz
dGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7CisgICAgc2VsZi0+ZW50cnlwb2ludCgpLmNhbGxlZVNh
dmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwogCiAgICAgdW5zaWduZWQgdG90YWxGcmFt
ZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7CiAgICAgdG90
YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygp
OwpAQCAtMTI1LDkgKzExOSwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4g
Y3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgICAgICB9
CiAKICAgICAgICAgZW1pdFRocm93V2FzbVRvSlNFeGNlcHRpb24oaml0LCBHUFJJbmZvOjphcmd1
bWVudEdQUjIsIGFyZ3VtZW50c0luY2x1ZGVJNjQgPyBFeGNlcHRpb25UeXBlOjpJNjRBcmd1bWVu
dFR5cGUgOiBFeGNlcHRpb25UeXBlOjpJNjRSZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNvbXBpbGF0aW9uQ29udGV4dC5l
bWJlZGRlck1vdmVBbmRDYWxsID0gVW5saW5rZWRNb3ZlQW5kQ2FsbCB7IH07CiAgICAgR1BSUmVn
IHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyOwogCiAgICAgewpAQCAtMTk4LDYgKzE5MywxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYg
Y29tcAogCiAgICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwog
ICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0
LmVtYmVkZGVyTW92ZUFuZENhbGwtPm1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAg
ICBqaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICB9CiAKICAgICBpZiAoISFp
bmZvLm1lbW9yeSkgewpAQCAtMjIxLDEyICsyMjAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29t
cAogICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFz
ZU1lbW9yeSwgc2NyYXRjaE9yU2l6ZSwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgfQogCi0gICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7
Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8u
aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBp
bmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFt1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5k
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwg
ZnVuY3Rpb25JbmRleFNwYWNlIH0pOwotICAgIH0pOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5l
bWJlZGRlck1vdmVBbmRDYWxsLT5jYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJs
ZU5lYXJDYWxsKCk7CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zm
c2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZz
ZXQucmVnKCkuZ3ByKCk7CkBAIC0yNjYsOCArMjYwLDYgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNv
bXAKIAogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKLQot
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaAppbmRleCBiNGI5OGQxNTliMjg0Yjdl
YzMyM2FhNTAyYzAzZjkyMWMxMmIwM2E5Li45M2FhMjRkOTY4MGFmZmZkM2I3YTk2ZDE5MWZjZjhj
MzkxZDAyMzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKQEAg
LTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotc3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21w
aWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgpOwordm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25D
b250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKiwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCAwNTdhYTcwMThiNDRhOGZiYjRhOGQ0NzExM2JkYmVi
ODc0OWRlYzg3Li5mZDNhZTE4MjA0ZjM1N2JiMzEzNWNlMzU1ZTllNmNjZDIyYTgzOWU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcApAQCAtNDY1LDYgKzQ2NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAg
ICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UganVzdCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQg
d2Ugc2hvdWxkIHRlYWNoIHRoZSBNb2R1bGUKICAgICAgICAgLy8gaG93IHRvIHJlcGF0Y2ggdXM6
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1
NzAKKyAgICAgICAgaml0LmxvYWRQdHIoYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwog
ICAgICAgICBqaXQubG9hZFB0cihlbnRyeXBvaW50TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIp
OwogICAgICAgICBqaXQuY2FsbChzY3JhdGNoR1BSLCBXYXNtRW50cnlQdHJUYWcpOwogICAgIH0K
QEAgLTUzNiwxMCArNTM4LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgcmV0dXJu
IG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBq
c0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2Nh
dGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBX
YXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2Fz
bUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRy
LCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJs
eUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNt
VG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2Vi
QXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAg
IGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBp
bnN0YW5jZSk7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmlzTGFyZ2VBbGxv
Y2F0aW9uKCksICJXZWJBc3NlbWJseUZ1bmN0aW9uIHNob3VsZCBiZSBhbGxvY2F0ZWQgbm90IGlu
IGxhcmdlIGFsbG9jYXRpb24gc2luY2UgaXQgaXMgSlNDYWxsZWUuIik7CiAgICAgcmV0dXJuIGZ1
bmN0aW9uOwpAQCAtNTUxLDEwICs1NTMsMTAgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1X
ZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYg
anNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9j
YXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5j
dGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4KQogICAgIDogQmFzZSB7IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSB9Ci0gICAgLCBtX2pzRW50cnlwb2ludCB7IGpzRW50cnlwb2ludC5lbnRyeXBvaW50KCkgfQot
ICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24gfQorICAgICwgbV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9p
bnQuY29kZSgpIH0KKyAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgs
IHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlv
biB9CiB7IH0KIAogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKaW5kZXggOThjMzQ2NGNkMDcyZDY0
NDVlNzdkZTRmODhkZTBjY2UzYjQ5NWUzNC4uN2RkZjM5ZDAwOGY0YjY0MjlmOWY3YTEzMWY3Zjlk
MzlhNzAxZDE2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uaApAQCAtNjIsMTEgKzYyLDEyIEBAIHB1YmxpYzoKIAogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1
bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2Fs
bGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2Nh
dGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAg
ICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2ltcG9ydGFibGVGdW5jdGlvbi5zaWduYXR1cmVJbmRleDsgfQogICAgIFdhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbjsg
fQorICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aW1wb3J0YWJsZUZ1bmN0aW9uLmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOyB9CiAgICAgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbiBpbXBvcnRhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2ltcG9ydGFibGVGdW5jdGlvbjsgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4ganNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQpAQCAtNzgs
NiArNzksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNz
ZW1ibHlGdW5jdGlvbiwgbV9pbXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9pbXBvcnRhYmxlRnVuY3Rpb24p
ICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRM
b2NhdGlvbigpOyB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
anNDYWxsRW50cnlwb2ludCgpCiAgICAgewpAQCAtOTEsNyArOTMsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0
dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgdm9pZCoq
IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3co
KTsKICAgICBwdHJkaWZmX3QgcHJldmlvdXNJbnN0YW5jZU9mZnNldCgpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCmluZGV4IDkyZGRjZjc4NmU4MTAwNWEyMWUxZjhiMWY1MGE5ZDIwOWY5ZTY5Mjku
LjdhZjFhMDQ1MmFlMGRmN2ViZGMzYzI0ZDA5ZmZmYmUwN2MxMGUwYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKQEAgLTE5Myw2ICsxOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogCiAgICAg
ICAgICAgICBXYXNtOjpJbnN0YW5jZSogY2FsbGVlSW5zdGFuY2UgPSBudWxscHRyOwogICAgICAg
ICAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9p
bnRMb2FkTG9jYXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVl
TG9hZExvY2F0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9
IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKIAogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMg
YW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKQEAgLTIwNSw2ICsyMDYsNyBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25h
dHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwogICAgICAgICAgICAg
ICAgICAgICBjYWxsZWVJbnN0YW5jZSA9ICZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3Rh
bmNlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSB3YXNt
RnVuY3Rpb24tPmVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAg
Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSB3YXNtRnVuY3Rpb24tPmJveGVkQ2FsbGVlTG9hZExv
Y2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
aW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUlu
ZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9z
dXJlXV0uCkBAIC0yMjMsNiArMjI1LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAg
ICAgICAgIGF1dG8qIGluZm8gPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9u
SW5mbyhpbXBvcnQua2luZEluZGV4KTsKICAgICAgICAgICAgIGluZm8tPnRhcmdldEluc3RhbmNl
ID0gY2FsbGVlSW5zdGFuY2U7CiAgICAgICAgICAgICBpbmZvLT53YXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiA9IGVudHJ5cG9pbnRMb2FkTG9jYXRpb247CisgICAgICAgICAgICBpbmZvLT5ib3hl
ZENhbGxlZUxvYWRMb2NhdGlvbiA9IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOwogICAgICAgICAg
ICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbjxXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+PihpbXBvcnQua2luZEluZGV4KS0+c2V0KHZtLCBtX2luc3RhbmNlLmdldCgpLCBmdW5j
dGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzQ3LDkgKzM1MCwxMCBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBm
dW5jLgogICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUg
PSBjb2RlQmxvY2stPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoaW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5
cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAg
ICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxs
ZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJ
bmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2Fz
bTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCBmaWVsZCwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2Uu
Z2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwg
Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIHdy
YXBwZXIgPSBmdW5jdGlvbjsKICAgICAgICAgfQogCkBAIC00NjAsNyArNDY0LDggQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpT
T2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFdhc206OkNh
bGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
KTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRM
b2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9h
ZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7
Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0
IiwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50
TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICB2b2lkKiogYm94ZWRD
YWxsZWVMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5j
ZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9u
LCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAg
bV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICB9CiAgICAg
fQpAQCAtNTc1LDEzICs1ODAsMTQgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+ZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIFdh
c206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50
TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENh
bGxlZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2Fz
bTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxv
Y2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAvLyBX
aGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAu
CiAgICAgICAgICAgICAvLyBEb2VzIChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0cy5mb28gPT09
IHRhYmxlLmdldCgwKT8KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1
bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIHZt
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVy
ZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQo
KSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWdu
YXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWdu
YXR1cmVJbmRleCk7CiAKICAgICAgICAgICAgIG1faW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgp
LT5zZXQoZWxlbWVudEluZGV4LCBmdW5jdGlvbik7CiAgICAgICAgICAgICArK2VsZW1lbnRJbmRl
eDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAppbmRleCBjZGU0ZjNjZjI2MDRhZGQ3NmNjMDRmYjIy
NGY5YTUyYmQyZGEwMzc2Li42Mjg2MmI0MTE3ODQ2NGU2MTNlM2U3OTMwNDI2NzMzMDY1MGU4MTBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCkBAIC02MCw3ICs2MCw5IEBAIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRz
PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bSksICJXZSBzaG91bGQgbmV2ZXIgZG91Ymxl
IHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwogICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXND
b25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsg
c2lnbmF0dXJlSW5kZXgsICZpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8o
aW1wb3J0SW5kZXgpLT53YXNtVG9FbWJlZGRlclN0dWIgfSApOworICAgIGF1dG8gaW1wb3J0RnVu
Y3Rpb25JbmZvID0gaW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9y
dEluZGV4KTsKKyAgICBzdGF0aWMgdm9pZCogbnVsbEJveGVkQ2FsbGVlID0gbnVsbHB0cjsKKyAg
ICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgJmltcG9ydEZ1bmN0aW9u
SW5mby0+d2FzbVRvRW1iZWRkZXJTdHViLCAmbnVsbEJveGVkQ2FsbGVlIH0pOwogICAgIGNvbnN0
IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhl
Y3V0YWJsZSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGluc3Rh
bmNlKTsKICAgICByZXR1cm4gcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378861</attachid>
            <date>2019-09-16 07:55:31 -0700</date>
            <delta_ts>2019-09-16 09:55:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201799-20190916075529.patch</filename>
            <type>text/plain</type>
            <size>119696</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDRkYmQ0YWUxODlmMDYyMGQ2N2I3YzlkZmMyZTg4NDc5ZGExZTQ0Li5mNDhiZGM1Njc5ZWFhOWVh
MTZiYmNkNGE1YzIzOThkN2EyZDQ3YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxOS0wOS0xNiAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBI
b3dldmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGlu
dGVycHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGlj
aCBmdW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMg
dGhlIGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRl
ciwgc28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdy
aXRpbmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0
aGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0
byB0aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBn
ZW5lcmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdl
IGtlZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAg
Y29kZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAg
LSBDYWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBj
YWxscywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBK
Uy10by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogd2Fz
bS10by13YXNtIHN0dWIsIEpTLXRvLXdhc20gc3R1YiAoY2FsbGVlIGZyYW1lKSwgd2FzbS10by1K
UyBzdHViLCBPTUcgb3NyIGVudHJ5CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhbHNvIGNoYW5n
ZSBpdCBzbyB0aGF0IHRoZSBjYWxsZWUga2VlcHMgdHJhY2sgb2YgaXRzIGNhbGxlcnMsIGluc3Rl
YWQgb2YgaGF2aW5nIGEgZ2xvYmFsIG1hcHBpbmcKKyAgICAgICAgb2YgY2FsbHMgaW4gdGhlIFdh
c206OkNvZGVCbG9jay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVwYXRjaCBhbGwgY2FsbGVy
cyBvZiBhIGdpdmVuIENhbGxlZSB3aGVuIGl0IHRpZXJzIHVwLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNl
QW5kQ29tcGlsZUFpcik6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6QkJRUGxhbik6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uaDoKKyAgICAgICAgKiB3YXNt
L1dhc21CQlFQbGFuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjppbml0
aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZS5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cmVwYXRjaE1vdmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZXBhdGNoQ2FsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6YWRkQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRQ2FsbGVlOjphZGRBbmRMaW5rQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJR
Q2FsbGVlOjpyZXBhdGNoQ2FsbGVycyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVlLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6ZW50cnlwb2ludCk6CisgICAgICAgIChKU0M6Oldh
c206OkNhbGxlZTo6Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OnNldHVwRnJhbWVJblBy
b2xvZ3VlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogd2FzbS9XYXNt
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6ZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206
OkNvZGVCbG9jazo6d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSk6CisgICAgICAgICogd2FzbS9XYXNtRW1iZWRkZXIuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbik6CisgICAgICAg
ICogd2FzbS9XYXNtSW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om9m
ZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxh
bjo6T01HRm9yT1NSRW50cnlQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50
cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6T01HUGxhbik6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9NR1JlcGxhY2VtZW50Q29tcGlsZSk6
CisgICAgICAgIChKU0M6Oldhc206OmRvT1NSRW50cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjp0
cmlnZ2VyT1NSRW50cnlOb3cpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20v
anMvSlNUb1dhc20uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xv
dyk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpl
dmFsdWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUpOgor
CiAyMDE5LTA5LTE1ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGVhayBvZiBOU01hcFRhYmxlIGluIC1bSlNWaXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVm
ZXJlbmNlOndpdGhPd25lcjpdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
YTZjMGYwMjc1ZTNmMWU1Y2FkNDFlNmE0YzhhNzYyNWViMDc2YjJlMi4uMzA1MjAwNzQxMTUyNjc1
NWI5NTM3N2ExYzg3ZTk0NjgyZWU0ODFiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtNDYzLDYgKzQ2MywxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIGFzc2VtYmxlci9YODZSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxl
ci9YODZfNjRSZWdpc3RlcnMuaAogCisgICAgYjMvQjNDb21tb24uaAorICAgIGIzL0IzQ29tcGls
YXRpb24uaAorICAgIGIzL0IzVHlwZS5oCisKICAgICBiaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNh
bGwuaAogICAgIGJpbmRpbmdzL1NjcmlwdE9iamVjdC5oCiAgICAgYmluZGluZ3MvU2NyaXB0VmFs
dWUuaApAQCAtMTAwMSw2ICsxMDA1LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBydW50aW1lL1dyaXRlQmFycmllci5oCiAgICAgcnVudGltZS9X
cml0ZUJhcnJpZXJJbmxpbmVzLmgKIAorICAgIHdhc20vV2FzbUNhbGxlZS5oCiAgICAgd2FzbS9X
YXNtQ2FwYWJpbGl0aWVzLmgKICAgICB3YXNtL1dhc21Db2RlQmxvY2suaAogICAgIHdhc20vV2Fz
bUNvbXBpbGF0aW9uTW9kZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUyMmMx
NGZhYWFhYzM4MzA3MThjMWIxZmU4MDk3OWNmY2Q3Zjg1YmEuLjYyZWRjYTliOGZhMGIyNmMzMDU4
YmNmZmVjZGEyNzVlYWYyNWNjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
OTAsNyArMjkwLDcgQEAKIAkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWlu
ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzMzhERjQxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oICovOyB9Owog
CQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOERGODFCRTk2QUE4MDAxM0M4
OEYgLyogQjNDQ2FsbFZhbHVlLmggKi87IH07CiAJCTBGMzM4REZFMUJFRDUxMjcwMDEzQzg4RiAv
KiBBaXJTaW1wbGlmeUNGRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzMzhERkMxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggKi87
IH07Ci0JCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwMDFCRjAyNzZD
MDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICovOyB9OworCQkwRjMzOEUwQzFCRjAyNzZDMDAx
M0M4OEYgLyogQjNDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzMzhFMDAxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjMz
OEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8q
IEIzRGF0YVNlY3Rpb24uaCAqLzsgfTsKIAkJMEYzMzhFMTAxQkYwMjc2QzAwMTNDODhGIC8qIEIz
TW92ZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzMzhFMDQxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oICovOyB9
OwogCQkwRjMzOEUxMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA1MUJGMDI3
NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oICovOyB9OwpAQCAtNjUyLDcgKzY1Miw3
IEBACiAJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZFQzg1MDYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1Nw
ZWNpYWwuaCAqLzsgfTsKIAkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovOyB9OwotCQkwRkVDODUwQTFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5o
ICovOyB9OworCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZp
dHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKIAkJMEZFQzg1
MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyog
QjNDb25zdDMyVmFsdWUuaCAqLzsgfTsKIAkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsK
QEAgLTY3NSw3ICs2NzUsNyBAQAogCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9u
LmggKi87IH07CiAJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsKIAkJMEZFQzg1M0ExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmggKi87IH07Ci0JCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLzsgfTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmgg
Ki87IH07CiAJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87IH07CiAJCTBGRUM4NTQyMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovOyB9
OwpAQCAtNzE0MywxMSArNzE0MywxMSBAQAogCQkJCTg2ODkyMUMxMUY5QzBDQjcwMDExNTlGNiAv
KiBKU0JpZ0ludC5oICovLAogCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5k
RnVuY3Rpb24uY3BwICovLAogCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5k
RnVuY3Rpb24uaCAqLywKLQkJCQlGRTQ4QkQ0MzIzMjQ1RTg3MDBGMTM2RDAgLyogSlNDQ29uZmln
LmNwcCAqLywKLQkJCQlGRTQ4QkQ0MjIzMjQ1RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmggKi8s
CiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCAqLywKIAkJCQk2
NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCAqLywKIAkJCQk1M0I2MDFFQjIw
MzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi8sCisJCQkJRkU0OEJENDMyMzI0NUU4NzAwRjEz
NkQwIC8qIEpTQ0NvbmZpZy5jcHAgKi8sCisJCQkJRkU0OEJENDIyMzI0NUU4NzAwRjEzNkQwIC8q
IEpTQ0NvbmZpZy5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAvKiBKU0NlbGwu
Y3BwICovLAogCQkJCUJDMTE2N0Q4MEUxOUJDQzkwMDgwNjZERCAvKiBKU0NlbGwuaCAqLywKIAkJ
CQkwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICovLApAQCAtOTM0
OCw3ICs5MzQ4LDYgQEAKIAkJCQkwRkVBMEExMDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJE
RkdUb0IzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUQwMjE3QTBCOTA0MDA3NzNBRDggLyog
RlRMTG93ZXJlZE5vZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRjkxOUQwQkFD
MTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFMzg0MjMy
MjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZE
OEEzMUMxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjIzNUJERDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyMzVCRTAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05NTM4LDcgKzk1MzcsNiBAQAogCQkJCUExRDc5MzAxMUI0Mzg2NEIw
MDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIwNDRBOEIwMDY2NEI2OSAvKiBJbnRs
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyog
SlNDQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhFQkUyNDFDRThGMzU4MDA0NTMxNDYg
LyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2
RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNEUwMzU0MUU1
M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAq
LywKQEAgLTk2MDksNiArOTYwNyw3IEBACiAJCQkJNjU3Q0Y0NTkxOUJGNjY2MjAwNEFDQkYyIC8q
IEpTQ2FsbGVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0I2MDFFQzIwMzRCOEM1MDA2QkU2Njcg
LyogSlNDYXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBOTE4ODBENkE4MDAyNkMzOUIg
LyogSlNDQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNDhCRDQ0MjMyNDVFOTMwMEYx
MzZEMCAvKiBKU0NDb25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2N0RBMEUxOUJDQzkw
MDgwNjZERCAvKiBKU0NlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTc0OTcxMTY4N0FERTQw
MEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFERDg0QTE4
QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODg1LDcg
Kzk4ODQsOSBAQAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9w
ZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMzg0MjMyMjMyNEQ1MUIwMDlERDQ0NSAv
KiBPcHRpb25FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2
QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMzg0MjMzMjMyNEQ1MUIwMDlE
RDQ0NSAvKiBPcHRpb25zTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1Njk4NzIyMjg0MTE4
NzAwOENEQ0NCIC8qIFBhY2tlZENlbGxQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOURBQTBB
MUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzNEU2NTc1MjA2NjhFQUEwMEZCODFBQyAvKiBQYXJzZUhhc2guaCBpbiBIZWFkZXJz
ICovLApAQCAtOTk5Miw3ICs5OTkzLDYgQEAKIAkJCQkwRkUwNTAyODFBQTkwOTU2MDBEMzNCMzMg
LyogU2NvcGVkQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyOTFBQTkwOTU2
MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRzVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTA1MDJCMUFBOTA5NTYwMEQzM0IzMyAvKiBTY29wZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA2ODE4OUFGRTlDMDA2MzMyMzEgLyogU2Ny
aXB0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkEyMTE4OEVGRjY4MDAxMTBG
MTQgLyogU2NyaXB0QnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAppbmRleCAzMTlhYTViZjA3
NWNiZjBhZTAxNWIxMjA2OWNkMDQxOWM5ODliMTJkLi5jNjcxNTYzMjY1NjUwZmZkYjg0YjgxZjU0
NzkxN2JhYjdmZWFjYzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxl
ICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6
UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50Kiwg
VGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKTsKKyAgICBBaXJJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGll
clVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYpOwogCiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25h
dHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5
cGUsIHVpbnQzMl90KTsKQEAgLTYzOSw3ICs2MzksOCBAQCBwcml2YXRlOgogICAgIEJhc2ljQmxv
Y2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJs
b2NrIHsgbnVsbHB0ciB9OwogICAgIFZlY3RvcjxUeXBlZFRtcD4gbV9sb2NhbHM7Ci0gICAgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAv
LyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVz
cyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYgbV9vdXRnb2luZ0NhbGxzOworICAgIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBH
UFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBtX21l
bW9yeVNpemVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKQEAgLTcwOCwxNCArNzA5LDE1IEBAIHZvaWQg
QWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEJhc2ljQmxvY2sqIGJs
b2NrLCBUeXBlZFRtcCBpbnN0CiAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQs
IFRtcCgpLCBpbnN0YW5jZSk7CiB9CiAKLUFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJ
bnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKK0FpcklSR2VuZXJh
dG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG91dGdv
aW5nQ2FsbHMsIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRy
VGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCiAgICAgOiBtX2luZm8o
aW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9u
SW5kZXgpCiAgICAgLCBtX3RpZXJVcCh0aWVyVXApCiAgICAgLCBtX3Byb2MocHJvY2VkdXJlKQog
ICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCi0gICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgICwgbV9vdXRnb2luZ0NhbGxzKG91dGdv
aW5nQ2FsbHMpCisgICAgLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMod2FzbVRvV2FzbUV4aXRTdHVi
cykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgp
KQogewogICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CkBAIC03NjEsMTYg
Kzc2Myw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvCiAgICAgUmVmPEIzOjpBaXI6OlByb2xv
Z3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFp
cjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6
OkFpcjo6Q29kZSYgY29kZSkgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgIGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShq
aXQpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7Ci0gICAgICAgICAgICBhdXRv
IG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOwotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNhbGxlZUdQ
UiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKLSAgICAgICAg
fQorICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayk7CiAKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgQ2hlY2tl
ZDxpbnQzMl90PiB3YXNtRnJhbWVTaXplID0gbV9jb2RlLmZyYW1lU2l6ZSgpOwpAQCAtMTkzNiw4
ICsxOTI5LDYgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICBpZiAocmV0dXJuVHlwZSAh
PSBUeXBlOjpWb2lkKQogICAgICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHJldHVyblR5cGUpOwog
Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwotCiAgICAgaWYgKG1faW5mby5pc0lt
cG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CiAg
ICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxB
cmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwogCkBAIC0xOTcz
LDExICsxOTY0LDEyIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAg
cGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOwogICAgICAgICAgICAgfSk7CiAKLSAgICAg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNt
RW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1YiA9IG1fd2FzbVRvV2FzbUV4aXRTdHVic1tm
dW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbd2Fz
bVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGws
IGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChXYXNt
RW50cnlQdHJUYWcpOworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbCwgd2Fz
bVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5
UHRyVGFnPih3YXNtVG9XYXNtRXhpdFN0dWIuY29kZSgpKSk7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICB9KTsKIApAQCAtMjAyNCwxOCArMjAxNiwyMCBAQCBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLAogICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0Iz
VHlwZShyZXR1cm5UeXBlKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlu
bmVkID0gdHJ1ZTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRy
dWU7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysrOwogCiAgICAg
ICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOwogICAgICAgICB3YXNtQ2FsbGlu
Z0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50
LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CiAg
ICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CiAgICAgICAgIH0pOwog
Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25J
bmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKLSAgICAgICAgICAgIH0p
OworICAgICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIG91dGdvaW5nQ2FsbHMg
PSAmbV9vdXRnb2luZ0NhbGxzOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW291
dGdvaW5nQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBHUFJSZWcg
Y2FsbGVlR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgIGF1dG8gbW92ZUxv
Y2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxs
TG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAgICAg
ICBvdXRnb2luZ0NhbGxzLT5hcHBlbmQoeyBmdW5jdGlvbkluZGV4LCB7IG1vdmVMb2NhdGlvbiwg
Y2FsbExvY2F0aW9uIH19KTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZW1pdFBhdGNocG9pbnQo
bV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsK
QEAgLTIwODksNiArMjA4Myw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAgICAgfSk7CiAK
ICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gZzY0KCk7CisgICAgRXhwcmVzc2lvblR5
cGUgY2FsbGVlID0gZzY0KCk7CiAgICAgewogICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVT
aWduYXR1cmVJbmRleCA9IGc2NCgpOwogICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4g
dGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KQEAgLTIwOTcsNiArMjA5
Miw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJs
ZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAgICAgICAgIGFwcGVuZChBZGQ2NCwgY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlciwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAKICAg
ICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkp
LCBjYWxsZWVDb2RlKTsgLy8gUG9pbnRlciB0byBjYWxsZWUgY29kZS4KKyAgICAgICAgYXBwZW5k
KE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpKSwgY2FsbGVlKTsg
Ly8gUG9pbnRlciB0byBib3hlZCBjYWxsZWUKIAogICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0
IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGlu
aXRpYWxpemVkLgogICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMs
IHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlk
SW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIx
MApAQCAtMjE4OSw2ICsyMTg1LDEwIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAKICAgICBW
ZWN0b3I8Q29uc3RyYWluZWRUbXA+IGVtaXRBcmdzOwogICAgIGVtaXRBcmdzLmFwcGVuZChjYWxs
ZWVDb2RlKTsKKworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlKSwgY2FsbGVlKTsK
KyAgICBlbWl0QXJncy5hcHBlbmQoeyBjYWxsZWUsIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVu
dChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSB9KTsKKwogICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVw
Q2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNoLCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChU
bXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CiAgICAgICAgIGVtaXRBcmdzLmFwcGVuZCh7IHRt
cCwgcmVwIH0pOwogICAgIH0pOwpAQCAtMjIyOSwxMCArMjIyOSw4IEBAIGF1dG8gQWlySVJHZW5l
cmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KICAgICByZXR1cm4gQjM6Ok9yaWdpbigpOwog
fQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4g
cGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0
LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9u
IHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5j
dGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVi
cywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9u
IHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50
ZXJuYWxGdW5jdGlvbj4oKTsKLQogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5
cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNv
bnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIApA
QCAtMjI1Miw3ICsyMjUwLDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGkKICAgICAKICAgICBw
cm9jZWR1cmUuc2V0T3B0TGV2ZWwoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJPcHRpbWl6YXRp
b25MZXZlbCgpKTsKIAotICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2Nl
ZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSwgZnVuY3Rp
b25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgQWly
SVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCBjb21waWxhdGlvbkNvbnRl
eHQub3V0Z29pbmdDYWxscywgd2FzbVRvV2FzbUV4aXRTdHVicywgbW9kZSwgZnVuY3Rpb25JbmRl
eCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25Q
YXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5k
YXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCkBAIC0yMjcyLDEwICsyMjcw
LDEwIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpCiAgICAgICAgIEIzOjpBaXI6OnByZXBhcmVG
b3JHZW5lcmF0aW9uKGNvZGUpOwogICAgICAgICBCMzo6QWlyOjpnZW5lcmF0ZShjb2RlLCAqY29t
cGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKICAgICAgICAgY29tcGlsYXRpb25D
b250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9k
dWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9
IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAgICAgIGNvbXBpbGF0
aW9uQ29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJB
dE9mZnNldExpc3QoKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB7
IH07CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAppbmRleCAzMzFiNGIwYWQzMTNlNjIz
Y2E3ZmY0YmQ4ZGU4YTE1ODZmYzdkNTA1Li44MjcyY2UzNTk1ZmYyOGIzZjljYzg4OTY1YWRiMmE4
NGM5ZTg1YTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJH
ZW5lcmF0b3IuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0
aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rp
b25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVs
bHB0cik7CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxh
dGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBD
b3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDNkOGRmOGU2ODcxMDIxMzFiNjRjMWE2ZDY1ZTZm
Y2NjMTAzYjVlNzUuLmUwMDAzZWNiNzBkNmYyYWNlY2FkZGQzZjQyODQ2NGU3YTBiMzhmZTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAK
QEAgLTE3Miw3ICsxNzIsNiBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIFN0cmluZyBFcnJvclR5
cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9yVHlwZT4gVW5leHBlY3RlZFJlc3VsdDsK
LSAgICB0eXBlZGVmIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwg
RXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+
IFBhcnRpYWxSZXN1bHQ7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVW
RVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4u
LiBhcmdzKSBjb25zdApAQCAtMTg1LDcgKzE4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAK
LSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwg
SW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2ln
bmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1v
ZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5
LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQjNJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFn
Pj4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29t
cGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhG
b3JPU1JFbnRyeSwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVy
ZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUs
IHVpbnQzMl90KTsKQEAgLTI4Myw2ICsyODIsNyBAQCBwcml2YXRlOgogCiAgICAgRnVuY3Rpb25Q
YXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiBtX291dGdvaW5nQ2FsbHM7CiAgICAgY29uc3QgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1v
cnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGNvbnN0IENvbXBpbGF0aW9uTW9kZSBtX2Nv
bXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSB9OwogICAgIGNvbnN0IHVu
c2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07CkBAIC0yOTQsNyArMjk0LDcgQEAg
cHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAg
ICBWZWN0b3I8dWludDMyX3Q+IG1fb3V0ZXJMb29wczsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBt
X2xvY2FsczsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBp
bmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgbV93YXNtVG9XYXNtRXhp
dFN0dWJzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hv
c2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgogICAgIHVuc2lnbmVkJiBtX29z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiBt
X2NvbnN0YW50UG9vbDsKICAgICBJbnNlcnRpb25TZXQgbV9jb25zdGFudEluc2VydGlvblZhbHVl
czsKQEAgLTM1NSwxNSArMzU1LDE2IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21D
b250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9jCiAgICAgfSk7
CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxh
dGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUgbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRl
eCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXAsIFRo
cm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitCM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBvdXRnb2luZ0NhbGxzLCBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiB3YXNtVG9XYXNtRXhp
dFN0dWJzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSBt
b2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwg
VGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IG1faW5mbyhpbmZv
KQorICAgICwgbV9vdXRnb2luZ0NhbGxzKG91dGdvaW5nQ2FsbHMpCiAgICAgLCBtX21vZGUobW9k
ZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKICAgICAsIG1fZnVu
Y3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogICAgICwgbV9sb29wSW5kZXhGb3JPU1JFbnRyeShs
b29wSW5kZXhGb3JPU1JFbnRyeSkKICAgICAsIG1fdGllclVwKHRpZXJVcCkKICAgICAsIG1fcHJv
Yyhwcm9jZWR1cmUpCi0gICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzKQorICAgICwgbV93YXNtVG9XYXNtRXhpdFN0dWJzKHdhc21Ub1dhc21FeGl0
U3R1YnMpCiAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSkKICAgICAsIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMobV9wcm9jKQogICAg
ICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCkBAIC00
MTcsNyArNDE4LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAgfQogICAgIH0K
IAotICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZjb21w
aWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBtX3Byb2MsIE9yaWdpbigpLCBtX2N1cnJlbnRC
bG9jayk7CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUo
bV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwogCiAgICAgewogICAgICAgICBCMzo6
VmFsdWUqIGZyYW1lUG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigpKTsKQEAgLTE0MDIsOCArMTQwMyw2
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwogCiAg
ICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKLSAgICBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHM7Ci0KICAgICBpZiAobV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlv
bkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgbV9tYXhO
dW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKQEAgLTE0MTcsNiArMTQxNiw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdD
b250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2FsbCwgRnJl
cXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlzRW1iZWRkZXJCbG9j
aykpOwogCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+IHdh
c21Ub1dhc21FeGl0U3R1YiA9IG1fd2FzbVRvV2FzbUV4aXRTdHVic1tmdW5jdGlvbkluZGV4XTsK
ICAgICAgICAgVmFsdWUqIHdhc21DYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCku
c2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShy
ZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0
cnVlOwpAQCAtMTQyNSwxMSArMTQyNSwxMSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwo
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAg
ICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxs
aW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbd2FzbVRvV2FzbUV4aXRTdHViXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
CiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0
aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKFdh
c21FbnRyeVB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2Fs
bCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4od2FzbVRvV2FzbUV4aXRTdHViLmNvZGUoKSkpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAt
MTQ3MywxNyArMTQ3MywxOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIC8vIFRo
ZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBh
bmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCiAgICAgICAgIHJlc3RvcmVX
ZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5m
by5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBjb250aW51YXRpb24pOwogICAgIH0g
ZWxzZSB7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogb3V0Z29pbmdD
YWxscyA9ICZtX291dGdvaW5nQ2FsbHM7CiAgICAgICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJn
cywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3Jp
dGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJl
YWRzUGlubmVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAg
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50
aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwotICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdp
c3RlcnMrKzsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CisgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBwYXJhbXMuZ3BT
Y3JhdGNoKDApOworICAgICAgICAgICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5t
b3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxs
ZWVHUFIpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGxMb2NhdGlvbiA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgb3V0Z29pbmdDYWxscy0+YXBwZW5kKHsgZnVuY3Rpb25JbmRleCwgeyBtb3Zl
TG9jYXRpb24sIGNhbGxMb2NhdGlvbiB9fSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICB9KTsKICAgICB9CkBAIC0xNjI0LDYgKzE2MjUsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXQKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKICAg
ICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSkpOwogCisgICAgRXhwcmVzc2lvblR5
cGUgY2FsbGVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKKyAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24oKSkpKTsKKwogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7
CiAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywg
bV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAg
ICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKQEAgLTE2MzUsOCArMTY0
MCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxl
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMsIGJ1dCB0aGUgd2FzbS0+d2FzbSBzdHViIGFzc3Vt
ZXMgaXQgY2FuCiAgICAgICAgICAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFz
IHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEK
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0KICAgICAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2RlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWUsIEIzOjpWYWx1ZVJlcDo6c3Rh
Y2tBcmd1bWVudChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgICAgIGppdC5jYWxsKHBh
cmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7
CkBAIC0xNjk3LDEwICsxNzAyLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBP
cmlnaW4KICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsKIH0KIAotRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVu
Y3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2lnbmVk
JiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVw
Q291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4
cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYg
Y29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50
cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1v
ZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBU
aHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewotICAgIGF1dG8gcmVzdWx0
ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwotCiAgICAgY29tcGlsYXRpb25Db250
ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwog
ICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0Nh
bGxIZWxwZXJzPigpOwogCkBAIC0xNzIxLDcgKzE3MjQsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0
aW9uQwogICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQjNPcHRpbWl6YXRpb25MZXZl
bCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgp
KTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1
bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9T
UkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQjNJUkdlbmVyYXRvciBp
ckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIGNvbXBpbGF0aW9uQ29udGV4dC5vdXRnb2luZ0Nh
bGxzLCB3YXNtVG9XYXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2Rl
LCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0
aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVy
YXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24u
ZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9G
QUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTE3MzksMTAgKzE3NDIsMTAgQEAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZShDb21waWxhdGlvbkMKICAgICAgICAgQjM6OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVy
ZSk7CiAgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUsICpjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5
cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7Ci0gICAgICAg
IHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxl
ZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQu
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNl
dExpc3QoKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB7IH07CiB9
CiAKIC8vIEN1c3RvbSB3YXNtIG9wcy4gVGhlc2UgYXJlIHRoZSBvbmVzIHRvbyBtZXNzeSB0byBk
byBpbiB3YXNtLmpzb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuaAppbmRleCBlYTU1MDI0MDE4ZDMwZDM4ZmYxZWE3YTdhYmYxYzE2NWJjZjU2N2Y4
Li4zNDhiNTQ3ZWUzZDc4N2I2MTJjM2ZkMzYwNDJkNzdkZTgyMjBhN2Q5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTQ5LDkgKzQ5LDEy
IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6
T3BhcXVlQnlwcm9kdWN0cz4gZW1iZWRkZXJFbnRyeXBvaW50Qnlwcm9kdWN0czsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlwb2ludEpJVDsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlwcm9kdWN0czsK
KyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gb3V0Z29pbmdDYWxsczsKKyAgICBP
cHRpb25hbDxVbmxpbmtlZE1vdmVBbmRDYWxsPiBlbWJlZGRlck1vdmVBbmRDYWxsOworICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3RlcnM7CiB9OwogCi1FeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVy
ZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENv
bXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4
Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9
IG51bGxwdHIpOworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGls
YXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVj
dG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYsIHVuc2lnbmVkJiBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3Qg
bG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4
Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5kZXggMGU4M2Q1M2YzMTIz
OTM3ZmM5Y2MwM2QzZTVlZTE4NGQ1MTcxM2Q0Zi4uYjQ4NTdjNzZhMTg3YmRlNTFlMjY1MGQ3YWM0
MmZjMjQ3YjVlNTA3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcApAQCAtNTIsOSArNTIsMTAgQEAgbmFtZXNwYWNlIFdhc21CQlFQbGFuSW50ZXJuYWwgewog
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1CQlFQbGFuOjpCQlFQbGFu
KENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQXN5bmNXb3Jr
IHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9u
KQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8UmVmUHRy
PEJCUUNhbGxlZT4+JiBjYWxsZWVzLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5j
V29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYm
IGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbikKICAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwg
V1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAg
LCBtX3N0cmVhbWluZ1BhcnNlcihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKKyAg
ICAsIG1fY2FsbGVlcygmY2FsbGVlcykKICAgICAsIG1fc3RhdGUoU3RhdGU6OlZhbGlkYXRlZCkK
ICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC0xNTksMTYgKzE2MCwxMCBAQCB2b2lkIEJC
UVBsYW46OnByZXBhcmUoKQogCiAgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2Fz
bVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikK
LSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5
IGNhbGxzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1
bmN0aW9ucywgZnVuY3Rpb25zLnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQotICAg
ICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rp
b25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0gICAgICAgIHx8ICF0cnlSZXNl
cnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBj
b3VudHMiKSkKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29u
dGV4dHMsIGZ1bmN0aW9ucy5zaXplKCksICIgY29tcGlsYXRpb24gY29udGV4dHMiKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscy5yZXNpemUoZnVuY3Rp
b25zLnNpemUoKSk7Ci0gICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9u
cy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVuY3Rpb25zLnNp
emUoKSk7Ci0gICAgbV90aWVyVXBDb3VudHMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7ICsraW1wb3J0SW5kZXgpIHsKICAgICAgICAgSW1w
b3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0c1tpbXBvcnRJbmRleF07
CkBAIC0yMzAsNiArMjI1LDcgQEAgcHVibGljOgogCiB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5j
dGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Y2FsbGVlcyk7CiAgICAgQVNTRVJUKG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVkKTsKICAgICBk
YXRhTG9nTG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGls
YXRpb24iKTsKIApAQCAtMjY2LDEzICsyNjIsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5j
dGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1
bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgp
OwogICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKLSAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigp
OwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkpCi0gICAgICAgICAg
ICBtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA9IG1ha2VVbmlxdWU8VGllclVwQ291bnQ+
KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5k
ZXhdID0gbnVsbHB0cjsKLSAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IG1fdGllclVwQ291
bnRzW2Z1bmN0aW9uSW5kZXhdLmdldCgpOwotICAgICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0OworICAg
ICAgICBFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKICAgICAg
ICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IDA7CiAKICAgICAgICAgLy8g
RklYTUU6IFNvbWUgd2VicGFnZXMgdXNlIHZlcnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBl
eGhhdXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1vcnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUg
c2l6ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSByZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1C
LgpAQCAtMjgyLDEwICsyNzIsMTEgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5
QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9u
U2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAg
ICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CiAKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJV
cCA9IG1fY2FsbGVlcy0+YXQoZnVuY3Rpb25JbmRleCktPnRpZXJVcENvdW50KCk7CiAgICAgICAg
IGlmICghZm9yY2VVc2luZ0IzICYmIE9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkpCi0gICAgICAg
ICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24p
OworICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWly
KG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24sIHNpZ25hdHVy
ZSwgbV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBp
bGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0
dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBp
bGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCwgdGllclVwLCBt
X3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQg
PSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBm
dW5jdGlvbiwgc2lnbmF0dXJlLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXAsIG1fdGhy
b3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGls
ZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
QEAgLTI5NCwxMSArMjg1LDExIEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21w
aWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUo
KnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0KICAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlv
bkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
cmVmZXJlbmNlZEZ1bmN0aW9ucygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRl
eCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9u
SW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5k
ZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsK
KyAgICAgICAgICAgIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+IGVtYmVkZGVyRW50
cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29udGV4
dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVyZSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLmdl
dCgpLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUpOworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9u
SW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgICAgICB9CiAKQEAg
LTMxNiw3ICszMDcsOSBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIpCiAgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBt
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZUluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9
IGZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50
KCk7CisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50ID0gbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOworICAgICAgICAgICAgY29u
c3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGltcG9ydEZ1
bmN0aW9uQ291bnQ7CisgICAgICAgICAgICBCQlFDYWxsZWUmIGNhbGxlZSA9ICptX2NhbGxlZXMt
PmF0KGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFj
ZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0
Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAt
MzI1LDkgKzMxOCwxNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbklu
ZGV4XS0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9u
PigKKyAgICAgICAgICAgICAgICBjYWxsZWUuZW50cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3Rl
cnMgPSBXVEZNb3ZlKGNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgICAgICAgICAg
ICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBp
bGF0aW9uPigKICAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBC
M0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1l
ICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCks
IG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRh
dGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2lu
dEJ5cHJvZHVjdHMpKTsKKworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRl
eHQub3V0Z29pbmdDYWxscykgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbC50YXJn
ZXRGdW5jdGlvbkluZGV4U3BhY2UgPj0gaW1wb3J0RnVuY3Rpb25Db3VudCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHRhcmdldEZ1bmN0aW9uSW5kZXggPSBjYWxsLnRhcmdl
dEZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9u
Q291bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsZWVzLT5hdCh0YXJnZXRGdW5jdGlv
bkluZGV4KS0+YWRkQ2FsbGVyKGxvY2tlciwgbGlua0J1ZmZlciwgY2FsbC51bmxpbmtlZE1vdmVB
bmRDYWxsKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9lbWJlZGRlclRv
V2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlvbkluZGV4KSkgewpAQCAtMzM3LDIzICsz
MzgsMTggQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50
LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgICAgICAgICAg
ICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludCgpLmNvbXBpbGF0
aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAgICAgICAgICBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJFbWJlZGRlci0+
V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1l
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAg
ICAgICBXVEZNb3ZlKGNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6
IHVubGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21F
bnRyeVB0clRhZz4gZXhlY3V0YWJsZUFkZHJlc3M7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9k
dWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
Y2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
IGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0
aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEg
UkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjY0NjIKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dh
c21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmNvZGUoKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBt
X3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9k
dWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSktPmVudHJ5cG9pbnQuY29tcGls
YXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihleGVjdXRhYmxlQWRkcmVzcykpOworICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LmVtYmVkZGVyTW92ZUFuZENhbGwpCisgICAgICAgICAg
ICAgICAgICAgIGNhbGxlZS5hZGRDYWxsZXIobG9ja2VyLCBsaW5rQnVmZmVyLCAqY29udGV4dC5l
bWJlZGRlck1vdmVBbmRDYWxsKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChhdXRvJiBjYWxsZWUgOiAqbV9jYWxsZWVzKQorICAgICAgICAgICAgY2FsbGVlLT5y
ZXBhdGNoQ2FsbGVycyhsb2NrZXIsICpjYWxsZWUpOwogICAgIH0KICAgICAKICAgICBpZiAoIWlz
Q29tcGxldGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKaW5k
ZXggODgzNjE3ZmM2N2ZmZWI4MDUxMjA4Yzc0MGUyZjFmOTE4OGI0MTMwZC4uZTNlNmVlNjYwYmIx
N2YzOWJiZGZhNGI0YTBiODRmMDVjMjUyYmIzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBlbnVtIEFzeW5j
V29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGlsZSwgVmFsaWRhdGlvbiB9OwogCiAgICAgLy8gTm90
ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFu
IG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIEJCUVBsYW4o
Q29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRh
c2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAg
QkJRUGxhbihDb250ZXh0KiwgY29uc3QgVmVjdG9yPFJlZlB0cjxCQlFDYWxsZWU+PiYsIFJlZjxN
b2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1i
ZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgQkJRUGxhbihDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7
CiAgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIApA
QCAtOTgsMTIgKzk4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21U
b1dhc21FeGl0U3R1YnMpOwogICAgIH0KIAotICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4+IHRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCkKLSAgICB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIFdU
Rk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxscyk7Ci0gICAgfQotCiAgICAgZW51bSBjbGFz
cyBTdGF0ZSA6IHVpbnQ4X3QgewogICAgICAgICBJbml0aWFsLAogICAgICAgICBWYWxpZGF0ZWQs
CkBAIC0xMzksMTQgKzEzMywxMyBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx1aW50OF90PiBtX3Nv
dXJjZTsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0
U3R1YnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93
YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgSGFzaFNldDx1aW50MzJfdCwgdHlwZW5hbWUgRGVm
YXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlczsKLSAgICBIYXNoTWFwPHVp
bnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1
bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBIYXNo
TWFwPHVpbnQzMl90LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiwgdHlwZW5hbWUg
RGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAg
IFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50Pj4gbV90aWVyVXBDb3VudHM7CiAKLSAg
ICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzOwogICAgIFN0cmVhbWluZ1BhcnNlciBtX3N0cmVhbWluZ1BhcnNlcjsKKyAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+KiBtX2NhbGxlZXMgeyBudWxscHRyIH07CiAg
ICAgU3RhdGUgbV9zdGF0ZTsKIAogICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKaW5kZXgg
ODY2MDFhYzllZjNmYjM4NWUwNjAyOTAxYzFhMDRkNTMwYzU2M2NhOC4uOWJiYzZmMzg5NzUyZDc3
MDZlNGM5ZmIxNWM4NTk5ZjU0ZjI4MmY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKQEAgLTM4LDIxICszOCw4IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CiB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1
bmN0b3ImIGNhbGxiYWNrKQogewogICAgIEFTU0VSVCghZmFpbGVkKCkpOwotICAgIGZvciAodW5z
aWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwg
bV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkg
ewotCi0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZTsKLSAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJU
b1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgewotICAg
ICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBv
aW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZW1iZWRk
ZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
SW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRl
cm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwotICAgICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNw
YWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0
RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2lu
dENhbGxlZSA9IFdhc206OkJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5
cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0
aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRl
cm5hbEZ1bmN0aW9uSW5kZXhdKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9p
bnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdh
c21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7Ci0KLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxG
dW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUo
d2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5h
bEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9y
bWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkKKyAgICAg
ICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBtX2VtYmVkZGVyVG9XYXNtSW50ZXJu
YWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
Y3BwCmluZGV4IGNlNjEwNzZkMWFjYjc5YWVhNGM1ZThiNzUyYjE3OTQ4NWNhZjA4ZWUuLmY3ZDQ3
YmE5MDM4NmE3MzExN2QxMjY0YjcwMTI0OGU1OWJjY2Q0NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNt
VG9XYXNtKHVuc2kKICAgICBKSVQgaml0OwogCiAgICAgR1BSUmVnIHNjcmF0Y2ggPSB3YXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisgICAgR1BSUmVnIGNhbGxl
ZSA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgxKTsKICAgICBH
UFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgQVNT
RVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7CiAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJl
Z2lzdGVyICE9IGJhc2VNZW1vcnkpOwpAQCAtNTcsMTMgKzU4LDIwIEBAIEV4cGVjdGVkPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRv
V2FzbSh1bnNpCiAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHNpemVSZWdBc1NjcmF0
Y2gpOyAvLyBPbGQgSW5zdGFuY2UqCiAgICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXYXNtOjpJbnN0
YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2ls
bCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCiAgICAgaml0LmxvYWRQ
dHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZlRhcmdl
dEluc3RhbmNlKGltcG9ydEluZGV4KSksIGJhc2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCi0gICAg
Ly8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2Fz
bSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCisgICAgLy8gV2hp
bGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRy
eXBvaW50IGFuZCBjYWxsZWUgc28gd2UgY2FuIHRhaWwgY2FsbCB0byBpdCBiZWxvdy4KICAgICBq
aXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFuY2U6Om9mZnNl
dE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oaW1wb3J0SW5kZXgpKSwgc2NyYXRjaCk7Cisg
ICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpv
ZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKGltcG9ydEluZGV4KSksIGNhbGxlZSk7CiAg
ICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKIAogICAgIGppdC5s
b2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVnQXNTY3JhdGNoKTsKICAgICBqaXQuc3RvcmVQdHIo
c2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwogCisgICAgLy8gU2V0IHRoZSBjYWxsZWUgc2xvdCBp
biB0aGUgY2FsbCBmcmFtZQorICAgIGppdC5sb2FkUHRyKGNhbGxlZSwgY2FsbGVlKTsKKyAgICAv
LyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGJlZW4gY2FsbGVkLCBzbyBSZXR1cm5QQyBpcyBvbiB0
aGUgc3RhY2ssIGJ1dCBoYXZlIG5vdCB5ZXQgcHVzaGVkIHRoZSBiYXNlIHBvaW50ZXIsCisgICAg
Ly8gc28gd2UgaGF2ZSB0byBzdWJ0cmFjdCB0aGUgc3BhY2UgZm9yIENhbGxlckZyYW1lIGZyb20g
dGhlIGNhbGxlZSBzbG90CisgICAgaml0LnN0b3JlUHRyKGNhbGxlZSwgSklUOjpBZGRyZXNzKEpJ
VDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihS
ZWdpc3RlcikgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSk7CisKICAgICAvLyBGSVhNRSB0aGUgZm9s
bG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXYXNtOjpJbnN0YW5jZSBoYXZlIHRoZSBzYW1l
IHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIg
YXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgogICAgIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKaW5kZXggZThkZGYxNTNkZDlkOTAyMjljNTEy
ODFlYzI4MTJmN2E1OTExNDFkNi4uOTMzMTRhYjY2Nzc4N2Y2OTE5OWIxYTQyYzNkMjlkM2ZjNGI2
Yzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTMy
LDE2ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1DYWxs
ZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBv
aW50JiYgZW50cnlwb2ludCkKK0NhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBj
b21waWxhdGlvbk1vZGUpCiAgICAgOiBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUp
Ci0gICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50KSkKIHsKICAgICBDYWxsZWVS
ZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUodGhpcyk7CiB9CiAKLUNhbGxlZTo6
Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQm
JiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorQ2FsbGVlOjpDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25N
b2RlIGNvbXBpbGF0aW9uTW9kZSwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSos
IFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKICAgICA6IG1fY29tcGlsYXRpb25Nb2RlKGNv
bXBpbGF0aW9uTW9kZSkKLSAgICAsIG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQog
ICAgICwgbV9pbmRleE9yTmFtZShpbmRleCwgV1RGTW92ZShuYW1lKSkKIHsKICAgICBDYWxsZWVS
ZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUodGhpcyk7CkBAIC01Miw2ICs1MCw0
OCBAQCBDYWxsZWU6On5DYWxsZWUoKQogICAgIENhbGxlZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS51
bnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwogfQogCisKK2lubGluZSB2b2lkIHJlcGF0Y2hNb3ZlKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0
clRhZz4gbW92ZUxvY2F0aW9uLCBDYWxsZWUmIHRhcmdldENhbGxlZSkKK3sKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KCZ0YXJnZXRDYWxsZWUpKTsKK30KKworaW5saW5lIHZvaWQgcmVwYXRjaENhbGwoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxM
b2NhdGlvbiwgQ2FsbGVlJiB0YXJnZXRDYWxsZWUpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0
clRhZz4odGFyZ2V0Q2FsbGVlLmNvZGUoKSkpOworfQorCit2b2lkIEJCUUNhbGxlZTo6YWRkQ2Fs
bGVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgVW5saW5r
ZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbC5tb3ZlTG9jYXRpb24pOworICAgIGF1
dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5
UHRyVGFnPihjYWxsLmNhbGxMb2NhdGlvbik7CisgICAgbV9tb3ZlTG9jYXRpb25zLmFwcGVuZCht
b3ZlTG9jYXRpb24pOworICAgIG1fY2FsbExvY2F0aW9ucy5hcHBlbmQoY2FsbExvY2F0aW9uKTsK
K30KKwordm9pZCBCQlFDYWxsZWU6OmFkZEFuZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGxvY2tlciwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBj
YWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9pbnQoKS5jb21waWxhdGlvbik7CisK
KyAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQ
dHJUYWc+KGNhbGwubW92ZUxvY2F0aW9uKTsKKyAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbC5jYWxsTG9jYXRp
b24pOworICAgIG1fbW92ZUxvY2F0aW9ucy5hcHBlbmQobW92ZUxvY2F0aW9uKTsKKyAgICBtX2Nh
bGxMb2NhdGlvbnMuYXBwZW5kKGNhbGxMb2NhdGlvbik7CisKKyAgICBDYWxsZWUmIHRhcmdldENh
bGxlZSA9IG1fcmVwbGFjZW1lbnQgPyBzdGF0aWNfY2FzdDxDYWxsZWUmPigqbV9yZXBsYWNlbWVu
dCkgOiAqdGhpczsKKyAgICByZXBhdGNoTW92ZShsb2NrZXIsIG1vdmVMb2NhdGlvbiwgdGFyZ2V0
Q2FsbGVlKTsKKyAgICByZXBhdGNoQ2FsbChsb2NrZXIsIGNhbGxMb2NhdGlvbiwgdGFyZ2V0Q2Fs
bGVlKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OnJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBsb2NrZXIsIENhbGxlZSYgdGFyZ2V0Q2FsbGVlKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKHRhcmdldENhbGxlZS5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24pOworICAgIGZvciAoYXV0
byBtb3ZlTG9jYXRpb24gOiBtX21vdmVMb2NhdGlvbnMpCisgICAgICAgIHJlcGF0Y2hNb3ZlKGxv
Y2tlciwgbW92ZUxvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOworICAgIGZvciAoYXV0byBjYWxsTG9j
YXRpb24gOiBtX2NhbGxMb2NhdGlvbnMpCisgICAgICAgIHJlcGF0Y2hDYWxsKGxvY2tlciwgY2Fs
bExvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxlZS5oCmluZGV4IGY3ZWE0ZDA1YjhkMGE3MWMxZWU2MmE1NmM0ZDM5ZGE1NDlm
MDliN2IuLjk5MDlkYzQwOTU5OTE5YTVjNjlhZmJkZjI1Mjk1ODI5M2ExMWM0YTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTQwLDEyICs0MCwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogY2xhc3MgQ2FsbGVlIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPENhbGxlZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5
cG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5y
ZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7IH0KLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZl
UmVnaXN0ZXJzOyB9CisgICAgRW50cnlwb2ludCYgZW50cnlwb2ludCgpIHsgcmV0dXJuIG1fZW50
cnlwb2ludDsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGNv
ZGUoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRh
Z2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7IH0KICAgICBJbmRleE9yTmFtZSBpbmRleE9yTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXhPck5hbWU7IH0KICAgICBDb21waWxhdGlvbk1vZGUgY29t
cGlsYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxhdGlvbk1vZGU7IH0KIAorICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1f
ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisKICAgICBzdGQ6OnR1cGxlPHZvaWQq
LCB2b2lkKj4gcmFuZ2UoKSBjb25zdAogICAgIHsKICAgICAgICAgdm9pZCogc3RhcnQgPSBtX2Vu
dHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0
KCkudW50YWdnZWRQdHIoKTsKQEAgLTU2LDc4ICs1Nyw3MCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdmlydHVhbCB+Q2FsbGVlKCk7CiAKIHByb3RlY3RlZDoKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlLCBXYXNtOjpFbnRyeXBvaW50
JiYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUs
IFdhc206OkVudHJ5cG9pbnQmJiwgc2l6ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShDb21waWxh
dGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShDb21waWxhdGlvbk1vZGUs
IHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsK
IAogcHJpdmF0ZToKICAgICBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1vZGU7Ci0gICAg
V2FzbTo6RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CisgICAgRW50cnlwb2ludCBtX2VudHJ5cG9p
bnQ7CiAgICAgSW5kZXhPck5hbWUgbV9pbmRleE9yTmFtZTsKIH07CiAKIGNsYXNzIE9NR0NhbGxl
ZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HQ2Fs
bGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwg
c3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCisgICAgc3RhdGljIFJl
ZjxPTUdDYWxsZWU+IGNyZWF0ZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5h
bWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE9NR0NhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSkpOwogICAgIH0KIAotICAgIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgd2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJu
IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQotCiBwcml2YXRlOgotICAgIE9NR0NhbGxlZShXYXNt
OjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3Qg
TmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGls
YXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShu
YW1lKSkKLSAgICAgICAgLCBtX3dhc21Ub1dhc21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtlZENh
bGxzKSkKKyAgICBPTUdDYWxsZWUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSos
IFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRp
b25Nb2RlOjpPTUdNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKICAgICB7CiAgICAgfQotCi0g
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsK
IH07CiAKIGNsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCisgICAgc3RhdGljIFJlZjxPTUdGb3JPU1JFbnRy
eUNhbGxlZT4gY3JlYXRlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQ
dHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIHVpbnQzMl90IGxvb3BJbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZN
b3ZlKG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1vdmUo
dW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NS
RW50cnlDYWxsZWUoaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIGxvb3BJbmRleCkpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0K
ICAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQot
ICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgd2FzbVRvV2FzbUNhbGxzaXRlcygp
IHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQogCiBwcml2YXRlOgotICAgIE9NR0Zv
ck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1
bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDog
Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3Zl
KGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3dhc21Ub1dh
c21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICBPTUdGb3JPU1JFbnRyeUNh
bGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0
aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJf
dCBsb29wSW5kZXgpCisgICAgICAgIDogQ2FsbGVlKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NS
RW50cnlNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX29zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICAgICAgLCBtX2xv
b3BJbmRleChsb29wSW5kZXgpCiAgICAgewogICAgIH0KIAotICAgIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgdW5zaWduZWQgbV9vc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIHVpbnQzMl90IG1fbG9vcEluZGV4OwogfTsKIAog
Y2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+IGNyZWF0ZShX
YXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50
cnlwb2ludENhbGxlZT4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSgpKTsKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdhc206OkVudHJ5
cG9pbnQmJiBlbnRyeXBvaW50KQotICAgICAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1v
ZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUsIFdURk1vdmUoZW50cnlwb2ludCkpCisgICAgRW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlKCkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2Rl
OjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlKQogICAgIHsKICAgICB9CiB9OwogCiBjbGFzcyBCQlFD
YWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJC
UUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5k
ZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBz
dGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCisgICAgc3RhdGljIFJl
ZjxCQlFDYWxsZWU+IGNyZWF0ZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+
JiYgdGllclVwQ291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCQlFD
YWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUo
dGllclVwQ291bnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShp
bmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3VudCkpKTsKICAgICB9CiAKICAg
ICBPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUoKSB7IHJldHVybiBtX29zckVu
dHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0xNDcsMTMgKzE0MCwyMCBAQCBwdWJsaWM6CiAKICAgICBU
aWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7IHJldHVybiBtX3RpZXJVcENvdW50LmdldCgpOyB9
CiAKKyAgICB2b2lkIGFkZENhbGxlcihjb25zdCBBYnN0cmFjdExvY2tlciYsIExpbmtCdWZmZXIm
LCBVbmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAgICB2b2lkIGFkZEFuZExpbmtDYWxsZXIoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBMaW5rQnVmZmVyJiwgVW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisKKyAg
ICB2b2lkIHJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQ2FsbGVlJik7CisK
IHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCi0gICAg
ICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRy
eXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgQkJRQ2FsbGVlKHNpemVfdCBpbmRl
eCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0
ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCkKKyAgICAgICAgOiBDYWxs
ZWUoQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKICAgICAg
ICAgLCBtX3RpZXJVcENvdW50KFdURk1vdmUodGllclVwQ291bnQpKQogICAgIHsKICAgICB9CiAK
KyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4+IG1f
bW92ZUxvY2F0aW9uczsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5
UHRyVGFnPj4gbV9jYWxsTG9jYXRpb25zOwogICAgIFJlZlB0cjxPTUdGb3JPU1JFbnRyeUNhbGxl
ZT4gbV9vc3JFbnRyeUNhbGxlZTsKICAgICBSZWZQdHI8T01HQ2FsbGVlPiBtX3JlcGxhY2VtZW50
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4gbV90aWVyVXBDb3VudDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKaW5k
ZXggYjQ0MmI2MTYxYmY5MjMzNzU4MTk3NTgxM2ZmMzgwNmE3MzFhOTIyNi4uNmZhNDM2OWNjZGNh
ODhlNGI3MGVkNjQ2OWJiNzYzOTgxNGY4ZTg0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKQEAgLTg4LDM0ICs4OCwxNiBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgc3RhdGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVz
KCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQotICAgIHZvaWQgc2V0dXBGcmFtZUluUHJvbG9ndWUo
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGNhbGxlZU1vdmVMb2Nh
dGlvbiwgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Js
b2NrKiBibG9jaykgY29uc3QKKyAgICB2b2lkIHNldHVwRnJhbWVJblByb2xvZ3VlKEIzOjpQcm9j
ZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNv
bnN0CiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAq
IHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9y
IG5vdy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sg
KiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZv
ciBub3cuIik7CiAKLSAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogZ2V0Q2FsbGVlUGF0Y2hw
b2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6Oklu
dDY0LCBvcmlnaW4pOwotICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50LT5yZXN1bHRDb25zdHJh
aW50cyA9IHsgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIgfTsKLSAgICAgICAgZ2V0Q2FsbGVl
UGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Ci0gICAgICAgIGdldENh
bGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewot
ICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQu
bW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVz
dWx0KTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlv
biwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAg
ICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21F
bnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7Ci0gICAgICAg
IEIzOjpWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0
VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lz
dGVyKSk7Ci0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBC
Mzo6U3RvcmUsIG9yaWdpbiwKLSAgICAgICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQsCi0gICAg
ICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2lu
LCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ2FsbGVlKSk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIHplcm8gaW50byB0aGUgQ29kZUJsb2NrKiBzcG90IGlu
IHRoZSBjYWxsIGZyYW1lLAogICAgICAgICAvLyBidXQgdGhlcmUgYXJlIHBsYWNlcyB0aGF0IGlu
dGVycHJldCBub24tbnVsbCBDb2RlQmxvY2sgc2xvdCB0byBtZWFuIGEgdmFsaWQgQ29kZUJsb2Nr
LgogICAgICAgICAvLyBXaGVuIGRvaW5nIHVud2luZGluZywgd2UnbGwgbmVlZCB0byB2ZXJpZnkg
dGhhdCB0aGUgZW50aXJlIHJ1bnRpbWUgaXMgT0sgd2l0aCBhIG5vbi1udWxsCiAgICAgICAgIC8v
IENvZGVCbG9jayBub3QgaW1wbHlpbmcgdGhhdCB0aGUgQ29kZUJsb2NrIGlzIHZhbGlkLgogICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisg
ICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFs
dWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7CiAgICAgICAgIEIzOjpWYWx1ZSog
b2Zmc2V0T2ZDb2RlQmxvY2sgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHBy
b2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSk7
CiAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3Rv
cmUsIG9yaWdpbiwKICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1
ZT4ocHJvYywgb3JpZ2luLCAwKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVCbG9jay5jcHAKaW5kZXggZDRhOWNkNjc3MTAyYjU4ZTRmYzU5ZTFhMjBhZTU2YjhlMjFjNzQz
MC4uN2Q1NTQ3NmQyNmMwZGQ3MGFjZjRmNWEwMjMxMzNhMTg5MTM0ZGQ1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKQEAgLTI5LDcgKzI5LDYgQEAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtQkJRUGxhbklubGluZXMu
aCIKLSNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2lu
Y2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBAIC00Nyw3ICs0NiwxNSBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bAogewogICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb3RlY3RlZFRoaXMgPSB0aGlz
OwogCi0gICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIG1ha2VSZWYo
bW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFz
azxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90
ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgbV9jYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50
KTsKKyAgICBtX2JveGVkQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7CisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG1fY2FsbGVlQ291bnQ7IGkrKykgeworICAgICAgICB1aW50MzJf
dCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNv
dW50KCkgKyBpOworICAgICAgICBtX2NhbGxlZXNbaV0gPSBCQlFDYWxsZWU6OmNyZWF0ZShmdW5j
dGlvbkluZGV4U3BhY2UsIG1vZHVsZUluZm9ybWF0aW9uLm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rp
b25JbmRleFNwYWNlKSwgbWFrZVVuaXF1ZTxUaWVyVXBDb3VudD4oKSk7CisgICAgICAgIG1fYm94
ZWRDYWxsZWVzW2ldID0gQ2FsbGVlQml0czo6Ym94V2FzbShtX2NhbGxlZXNbaV0uZ2V0KCkpOwor
ICAgIH0KKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBtX2Nh
bGxlZXMsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwg
Y3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CiAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKICAg
ICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5lcnJvck1lc3NhZ2UoKTsKQEAgLTU2
LDIxICs2MywxOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1v
cnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bAogICAgICAgICB9CiAKICAgICAg
ICAgLy8gRklYTUU6IHdlIHNob3VsZCBldmVudHVhbGx5IGNvbGxlY3QgdGhlIEJCUSBjb2RlLgot
ICAgICAgICBtX2NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOwogICAgICAgICBtX29wdGlt
aXplZENhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOwogICAgICAgICBtX3dhc21JbmRpcmVj
dENhbGxFbnRyeVBvaW50cy5yZXNpemUobV9jYWxsZWVDb3VudCk7CiAKLSAgICAgICAgbV9wbGFu
LT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8V2Fz
bTo6Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgUmVmPFdhc206OkNhbGxlZT4m
JiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICBtX3BsYW4tPmluaXRpYWxpemVDYWxs
ZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAgICAgICAgICBpZiAoZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBt
X2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2FsbGVlSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dC5pc05ld0VudHJ5KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY2FsbGVlc1tjYWxs
ZWVJbmRleF0gPSBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgIG1f
d2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1fY2FsbGVlc1tjYWxs
ZWVJbmRleF0tPmVudHJ5cG9pbnQoKTsKKyAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVu
dHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1fY2FsbGVlc1tjYWxsZWVJbmRleF0tPmNvZGUoKTsK
ICAgICAgICAgfSk7CiAKICAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzID0gbV9wbGFuLT50
YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOwotICAgICAgICBtX3dhc21Ub1dhc21DYWxsc2l0ZXMg
PSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7CiAKICAgICAgICAgc2V0Q29tcGls
YXRpb25GaW5pc2hlZCgpOwogICAgIH0pLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciks
IHRocm93V2FzbUV4Y2VwdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVCbG9jay5oCmluZGV4IGRlYTJmZmEzMTgxMjAzZjc4YWFhNjFjNzBiZjI5NzFiYzAzMjc5ZWQu
LmMxMDc3ZDVkN2Y3NjljMzk3ZmY2ZWNlYTJlODk5ZjNjMzQyNGM5MzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIK
KyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5j
bHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTQwLDkg
KzQxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgQ2Fs
bGVlOwotc3RydWN0IENvbnRleHQ7CiBjbGFzcyBCQlFQbGFuOworc3RydWN0IENvbnRleHQ7CiBj
bGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogc3RydWN0IFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw7CkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRoZXNl
IHR3byBjYWxsZWUgZ2V0dGVycyBhcmUgb25seSB2YWxpZCBvbmNlIHRoZSBjYWxsZWVzIGhhdmUg
YmVlbiBwb3B1bGF0ZWQuCiAKLSAgICBDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIEVt
YmVkZGVyRW50cnlwb2ludENhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAg
ICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5k
ZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwpAQCAtODYsNiArODYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZSk7CiAgICAgICAgIHJldHVybiAqY2Fs
bGVlOwogICAgIH0KKwogICAgIENhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChydW5uYWJsZSgpKTsKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7CiAgICAgfQogCi0gICAgQ2FsbGVl
JiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4U3BhY2UpCisgICAgQkJRQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBBU1NFUlQo
cnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+
PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwpAQCAtMTExLDYgKzExMiwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiAmbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbY2FsbGVlSW5kZXhd
OwogICAgIH0KIAorICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbkZyb21GdW5jdGlv
bkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQo
KSk7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0g
ZnVuY3Rpb25JbXBvcnRDb3VudCgpOworICAgICAgICByZXR1cm4gJm1fYm94ZWRDYWxsZWVzW2Nh
bGxlZUluZGV4XTsKKyAgICB9CisKICAgICBib29sIGlzU2FmZVRvUnVuKE1lbW9yeU1vZGUpOwog
CiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkBAIC0xMjQs
MTEgKzEzMiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgp
OwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxD
YWxsZWU+PiBtX29wdGltaXplZENhbGxlZXM7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRy
PENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOwor
ICAgIFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4gbV9jYWxsZWVzOworICAgIFZlY3RvcjxSZWZQ
dHI8T01HQ2FsbGVlPj4gbV9vcHRpbWl6ZWRDYWxsZWVzOworICAgIFZlY3Rvcjx2b2lkKj4gbV9i
b3hlZENhbGxlZXM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlw
b2ludENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVz
OwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4gbV93
YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7Ci0gICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwog
ICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21w
aWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21FbWJlZGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUVtYmVkZGVyLmgKaW5kZXggYTIzNzlmZDU4OWM4OWRmNjM1N2U2ZTQ0MWJlZDJhNTE4NzM5Y2Ez
ZS4uYzc4YjQ0M2M1OTFlODcwMzRiNDE5NWVjYTAyNzI4ZGVmODBjYzg5MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3Mg
RXhlY1N0YXRlOwogbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0
OworY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwogY2xhc3MgSW5zdGFuY2U7CiBzdHJ1
Y3QgSW50ZXJuYWxGdW5jdGlvbjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKQEAgLTQ4LDcg
KzQ5LDcgQEAgY2xhc3MgU2lnbmF0dXJlOwogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7
CiAKIC8vIENyZWF0ZSB3cmFwcGVyIGNvZGUgdG8gY2FsbCBmcm9tIGVtYmVkZGVyIC0+IFdlYkFz
c2VtYmx5LgotdXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4oQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3Qg
U2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCk+OwordXNpbmcgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IFNpZ25hdHVyZSYsIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSosIGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgTWVtb3J5TW9kZSk+OwogCiAvLyBDYWxsZWQgYXMgc29vbiBhcyBhbiBleGNlcHRp
b24gaXMgZGV0ZWN0ZWQuIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIFBDIHRvIGNvbnRpbnVlIGF0
LgogdXNpbmcgVGhyb3dXYXNtRXhjZXB0aW9uID0gdm9pZCogKCopKEV4ZWNTdGF0ZSosIFdhc206
OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmgKaW5kZXggMDY2OWJiNDA3ZTI5NTkzNjIyZmNjYThlNTE5MTE5NWRkOWI0NmYzYi4u
ZWEwZTBiNjU4ZTllNDU1ZTliMDFjZGFlMmI0Nzk2YjYyMmI4MGUzZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjg3LDEwICsyODcsMTUgQEAgaW5saW5lIGJv
b2wgaXNWYWxpZE5hbWVUeXBlKEludCB2YWwpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdHJ1
Y3QgVW5saW5rZWRNb3ZlQW5kQ2FsbCB7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBtb3ZlTG9jYXRpb247CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbExvY2F0aW9uOwor
fTsKKwogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGwgewogICAgIFdURl9NQUtFX1NUUlVD
VF9GQVNUX0FMTE9DQVRFRDsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50cnlQdHJU
YWc+IGNhbGxMb2NhdGlvbjsKLSAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlOworICAgIHNp
emVfdCB0YXJnZXRGdW5jdGlvbkluZGV4U3BhY2U7CisgICAgVW5saW5rZWRNb3ZlQW5kQ2FsbCB1
bmxpbmtlZE1vdmVBbmRDYWxsOwogfTsKIAogc3RydWN0IEVudHJ5cG9pbnQgewpAQCAtMzEzLDEw
ICszMTgsMTIgQEAgc3RydWN0IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gewogICAgIHVz
aW5nIExvYWRMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+
KjsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgc2lnbmF0dXJl
SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9j
YXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbiwgZW50cnlwb2ludExvYWRMb2NhdGlvbik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOyB9
CiAKICAgICAvLyBGSVhNRTogUGFjayBzaWduYXR1cmUgaW5kZXggYW5kIGNvZGUgcG9pbnRlciBp
bnRvIG9uZSA2NC1iaXQgdmFsdWUuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NTUxMT4uCiAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggeyBT
aWduYXR1cmU6OmludmFsaWRJbmRleCB9OwogICAgIExvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9h
ZExvY2F0aW9uOworICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbjsKIH07CiB1c2lu
ZyBGdW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0b3I8V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5j
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKaW5kZXggZjRm
MzUwODdlMjU2ZDA5MmNlNzRiMjFiODQ0MGE5MzcyNWQxNjY4NS4uN2UyMTI0Zjc2YzYzYmY3NWUy
ZGIxMjM0OWQ5NTBiMGU5MzY4NDBjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUluc3RhbmNlLmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2Nh
dGlvbiB7IG51bGxwdHIgfTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViOwogICAgICAgICB2b2lkKiBpbXBvcnRGdW5jdGlv
biB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcsIHRoaXMgaXMgYSBXcml0ZUJhcnJp
ZXI8SlNPYmplY3Q+LgorICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24geyBu
dWxscHRyIH07CiAgICAgfTsKICAgICB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX251bUltcG9ydEZ1bmN0aW9uczsgfQogICAgIEltcG9ydEZ1bmN0aW9uSW5m
byogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkKQEAgLTE0MSw2
ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0
T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8p
ICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21Ub0VtYmVkZGVyU3R1
YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1w
b3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZT
RVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdhc21Ub0VtYmVkZGVyU3R1Yik7IH0KICAgICBzdGF0
aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVt
KSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKElt
cG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCBp
bXBvcnRGdW5jdGlvbik7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQm94ZWRDYWxsZWVM
b2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRh
aWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBP
QkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCBib3hlZENhbGxlZUxvYWRMb2NhdGlv
bik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBpbXBvcnRGdW5jdGlvbih1bnNpZ25l
ZCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oJmltcG9y
dEZ1bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlvbk51bSktPmltcG9ydEZ1bmN0aW9uKTsgfQogCiAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSA9PSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2NF90KT4oc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5m
bykpLCAiV2UgcmVseSBvbiB0aGlzIGZvciB0aGUgYWxpZ25tZW50IHRvIGJlIGNvcnJlY3QiKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRy
eVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5
UGxhbi5jcHAKaW5kZXggYTBiYjZjZjZkOTAzMDY3NDQzNTZkMjg4ZWFiMGMyYjUyNTIwNTYyYS4u
Y2ZhZWFmMmViYzBiMTY0M2NlM2RhNmIxOGYxMGU1MGU3NzBiMGE1OCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKQEAg
LTU0LDE1ICs1NCwxNSBAQCBuYW1lc3BhY2UgV2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFs
IHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotT01HRm9yT1NSRW50
cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4m
JiBtb2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0
YXNrKQorT01HRm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29u
dGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYgY2FsbGVlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIENvZGVCbG9jayYgY29kZUJs
b2NrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYo
Y29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24o
KSkpLCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAg
ICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX2Nv
ZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2NhbGxlZShXVEZNb3ZlKGNhbGxlZSkpCiAgICAg
LCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKICAgICAsIG1fbG9vcEluZGV4KGxvb3BJ
bmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUpOworICAgIHNldE1vZGUoY29kZUJsb2NrLm1vZGUo
KSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9j
b2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0ZvcihtX21vZGUpKTsKICAgICBk
YXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFy
dGluZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVs
ZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKQEAgLTgxLDQ1ICs4MSwzMyBAQCB2
b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlSW5kZXgpOwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1
cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250
ZXh0OwogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1
dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0
aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdG
b3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOworICAgIGF1dG8g
cGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9u
LCBzaWduYXR1cmUsIG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29t
cGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29w
SW5kZXgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAg
ICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVS
ZXN1bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5nIHRvIHRpZXIgdXAgIiwgU3RyaW5nOjpudW1iZXIo
bV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRW50cnlw
b2ludCBvbWdFbnRyeXBvaW50OwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53
YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBp
ZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewogICAgICAgICBC
YXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxl
IG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVt
YmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG9t
Z0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisg
ICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxl
ZTo6Y3JlYXRlKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNl
Y3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCBtX2xvb3BJbmRleCk7CisgICAgY2FsbGVlLT5lbnRyeXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lz
dGVycyA9IFdURk1vdmUoY29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBjYWxsZWUt
PmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigK
ICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAi
V2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1
bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3Ry
aW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAog
ICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAg
ICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29t
cGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwotCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAg
ICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2Rl
KCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNw
YWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhT
cGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVu
bGlua2VkQ2FsbHMpKTsKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9p
bnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBD
YWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwotICAgICAgICBlbnRyeXBvaW50ID0g
Y2FsbGVlLT5lbnRyeXBvaW50KCk7Ci0KICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53
YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5j
dGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5j
dGlvbkNvdW50KCkpCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5t
X3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2st
Pndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9u
SW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLQot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Cisg
ICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAg
ICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxsZWUgPSBtX2NvZGVCbG9jay0+d2FzbUJCUUNhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UpOwor
ICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtDYWxsZXIobG9ja2VyLCBsaW5rQnVm
ZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwogICAgICAgICB9CiAgICAgfQogICAgIHJl
c2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwpAQCAtMTMyLDE5ICsxMjAsNiBAQCB2
b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAg
ICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5vc3JFbnRyeVRyaWdnZXJzKClbbV9sb29wSW5k
ZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9uZTsKICAgICAg
ICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01H
Rm9yT1NSRW50cnkgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwog
ICAgICAgICB9Ci0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIC8vIEl0
IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRlZCB3aGlsZSB3ZSByZWxl
YXNlIG1fY29kZUJsb2NrLT5sb2NrLgotICAgICAgICAvLyBVbnRpbCB3ZSBhZGQgT01HRm9yT1NS
RW50cnkgY2FsbGVlIHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxsZWUsIHRoaXMgbmV3IE9N
RyBmdW5jdGlvbiBsaW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhpcyBPTUdGb3JPU1JFbnRy
eSBjYWxsZWUuCi0gICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxs
ZWUgYWdhaW4gbm90IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0gICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAg
aWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9u
KCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBt
X2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNl
XS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9
IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
Y2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQ
dHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50
cnlwb2ludCkpOwotICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JP
U1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIs
IG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIG1fY2FsbGVlLT50
aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRy
eVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBs
YW4uaAppbmRleCAwMTUxZGE2NjVhOTY4MzI4Zjk1MDM4ZjViNTBjMDg1NzYxZjA1ZGU3Li5kNTZl
YTQyMTdkZDcxMGQ1NzUxNjQ1YTliM2ViMDE4YzQzNTBkMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oCkBAIC00OCw3ICs0
OCw3IEBAIHB1YmxpYzoKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5v
dCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEg
cmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1v
ZHVsZT4mJiwgUmVmPEJCUUNhbGxlZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMy
X3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBPTUdGb3JP
U1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIFJlZjxCQlFDYWxsZWU+JiYsIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgQ29kZUJsb2NrJiwgQ29t
cGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVu
ZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCBhODA1ZDAxNmZiOTkyODY0YzdhMDNj
ODI2NmNjNWQ0ZmI5ODY1YTY5Li5lMGIxMDEwMTRjYzNmYmUxNGRiM2M3MGIyYTA1ZGNkYmM1OTFm
MTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC01
NCwxMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFuSW50ZXJuYWwgewogc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdQbGFuOjpPTUdQbGFuKENvbnRleHQq
IGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK09NR1BsYW46Ok9NR1BsYW4o
Q29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAg
OiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1v
ZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9tb2R1
bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxv
Y2tGb3IobW9kZSkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2Z1bmN0
aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUpOworICAgIHNldE1v
ZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgp
KTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zv
cihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3Nl
LCAiU3RhcnRpbmcgT01HIHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5kZXgsICIgb2YgbW9kdWxlOiAi
LCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOwpAQCAtNzksNTcgKzc5LDQ4IEBAIHZvaWQg
T01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAg
IEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5m
b3JtYXRpb24uZ2V0KCkpKTsKIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1
bmxpbmtlZENhbGxzOwogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAg
ICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7Ci0gICAgYXV0byBwYXJzZUFuZENvbXBpbGVS
ZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5s
aW5rZWRDYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRl
eCwgVUlOVDMyX01BWCk7CisgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFu
ZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9jb2RlQmxvY2stPm1fd2Fz
bVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rp
b25JbmRleCwgVUlOVDMyX01BWCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGls
ZVJlc3VsdCkpIHsKICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHBh
cnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBT
dHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBFbnRyeXBvaW50IG9tZ0VudHJ5cG9pbnQ7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
KSB7CiAgICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygiT3V0
IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxlIHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQgaW5kZXgg
IiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNv
bXBpbGF0aW9uPigKKyAgICBSZWY8T01HQ2FsbGVlPiBvbWdDYWxsZWUgPSBPTUdDYWxsZWU6OmNy
ZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9u
LT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CisgICAgb21nQ2FsbGVlLT5lbnRyeXBvaW50KCku
Y29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9N
RyBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRv
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53
YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5
cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgb21nQ2FsbGVlLT5lbnRyeXBvaW50KCku
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoY29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJz
KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9p
bnQ7CisgICAgQkJRQ2FsbGVlJiBiYnFDYWxsZWUgPSAqbV9jb2RlQmxvY2stPm1fY2FsbGVlc1tt
X2Z1bmN0aW9uSW5kZXhdOwogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigp
ID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAgICAgIFJlZjxPTUdDYWxs
ZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1
bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChm
dW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgp
LT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7
CiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0
aW9uSW5kZXhdKTsKLSAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwog
CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIHB1Ymxpc2ggb3VyIGNhbGxlZSBh
dCB0aGUgc2FtZSB0aW1lIGFzIHdlIGxpbmsgb3VyIGNhbGxzaXRlcy4gVGhpcyBlbmFibGVzIHVz
IHRvIGVuc3VyZSB3ZQogICAgICAgICAvLyBhbHdheXMgY2FsbCB0aGUgZmFzdGVzdCBjb2RlLiBB
bnkgZnVuY3Rpb24gbGlua2VkIGFmdGVyIHVzIHdpbGwgc2VlIG91ciBuZXcgY29kZSBhbmQgdGhl
IG5ldyBjYWxsc2l0ZXMsIHdoaWNoIHRoZXkKICAgICAgICAgLy8gd2lsbCB1cGRhdGUuIEl0J3Mg
YWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUgd2UgcmVzZXQgdGhlIGlu
c3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UKICAgICAgICAgLy8gdGhl
IGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8gYmUgcHVibGlzaGVkIHRvby4KICAgICAgICAgTG9j
a0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2Nr
LT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7
CisgICAgICAgIG1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4
XSA9IG9tZ0NhbGxlZS5jb3B5UmVmKCk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEJCUUNhbGxl
ZSYgYmJxQ2FsbGVlID0gKnN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2Nh
bGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSk7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKGJicUNhbGxlZS50aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkpOwotICAgICAgICAg
ICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAg
ICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50KG9tZ0NhbGxlZS5jb3B5UmVmKCkpOwogICAgICAg
ICAgICAgYmJxQ2FsbGVlLnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcg
PSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAgICB9Ci0g
ICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRy
eXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1
bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAg
ICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2Nh
bGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQo
KS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworCisgICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJn
ZXRDYWxsZWUgPSBtX2NvZGVCbG9jay0+d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2Fs
bGVlLmFkZEFuZExpbmtDYWxsZXIoaG9sZGVyLCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92
ZUFuZENhbGwpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzksMzAgKzEzMCwxNCBAQCB2b2lk
IE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgcmVzZXRJbnN0cnVjdGlvbkNh
Y2hlT25BbGxUaHJlYWRzKCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBw
cm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KIAot
ICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9u
SW5kZXhdID0gZW50cnlwb2ludDsKKyAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxs
RW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IG9tZ0NhbGxlZS0+Y29kZSgpOworICAgIG1f
Y29kZUJsb2NrLT5tX2JveGVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gQ2FsbGVlQml0czo6
Ym94V2FzbShvbWdDYWxsZWUucHRyKCkpOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBob2xk
ZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0KLSAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBb
Jl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcg
cmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFM
b2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwot
ICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbklu
ZGV4U3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5J
bnRlcm5hbDo6dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxs
LmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBv
aW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICByZXBhdGNoQ2FsbHMobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tp
XSk7Ci0gICAgICAgICAgICBpZiAoT01HQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IHN0YXRp
Y19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbaV0uZ2V0KCkpLT5yZXBs
YWNlbWVudCgpKQotICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxl
ZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRy
eUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NvZGVC
bG9jay0+bV9jYWxsZWVzW2ldLmdldCgpKS0+b3NyRW50cnlDYWxsZWUoKSkKLSAgICAgICAgICAg
ICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgYmJxQ2FsbGVlLnJlcGF0Y2hDYWxsZXJzKGhvbGRlciwgb21n
Q2FsbGVlLmdldCgpKTsKICAgICB9CiAKLSAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVy
bmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRp
ZXIgdXAgY291bnQgYXQ6ICIsIHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5t
X2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSktPnRpZXJVcENvdW50KCktPmNvdW50KCkp
OworICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hl
ZCBPTUcgIiwgbV9mdW5jdGlvbkluZGV4LCAiIHdpdGggdGllciB1cCBjb3VudCBhdDogIiwgbV9j
b2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpLT50aWVyVXBDb3VudCgp
LT5jb3VudCgpKTsKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKaW5kZXggY2I3OWI0MzlkNGU5OTRkODcw
ZTlkYzkwODljNDNhN2Y1ODYwMjU2Ni4uZTY4OWQ1NjY1N2E4ZDFiYjliZGU4MmVlMDUxNTM1NDg3
MGJlODMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCkBAIC00
Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hv
dWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxs
IGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+
JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYp
OworICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIENvZGVCbG9jayYsIENvbXBsZXRpb25UYXNrJiYpOwogCiBwcml2YXRlOgogICAgIC8v
IEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFz
c2VzLi4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0
aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAK
aW5kZXggMWFkZThhOGU5NDQ5ZGE4YjNmMDZjZDNkNjk0MjU3OTJlNmM1ZGY5YS4uYTFlNTdkNDMz
MDBkZDM4YmRjM2YxOWExZWY1MzhhNDYwYjFhOWQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9p
ZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKFRpZXJVcENvdW50JiB0aWVyVXAsIE9NR0Nh
bGxlZSogcmVwbGFjZQogICAgIGlmIChjb21waWxlKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgInRyaWdnZXJPTUdSZXBsYWNlbWVudCBmb3IgIiwgZnVuY3Rp
b25JbmRleCk7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KLSAgICAg
ICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRl
eHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgZnVuY3Rpb25JbmRl
eCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICAgICAgUmVm
PFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwg
UmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29k
ZUJsb2NrLCBQbGFuOjpkb250RmluYWxpemUoKSkpOwogICAgICAgICBlbnN1cmVXb3JrbGlzdCgp
LmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6
OnVzZUNvbmN1cnJlbnRKSVQoKSkpCiAgICAgICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlv
bigpOwpAQCAtMTk3LDkgKzE5NywxNCBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNl
KiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgYwogI2Vsc2UK
ICNlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuCiAjZW5kaWYKLSAgICAvLyA0LiBDb25m
aWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRvIGp1bXAgdG8gT1NSIGVudHJ5IGZyb20gdGhlIGNh
bGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rpb24uCisKKyAgICAvLyA0LiBVcGRhdGUgdGhlIGNh
bGxlZSBzbG90IGluIHRoZSBjYWxsIGZyYW1lIHRvIHRoZSBPU1IgZW50cnkgY2FsbGVlLgorICAg
IHZvaWQqKiBzdGFja1BvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihjb250ZXh0LnNwKCkp
OworICAgICooc3RhY2tQb2ludGVyICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gMSkgPSBDYWxs
ZWVCaXRzOjpib3hXYXNtKCZvc3JFbnRyeUNhbGxlZSk7CisKKyAgICAvLyA1LiBDb25maWd1cmUg
YXJndW1lbnQgcmVnaXN0ZXJzIHRvIGp1bXAgdG8gT1NSIGVudHJ5IGZyb20gdGhlIGNhbGxlciBv
ZiB0aGlzIHJ1bnRpbWUgZnVuY3Rpb24uCiAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSA9IGJpdHdpc2VfY2FzdDxVQ1BVUmVnaXN0ZXI+KGJ1ZmZlcik7Ci0gICAgY29udGV4
dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSA9IGJpdHdpc2VfY2FzdDxVQ1BVUmVnaXN0ZXI+
KG9zckVudHJ5Q2FsbGVlLmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzczw+KCkpOworICAg
IGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMSkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJl
Z2lzdGVyPihvc3JFbnRyeUNhbGxlZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3M8PigpKTsKIH0K
IAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhQcm9iZTo6Q29udGV4dCYg
Y29udGV4dCkKQEAgLTM2NSw3ICszNzAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9T
UkVudHJ5Tm93KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KQogCiAgICAgaWYgKHN0YXJ0T1NSRW50
cnlDb21waWxhdGlvbikgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksICJ0cmlnZ2VyT01HT1NSIGZvciAiLCBmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgUmVmPFBs
YW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29u
dGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6
QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXgsIGNvZGVCbG9jay5t
b2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgICAgIFJlZjxQbGFuPiBwbGFuID0g
YWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeVBsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVm
PFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVmPFdhc206OkJCUUNhbGxlZT4o
Y2FsbGVlKSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4LCBjb2RlQmxvY2ssIFBsYW46OmRvbnRG
aW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlS
ZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgp
KSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKaW5kZXggNzM1MjIwMjg5MzdjNmRhYzFmYzQ3
M2M3ZTRjZGM2NDk1OGNlOGVhNi4uZjEzZjY0NTAyMGIyZjc2MGIyNGVjY2JmNzNhMGM3YjNjZDlk
NGRkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAt
NDIsMjEgKzQyLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLXN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29t
cGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4KQordm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGls
YXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqIHNlbGYsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAq
Y29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVDsKIAotICAgIGF1dG8gcmVz
dWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogICAgIGppdC5lbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwogCiAgICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3Mu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKICAgICBqaXQu
c3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFn
PiogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsKLSAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICps
aW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4o
Y2FsbGVlTW92ZUxvY2F0aW9uKTsKLSAgICB9KTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKENhbGxlZUJpdHM6OmJveFdhc20oc2VsZikpLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAogICAgIGNvbnN0
IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCk7CiAgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlubmVkUmVncy50b1NhdmUobW9kZSk7CkBA
IC02OSw3ICs2Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVK
U1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAjZW5kaWYKIAogICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwodG9TYXZlLCBSZWdpc3RlckF0T2Zm
c2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJhc2VkKTsKLSAgICByZXN1bHQt
PmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7CisgICAg
c2VsZi0+ZW50cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxs
OwogCiAgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUo
KSAqIHNpemVvZih2b2lkKik7CiAgICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxpbmdDb252
ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwpAQCAtMTI1LDkgKzExOSwxMCBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0
aW9uQ29udGV4dCYgY29tcAogICAgICAgICB9CiAKICAgICAgICAgZW1pdFRocm93V2FzbVRvSlNF
eGNlcHRpb24oaml0LCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIGFyZ3VtZW50c0luY2x1ZGVJNjQg
PyBFeGNlcHRpb25UeXBlOjpJNjRBcmd1bWVudFR5cGUgOiBFeGNlcHRpb25UeXBlOjpJNjRSZXR1
cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsID0gVW5saW5rZWRN
b3ZlQW5kQ2FsbCB7IH07CiAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5u
ZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwogCiAgICAgewpAQCAtMTk4LDYgKzE5
MywxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21X
cmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogCiAgICAgICAgICAgICBqc09mZnNldCAr
PSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnIGNh
bGxlZUdQUiA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsK
KyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyTW92ZUFuZENhbGwtPm1vdmVMb2Nh
dGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3Rl
cikpKTsKICAgICB9CiAKICAgICBpZiAoISFpbmZvLm1lbW9yeSkgewpAQCAtMjIxLDEyICsyMjAs
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFw
cGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFs
bHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRjaE9yU2l6ZSwgc2NyYXRj
aE9yU2l6ZSk7CiAgICAgfQogCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhy
ZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgIEFT
U0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7
Ci0gICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVu
Y3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleFNwYWNlIH0pOwotICAgIH0p
OworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsLT5jYWxsTG9jYXRp
b24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAKICAgICBmb3IgKGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewogICAg
ICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CkBAIC0yNjYsOCArMjYw
LDYgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3Jh
cHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAKIAogICAgIGppdC5lbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOwogICAgIGppdC5yZXQoKTsKLQotICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c20uaAppbmRleCBiNGI5OGQxNTliMjg0YjdlYzMyM2FhNTAyYzAzZjkyMWMxMmIwM2E5Li45M2Fh
MjRkOTY4MGFmZmZkM2I3YTk2ZDE5MWZjZjhjMzkxZDAyMzFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwordm9pZCBjcmVhdGVK
U1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgRW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlKiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlN
b2RlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCAwNTdh
YTcwMThiNDRhOGZiYjRhOGQ0NzExM2JkYmViODc0OWRlYzg3Li5mZDNhZTE4MjA0ZjM1N2JiMzEz
NWNlMzU1ZTllNmNjZDIyYTgzOWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNDY1LDYgKzQ2NSw4IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpq
c0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UganVz
dCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxkIHRlYWNoIHRoZSBNb2R1bGUKICAg
ICAgICAgLy8gaG93IHRvIHJlcGF0Y2ggdXM6CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NzAKKyAgICAgICAgaml0LmxvYWRQdHIoYm94ZWRD
YWxsZWVMb2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgICAgICBqaXQubG9hZFB0cihlbnRyeXBvaW50
TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuY2FsbChzY3JhdGNoR1BS
LCBXYXNtRW50cnlQdHJUYWcpOwogICAgIH0KQEAgLTUzNiwxMCArNTM4LDEwIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxF
bnRyeXBvaW50U2xvdygpCiAgICAgcmV0dXJuIG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7CiB9
CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdh
c206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHZvaWQq
KiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RG
dW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVu
Y3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVu
Y3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwg
c2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdl
YkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9p
bnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2Nh
dGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwg
ZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSk7CiAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghZnVuY3Rpb24tPmlzTGFyZ2VBbGxvY2F0aW9uKCksICJXZWJBc3NlbWJseUZ1bmN0aW9u
IHNob3VsZCBiZSBhbGxvY2F0ZWQgbm90IGluIGxhcmdlIGFsbG9jYXRpb24gc2luY2UgaXQgaXMg
SlNDYWxsZWUuIik7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwpAQCAtNTUxLDEwICs1NTMsMTAgQEAg
U3RydWN0dXJlKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1i
bHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdh
c21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9j
YXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogICAgIDogQmFzZSB7
IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSB9Ci0gICAgLCBtX2pzRW50cnlwb2ludCB7IGpz
RW50cnlwb2ludC5lbnRyeXBvaW50KCkgfQotICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBz
aWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfQorICAgICwg
bV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9pbnQuY29kZSgpIH0KKyAgICAsIG1faW1wb3J0YWJs
ZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiB9CiB7IH0KIAogdm9pZCBXZWJBc3NlbWJseUZ1
bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmgKaW5kZXggOThjMzQ2NGNkMDcyZDY0NDVlNzdkZTRmODhkZTBjY2UzYjQ5NWUzNC4uN2Rk
ZjM5ZDAwOGY0YjY0MjlmOWY3YTEzMWY3ZjlkMzlhNzAxZDE2MyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaApAQCAtNjIsMTEg
KzYyLDEyIEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcm
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVy
ZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbi5zaWduYXR1cmVJ
bmRleDsgfQogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBl
bnRyeXBvaW50TG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rp
b24uZW50cnlwb2ludExvYWRMb2NhdGlvbjsgfQorICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLmJveGVkQ2FsbGVl
TG9hZExvY2F0aW9uOyB9CiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpbXBvcnRh
YmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbjsgfQogCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4ganNFbnRyeXBvaW50KEFy
aXR5Q2hlY2tNb2RlIGFyaXR5KQpAQCAtNzgsNiArNzksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9pbXBvcnRhYmxlRnVu
Y3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50
TG9hZExvY2F0aW9uKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQm94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5j
dGlvbiwgbV9pbXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpOyB9CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludCgpCiAgICAgewpAQCAt
OTEsNyArOTMsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24o
Vk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBv
aW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2lu
dExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNF
bnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50
cnlwb2ludExvYWRMb2NhdGlvbiwgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNt
OjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKICAgICBwdHJkaWZmX3QgcHJldmlvdXNJbnN0
YW5jZU9mZnNldCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IDkyZGRjZjc4NmU4MTAw
NWEyMWUxZjhiMWY1MGE5ZDIwOWY5ZTY5MjkuLjdhZjFhMDQ1MmFlMGRmN2ViZGMzYzI0ZDA5ZmZm
YmUwN2MxMGUwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTE5Myw2ICsxOTMsNyBAQCB2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwg
SlNPYmplY3QqIGltcG9ydE9iagogCiAgICAgICAgICAgICBXYXNtOjpJbnN0YW5jZSogY2FsbGVl
SW5zdGFuY2UgPSBudWxscHRyOwogICAgICAgICAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBudWxscHRyOworICAg
ICAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uID0gbnVsbHB0cjsKICAgICAg
ICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKIAog
ICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9i
amVjdDoKQEAgLTIwNSw2ICsyMDYsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAg
ICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWdu
YXR1cmVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBjYWxsZWVJbnN0YW5jZSA9ICZ3YXNt
RnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24gPSB3YXNtRnVuY3Rpb24tPmVudHJ5cG9pbnRMb2FkTG9jYXRp
b24oKTsKKyAgICAgICAgICAgICAgICAgICAgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSB3YXNt
RnVuY3Rpb24tPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21X
cmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8v
IGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCkBAIC0yMjMsNiArMjI1LDcgQEAgdm9p
ZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUs
IEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgICAgIGF1dG8qIGluZm8gPSBtX2luc3RhbmNl
LT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnQua2luZEluZGV4KTsKICAgICAg
ICAgICAgIGluZm8tPnRhcmdldEluc3RhbmNlID0gY2FsbGVlSW5zdGFuY2U7CiAgICAgICAgICAg
ICBpbmZvLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGVudHJ5cG9pbnRMb2FkTG9jYXRp
b247CisgICAgICAgICAgICBpbmZvLT5ib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IGJveGVkQ2Fs
bGVlTG9hZExvY2F0aW9uOwogICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBv
cnRGdW5jdGlvbjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+PihpbXBvcnQua2luZEluZGV4KS0+c2V0
KHZtLCBtX2luc3RhbmNlLmdldCgpLCBmdW5jdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtMzQ3LDkgKzM1MCwxMCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAg
ICAgICAgICAgLy8gICAgIGMuIFJldHVybiBmdW5jLgogICAgICAgICAgICAgV2FzbTo6Q2FsbGVl
JiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2Nh
dGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGluZGV4KTsKICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5k
ZXgpOwogICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0
cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBmaWVsZCwgbV9pbnN0YW5jZS5n
ZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBz
aWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
biA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25h
dHVyZUluZGV4KTsKICAgICAgICAgICAgIHdyYXBwZXIgPSBmdW5jdGlvbjsKICAgICAgICAgfQog
CkBAIC00NjAsNyArNDY0LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
ID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9u
ID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7
CisgICAgICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2st
PmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0
aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
biA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgc2ln
bmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywg
ZnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtNTc1LDEzICs1ODAsMTQgQEAgSlNWYWx1
ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiAg
ICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNvZGVC
bG9jay0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4KTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5lbnRy
eXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsK
KyAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+
Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXgpOwogICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9u
IGluZGV4IDAuCiAgICAgICAgICAgICAvLyBXaGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0
YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAuCiAgICAgICAgICAgICAvLyBEb2VzIChuZXcgSW5z
dGFuY2UoLi4uKSkuZXhwb3J0cy5mb28gPT09IHRhYmxlLmdldCgwKT8KICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAg
ICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6
Y3JlYXRlKAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBl
bnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAg
dm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0
dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdl
dCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIGJv
eGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAKICAgICAgICAgICAgIG1f
aW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5zZXQoZWxlbWVudEluZGV4LCBmdW5jdGlvbik7
CiAgICAgICAgICAgICArK2VsZW1lbnRJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAppbmRl
eCBjZGU0ZjNjZjI2MDRhZGQ3NmNjMDRmYjIyNGY5YTUyYmQyZGEwMzc2Li42Mjg2MmI0MTE3ODQ2
NGU2MTNlM2U3OTMwNDI2NzMzMDY1MGU4MTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCkBA
IC02MCw3ICs2MCw5IEBAIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPCiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2
bSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwog
ICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50
cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0g
ICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZpbnN0YW5jZS0+aW5z
dGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgpLT53YXNtVG9FbWJlZGRlclN0
dWIgfSApOworICAgIGF1dG8gaW1wb3J0RnVuY3Rpb25JbmZvID0gaW5zdGFuY2UtPmluc3RhbmNl
KCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEluZGV4KTsKKyAgICBzdGF0aWMgdm9pZCogbnVs
bEJveGVkQ2FsbGVlID0gbnVsbHB0cjsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiog
cmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24geyBzaWdu
YXR1cmVJbmRleCwgJmltcG9ydEZ1bmN0aW9uSW5mby0+d2FzbVRvRW1iZWRkZXJTdHViLCAmbnVs
bEJveGVkQ2FsbGVlIH0pOwogICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0g
V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgcmVz
dWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGluc3RhbmNlKTsKICAgICByZXR1cm4gcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378867</attachid>
            <date>2019-09-16 09:55:59 -0700</date>
            <delta_ts>2019-09-16 10:00:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201799-20190916095557.patch</filename>
            <type>text/plain</type>
            <size>119954</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDRkYmQ0YWUxODlmMDYyMGQ2N2I3YzlkZmMyZTg4NDc5ZGExZTQ0Li5mNDhiZGM1Njc5ZWFhOWVh
MTZiYmNkNGE1YzIzOThkN2EyZDQ3YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxOS0wOS0xNiAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBI
b3dldmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGlu
dGVycHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGlj
aCBmdW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMg
dGhlIGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRl
ciwgc28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdy
aXRpbmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0
aGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0
byB0aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBn
ZW5lcmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdl
IGtlZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAg
Y29kZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAg
LSBDYWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBj
YWxscywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBK
Uy10by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogd2Fz
bS10by13YXNtIHN0dWIsIEpTLXRvLXdhc20gc3R1YiAoY2FsbGVlIGZyYW1lKSwgd2FzbS10by1K
UyBzdHViLCBPTUcgb3NyIGVudHJ5CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhbHNvIGNoYW5n
ZSBpdCBzbyB0aGF0IHRoZSBjYWxsZWUga2VlcHMgdHJhY2sgb2YgaXRzIGNhbGxlcnMsIGluc3Rl
YWQgb2YgaGF2aW5nIGEgZ2xvYmFsIG1hcHBpbmcKKyAgICAgICAgb2YgY2FsbHMgaW4gdGhlIFdh
c206OkNvZGVCbG9jay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVwYXRjaCBhbGwgY2FsbGVy
cyBvZiBhIGdpdmVuIENhbGxlZSB3aGVuIGl0IHRpZXJzIHVwLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNl
QW5kQ29tcGlsZUFpcik6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6QkJRUGxhbik6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uaDoKKyAgICAgICAgKiB3YXNt
L1dhc21CQlFQbGFuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjppbml0
aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZS5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cmVwYXRjaE1vdmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZXBhdGNoQ2FsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6YWRkQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRQ2FsbGVlOjphZGRBbmRMaW5rQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJR
Q2FsbGVlOjpyZXBhdGNoQ2FsbGVycyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVlLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6ZW50cnlwb2ludCk6CisgICAgICAgIChKU0M6Oldh
c206OkNhbGxlZTo6Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OnNldHVwRnJhbWVJblBy
b2xvZ3VlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogd2FzbS9XYXNt
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6ZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206
OkNvZGVCbG9jazo6d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSk6CisgICAgICAgICogd2FzbS9XYXNtRW1iZWRkZXIuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbik6CisgICAgICAg
ICogd2FzbS9XYXNtSW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om9m
ZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxh
bjo6T01HRm9yT1NSRW50cnlQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50
cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6T01HUGxhbik6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9NR1JlcGxhY2VtZW50Q29tcGlsZSk6
CisgICAgICAgIChKU0M6Oldhc206OmRvT1NSRW50cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjp0
cmlnZ2VyT1NSRW50cnlOb3cpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20v
anMvSlNUb1dhc20uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xv
dyk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpl
dmFsdWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUpOgor
CiAyMDE5LTA5LTE1ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGVhayBvZiBOU01hcFRhYmxlIGluIC1bSlNWaXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVm
ZXJlbmNlOndpdGhPd25lcjpdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
YTZjMGYwMjc1ZTNmMWU1Y2FkNDFlNmE0YzhhNzYyNWViMDc2YjJlMi4uMTY0MDlhYTczNjFlOTM5
ZjU5ZTMzNjE4YWQzNTFkNzdhYmEwY2JhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtNDYzLDYgKzQ2MywxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIGFzc2VtYmxlci9YODZSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxl
ci9YODZfNjRSZWdpc3RlcnMuaAogCisgICAgYjMvQjNDb21tb24uaAorICAgIGIzL0IzQ29tcGls
YXRpb24uaAorICAgIGIzL0IzVHlwZS5oCisKICAgICBiaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNh
bGwuaAogICAgIGJpbmRpbmdzL1NjcmlwdE9iamVjdC5oCiAgICAgYmluZGluZ3MvU2NyaXB0VmFs
dWUuaApAQCAtMTAwMSw2ICsxMDA1LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBydW50aW1lL1dyaXRlQmFycmllci5oCiAgICAgcnVudGltZS9X
cml0ZUJhcnJpZXJJbmxpbmVzLmgKIAorICAgIHdhc20vV2FzbUNhbGxlZS5oCiAgICAgd2FzbS9X
YXNtQ2FwYWJpbGl0aWVzLmgKICAgICB3YXNtL1dhc21Db2RlQmxvY2suaAogICAgIHdhc20vV2Fz
bUNvbXBpbGF0aW9uTW9kZS5oCkBAIC0xMDA4LDYgKzEwMTMsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHdhc20vV2FzbUVtYmVkZGVyLmgKICAg
ICB3YXNtL1dhc21FeGNlcHRpb25UeXBlLmgKICAgICB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuaAorICAgIHdhc20vV2FzbUZvcm1hdC5oCiAgICAgd2FzbS9XYXNtSW5kZXhPck5hbWUuaAog
ICAgIHdhc20vV2FzbU1lbW9yeS5oCiAgICAgd2FzbS9XYXNtTWVtb3J5TW9kZS5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUyMmMxNGZhYWFhYzM4MzA3MThjMWIxZmU4MDk3OWNm
Y2Q3Zjg1YmEuLjYyZWRjYTliOGZhMGIyNmMzMDU4YmNmZmVjZGEyNzVlYWYyNWNjN2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJMEYzMzhERjYx
QkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERjQxQkU5M0Q1NTAwMTNDODhGIC8q
IEIzQ29uc3RyYWluZWRWYWx1ZS5oICovOyB9OwogCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYg
LyogQjNDQ2FsbFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggKi87IH07
CiAJCTBGMzM4REZFMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERkMxQkVENTEyNzAw
MTNDODhGIC8qIEFpclNpbXBsaWZ5Q0ZHLmggKi87IH07Ci0JCTBGMzM4RTBDMUJGMDI3NkMwMDEz
Qzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjMzOEUwMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5o
ICovOyB9OworCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDAxQkYw
Mjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNE
YXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzMzhFMDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCAqLzsgfTsKIAkJ
MEYzMzhFMTAxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDQxQkYwMjc2QzAwMTND
ODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oICovOyB9OwogCQkwRjMzOEUxMTFCRjAyNzZDMDAxM0M4
OEYgLyogQjNPcGFxdWVCeXByb2R1Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMzM4RTA1MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJv
ZHVjdC5oICovOyB9OwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJCTBGRUM4NTA0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xp
c3QuaCAqLzsgfTsKIAkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
QzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLzsgfTsKIAkJMEZFQzg1MDgx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hl
Y2tWYWx1ZS5oICovOyB9OwotCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9OworCQkwRkVDODUwQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUM4NTBDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuaCAqLzsgfTsKIAkJMEZFQzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
c3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLzsgfTsKIAkJ
MEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsKQEAgLTY3NSw3ICs2NzUsNyBAQAogCQkwRkVD
ODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CiAJCTBGRUM4NTM4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENh
c2UuaCAqLzsgfTsKIAkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTNDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLzsg
fTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi87IH07CiAJCTBGRUM4NTQwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmgg
Ki87IH07CiAJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGODFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovOyB9OwpAQCAtNzE0MywxMSArNzE0MywxMSBAQAog
CQkJCTg2ODkyMUMxMUY5QzBDQjcwMDExNTlGNiAvKiBKU0JpZ0ludC5oICovLAogCQkJCTg2RkE5
RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAogCQkJCTg2RkE5
RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKLQkJCQlGRTQ4QkQ0
MzIzMjQ1RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmNwcCAqLywKLQkJCQlGRTQ4QkQ0MjIzMjQ1
RTg3MDBGMTM2RDAgLyogSlNDQ29uZmlnLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFD
QkYyIC8qIEpTQ2FsbGVlLmNwcCAqLywKIAkJCQk2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyog
SlNDYWxsZWUuaCAqLywKIAkJCQk1M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0Lmgg
Ki8sCisJCQkJRkU0OEJENDMyMzI0NUU4NzAwRjEzNkQwIC8qIEpTQ0NvbmZpZy5jcHAgKi8sCisJ
CQkJRkU0OEJENDIyMzI0NUU4NzAwRjEzNkQwIC8qIEpTQ0NvbmZpZy5oICovLAogCQkJCUJDN0Y4
RkJBMEUxOUQxRUYwMDg2MzJDMCAvKiBKU0NlbGwuY3BwICovLAogCQkJCUJDMTE2N0Q4MEUxOUJD
QzkwMDgwNjZERCAvKiBKU0NlbGwuaCAqLywKIAkJCQkwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEg
LyogSlNDZWxsSW5saW5lcy5oICovLApAQCAtOTM0OCw3ICs5MzQ4LDYgQEAKIAkJCQkwRkVBMEEx
MDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0IzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0Q4OUQwMjE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAotCQkJCUZFMzg0MjMyMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25F
bnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMUMxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TE9TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJERDE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTAxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTM4LDcgKzk1
MzcsNiBAQAogCQkJCUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMg
LyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
MkJCRkYyMUIwNDRBOEIwMDY2NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQlGRTQ4QkQ0NDIzMjQ1RTkzMDBGMTM2RDAgLyogSlNDQ29uZmlnLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MDhFQkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBp
biBIZWFkZXJzICovLAogCQkJCTUzNEUwMzU0MUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2MDksNiArOTYwNyw3IEBACiAJ
CQkJNjU3Q0Y0NTkxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1M0I2MDFFQzIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0Q4MDFBOTE4ODBENkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZFNDhCRDQ0MjMyNDVFOTMwMEYxMzZEMCAvKiBKU0NDb25maWcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMTE2N0RBMEUxOUJDQzkwMDgwNjZERCAvKiBKU0NlbGwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOTc0OTcxMTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFERDg0QTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODg1LDcgKzk4ODQsOSBAQAogCQkJCTBGMkJEQzJDMTUx
RkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUEx
N0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFMzg0MjMyMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25FbnRyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZFMzg0MjMzMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25zTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTM1Njk4NzIyMjg0MTE4NzAwOENEQ0NCIC8qIFBhY2tlZENlbGxQdHIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxl
bFNvdXJjZUFkYXB0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNEU2NTc1MjA2NjhFQUEwMEZC
ODFBQyAvKiBQYXJzZUhhc2guaCBpbiBIZWFkZXJzICovLApAQCAtOTk5Miw3ICs5OTkzLDYgQEAK
IAkJCQkwRkUwNTAyODFBQTkwOTU2MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUwNTAyOTFBQTkwOTU2MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRz
VGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDJCMUFBOTA5NTYwMEQzM0IzMyAvKiBT
Y29wZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1
IC8qIE9wdGlvbnNMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MjE3RUUyNzQ5MDBB
QkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NUZEMDA2ODE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTAzRkEyMTE4OEVGRjY4MDAxMTBGMTQgLyogU2NyaXB0QnJlYWtwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcAppbmRleCAzMTlhYTViZjA3NWNiZjBhZTAxNWIxMjA2OWNkMDQxOWM5ODli
MTJkLi5jNjcxNTYzMjY1NjUwZmZkYjg0YjgxZjU0NzkxN2JhYjdmZWFjYzg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTIy
OSw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1Nf
Xyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlv
biosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBT
aWduYXR1cmUmKTsKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IEIzOjpQcm9jZWR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBW
ZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgTWVtb3J5TW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRp
b24sIGNvbnN0IFNpZ25hdHVyZSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTYzOSw3ICs2
MzksOCBAQCBwcml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0
ciB9OwogICAgIEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIFZlY3Rv
cjxUeXBlZFRtcD4gbV9sb2NhbHM7Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0
aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRo
LgorICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV9vdXRnb2luZ0NhbGxzOwor
ICAgIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4m
IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52
YWxpZEdQUlJlZyB9OwogICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlkR1BSUmVn
IH07CiAgICAgR1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRHUFJSZWcg
fTsKQEAgLTcwOCwxNCArNzA5LDE1IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNt
Q29udGV4dEluc3RhbmNlKEJhc2ljQmxvY2sqIGJsb2NrLCBUeXBlZFRtcCBpbnN0CiAgICAgZW1p
dFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CiB9CiAKLUFp
cklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlv
biwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCog
dGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSkKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG91dGdvaW5nQ2FsbHMsIGNvbnN0IFZlY3RvcjxNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMs
IE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRp
ZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUpCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQog
ICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiAgICAgLCBtX3RpZXJVcCh0aWVy
VXApCiAgICAgLCBtX3Byb2MocHJvY2VkdXJlKQogICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkp
Ci0gICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
KQorICAgICwgbV9vdXRnb2luZ0NhbGxzKG91dGdvaW5nQ2FsbHMpCisgICAgLCBtX3dhc21Ub1dh
c21FeGl0U3R1YnMod2FzbVRvV2FzbUV4aXRTdHVicykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rp
b25zKGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpKQogewogICAgIG1fY3VycmVudEJsb2NrID0g
bV9jb2RlLmFkZEJsb2NrKCk7CkBAIC03NjEsMTYgKzc2Myw3IEBAIEFpcklSR2VuZXJhdG9yOjpB
aXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVy
ZSYgcHJvCiAgICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVy
YXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlv
bj4oWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgewogICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAg
ICAgIGNvZGUuZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOwotCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1
ZVNjcmF0Y2goMCk7Ci0gICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0
aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIp
OwotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9u
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9u
LT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRy
VGFnPihtb3ZlTG9jYXRpb24pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBqaXQuZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsK
LSAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKTsKLSAgICAgICAgfQorICAgICAgICBqaXQuZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAKICAgICAg
ICAgewogICAgICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3YXNtRnJhbWVTaXplID0g
bV9jb2RlLmZyYW1lU2l6ZSgpOwpAQCAtMTkzNiw4ICsxOTI5LDYgQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwKICAgICBpZiAocmV0dXJuVHlwZSAhPSBUeXBlOjpWb2lkKQogICAgICAgICByZXN1
bHQgPSB0bXBGb3JUeXBlKHJldHVyblR5cGUpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzOwotCiAgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1l
bnRzID0gc3RkOjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhcmdzLnNpemUoKSkpOwogCkBAIC0xOTczLDExICsxOTY0LDEyIEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVw
IH0pOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0
U3R1YiA9IG1fd2FzbVRvV2FzbUV4aXRTdHVic1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbd2FzbVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNh
ZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJU
YWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbChXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPih3YXNtVG9XYXNtRXhpdFN0dWIu
Y29kZSgpKSk7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMjAy
NCwxOCArMjAxNiwyMCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBhdXRvKiBw
YXRjaHBvaW50ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CiAgICAgICAg
IHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHBhdGNocG9pbnQtPm51
bUdQU2NyYXRjaFJlZ2lzdGVycysrOwogCiAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4g
cGF0Y2hBcmdzOwogICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwo
bV9jb2RlLCByZXR1cm5UeXBlLCBwYXRjaHBvaW50LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChU
bXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CiAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5k
KHsgdG1wLCByZXAgfSk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRj
aGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVu
Y3Rpb25JbmRleCB9KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4qIG91dGdvaW5nQ2FsbHMgPSAmbV9vdXRnb2luZ0NhbGxzOworICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW291dGdvaW5nQ2FsbHMsIGZ1bmN0aW9uSW5kZXhd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gcGFyYW1zLmdwU2NyYXRj
aCgwKTsKKyAgICAgICAgICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2go
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBh
dGNoYWJsZU5lYXJDYWxsKCk7CisgICAgICAgICAgICBvdXRnb2luZ0NhbGxzLT5hcHBlbmQoeyBm
dW5jdGlvbkluZGV4LCB7IG1vdmVMb2NhdGlvbiwgY2FsbExvY2F0aW9uIH19KTsKICAgICAgICAg
fSk7CiAKICAgICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQs
IHJlc3VsdCwgV1RGTW92ZShwYXRjaEFyZ3MpKTsKQEAgLTIwODksNiArMjA4Myw3IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hCiAgICAgfSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVD
b2RlID0gZzY0KCk7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlID0gZzY0KCk7CiAgICAgewog
ICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IGc2NCgpOwogICAg
ICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFy
ZSBsb29raW5nIGZvci4KQEAgLTIwOTcsNiArMjA5Miw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hCiAgICAgICAgIGFwcGVuZChBZGQ2NCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgY2FsbGVl
U2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRk
cihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zm
c2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpLCBjYWxsZWVDb2RlKTsgLy8gUG9pbnRlciB0
byBjYWxsZWUgY29kZS4KKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWdu
YXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENh
bGxlZUxvYWRMb2NhdGlvbigpKSwgY2FsbGVlKTsgLy8gUG9pbnRlciB0byBib3hlZCBjYWxsZWUK
IAogICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
IGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0
dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgogICAgICAgICAvLyBGSVhN
RTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBm
YWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMApAQCAtMjE4OSw2ICsyMTg1LDEwIEBAIGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hCiAKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGVtaXRB
cmdzOwogICAgIGVtaXRBcmdzLmFwcGVuZChjYWxsZWVDb2RlKTsKKworICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmFkZHIoY2FsbGVlKSwgY2FsbGVlKTsKKyAgICBlbWl0QXJncy5hcHBlbmQoeyBjYWxs
ZWUsIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
aXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSB9KTsKKwogICAgIHdh
c21DYWxsaW5nQ29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBh
dGNoLCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7
CiAgICAgICAgIGVtaXRBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOwogICAgIH0pOwpAQCAtMjIy
OSwxMCArMjIyOSw4IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmln
aW4KICAgICByZXR1cm4gQjM6Ok9yaWdpbigpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0
aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0
aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVj
dGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYg
Y29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50
cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKLQogICAgIGNv
bXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxs
SGVscGVycz4oKTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBt
YWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIApAQCAtMjI1Miw3ICsyMjUwLDcgQEAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29t
cGlsZUFpcihDb21waWxhdGkKICAgICAKICAgICBwcm9jZWR1cmUuc2V0T3B0TGV2ZWwoT3B0aW9u
czo6d2ViQXNzZW1ibHlCQlFBaXJPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEFpcklSR2Vu
ZXJhdG9yIGlyR2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21F
eGNlcHRpb24sIHNpZ25hdHVyZSk7CisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5m
bywgcHJvY2VkdXJlLCBjb21waWxhdGlvbkNvbnRleHQub3V0Z29pbmdDYWxscywgd2FzbVRvV2Fz
bUV4aXRTdHVicywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRp
b24sIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNl
cihpckdlbmVyYXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgp
LCBzaWduYXR1cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2Vy
LnBhcnNlKCkpOwogCkBAIC0yMjcyLDEwICsyMjcwLDEwIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGls
YXRpCiAgICAgICAgIEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOwogICAgICAg
ICBCMzo6QWlyOjpnZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBv
aW50SklUKTsKICAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9k
dWN0cyA9IHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVu
dHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC5jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBJbnRUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5l
cmF0b3IuaAppbmRleCAzMzFiNGIwYWQzMTNlNjIzY2E3ZmY0YmQ4ZGU4YTE1ODZmYzdkNTA1Li44
MjcyY2UzNTk1ZmYyOGIzZjljYzg4OTY1YWRiMmE4NGM5ZTg1YTc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaApAQCAtMzEsNyArMzEsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1FeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENv
bXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVs
bHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CitFeHBlY3RlZDx2b2lkLCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlv
bkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21F
eGNlcHRpb24gPSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4
IDNkOGRmOGU2ODcxMDIxMzFiNjRjMWE2ZDY1ZTZmY2NjMTAzYjVlNzUuLmUwMDAzZWNiNzBkNmYy
YWNlY2FkZGQzZjQyODQ2NGU3YTBiMzhmZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTE3Miw3ICsxNzIsNiBAQCBwdWJsaWM6
CiAKICAgICB0eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVk
PEVycm9yVHlwZT4gVW5leHBlY3RlZFJlc3VsdDsKLSAgICB0eXBlZGVmIEV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAgdHlw
ZWRlZiBFeHBlY3RlZDx2b2lkLCBFcnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdApAQCAtMTg1LDcgKzE4
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAg
ICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgs
IHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4
Y2VwdGlvbik7CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFBy
b2NlZHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5j
dGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqLCBU
aHJvd1dhc21FeGNlcHRpb24pOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTI4Myw2ICsyODIs
NyBAQCBwcml2YXRlOgogCiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFy
c2VyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87Cisg
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX291dGdvaW5nQ2FsbHM7CiAgICAg
Y29uc3QgTWVtb3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9Owog
ICAgIGNvbnN0IENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9u
TW9kZTo6QkJRTW9kZSB9OwogICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJ
TlRfTUFYIH07CkBAIC0yOTQsNyArMjk0LDcgQEAgcHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBt
X2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8dWludDMyX3Q+IG1fb3V0ZXJM
b29wczsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKLSAgICBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFj
aCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3Vs
ZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNt
RW50cnlQdHJUYWc+PiYgbV93YXNtVG9XYXNtRXhpdFN0dWJzOyAvLyBMaXN0IGVhY2ggY2FsbCBz
aXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0
Y2hlZCB3aXRoLgogICAgIHVuc2lnbmVkJiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAg
ICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiBtX2NvbnN0YW50UG9vbDsKICAgICBJbnNlcnRp
b25TZXQgbV9jb25zdGFudEluc2VydGlvblZhbHVlczsKQEAgLTM1NSwxNSArMzU1LDE2IEBAIHZv
aWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBw
cm9jLCBCYXNpY0Jsb2NrKiBibG9jCiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0
aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NS
RW50cnksIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21F
eGNlcHRpb24pCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiBvdXRnb2luZ0NhbGxzLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJzLCB1bnNpZ25lZCYgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGls
YXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JP
U1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2Fz
bUV4Y2VwdGlvbikKICAgICA6IG1faW5mbyhpbmZvKQorICAgICwgbV9vdXRnb2luZ0NhbGxzKG91
dGdvaW5nQ2FsbHMpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2Rl
KGNvbXBpbGF0aW9uTW9kZSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQog
ICAgICwgbV9sb29wSW5kZXhGb3JPU1JFbnRyeShsb29wSW5kZXhGb3JPU1JFbnRyeSkKICAgICAs
IG1fdGllclVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCi0gICAgLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgICwgbV93YXNt
VG9XYXNtRXhpdFN0dWJzKHdhc21Ub1dhc21FeGl0U3R1YnMpCiAgICAgLCBtX29zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICAsIG1fY29uc3Rh
bnRJbnNlcnRpb25WYWx1ZXMobV9wcm9jKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5m
by5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCkBAIC00MTcsNyArNDE4LDcgQEAgQjNJUkdlbmVyYXRv
cjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJl
JiBwcm9jZWR1cmUKICAgICAgICAgfQogICAgIH0KIAotICAgIHdhc21DYWxsaW5nQ29udmVudGlv
bigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9u
LCBtX3Byb2MsIE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CisgICAgd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUobV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50
QmxvY2spOwogCiAgICAgewogICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIs
IE9yaWdpbigpKTsKQEAgLTE0MDIsOCArMTQwMyw2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
Q2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwK
ICAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwogCiAgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0
dXJlLnJldHVyblR5cGUoKTsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7Ci0KICAg
ICBpZiAobV9pbmZvLmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleCkpIHsKICAgICAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1h
eChtX21heE51bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6
ZSgpKSk7CiAKQEAgLTE0MTcsNiArMTQxNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAg
ICAgICAgQmFzaWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJh
bmNoLCBvcmlnaW4oKSwgaXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwg
RnJlcXVlbnRlZEJsb2NrKGlzRW1iZWRkZXJCbG9jaykpOwogCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1YiA9IG1fd2FzbVRv
V2FzbUV4aXRTdHVic1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgVmFsdWUqIHdhc21DYWxsUmVz
dWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxv
Y2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9
XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMTQyNSwxMSArMTQyNSwxMSBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0
aWNhbGx5IGFzc3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJv
dW5kcyBjaGVja2luZy4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhh
dmUgdG8gZG8gdGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MjE4MQogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAg
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbd2FzbVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJs
ZU5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFn
PihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKFdhc21FbnRyeVB0clRhZyk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4od2FzbVRvV2Fz
bUV4aXRTdHViLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIH0pOwpAQCAtMTQ3MywxNyArMTQ3MywxOCBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBh
bm90aGVyIFdlYkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVk
IG91ciBNZW1vcnkuCiAgICAgICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3Rv
cmVDYWNoZWRTdGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwg
bV9wcm9jLCBjb250aW51YXRpb24pOwogICAgIH0gZWxzZSB7CisgICAgICAgIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiogb3V0Z29pbmdDYWxscyA9ICZtX291dGdvaW5nQ2FsbHM7CiAg
ICAgICAgIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2Ms
IG1fY3VycmVudEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAg
ICAgICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLQotICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwo
KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQo
eyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBm
dW5jdGlvbkluZGV4IH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAg
IEdQUlJlZyBjYWxsZWVHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICAgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNp
emVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb2NhdGlvbiA9IGppdC50aHJlYWRTYWZl
UGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0Z29pbmdDYWxscy0+
YXBwZW5kKHsgZnVuY3Rpb25JbmRleCwgeyBtb3ZlTG9jYXRpb24sIGNhbGxMb2NhdGlvbiB9fSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC0xNjI0LDYg
KzE2MjUsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQg
dGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+
KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2Nh
dGlvbigpKSkpOwogCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKKyAg
ICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
Om9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSkpKTsKKwogICAgIFR5cGUgcmV0dXJu
VHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CiAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBh
cmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQpIHsKQEAgLTE2MzUsOCArMTY0MCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMs
IGJ1dCB0aGUgd2FzbS0+d2FzbSBzdHViIGFzc3VtZXMgaXQgY2FuCiAgICAgICAgICAgICAvLyB1
c2UgYWxsIHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJv
dW5kc0NoZWNraW5nKSk7Ci0KICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVD
b2RlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChjYWxsZWUsIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OwogICAgICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAw
IDogMV0uZ3ByKCksIFdhc21FbnRyeVB0clRhZyk7CkBAIC0xNjk3LDEwICsxNzAyLDggQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PE9yaWdpbj4ob3JpZ2luKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQm
IGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxh
dGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJf
dCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBG
dW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRT
dHVicywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxh
dGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9T
UkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0
aW9uPigpOwotCiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9
IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNt
RW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCkBAIC0xNzIxLDcg
KzE3MjQsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/IE9wdGlvbnM6Ondl
YkFzc2VtYmx5QkJRQjNPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2Vi
QXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJH
ZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUs
IGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4
Y2VwdGlvbik7CisgICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUs
IGNvbXBpbGF0aW9uQ29udGV4dC5vdXRnb2luZ0NhbGxzLCB3YXNtVG9XYXNtRXhpdFN0dWJzLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9u
SW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7
CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBm
dW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5m
byk7CiAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAg
LTE3MzksMTAgKzE3NDIsMTAgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAgICAgICAgQjM6
OnByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2NlZHVyZSk7CiAgICAgICAgIEIzOjpnZW5lcmF0ZShw
cm9jZWR1cmUsICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAg
ICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJl
LnJlbGVhc2VCeXByb2R1Y3RzKCk7Ci0gICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVT
YXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgp
OworICAgICAgICBjb21waWxhdGlvbkNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2Nl
ZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiB7IH07CiB9CiAKIC8vIEN1c3RvbSB3YXNtIG9wcy4gVGhl
c2UgYXJlIHRoZSBvbmVzIHRvbyBtZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlYTU1MDI0MDE4
ZDMwZDM4ZmYxZWE3YTdhYmYxYzE2NWJjZjU2N2Y4Li4zNDhiNTQ3ZWUzZDc4N2I2MTJjM2ZkMzYw
NDJkNzdkZTgyMjBhN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmgKQEAgLTQ5LDkgKzQ5LDEyIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRl
eHQgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gZW1iZWRkZXJF
bnRyeXBvaW50Qnlwcm9kdWN0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3
YXNtRW50cnlwb2ludEpJVDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVj
dHM+IHdhc21FbnRyeXBvaW50Qnlwcm9kdWN0czsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4gb3V0Z29pbmdDYWxsczsKKyAgICBPcHRpb25hbDxVbmxpbmtlZE1vdmVBbmRDYWxs
PiBlbWJlZGRlck1vdmVBbmRDYWxsOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNh
dmVSZWdpc3RlcnM7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9
IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8dm9pZCwg
U3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rp
b25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxX
YXNtRW50cnlQdHJUYWc+PiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJV
cENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5jcHAKaW5kZXggMGU4M2Q1M2YzMTIzOTM3ZmM5Y2MwM2QzZTVlZTE4NGQ1MTcxM2Q0
Zi4uYjQ4NTdjNzZhMTg3YmRlNTFlMjY1MGQ3YWM0MmZjMjQ3YjVlNTA3OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtNTIsOSArNTIsMTAgQEAgbmFt
ZXNwYWNlIFdhc21CQlFQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwogfQogCi1CQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1
bGVJbmZvcm1hdGlvbj4gaW5mbywgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFz
aywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dh
c21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+JiBjYWxsZWVzLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYm
IHRhc2ssIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IEJhc2UoY29udGV4dCwg
V1RGTW92ZShpbmZvKSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBw
ZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pCiAgICAgLCBtX3N0cmVhbWluZ1BhcnNlcihtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpLCAqdGhpcykKKyAgICAsIG1fY2FsbGVlcygmY2FsbGVlcykKICAg
ICAsIG1fc3RhdGUoU3RhdGU6OlZhbGlkYXRlZCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7
CkBAIC0xNTksMTYgKzE2MCwxMCBAQCB2b2lkIEJCUVBsYW46OnByZXBhcmUoKQogCiAgICAgY29u
c3QgYXV0byYgZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwogICAg
IGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJB
c3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBh
Y2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlu
a2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikKLSAgICAgICAgfHwgIXRyeVJl
c2VydmVDYXBhY2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25zLnNpemUoKSwg
IiBXZWJBc3NlbWJseSBmdW5jdGlvbnMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fY29tcGlsYXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBj
b250ZXh0cyIpCi0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMs
IGZ1bmN0aW9ucy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkKKyAgICAgICAgfHwgIXRyeVJl
c2VydmVDYXBhY2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
Y29tcGlsYXRpb24gY29udGV4dHMiKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxscy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7Ci0gICAgbV93YXNtSW50
ZXJuYWxGdW5jdGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRp
b25Db250ZXh0cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7Ci0gICAgbV90aWVyVXBDb3VudHMu
cmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRl
eCA9IDA7IGltcG9ydEluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7
ICsraW1wb3J0SW5kZXgpIHsKICAgICAgICAgSW1wb3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZv
cm1hdGlvbi0+aW1wb3J0c1tpbXBvcnRJbmRleF07CkBAIC0yMzAsNiArMjI1LDcgQEAgcHVibGlj
OgogCiB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FsbGVlcyk7CiAgICAgQVNTRVJUKG1fc3Rh
dGUgPj0gU3RhdGU6OlByZXBhcmVkKTsKICAgICBkYXRhTG9nTG5JZihXYXNtQkJRUGxhbkludGVy
bmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24iKTsKIApAQCAtMjY2LDEzICsyNjIs
NyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogICAgICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBBU1NFUlQodmFsaWRhdGVG
dW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7
CiAKLSAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICBpZiAoT3B0aW9uczo6dXNl
QkJRVGllclVwQ2hlY2tzKCkpCi0gICAgICAgICAgICBtX3RpZXJVcENvdW50c1tmdW5jdGlvbklu
ZGV4XSA9IG1ha2VVbmlxdWU8VGllclVwQ291bnQ+KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdID0gbnVsbHB0cjsKLSAgICAgICAgVGll
clVwQ291bnQqIHRpZXJVcCA9IG1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdLmdldCgpOwot
ICAgICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmlu
Zz4gcGFyc2VBbmRDb21waWxlUmVzdWx0OworICAgICAgICBFeHBlY3RlZDx2b2lkLCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKICAgICAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSA9IDA7CiAKICAgICAgICAgLy8gRklYTUU6IFNvbWUgd2VicGFnZXMgdXNlIHZl
cnkgbGFyZ2UgV2FzbSBtb2R1bGUsIGFuZCBpdCBleGhhdXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1v
cnkgaW4gQVJNNjQgZGV2aWNlcyBzaW5jZSB0aGUgc2l6ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSBy
ZWdpb24gaXMgb25seSBsaW1pdGVkIHRvIDEyOE1CLgpAQCAtMjgyLDEwICsyNzIsMTEgQEAgdm9p
ZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAg
ICAgICAgaWYgKE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1f
bW9kdWxlSW5mb3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJs
eUJCUUFpck1vZGVUaHJlc2hvbGQoKSkKICAgICAgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7
CiAKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IG1fY2FsbGVlcy0+YXQoZnVuY3Rpb25J
bmRleCktPnRpZXJVcENvdW50KCk7CiAgICAgICAgIGlmICghZm9yY2VVc2luZ0IzICYmIE9wdGlv
bnM6Ondhc21CQlFVc2VzQWlyKCkpCi0gICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQg
PSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhd
LCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9u
SW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgs
IHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICAgICAgcGFyc2VBbmRDb21w
aWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlQWlyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XSwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV93YXNtVG9XYXNtRXhpdFN0dWJzLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwg
bV90aHJvd1dhc21FeGNlcHRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1
bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzW2Z1bmN0aW9uSW5kZXhdLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rp
b25JbmRleCwgVUlOVDMyX01BWCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAg
ICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3dhc21U
b1dhc21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbklu
ZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAg
ICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTI5NCwxMSArMjg1LDExIEBAIHZvaWQg
QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tmdW5jdGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0K
ICAgICAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25J
bmRleCkgfHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9ucygpLmNvbnRh
aW5zKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRl
cm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIo
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxFbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBtX2NyZWF0ZUVtYmVk
ZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVy
ZSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLmdldCgpLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNt
SW50ZXJuYWxGdW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LmlzTmV3RW50cnkpOwogICAgICAgICB9CiAKQEAgLTMxNiw3ICszMDcsOSBAQCB2b2lkIEJCUVBs
YW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICBD
b21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rp
b25JbmRleF07CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0
aW9uSW5kZXhdOwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgICAgICAgICBjb25zdCB1aW50
MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVu
Y3Rpb25Db3VudCgpOworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNw
YWNlID0gZnVuY3Rpb25JbmRleCArIGltcG9ydEZ1bmN0aW9uQ291bnQ7CisgICAgICAgICAgICBC
QlFDYWxsZWUmIGNhbGxlZSA9ICptX2NhbGxlZXMtPmF0KGZ1bmN0aW9uSW5kZXgpOwogICAgICAg
ICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRy
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpAQCAtMzI1LDkgKzMxOCwxNyBAQCB2b2lkIEJCUVBs
YW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3dh
c21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+ZW50cnlwb2ludC5jb21waWxhdGlv
biA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICAgICAgICAgICAgICBjYWxsZWUu
ZW50cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGNvbnRleHQuY2FsbGVl
U2F2ZVJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5jb21w
aWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICAg
ICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNz
ZW1ibHkgQkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0
dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAg
IFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKworICAgICAgICAg
ICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UgPj0gaW1w
b3J0RnVuY3Rpb25Db3VudCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHRh
cmdldEZ1bmN0aW9uSW5kZXggPSBjYWxsLnRhcmdldEZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9k
dWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jYWxsZWVzLT5hdCh0YXJnZXRGdW5jdGlvbkluZGV4KS0+YWRkQ2FsbGVyKGxvY2tlciwg
bGlua0J1ZmZlciwgY2FsbC51bmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAgICAgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21J
bnRlcm5hbEZ1bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChm
dW5jdGlvbkluZGV4KSkgewpAQCAtMzM3LDIzICszMzgsMTggQEAgdm9pZCBCQlFQbGFuOjpjb21w
bGV0ZShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxC
Mzo6Q29tcGlsYXRpb24+KAorICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxG
dW5jdGlvbi0+ZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGls
YXRpb24+KAogICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIz
Q29tcGlsYXRpb25QdHJUYWcsICJFbWJlZGRlci0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0g
JXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCku
ZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNj
aWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuZW1iZWRk
ZXJFbnRyeXBvaW50Qnlwcm9kdWN0cykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAg
ICAgICAgZm9yIChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZXhlY3V0YWJsZUFkZHJl
c3M7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRG
dW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxp
bmtlZCBpbiBCMywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25k
aXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKLSAgICAgICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChj
YWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0
aW9uQ291bnQoKSktPmVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNt
RW50cnlQdHJUYWc+KCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRy
VGFnPihleGVjdXRhYmxlQWRkcmVzcykpOworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVt
YmVkZGVyTW92ZUFuZENhbGwpCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZS5hZGRDYWxsZXIo
bG9ja2VyLCBsaW5rQnVmZmVyLCAqY29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsKTsKICAgICAg
ICAgICAgIH0KKwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsZWUgOiAqbV9j
YWxsZWVzKQorICAgICAgICAgICAgY2FsbGVlLT5yZXBhdGNoQ2FsbGVycyhsb2NrZXIsICpjYWxs
ZWUpOwogICAgIH0KICAgICAKICAgICBpZiAoIWlzQ29tcGxldGUoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKaW5kZXggODgzNjE3ZmM2N2ZmZWI4MDUxMjA4Yzc0
MGUyZjFmOTE4OGI0MTMwZC4uZTNlNmVlNjYwYmIxN2YzOWJiZGZhNGI0YTBiODRmMDVjMjUyYmIz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBAIC01MSw3ICs1
MSw3IEBAIHB1YmxpYzoKICAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGls
ZSwgVmFsaWRhdGlvbiB9OwogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5v
dCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEg
cmVmZXJlbmNlIGN5Y2xlLgotICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVy
JiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgY29uc3QgVmVj
dG9yPFJlZlB0cjxCQlFDYWxsZWU+PiYsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29y
aywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4
Y2VwdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgVmVjdG9y
PHVpbnQ4X3Q+JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJX
cmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5
bmNXb3JrLCBDb21wbGV0aW9uVGFzayYmKTsKIApAQCAtOTgsMTIgKzk4LDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gV1RGTW92ZShtX3dhc21Ub1dhc21FeGl0U3R1YnMpOwogICAgIH0KIAot
ICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IHRha2VXYXNtVG9XYXNt
Q2FsbHNpdGVzKCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAh
aGFzV29yaygpKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21D
YWxscyk7Ci0gICAgfQotCiAgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgewogICAgICAg
ICBJbml0aWFsLAogICAgICAgICBWYWxpZGF0ZWQsCkBAIC0xMzksMTQgKzEzMywxMyBAQCBwcml2
YXRlOgogICAgIFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNt
RW50cnlQdHJUYWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAg
SGFzaFNldDx1aW50MzJfdCwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1
bmN0aW9uSW5kaWNlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dh
c21JbnRlcm5hbEZ1bmN0aW9uczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8RW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNo
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRl
clRvV2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+
IG1fY29tcGlsYXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRpZXJV
cENvdW50Pj4gbV90aWVyVXBDb3VudHM7CiAKLSAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+PiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwogICAgIFN0cmVhbWluZ1Bh
cnNlciBtX3N0cmVhbWluZ1BhcnNlcjsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEJCUUNhbGxl
ZT4+KiBtX2NhbGxlZXMgeyBudWxscHRyIH07CiAgICAgU3RhdGUgbV9zdGF0ZTsKIAogICAgIGNv
bnN0IEFzeW5jV29yayBtX2FzeW5jV29yazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKaW5kZXggODY2MDFhYzllZjNmYjM4NWUwNjAyOTAxYzFh
MDRkNTMwYzU2M2NhOC4uOWJiYzZmMzg5NzUyZDc3MDZlNGM5ZmIxNWM4NTk5ZjU0ZjI4MmY5ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgK
QEAgLTM4LDIxICszOCw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiB2b2lkIEJCUVBs
YW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogewogICAgIEFT
U0VSVCghZmFpbGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4
ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6
ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRleCkgewotCi0gICAgICAgIFJlZlB0cjxXYXNtOjpD
YWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1dG8gZW1iZWRk
ZXJUb1dhc21GdW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQo
aW50ZXJuYWxGdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShl
bWJlZGRlclRvV2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92
ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5n
ZXQoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24g
PSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwot
ICAgICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4
ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBS
ZWY8V2FzbTo6Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IFdhc206OkJCUUNhbGxlZTo6
Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSwgV1RGTW92ZShtX3RpZXJVcENvdW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxv
Y2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7
Ci0KLSAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKLSAg
ICB9CisgICAgZm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5h
bEZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyAr
K2ludGVybmFsRnVuY3Rpb25JbmRleCkKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlv
bkluZGV4LCBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVu
Y3Rpb25JbmRleCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IGNlNjEwNzZkMWFjYjc5YWVh
NGM1ZThiNzUyYjE3OTQ4NWNhZjA4ZWUuLmY3ZDQ3YmE5MDM4NmE3MzExN2QxMjY0YjcwMTI0OGU1
OWJjY2Q0NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5k
aW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAK
QEAgLTQ3LDYgKzQ3LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2kKICAgICBKSVQgaml0Owog
CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1
ZVNjcmF0Y2goMCk7CisgICAgR1BSUmVnIGNhbGxlZSA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFp
cigpLnByb2xvZ3VlU2NyYXRjaCgxKTsKICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJl
Z3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgQVNTRVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7
CiAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwpAQCAt
NTcsMTMgKzU4LDIwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpCiAgICAgaml0LmxvYWRXYXNt
Q29udGV4dEluc3RhbmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQgSW5zdGFuY2UqCiAgICAg
Ly8gR2V0IHRoZSBjYWxsZWUncyBXYXNtOjpJbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250
ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0
cyBvd24gSW5zdGFuY2UuCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1Nj
cmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKGltcG9ydEluZGV4KSksIGJh
c2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCi0gICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRo
YXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWls
IGNhbGwgdG8gaXQgYmVsb3cuCisgICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2Fj
aGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IGFuZCBjYWxsZWUgc28gd2UgY2Fu
IHRhaWwgY2FsbCB0byBpdCBiZWxvdy4KICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6
ZVJlZ0FzU2NyYXRjaCwgSW5zdGFuY2U6Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRp
b24oaW1wb3J0SW5kZXgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0
aW9uKGltcG9ydEluZGV4KSksIGNhbGxlZSk7CiAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0
YW5jZShiYXNlTWVtb3J5KTsKIAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVn
QXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVn
QXNTY3JhdGNoKTsKICAgICBqaXQuc3RvcmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwog
CisgICAgLy8gU2V0IHRoZSBjYWxsZWUgc2xvdCBpbiB0aGUgY2FsbCBmcmFtZQorICAgIGppdC5s
b2FkUHRyKGNhbGxlZSwgY2FsbGVlKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGJl
ZW4gY2FsbGVkLCBzbyBSZXR1cm5QQyBpcyBvbiB0aGUgc3RhY2ssIGJ1dCBoYXZlIG5vdCB5ZXQg
cHVzaGVkIHRoZSBiYXNlIHBvaW50ZXIsCisgICAgLy8gc28gd2UgaGF2ZSB0byBzdWJ0cmFjdCB0
aGUgc3BhY2UgZm9yIENhbGxlckZyYW1lIGZyb20gdGhlIGNhbGxlZSBzbG90CisgICAgaml0LnN0
b3JlUHRyKGNhbGxlZSwgSklUOjpBZGRyZXNzKEpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ1BVUmVnaXN0
ZXIpKSk7CisKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFs
bCBXYXNtOjpJbnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhl
IGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUg
cmVnaXN0ZXJzLgogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21DYWxsZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5j
cHAKaW5kZXggZThkZGYxNTNkZDlkOTAyMjljNTEyODFlYzI4MTJmN2E1OTExNDFkNi4uOTMzMTRh
YjY2Nzc4N2Y2OTE5OWIxYTQyYzNkMjlkM2ZjNGI2Yzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKQEAgLTMyLDE2ICszMiwxNCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1DYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlv
bk1vZGUgY29tcGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKK0NhbGxlZTo6
Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUpCiAgICAgOiBtX2Nv
bXBpbGF0aW9uTW9kZShjb21waWxhdGlvbk1vZGUpCi0gICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92
ZShlbnRyeXBvaW50KSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0
ZXJDYWxsZWUodGhpcyk7CiB9CiAKLUNhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgs
IHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorQ2Fs
bGVlOjpDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgc2l6ZV90
IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFt
ZSkKICAgICA6IG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKLSAgICAsIG1fZW50
cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQogICAgICwgbV9pbmRleE9yTmFtZShpbmRleCwg
V1RGTW92ZShuYW1lKSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0
ZXJDYWxsZWUodGhpcyk7CkBAIC01Miw2ICs1MCw0OCBAQCBDYWxsZWU6On5DYWxsZWUoKQogICAg
IENhbGxlZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwogfQog
CisKK2lubGluZSB2b2lkIHJlcGF0Y2hNb3ZlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4gbW92ZUxvY2F0aW9uLCBDYWxsZWUm
IHRhcmdldENhbGxlZSkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92
ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKCZ0YXJnZXRDYWxsZWUpKTsKK30KKworaW5s
aW5lIHZvaWQgcmVwYXRjaENhbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBDb2RlTG9jYXRpb25O
ZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbiwgQ2FsbGVlJiB0YXJnZXRDYWxs
ZWUpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4odGFyZ2V0Q2FsbGVlLmNvZGUoKSkp
OworfQorCit2b2lkIEJCUUNhbGxlZTo6YWRkQ2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
TGlua0J1ZmZlciYgbGlua0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAg
IGF1dG8gbW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRh
Zz4oY2FsbC5tb3ZlTG9jYXRpb24pOworICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsLmNhbGxMb2NhdGlvbik7
CisgICAgbV9tb3ZlTG9jYXRpb25zLmFwcGVuZChtb3ZlTG9jYXRpb24pOworICAgIG1fY2FsbExv
Y2F0aW9ucy5hcHBlbmQoY2FsbExvY2F0aW9uKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OmFkZEFu
ZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTGlua0J1ZmZlciYgbGlu
a0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGVudHJ5cG9pbnQoKS5jb21waWxhdGlvbik7CisKKyAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGwubW92ZUxvY2F0aW9uKTsK
KyAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdh
c21FbnRyeVB0clRhZz4oY2FsbC5jYWxsTG9jYXRpb24pOworICAgIG1fbW92ZUxvY2F0aW9ucy5h
cHBlbmQobW92ZUxvY2F0aW9uKTsKKyAgICBtX2NhbGxMb2NhdGlvbnMuYXBwZW5kKGNhbGxMb2Nh
dGlvbik7CisKKyAgICBDYWxsZWUmIHRhcmdldENhbGxlZSA9IG1fcmVwbGFjZW1lbnQgPyBzdGF0
aWNfY2FzdDxDYWxsZWUmPigqbV9yZXBsYWNlbWVudCkgOiAqdGhpczsKKyAgICByZXBhdGNoTW92
ZShsb2NrZXIsIG1vdmVMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKKyAgICByZXBhdGNoQ2FsbChs
b2NrZXIsIGNhbGxMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKK30KKwordm9pZCBCQlFDYWxsZWU6
OnJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIENhbGxlZSYgdGFy
Z2V0Q2FsbGVlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldENhbGxlZS5lbnRyeXBvaW50
KCkuY29tcGlsYXRpb24pOworICAgIGZvciAoYXV0byBtb3ZlTG9jYXRpb24gOiBtX21vdmVMb2Nh
dGlvbnMpCisgICAgICAgIHJlcGF0Y2hNb3ZlKGxvY2tlciwgbW92ZUxvY2F0aW9uLCB0YXJnZXRD
YWxsZWUpOworICAgIGZvciAoYXV0byBjYWxsTG9jYXRpb24gOiBtX2NhbGxMb2NhdGlvbnMpCisg
ICAgICAgIHJlcGF0Y2hDYWxsKGxvY2tlciwgY2FsbExvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxl
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IGY3ZWE0
ZDA1YjhkMGE3MWMxZWU2MmE1NmM0ZDM5ZGE1NDlmMDliN2IuLjk5MDlkYzQwOTU5OTE5YTVjNjlh
ZmJkZjI1Mjk1ODI5M2ExMWM0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21DYWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2Fs
bGVlLmgKQEAgLTQwLDEyICs0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogY2xhc3MgQ2FsbGVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxlZT4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Vu
dHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7
IH0KLQotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyBy
ZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisgICAgRW50cnlwb2lu
dCYgZW50cnlwb2ludCgpIHsgcmV0dXJuIG1fZW50cnlwb2ludDsgfQorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7IH0K
ICAgICBJbmRleE9yTmFtZSBpbmRleE9yTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhPck5h
bWU7IH0KICAgICBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9jb21waWxhdGlvbk1vZGU7IH0KIAorICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0
ZXJzOyB9CisKICAgICBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gcmFuZ2UoKSBjb25zdAogICAg
IHsKICAgICAgICAgdm9pZCogc3RhcnQgPSBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVS
ZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKQEAgLTU2LDc4
ICs1Nyw3MCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q2FsbGVl
KCk7CiAKIHByb3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29t
cGlsYXRpb25Nb2RlLCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiwgc2l6ZV90
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIENhbGxlZShDb21waWxhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENhbGxlZShDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmKTsKIAogcHJpdmF0ZToKICAgICBDb21waWxhdGlv
bk1vZGUgbV9jb21waWxhdGlvbk1vZGU7Ci0gICAgV2FzbTo6RW50cnlwb2ludCBtX2VudHJ5cG9p
bnQ7CisgICAgRW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiAgICAgSW5kZXhPck5hbWUgbV9pbmRl
eE9yTmFtZTsKIH07CiAKIGNsYXNzIE9NR0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8T01HQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQ
dHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYm
IHVubGlua2VkQ2FsbHMpCisgICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUo
ZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMp
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShpbmRleCwgV1RGTW92
ZShuYW1lKSkpOwogICAgIH0KIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
d2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQot
CiBwcml2YXRlOgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwg
c2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+
JiYgbmFtZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykK
LSAgICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZNb3Zl
KGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3dhc21Ub1dh
c21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICBPTUdDYWxsZWUoc2l6ZV90
IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFt
ZSkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBpbmRleCwgV1RG
TW92ZShuYW1lKSkKICAgICB7CiAgICAgfQotCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKIH07CiAKIGNsYXNzIE9NR0Zvck9TUkVudHJ5
Q2FsbGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxP
TUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50
LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9u
Pj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBs
b29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMp
CisgICAgc3RhdGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKHNpemVfdCBpbmRl
eCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVu
c2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdU
Rk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCBsb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUoaW5kZXgsIFdURk1vdmUo
bmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCkpOwogICAgIH0KIAog
ICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBt
X29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2xvb3BJbmRleDsgfQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiYgd2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxz
aXRlczsgfQogCiBwcml2YXRlOgotICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5
cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYmIHVubGlua2VkQ2FsbHMpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZTo6T01HRm9yT1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92
ZShuYW1lKSkKLSAgICAgICAgLCBtX3dhc21Ub1dhc21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtl
ZENhbGxzKSkKKyAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFp
cjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgpCisgICAgICAgIDogQ2Fs
bGVlKENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBpbmRleCwgV1RGTW92ZShu
YW1lKSkKICAgICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSkKICAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAgICAgewog
ICAgIH0KIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBtX3dhc21Ub1dhc21D
YWxsc2l0ZXM7CiAgICAgdW5zaWduZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAg
IHVpbnQzMl90IG1fbG9vcEluZGV4OwogfTsKIAogY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2lu
dCkKKyAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZShXVEZNb3ZlKGVudHJ5cG9pbnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVt
YmVkZGVyRW50cnlwb2ludENhbGxlZSgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotICAgICAg
ICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUs
IFdURk1vdmUoZW50cnlwb2ludCkpCisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKCkKKyAg
ICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlKQog
ICAgIHsKICAgICB9CiB9OwogCiBjbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5
cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+
JiYgdGllclVwQ291bnQpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
LCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwg
aW5kZXgsIFdURk1vdmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEJCUUNhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92
ZSh0aWVyVXBDb3VudCkpKTsKICAgICB9CiAKICAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3Ny
RW50cnlDYWxsZWUoKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0xNDcs
MTMgKzE0MCwyMCBAQCBwdWJsaWM6CiAKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7
IHJldHVybiBtX3RpZXJVcENvdW50LmdldCgpOyB9CiAKKyAgICB2b2lkIGFkZENhbGxlcihjb25z
dCBBYnN0cmFjdExvY2tlciYsIExpbmtCdWZmZXImLCBVbmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAg
ICB2b2lkIGFkZEFuZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5rQnVmZmVy
JiwgVW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisKKyAgICB2b2lkIHJlcGF0Y2hDYWxsZXJzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgQ2FsbGVlJik7CisKIHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVlKFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGll
clVwQ291bnQ+JiYgdGllclVwQ291bnQpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZTo6QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSkpCisgICAgQkJRQ2FsbGVlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBS
ZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4m
JiB0aWVyVXBDb3VudCkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2Rl
LCBpbmRleCwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3RpZXJVcENvdW50KFdURk1vdmUo
dGllclVwQ291bnQpKQogICAgIHsKICAgICB9CiAKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4+IG1fbW92ZUxvY2F0aW9uczsKKyAgICBWZWN0b3I8
Q29kZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPj4gbV9jYWxsTG9jYXRpb25zOwog
ICAgIFJlZlB0cjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKICAgICBS
ZWZQdHI8T01HQ2FsbGVlPiBtX3JlcGxhY2VtZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaWVy
VXBDb3VudD4gbV90aWVyVXBDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggYjQ0MmI2MTYxYmY5MjMzNzU4MTk3NTgx
M2ZmMzgwNmE3MzFhOTIyNi4uNmZhNDM2OWNjZGNhODhlNGI3MGVkNjQ2OWJiNzYzOTgxNGY4ZTg0
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252
ZW50aW9uLmgKQEAgLTg4LDM0ICs4OCwxNiBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgc3Rh
dGljIHVuc2lnbmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQot
ICAgIHZvaWQgc2V0dXBGcmFtZUluUHJvbG9ndWUoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdh
c21FbnRyeVB0clRhZz4qIGNhbGxlZU1vdmVMb2NhdGlvbiwgQjM6OlByb2NlZHVyZSYgcHJvYywg
QjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB2b2lk
IHNldHVwRnJhbWVJblByb2xvZ3VlKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3Jp
Z2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0aWNf
YXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJT
aXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKICAgICAgICAgc3RhdGljX2Fz
c2VydChDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVy
U2l6ZSwgIldlIHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAKLSAgICAgICAgQjM6OlBh
dGNocG9pbnRWYWx1ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6
OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OkludDY0LCBvcmlnaW4pOwotICAgICAgICBnZXRD
YWxsZWVQYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IHsgQjM6OlZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIgfTsKLSAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpF
ZmZlY3RzOjpub25lKCk7Ci0gICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1
bHQgPSBwYXJhbXNbMF0uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soW2NhbGxlZU1vdmVMb2NhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIEIzOjpWYWx1
ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpG
cmFtZVBvaW50ZXIsIG9yaWdpbik7Ci0gICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUg
PSBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGJsb2NrLT5hcHBl
bmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKLSAgICAgICAg
ICAgIGdldENhbGxlZVBhdGNocG9pbnQsCi0gICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ2Fs
bGVlKSk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIHpl
cm8gaW50byB0aGUgQ29kZUJsb2NrKiBzcG90IGluIHRoZSBjYWxsIGZyYW1lLAogICAgICAgICAv
LyBidXQgdGhlcmUgYXJlIHBsYWNlcyB0aGF0IGludGVycHJldCBub24tbnVsbCBDb2RlQmxvY2sg
c2xvdCB0byBtZWFuIGEgdmFsaWQgQ29kZUJsb2NrLgogICAgICAgICAvLyBXaGVuIGRvaW5nIHVu
d2luZGluZywgd2UnbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZW50aXJlIHJ1bnRpbWUgaXMg
T0sgd2l0aCBhIG5vbi1udWxsCiAgICAgICAgIC8vIENvZGVCbG9jayBub3QgaW1wbHlpbmcgdGhh
dCB0aGUgQ29kZUJsb2NrIGlzIHZhbGlkLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2lu
dGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIs
IG9yaWdpbik7CiAgICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDb2RlQmxvY2sgPSBibG9jay0+
YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8
QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKICAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCAwKSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggZDRhOWNkNjc3
MTAyYjU4ZTRmYzU5ZTFhMjBhZTU2YjhlMjFjNzQzMC4uN2Q1NTQ3NmQyNmMwZGQ3MGFjZjRmNWEw
MjMxMzNhMTg5MTM0ZGQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVCbG9jay5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
ICNpbmNsdWRlICJXYXNtQkJRUGxhbklubGluZXMuaCIKLSNpbmNsdWRlICJXYXNtQ2FsbGVlLmgi
CiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBA
IC00Nyw3ICs0NiwxNSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBN
ZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bAogewogICAgIFJlZlB0cjxD
b2RlQmxvY2s+IHByb3RlY3RlZFRoaXMgPSB0aGlzOwogCi0gICAgbV9wbGFuID0gYWRvcHRSZWYo
Km5ldyBCQlFQbGFuKGNvbnRleHQsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFu
OjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAg
bV9jYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICBtX2JveGVkQ2FsbGVlcy5yZXNp
emUobV9jYWxsZWVDb3VudCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fY2FsbGVl
Q291bnQ7IGkrKykgeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkgKyBpOworICAgICAgICBtX2NhbGxl
ZXNbaV0gPSBCQlFDYWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1vZHVsZUluZm9y
bWF0aW9uLm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgbWFrZVVuaXF1ZTxU
aWVyVXBDb3VudD4oKSk7CisgICAgICAgIG1fYm94ZWRDYWxsZWVzW2ldID0gQ2FsbGVlQml0czo6
Ym94V2FzbShtX2NhbGxlZXNbaV0uZ2V0KCkpOworICAgIH0KKworICAgIG1fcGxhbiA9IGFkb3B0
UmVmKCpuZXcgQkJRUGxhbihjb250ZXh0LCBtX2NhbGxlZXMsIG1ha2VSZWYobW9kdWxlSW5mb3Jt
YXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxs
YmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0g
KFBsYW4mKSB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAg
ICAgaWYgKG1fcGxhbi0+ZmFpbGVkKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0g
bV9wbGFuLT5lcnJvck1lc3NhZ2UoKTsKQEAgLTU2LDIxICs2MywxOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0
aW9uJiBtb2R1bAogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBldmVu
dHVhbGx5IGNvbGxlY3QgdGhlIEJCUSBjb2RlLgotICAgICAgICBtX2NhbGxlZXMucmVzaXplKG1f
Y2FsbGVlQ291bnQpOwogICAgICAgICBtX29wdGltaXplZENhbGxlZXMucmVzaXplKG1fY2FsbGVl
Q291bnQpOwogICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50cy5yZXNpemUobV9j
YWxsZWVDb3VudCk7CiAKLSAgICAgICAgbV9wbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVu
c2lnbmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8V2FzbTo6Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSwgUmVmPFdhc206OkNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENhbGxlZSkgewor
ICAgICAgICBtX3BsYW4tPmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5k
ZXgsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlKSB7CiAgICAgICAgICAgICBpZiAoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAg
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2FsbGVl
SW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0gPSBXVEZNb3ZlKHdhc21FbnRy
eXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRz
W2NhbGxlZUluZGV4XSA9IG1fY2FsbGVlc1tjYWxsZWVJbmRleF0tPmVudHJ5cG9pbnQoKTsKKyAg
ICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1f
Y2FsbGVlc1tjYWxsZWVJbmRleF0tPmNvZGUoKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgbV93
YXNtVG9XYXNtRXhpdFN0dWJzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOwot
ICAgICAgICBtX3dhc21Ub1dhc21DYWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2Fs
bHNpdGVzKCk7CiAKICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIH0pLCBX
VEZNb3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IGRlYTJmZmEzMTgx
MjAzZjc4YWFhNjFjNzBiZjI5NzFiYzAzMjc5ZWQuLmMxMDc3ZDVkN2Y3NjljMzk3ZmY2ZWNlYTJl
ODk5ZjNjMzQyNGM5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJs
b2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAj
aW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTQwLDkgKzQxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IG5hbWVzcGFjZSBXYXNtIHsKIAotY2xhc3MgQ2FsbGVlOwotc3RydWN0IENvbnRleHQ7CiBjbGFz
cyBCQlFQbGFuOworc3RydWN0IENvbnRleHQ7CiBjbGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uOwogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7CkBAIC03Niw3ICs3
Niw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFRoZXNlIHR3byBjYWxsZWUgZ2V0dGVycyBhcmUgb25s
eSB2YWxpZCBvbmNlIHRoZSBjYWxsZWVzIGhhdmUgYmVlbiBwb3B1bGF0ZWQuCiAKLSAgICBDYWxs
ZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSYgZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5j
dGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENv
dW50KCkpOwpAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxlZSk7CiAgICAgICAgIHJldHVybiAqY2FsbGVlOwogICAgIH0KKwogICAgIENhbGxlZSYg
d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKQEAgLTk2
LDcgKzk3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRl
eF0uZ2V0KCk7CiAgICAgfQogCi0gICAgQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgQkJRQ2FsbGVlJiB3
YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4
U3BhY2UpCiAgICAgewogICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwpA
QCAtMTExLDYgKzExMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmbV93YXNtSW5kaXJl
Y3RDYWxsRW50cnlQb2ludHNbY2FsbGVlSW5kZXhdOwogICAgIH0KIAorICAgIHZvaWQqKiBib3hl
ZENhbGxlZUxvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRl
eFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CisgICAgICAgIHVuc2lnbmVkIGNhbGxl
ZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOworICAg
ICAgICByZXR1cm4gJm1fYm94ZWRDYWxsZWVzW2NhbGxlZUluZGV4XTsKKyAgICB9CisKICAgICBi
b29sIGlzU2FmZVRvUnVuKE1lbW9yeU1vZGUpOwogCiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlOyB9CkBAIC0xMjQsMTEgKzEzMiwxMSBAQCBwcml2YXRlOgogICAg
IHZvaWQgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291
bnQ7CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7Ci0gICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBt
X2NhbGxlZXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX29wdGltaXplZENhbGxlZXM7
Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRI
YXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOworICAgIFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVl
Pj4gbV9jYWxsZWVzOworICAgIFZlY3RvcjxSZWZQdHI8T01HQ2FsbGVlPj4gbV9vcHRpbWl6ZWRD
YWxsZWVzOworICAgIFZlY3Rvcjx2b2lkKj4gbV9ib3hlZENhbGxlZXM7CisgICAgSGFzaE1hcDx1
aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERlZmF1
bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7
Ci0gICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNt
Q2FsbHNpdGVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRy
VGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47
CiAgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKaW5kZXggYTIzNzlmZDU4
OWM4OWRmNjM1N2U2ZTQ0MWJlZDJhNTE4NzM5Y2EzZS4uYzc4YjQ0M2M1OTFlODcwMzRiNDE5NWVj
YTAyNzI4ZGVmODBjYzg5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUVtYmVkZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVk
ZGVyLmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogbmFtZXNwYWNlIFdhc20g
ewogCiBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0OworY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlOwogY2xhc3MgSW5zdGFuY2U7CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbjsKIHN0cnVj
dCBNb2R1bGVJbmZvcm1hdGlvbjsKQEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgU2lnbmF0dXJlOwog
c3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7CiAKIC8vIENyZWF0ZSB3cmFwcGVyIGNvZGUg
dG8gY2FsbCBmcm9tIGVtYmVkZGVyIC0+IFdlYkFzc2VtYmx5LgotdXNpbmcgQ3JlYXRlRW1iZWRk
ZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4oQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1
aW50MzJfdCk+OwordXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjx2
b2lkKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIEVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSk+OwogCiAv
LyBDYWxsZWQgYXMgc29vbiBhcyBhbiBleGNlcHRpb24gaXMgZGV0ZWN0ZWQuIFRoZSByZXR1cm4g
dmFsdWUgaXMgdGhlIFBDIHRvIGNvbnRpbnVlIGF0LgogdXNpbmcgVGhyb3dXYXNtRXhjZXB0aW9u
ID0gdm9pZCogKCopKEV4ZWNTdGF0ZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMDY2OWJiNDA3ZTI5
NTkzNjIyZmNjYThlNTE5MTE5NWRkOWI0NmYzYi4uZWEwZTBiNjU4ZTllNDU1ZTliMDFjZGFlMmI0
Nzk2YjYyMmI4MGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApA
QCAtMjg3LDEwICsyODcsMTUgQEAgaW5saW5lIGJvb2wgaXNWYWxpZE5hbWVUeXBlKEludCB2YWwp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdHJ1Y3QgVW5saW5rZWRNb3ZlQW5kQ2FsbCB7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRpb247CisgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbExvY2F0aW9uOworfTsKKwogc3RydWN0IFVubGlua2VkV2FzbVRv
V2FzbUNhbGwgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBDb2Rl
TG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbjsKLSAgICBzaXpl
X3QgZnVuY3Rpb25JbmRleFNwYWNlOworICAgIHNpemVfdCB0YXJnZXRGdW5jdGlvbkluZGV4U3Bh
Y2U7CisgICAgVW5saW5rZWRNb3ZlQW5kQ2FsbCB1bmxpbmtlZE1vdmVBbmRDYWxsOwogfTsKIAog
c3RydWN0IEVudHJ5cG9pbnQgewpAQCAtMzEzLDEwICszMTgsMTIgQEAgc3RydWN0IFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb24gewogICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+KjsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mU2lnbmF0dXJlSW5kZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgZW50cnlwb2ludExvYWRMb2NhdGlv
bik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
biwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOyB9CiAKICAgICAvLyBGSVhNRTogUGFjayBzaWdu
YXR1cmUgaW5kZXggYW5kIGNvZGUgcG9pbnRlciBpbnRvIG9uZSA2NC1iaXQgdmFsdWUuIFNlZSA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMT4uCiAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggeyBTaWduYXR1cmU6OmludmFsaWRJbmRleCB9Owog
ICAgIExvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uOworICAgIHZvaWQqKiBib3hl
ZENhbGxlZUxvYWRMb2NhdGlvbjsKIH07CiB1c2luZyBGdW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0
b3I8V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUluc3RhbmNlLmgKaW5kZXggZjRmMzUwODdlMjU2ZDA5MmNlNzRiMjFiODQ0MGE5
MzcyNWQxNjY4NS4uN2UyMTI0Zjc2YzYzYmY3NWUyZGIxMjM0OWQ5NTBiMGU5MzY4NDBjYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTEzMCw2ICsxMzAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRM
b2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB7IG51bGxwdHIgfTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHVi
OwogICAgICAgICB2b2lkKiBpbXBvcnRGdW5jdGlvbiB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBl
bWJlZGRpbmcsIHRoaXMgaXMgYSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+LgorICAgICAgICB2b2lk
KiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24geyBudWxscHRyIH07CiAgICAgfTsKICAgICB1bnNp
Z25lZCBudW1JbXBvcnRGdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX251bUltcG9ydEZ1bmN0
aW9uczsgfQogICAgIEltcG9ydEZ1bmN0aW9uSW5mbyogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVf
dCBpbXBvcnRGdW5jdGlvbk51bSkKQEAgLTE0MSw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKHNpemVfdCBpbXBv
cnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51
bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1
bmN0aW9uSW5mbywgd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZldhc21Ub0VtYmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0p
IHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1w
b3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdh
c21Ub0VtYmVkZGVyU3R1Yik7IH0KICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVu
Y3Rpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSAr
IGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBzdGF0
aWMgc2l6ZV90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1
bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICog
c2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rp
b25JbmZvLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUKiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oJmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlv
bk51bSktPmltcG9ydEZ1bmN0aW9uKTsgfQogCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoSW1w
b3J0RnVuY3Rpb25JbmZvKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2
NF90KT4oc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykpLCAiV2UgcmVseSBvbiB0aGlzIGZvciB0
aGUgYWxpZ25tZW50IHRvIGJlIGNvcnJlY3QiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKaW5kZXggYTBiYjZjZjZkOTAz
MDY3NDQzNTZkMjg4ZWFiMGMyYjUyNTIwNTYyYS4uY2ZhZWFmMmViYzBiMTY0M2NlM2RhNmIxOGYx
MGU1MGU3NzBiMGE1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKQEAgLTU0LDE1ICs1NCwxNSBAQCBuYW1lc3BhY2Ug
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJv
c2UgPSBmYWxzZTsKIH0KIAotT01HRm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4o
Q29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYg
Y2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9y
eU1vZGUgbW9kZSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorT01HRm9yT1NSRW50cnlQbGFuOjpP
TUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUs
IFJlZjxCQlFDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJf
dCBsb29wSW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
CiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlv
biY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQogICAgICwg
bV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5j
b2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBt
X2NhbGxlZShXVEZNb3ZlKGNhbGxlZSkpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25J
bmRleCkKICAgICAsIG1fbG9vcEluZGV4KGxvb3BJbmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUp
OworICAgIHNldE1vZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5ydW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUt
PmNvZGVCbG9ja0ZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50
cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZv
ciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUu
Z2V0KCkpKTsKQEAgLTgxLDQ1ICs4MSwzMyBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VSVCh2YWxp
ZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCkpKTsKIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxz
OwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwogICAgIHVuc2lnbmVkIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0g
cGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2Fs
bHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCks
IG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25J
bmRleCwgbV9sb29wSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fY29kZUJsb2NrLT5t
X3dhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRy
eU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOwogCiAgICAgaWYgKFVOTElLRUxZ
KCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2Nr
KSwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5n
IHRvIHRpZXIgdXAgIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgRW50cnlwb2ludCBvbWdFbnRyeXBvaW50OwogICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwg
SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSkgewogICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayks
IG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1
bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBt
YWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVl
PiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKGZ1bmN0aW9uSW5kZXhTcGFj
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3Bh
Y2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCk7CisgICAgY2FsbGVl
LT5lbnRyeXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoY29udGV4dC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBjYWxsZWUtPmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9
IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkg
ZnVuY3Rpb25bJWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0
cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5k
ZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbklu
ZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2Fz
bUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBv
aW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkg
PT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50
cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShv
bWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5u
YW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKICAgICB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQu
dmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5w
dHIoKSkpOwotICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7Ci0KICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9p
bnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+
bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAgICAg
ICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJl
dGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2Fz
bUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNv
bnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxs
ZWUgPSBtX2NvZGVCbG9jay0+d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2Fs
bC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFk
ZEFuZExpbmtDYWxsZXIobG9ja2VyLCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENh
bGwpOwogICAgICAgICB9CiAgICAgfQogICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhy
ZWFkcygpOwpAQCAtMTMyLDE5ICsxMjAsNiBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29y
ayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgp
LT5vc3JFbnRyeVRyaWdnZXJzKClbbV9sb29wSW5kZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJS
ZWFzb246OkNvbXBpbGF0aW9uRG9uZTsKICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3Vu
dCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01HRm9yT1NSRW50cnkgPSBUaWVyVXBDb3VudDo6
Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAgICB9Ci0gICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgT01H
IGNhbGxlZSBpcyBhZGRlZCB3aGlsZSB3ZSByZWxlYXNlIG1fY29kZUJsb2NrLT5sb2NrLgotICAg
ICAgICAvLyBVbnRpbCB3ZSBhZGQgT01HRm9yT1NSRW50cnkgY2FsbGVlIHRvIEJCUUNhbGxlZSdz
IG1fb3NyRW50cnlDYWxsZWUsIHRoaXMgbmV3IE9NRyBmdW5jdGlvbiBsaW5raW5nIGRvZXMgbm90
IGhhcHBlbiBmb3IgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUuCi0gICAgICAgIC8vIFdlIHJl
LWxpbmsgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgYWdhaW4gbm90IHRvIG1pc3MgdGhhdCBj
aGFuY2UuCi0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxz
aXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNl
IDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQot
ICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhp
dFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVu
dHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwotICAgICAgICB9CiAgICAg
fQogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9z
ZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRp
ZXIgdXAgY291bnQgYXQ6ICIsIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAg
ICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaAppbmRleCAwMTUxZGE2NjVhOTY4MzI4
Zjk1MDM4ZjViNTBjMDg1NzYxZjA1ZGU3Li5kNTZlYTQyMTdkZDcxMGQ1NzUxNjQ1YTliM2ViMDE4
YzQzNTBkMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01H
Rm9yT1NSRW50cnlQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R0Zvck9TUkVudHJ5UGxhbi5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29sIG11
bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8g
Tm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQ
bGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zv
ck9TUkVudHJ5UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgUmVmPEJCUUNhbGxlZT4mJiwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBD
b21wbGV0aW9uVGFzayYmKTsKKyAgICBPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxN
b2R1bGU+JiYsIFJlZjxCQlFDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQz
Ml90IGxvb3BJbmRleCwgQ29kZUJsb2NrJiwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6
CiAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFy
ZW50IGNsYXNzZXMuLi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAppbmRleCBhODA1ZDAxNmZiOTkyODY0YzdhMDNjODI2NmNjNWQ0ZmI5ODY1YTY5Li5lMGIxMDEw
MTRjYzNmYmUxNGRiM2M3MGIyYTA1ZGNkYmM1OTFmMTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC01NCwxMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdh
c21PTUdQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
fQogCi1PTUdQbGFuOjpPTUdQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9k
dWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25U
YXNrJiYgdGFzaykKK09NR1BsYW46Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVs
ZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2Nr
LCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29u
c3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkp
LCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwg
bV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsK
LSAgICBzZXRNb2RlKG1vZGUpOworICAgIHNldE1vZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2su
cHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0ZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5J
ZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgT01HIHBsYW4gZm9yICIs
IGZ1bmN0aW9uSW5kZXgsICIgb2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQo
KSkpOwpAQCAtNzksNTcgKzc5LDQ4IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9ydCkKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1
bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIHVuc2lnbmVk
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRl
eHQ7Ci0gICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29u
dGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlv
bk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CisgICAgYXV0byBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24s
IHNpZ25hdHVyZSwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21w
aWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CiAKICAg
ICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgZmFpbCho
b2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigp
LCAid2hlbiB0cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5k
ZXgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFbnRyeXBvaW50IG9tZ0VudHJ5
cG9pbnQ7CiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50
SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShs
aW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgIEJhc2U6OmZhaWwoaG9s
ZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxl
IHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlv
bkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgb21nRW50cnlwb2ludC5j
b21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICBSZWY8T01HQ2Fs
bGVlPiBvbWdDYWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7
CisgICAgb21nQ2FsbGVlLT5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIz
OjpDb21waWxhdGlvbj4oCiAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21w
aWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NRyBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIs
IG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1h
a2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0
aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEo
KSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsK
IAotICAgIG9tZ0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VB
bmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7
CisgICAgb21nQ2FsbGVlLT5lbnRyeXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1v
dmUoY29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgQkJRQ2FsbGVlJiBiYnFDYWxs
ZWUgPSAqbV9jb2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdOwogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3Io
bW9kZSgpKSk7Ci0gICAgICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3Jl
YXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3Zl
KHVubGlua2VkQ2FsbHMpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVy
KHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxl
ZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxv
Y2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsKLSAgICAgICAgZW50cnlw
b2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWFr
ZSBzdXJlIHdlIHB1Ymxpc2ggb3VyIGNhbGxlZSBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGxpbmsg
b3VyIGNhbGxzaXRlcy4gVGhpcyBlbmFibGVzIHVzIHRvIGVuc3VyZSB3ZQogICAgICAgICAvLyBh
bHdheXMgY2FsbCB0aGUgZmFzdGVzdCBjb2RlLiBBbnkgZnVuY3Rpb24gbGlua2VkIGFmdGVyIHVz
IHdpbGwgc2VlIG91ciBuZXcgY29kZSBhbmQgdGhlIG5ldyBjYWxsc2l0ZXMsIHdoaWNoIHRoZXkK
ICAgICAgICAgLy8gd2lsbCB1cGRhdGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhl
aXIgY29kZSBiZWZvcmUgd2UgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFm
dGVyIHdlIHJlbGVhc2UKICAgICAgICAgLy8gdGhlIGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8g
YmUgcHVibGlzaGVkIHRvby4KICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5j
dGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX29w
dGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IG9tZ0NhbGxlZS5jb3B5UmVmKCk7CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEJCUUNhbGxlZSYgYmJxQ2FsbGVlID0gKnN0YXRpY19jYXN0
PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQo
KSk7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJicUNhbGxlZS50aWVyVXBD
b3VudCgpLT5nZXRMb2NrKCkpOwotICAgICAgICAgICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50
KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50
KG9tZ0NhbGxlZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgYmJxQ2FsbGVlLnRpZXJVcENvdW50
KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25T
dGF0dXM6OkNvbXBpbGVkOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNh
bGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNh
bGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1w
b3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVC
bG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2Rl
KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29k
ZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+
KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5j
YWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2lu
dCkpOworCisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykg
eworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxsZWUgPSBtX2NvZGVCbG9jay0+d2Fz
bUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4
U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtDYWxsZXIoaG9sZGVy
LCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0xMzksMzAgKzEzMCwxNCBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25F
ZmZvcnQpCiAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CiAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0
IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KIAotICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRp
cmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKKyAgICBt
X2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4
XSA9IG9tZ0NhbGxlZS0+Y29kZSgpOworICAgIG1fY29kZUJsb2NrLT5tX2JveGVkQ2FsbGVlc1tt
X2Z1bmN0aW9uSW5kZXhdID0gQ2FsbGVlQml0czo6Ym94V2FzbShvbWdDYWxsZWUucHRyKCkpOwog
ICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0K
LSAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwg
OiBjYWxsc2l0ZXMpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbklu
dGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQ
b2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMg
IiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlJlcGF0Y2hp
bmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxs
LmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBv
aW50KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNt
Q2FsbHNpdGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbHMobV9jb2Rl
QmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7Ci0gICAgICAgICAgICBpZiAoT01HQ2Fs
bGVlKiByZXBsYWNlbWVudENhbGxlZSA9IHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJs
b2NrLT5tX2NhbGxlZXNbaV0uZ2V0KCkpLT5yZXBsYWNlbWVudCgpKQotICAgICAgICAgICAgICAg
IHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsK
LSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBz
dGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NvZGVCbG9jay0+bV9jYWxsZWVzW2ldLmdldCgpKS0+
b3NyRW50cnlDYWxsZWUoKSkKLSAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlD
YWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgYmJxQ2Fs
bGVlLnJlcGF0Y2hDYWxsZXJzKGhvbGRlciwgb21nQ2FsbGVlLmdldCgpKTsKICAgICB9CiAKLSAg
ICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01H
ICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIHN0YXRpY19j
YXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5n
ZXQoKSktPnRpZXJVcENvdW50KCktPmNvdW50KCkpOworICAgIGRhdGFMb2dMbklmKFdhc21PTUdQ
bGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUcgIiwgbV9mdW5jdGlvbkluZGV4LCAi
IHdpdGggdGllciB1cCBjb3VudCBhdDogIiwgbV9jb2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0
aW9uSW5kZXhdLmdldCgpLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0ZSho
b2xkTG9jayhtX2xvY2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQ
bGFuLmgKaW5kZXggY2I3OWI0MzlkNGU5OTRkODcwZTlkYzkwODljNDNhN2Y1ODYwMjU2Ni4uZTY4
OWQ1NjY1N2E4ZDFiYjliZGU4MmVlMDUxNTM1NDg3MGJlODMwOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBi
b29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRv
IHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAg
IE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworICAgIE9NR1BsYW4oQ29udGV4dCosIFJl
ZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYsIENvbXBsZXRp
b25UYXNrJiYpOwogCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlw
IGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggMWFkZThhOGU5NDQ5ZGE4YjNmMDZj
ZDNkNjk0MjU3OTJlNmM1ZGY5YS4uYTFlNTdkNDMzMDBkZDM4YmRjM2YxOWExZWY1MzhhNDYwYjFh
OWQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNw
cApAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21w
aWxlKFRpZXJVcENvdW50JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFjZQogICAgIGlmIChjb21w
aWxlKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgInRyaWdn
ZXJPTUdSZXBsYWNlbWVudCBmb3IgIiwgZnVuY3Rpb25JbmRleCk7CiAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5z
dGFuY2UtPm1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6
ZG9udEZpbmFsaXplKCkpKTsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3
IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2Ut
Pm1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBQbGFuOjpkb250RmluYWxpemUo
KSkpOwogICAgICAgICBlbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCiAgICAg
ICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigpOwpAQCAtMTk3LDkgKzE5NywxNCBAQCBz
dGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQm
IGNvbnRleHQsIEJCUUNhbGxlZSYgYwogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRl
Y3R1cmUuCiAjZW5kaWYKLSAgICAvLyA0LiBDb25maWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRv
IGp1bXAgdG8gT1NSIGVudHJ5IGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rp
b24uCisKKyAgICAvLyA0LiBVcGRhdGUgdGhlIGNhbGxlZSBzbG90IGluIHRoZSBjYWxsIGZyYW1l
IHRvIHRoZSBPU1IgZW50cnkgY2FsbGVlLgorICAgIHZvaWQqKiBzdGFja1BvaW50ZXIgPSBiaXR3
aXNlX2Nhc3Q8dm9pZCoqPihjb250ZXh0LnNwKCkpOworICAgICooc3RhY2tQb2ludGVyICsgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlIC0gMSkgPSBDYWxsZWVCaXRzOjpib3hXYXNtKCZvc3JFbnRyeUNh
bGxlZSk7CisKKyAgICAvLyA1LiBDb25maWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRvIGp1bXAg
dG8gT1NSIGVudHJ5IGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rpb24uCiAg
ICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDxVQ1BV
UmVnaXN0ZXI+KGJ1ZmZlcik7Ci0gICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIx
KSA9IGJpdHdpc2VfY2FzdDxVQ1BVUmVnaXN0ZXI+KG9zckVudHJ5Q2FsbGVlLmVudHJ5cG9pbnQo
KS5leGVjdXRhYmxlQWRkcmVzczw+KCkpOworICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihvc3JFbnRyeUNhbGxlZS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3M8PigpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJPU1JFbnRyeU5vdyhQcm9iZTo6Q29udGV4dCYgY29udGV4dCkKQEAgLTM2NSw3ICszNzAsNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KFByb2JlOjpDb250ZXh0JiBj
b250ZXh0KQogCiAgICAgaWYgKHN0YXJ0T1NSRW50cnlDb21waWxhdGlvbikgewogICAgICAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HT1NSIGZvciAiLCBm
dW5jdGlvbkluZGV4KTsKLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9N
R0Zvck9TUkVudHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihp
bnN0YW5jZS0+bW9kdWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlv
bkluZGV4LCBsb29wSW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgp
KSk7CisgICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRy
eVBsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1v
ZHVsZSgpKSwgUmVmPFdhc206OkJCUUNhbGxlZT4oY2FsbGVlKSwgZnVuY3Rpb25JbmRleCwgbG9v
cEluZGV4LCBjb2RlQmxvY2ssIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3Vy
ZVdvcmtsaXN0KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VM
WSghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRG
b3JDb21wbGV0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5j
cHAKaW5kZXggNzM1MjIwMjg5MzdjNmRhYzFmYzQ3M2M3ZTRjZGM2NDk1OGNlOGVhNi4uZjEzZjY0
NTAyMGIyZjc2MGIyNGVjY2JmNzNhMGM3YjNjZDlkNGRkMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtNDIsMjEgKzQyLDE1IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlv
bkNvbnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQordm9p
ZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNv
bnRleHQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUqIHNlbGYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUp
CiB7CiAgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVy
RW50cnlwb2ludEpJVDsKIAotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1
bmN0aW9uPigpOwogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogCiAgICAgLy8gRklY
TUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjUzMjEKICAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3Zl
TG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihudWxscHRyKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQu
c3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRp
b25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1
bHQtPmNhbGxlZU1vdmVMb2NhdGlvbjsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbGVlTW92ZUxvY2F0aW9uKTsKLSAgICB9
KTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKENhbGxlZUJp
dHM6OmJveFdhc20oc2VsZikpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKIAogICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVk
UmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAgICAgUmVnaXN0ZXJTZXQgdG9TYXZl
ID0gcGlubmVkUmVncy50b1NhdmUobW9kZSk7CkBAIC02OSw3ICs2Myw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25D
b250ZXh0JiBjb21wCiAjZW5kaWYKIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVy
c1RvU3BpbGwodG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6OkZy
YW1lUG9pbnRlckJhc2VkKTsKLSAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lz
dGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7CisgICAgc2VsZi0+ZW50cnlwb2ludCgpLmNhbGxlZVNh
dmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwogCiAgICAgdW5zaWduZWQgdG90YWxGcmFt
ZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7CiAgICAgdG90
YWxGcmFtZVNpemUgKz0gV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygp
OwpAQCAtMTI1LDkgKzExOSwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4g
Y3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgICAgICB9
CiAKICAgICAgICAgZW1pdFRocm93V2FzbVRvSlNFeGNlcHRpb24oaml0LCBHUFJJbmZvOjphcmd1
bWVudEdQUjIsIGFyZ3VtZW50c0luY2x1ZGVJNjQgPyBFeGNlcHRpb25UeXBlOjpJNjRBcmd1bWVu
dFR5cGUgOiBFeGNlcHRpb25UeXBlOjpJNjRSZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNvbXBpbGF0aW9uQ29udGV4dC5l
bWJlZGRlck1vdmVBbmRDYWxsID0gVW5saW5rZWRNb3ZlQW5kQ2FsbCB7IH07CiAgICAgR1BSUmVn
IHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyOwogCiAgICAgewpAQCAtMTk4LDYgKzE5MywxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYg
Y29tcAogCiAgICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwog
ICAgICAgICB9CisKKyAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxsaW5nQ29udmVu
dGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0
LmVtYmVkZGVyTW92ZUFuZENhbGwtPm1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAg
ICBqaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICB9CiAKICAgICBpZiAoISFp
bmZvLm1lbW9yeSkgewpAQCAtMjIxLDEyICsyMjAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29t
cAogICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFz
ZU1lbW9yeSwgc2NyYXRjaE9yU2l6ZSwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgfQogCi0gICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7
Ci0gICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8u
aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBp
bmZvLmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFt1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5k
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwg
ZnVuY3Rpb25JbmRleFNwYWNlIH0pOwotICAgIH0pOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5l
bWJlZGRlck1vdmVBbmRDYWxsLT5jYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJs
ZU5lYXJDYWxsKCk7CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zm
c2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZz
ZXQucmVnKCkuZ3ByKCk7CkBAIC0yNjYsOCArMjYwLDYgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNv
bXAKIAogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKLQot
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaAppbmRleCBiNGI5OGQxNTliMjg0Yjdl
YzMyM2FhNTAyYzAzZjkyMWMxMmIwM2E5Li45M2FhMjRkOTY4MGFmZmZkM2I3YTk2ZDE5MWZjZjhj
MzkxZDAyMzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKQEAg
LTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotc3Rk
Ojp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21w
aWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgpOwordm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25D
b250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKiwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAppbmRleCAwNTdhYTcwMThiNDRhOGZiYjRhOGQ0NzExM2JkYmVi
ODc0OWRlYzg3Li5mZDNhZTE4MjA0ZjM1N2JiMzEzNWNlMzU1ZTllNmNjZDIyYTgzOWU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcApAQCAtNDY1LDYgKzQ2NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAg
ICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UganVzdCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQg
d2Ugc2hvdWxkIHRlYWNoIHRoZSBNb2R1bGUKICAgICAgICAgLy8gaG93IHRvIHJlcGF0Y2ggdXM6
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1
NzAKKyAgICAgICAgaml0LmxvYWRQdHIoYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwog
ICAgICAgICBqaXQubG9hZFB0cihlbnRyeXBvaW50TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIp
OwogICAgICAgICBqaXQuY2FsbChzY3JhdGNoR1BSLCBXYXNtRW50cnlQdHJUYWcpOwogICAgIH0K
QEAgLTUzNiwxMCArNTM4LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgcmV0dXJu
IG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBq
c0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2Nh
dGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBX
YXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2Fz
bUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRy
LCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJs
eUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNt
VG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2Vi
QXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAg
IGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBp
bnN0YW5jZSk7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmlzTGFyZ2VBbGxv
Y2F0aW9uKCksICJXZWJBc3NlbWJseUZ1bmN0aW9uIHNob3VsZCBiZSBhbGxvY2F0ZWQgbm90IGlu
IGxhcmdlIGFsbG9jYXRpb24gc2luY2UgaXQgaXMgSlNDYWxsZWUuIik7CiAgICAgcmV0dXJuIGZ1
bmN0aW9uOwpAQCAtNTUxLDEwICs1NTMsMTAgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1X
ZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYg
anNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9j
YXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5j
dGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4KQogICAgIDogQmFzZSB7IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSB9Ci0gICAgLCBtX2pzRW50cnlwb2ludCB7IGpzRW50cnlwb2ludC5lbnRyeXBvaW50KCkgfQot
ICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24gfQorICAgICwgbV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9p
bnQuY29kZSgpIH0KKyAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgs
IHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlv
biB9CiB7IH0KIAogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKaW5kZXggOThjMzQ2NGNkMDcyZDY0
NDVlNzdkZTRmODhkZTBjY2UzYjQ5NWUzNC4uN2RkZjM5ZDAwOGY0YjY0MjlmOWY3YTEzMWY3Zjlk
MzlhNzAxZDE2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uaApAQCAtNjIsMTEgKzYyLDEyIEBAIHB1YmxpYzoKIAogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1
bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2Fs
bGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2Nh
dGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAg
ICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2ltcG9ydGFibGVGdW5jdGlvbi5zaWduYXR1cmVJbmRleDsgfQogICAgIFdhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbjsg
fQorICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aW1wb3J0YWJsZUZ1bmN0aW9uLmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOyB9CiAgICAgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbiBpbXBvcnRhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2ltcG9ydGFibGVGdW5jdGlvbjsgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4ganNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQpAQCAtNzgs
NiArNzksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNz
ZW1ibHlGdW5jdGlvbiwgbV9pbXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9pbXBvcnRhYmxlRnVuY3Rpb24p
ICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRM
b2NhdGlvbigpOyB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
anNDYWxsRW50cnlwb2ludCgpCiAgICAgewpAQCAtOTEsNyArOTMsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0
dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgdm9pZCoq
IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3co
KTsKICAgICBwdHJkaWZmX3QgcHJldmlvdXNJbnN0YW5jZU9mZnNldCgpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCmluZGV4IDkyZGRjZjc4NmU4MTAwNWEyMWUxZjhiMWY1MGE5ZDIwOWY5ZTY5Mjku
LjdhZjFhMDQ1MmFlMGRmN2ViZGMzYzI0ZDA5ZmZmYmUwN2MxMGUwYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKQEAgLTE5Myw2ICsxOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogCiAgICAg
ICAgICAgICBXYXNtOjpJbnN0YW5jZSogY2FsbGVlSW5zdGFuY2UgPSBudWxscHRyOwogICAgICAg
ICAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9p
bnRMb2FkTG9jYXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVl
TG9hZExvY2F0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9
IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKIAogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMg
YW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKQEAgLTIwNSw2ICsyMDYsNyBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25h
dHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwogICAgICAgICAgICAg
ICAgICAgICBjYWxsZWVJbnN0YW5jZSA9ICZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3Rh
bmNlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSB3YXNt
RnVuY3Rpb24tPmVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAg
Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSB3YXNtRnVuY3Rpb24tPmJveGVkQ2FsbGVlTG9hZExv
Y2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
aW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUlu
ZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9z
dXJlXV0uCkBAIC0yMjMsNiArMjI1LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAg
ICAgICAgIGF1dG8qIGluZm8gPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9u
SW5mbyhpbXBvcnQua2luZEluZGV4KTsKICAgICAgICAgICAgIGluZm8tPnRhcmdldEluc3RhbmNl
ID0gY2FsbGVlSW5zdGFuY2U7CiAgICAgICAgICAgICBpbmZvLT53YXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiA9IGVudHJ5cG9pbnRMb2FkTG9jYXRpb247CisgICAgICAgICAgICBpbmZvLT5ib3hl
ZENhbGxlZUxvYWRMb2NhdGlvbiA9IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOwogICAgICAgICAg
ICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbjxXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+PihpbXBvcnQua2luZEluZGV4KS0+c2V0KHZtLCBtX2luc3RhbmNlLmdldCgpLCBmdW5j
dGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzQ3LDkgKzM1MCwxMCBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBm
dW5jLgogICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUg
PSBjb2RlQmxvY2stPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoaW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5
cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAg
ICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxs
ZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJ
bmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2Fz
bTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCBmaWVsZCwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2Uu
Z2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwg
Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIHdy
YXBwZXIgPSBmdW5jdGlvbjsKICAgICAgICAgfQogCkBAIC00NjAsNyArNDY0LDggQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpT
T2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFdhc206OkNh
bGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
KTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRM
b2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9h
ZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7
Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0
IiwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50
TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICB2b2lkKiogYm94ZWRD
YWxsZWVMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5j
ZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9u
LCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAg
bV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICB9CiAgICAg
fQpAQCAtNTc1LDEzICs1ODAsMTQgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+ZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIFdh
c206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50
TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENh
bGxlZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2Fz
bTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxv
Y2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAvLyBX
aGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAu
CiAgICAgICAgICAgICAvLyBEb2VzIChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0cy5mb28gPT09
IHRhYmxlLmdldCgwKT8KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1
bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIHZt
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVy
ZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQo
KSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWdu
YXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWdu
YXR1cmVJbmRleCk7CiAKICAgICAgICAgICAgIG1faW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgp
LT5zZXQoZWxlbWVudEluZGV4LCBmdW5jdGlvbik7CiAgICAgICAgICAgICArK2VsZW1lbnRJbmRl
eDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAppbmRleCBjZGU0ZjNjZjI2MDRhZGQ3NmNjMDRmYjIy
NGY5YTUyYmQyZGEwMzc2Li42Mjg2MmI0MTE3ODQ2NGU2MTNlM2U3OTMwNDI2NzMzMDY1MGU4MTBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCkBAIC02MCw3ICs2MCw5IEBAIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRz
PFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bSksICJXZSBzaG91bGQgbmV2ZXIgZG91Ymxl
IHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwogICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXND
b25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsg
c2lnbmF0dXJlSW5kZXgsICZpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8o
aW1wb3J0SW5kZXgpLT53YXNtVG9FbWJlZGRlclN0dWIgfSApOworICAgIGF1dG8gaW1wb3J0RnVu
Y3Rpb25JbmZvID0gaW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9y
dEluZGV4KTsKKyAgICBzdGF0aWMgdm9pZCogbnVsbEJveGVkQ2FsbGVlID0gbnVsbHB0cjsKKyAg
ICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgJmltcG9ydEZ1bmN0aW9u
SW5mby0+d2FzbVRvRW1iZWRkZXJTdHViLCAmbnVsbEJveGVkQ2FsbGVlIH0pOwogICAgIGNvbnN0
IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhl
Y3V0YWJsZSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGluc3Rh
bmNlKTsKICAgICByZXR1cm4gcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378868</attachid>
            <date>2019-09-16 10:01:01 -0700</date>
            <delta_ts>2019-09-16 10:10:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201799-20190916100059.patch</filename>
            <type>text/plain</type>
            <size>120173</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDRkYmQ0YWUxODlmMDYyMGQ2N2I3YzlkZmMyZTg4NDc5ZGExZTQ0Li5mNDhiZGM1Njc5ZWFhOWVh
MTZiYmNkNGE1YzIzOThkN2EyZDQ3YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxOS0wOS0xNiAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBI
b3dldmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGlu
dGVycHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGlj
aCBmdW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMg
dGhlIGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRl
ciwgc28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdy
aXRpbmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0
aGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0
byB0aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBn
ZW5lcmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdl
IGtlZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAg
Y29kZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAg
LSBDYWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBj
YWxscywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBK
Uy10by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogd2Fz
bS10by13YXNtIHN0dWIsIEpTLXRvLXdhc20gc3R1YiAoY2FsbGVlIGZyYW1lKSwgd2FzbS10by1K
UyBzdHViLCBPTUcgb3NyIGVudHJ5CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhbHNvIGNoYW5n
ZSBpdCBzbyB0aGF0IHRoZSBjYWxsZWUga2VlcHMgdHJhY2sgb2YgaXRzIGNhbGxlcnMsIGluc3Rl
YWQgb2YgaGF2aW5nIGEgZ2xvYmFsIG1hcHBpbmcKKyAgICAgICAgb2YgY2FsbHMgaW4gdGhlIFdh
c206OkNvZGVCbG9jay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVwYXRjaCBhbGwgY2FsbGVy
cyBvZiBhIGdpdmVuIENhbGxlZSB3aGVuIGl0IHRpZXJzIHVwLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNl
QW5kQ29tcGlsZUFpcik6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6QkJRUGxhbik6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uaDoKKyAgICAgICAgKiB3YXNt
L1dhc21CQlFQbGFuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjppbml0
aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZS5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cmVwYXRjaE1vdmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZXBhdGNoQ2FsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6YWRkQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRQ2FsbGVlOjphZGRBbmRMaW5rQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJR
Q2FsbGVlOjpyZXBhdGNoQ2FsbGVycyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVlLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6ZW50cnlwb2ludCk6CisgICAgICAgIChKU0M6Oldh
c206OkNhbGxlZTo6Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OnNldHVwRnJhbWVJblBy
b2xvZ3VlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogd2FzbS9XYXNt
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6ZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206
OkNvZGVCbG9jazo6d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSk6CisgICAgICAgICogd2FzbS9XYXNtRW1iZWRkZXIuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbik6CisgICAgICAg
ICogd2FzbS9XYXNtSW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om9m
ZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxh
bjo6T01HRm9yT1NSRW50cnlQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50
cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6T01HUGxhbik6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9NR1JlcGxhY2VtZW50Q29tcGlsZSk6
CisgICAgICAgIChKU0M6Oldhc206OmRvT1NSRW50cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjp0
cmlnZ2VyT1NSRW50cnlOb3cpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20v
anMvSlNUb1dhc20uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xv
dyk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpl
dmFsdWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUpOgor
CiAyMDE5LTA5LTE1ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGVhayBvZiBOU01hcFRhYmxlIGluIC1bSlNWaXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVm
ZXJlbmNlOndpdGhPd25lcjpdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
YTZjMGYwMjc1ZTNmMWU1Y2FkNDFlNmE0YzhhNzYyNWViMDc2YjJlMi4uNzdhZDkyMjhiZTRhMzg3
NjA5ODZmZDg2NjIwN2MyMmRkYjUxZGY3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtNDYzLDYgKzQ2MywxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIGFzc2VtYmxlci9YODZSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxl
ci9YODZfNjRSZWdpc3RlcnMuaAogCisgICAgYjMvQjNDb21tb24uaAorICAgIGIzL0IzQ29tcGls
YXRpb24uaAorICAgIGIzL0IzVHlwZS5oCisKICAgICBiaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNh
bGwuaAogICAgIGJpbmRpbmdzL1NjcmlwdE9iamVjdC5oCiAgICAgYmluZGluZ3MvU2NyaXB0VmFs
dWUuaApAQCAtMTAwMSw2ICsxMDA1LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBydW50aW1lL1dyaXRlQmFycmllci5oCiAgICAgcnVudGltZS9X
cml0ZUJhcnJpZXJJbmxpbmVzLmgKIAorICAgIHdhc20vV2FzbUNhbGxlZS5oCiAgICAgd2FzbS9X
YXNtQ2FwYWJpbGl0aWVzLmgKICAgICB3YXNtL1dhc21Db2RlQmxvY2suaAogICAgIHdhc20vV2Fz
bUNvbXBpbGF0aW9uTW9kZS5oCkBAIC0xMDA4LDEzICsxMDEzLDE2IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtRW1iZWRkZXIuaAog
ICAgIHdhc20vV2FzbUV4Y2VwdGlvblR5cGUuaAogICAgIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5oCisgICAgd2FzbS9XYXNtRm9ybWF0LmgKICAgICB3YXNtL1dhc21JbmRleE9yTmFtZS5o
CiAgICAgd2FzbS9XYXNtTWVtb3J5LmgKKyAgICB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5o
CiAgICAgd2FzbS9XYXNtTWVtb3J5TW9kZS5oCiAgICAgd2FzbS9XYXNtTW9kdWxlLmgKICAgICB3
YXNtL1dhc21OYW1lLmgKICAgICB3YXNtL1dhc21OYW1lU2VjdGlvbi5oCiAgICAgd2FzbS9XYXNt
UGFnZUNvdW50LmgKKyAgICB3YXNtL1dhc21TaWduYXR1cmUuaAogICAgIHdhc20vV2FzbVRpZXJV
cENvdW50LmgKIAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseS5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGUyMmMxNGZhYWFhYzM4MzA3MThjMWIxZmU4MDk3OWNmY2Q3Zjg1YmEu
LjYyZWRjYTliOGZhMGIyNmMzMDU4YmNmZmVjZGEyNzVlYWYyNWNjN2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJMEYzMzhERjYxQkU5M0Q1NTAw
MTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERjQxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3Ry
YWluZWRWYWx1ZS5oICovOyB9OwogCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2Fs
bFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjMzOERGODFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggKi87IH07CiAJCTBGMzM4
REZFMUJFRDUxMjcwMDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERkMxQkVENTEyNzAwMTNDODhGIC8q
IEFpclNpbXBsaWZ5Q0ZHLmggKi87IH07Ci0JCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M0NvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjMzOEUwMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICovOyB9Owor
CQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDAxQkYwMjc2QzAwMTND
ODhGIC8qIEIzQ29tcGlsYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhF
MDIxQkYwMjc2QzAwMTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCAqLzsgfTsKIAkJMEYzMzhFMTAx
QkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDQxQkYwMjc2QzAwMTNDODhGIC8qIEIz
TW92ZUNvbnN0YW50cy5oICovOyB9OwogCQkwRjMzOEUxMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNP
cGFxdWVCeXByb2R1Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzM4RTA1MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oICov
OyB9OwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsg
fTsKIAkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQzFCREFDREFD
MDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLzsgfTsKIAkJMEZFQzg1MDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5o
ICovOyB9OwotCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9OworCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUM4NTBDMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZp
dHkuaCAqLzsgfTsKIAkJMEZFQzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
NDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLzsgfTsKIAkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDY0VmFsdWUuaCAqLzsgfTsKQEAgLTY3NSw3ICs2NzUsNyBAQAogCQkwRkVDODUzNjFCREFD
REFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyog
QjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CiAJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsg
fTsKIAkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTNDMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLzsgfTsKKwkJMEZF
Qzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVXBzaWxvblZhbHVlLmggKi87IH07CiAJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87IH07CiAJ
CTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGODFCREFDREFDMDA4MEZGNzQg
LyogQjNWYWxpZGF0ZS5oICovOyB9OwpAQCAtNzE0MywxMSArNzE0MywxMSBAQAogCQkJCTg2ODky
MUMxMUY5QzBDQjcwMDExNTlGNiAvKiBKU0JpZ0ludC5oICovLAogCQkJCTg2RkE5RThGMTQyQkJC
MkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAogCQkJCTg2RkE5RTkwMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKLQkJCQlGRTQ4QkQ0MzIzMjQ1RTg3
MDBGMTM2RDAgLyogSlNDQ29uZmlnLmNwcCAqLywKLQkJCQlGRTQ4QkQ0MjIzMjQ1RTg3MDBGMTM2
RDAgLyogSlNDQ29uZmlnLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpT
Q2FsbGVlLmNwcCAqLywKIAkJCQk2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUu
aCAqLywKIAkJCQk1M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi8sCisJCQkJ
RkU0OEJENDMyMzI0NUU4NzAwRjEzNkQwIC8qIEpTQ0NvbmZpZy5jcHAgKi8sCisJCQkJRkU0OEJE
NDIyMzI0NUU4NzAwRjEzNkQwIC8qIEpTQ0NvbmZpZy5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQx
RUYwMDg2MzJDMCAvKiBKU0NlbGwuY3BwICovLAogCQkJCUJDMTE2N0Q4MEUxOUJDQzkwMDgwNjZE
RCAvKiBKU0NlbGwuaCAqLywKIAkJCQkwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlNDZWxs
SW5saW5lcy5oICovLApAQCAtOTM0OCw3ICs5MzQ4LDYgQEAKIAkJCQkwRkVBMEExMDE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0IzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUQw
MjE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjlDRjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUZFMzg0MjMyMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25FbnRyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMUMxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJERDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NS
RXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTAxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TE9TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTM4LDcgKzk1MzcsNiBAQAog
CQkJCUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIw
NDRBOEIwMDY2NEI2OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTQ4QkQ0
NDIzMjQ1RTkzMDBGMTM2RDAgLyogSlNDQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhF
QkUyNDFDRThGMzU4MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzNEUwMzU0MUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nl
c3NDYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2MDksNiArOTYwNyw3IEBACiAJCQkJNjU3Q0Y0
NTkxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0I2
MDFFQzIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4
MDFBOTE4ODBENkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZFNDhCRDQ0MjMyNDVFOTMwMEYxMzZEMCAvKiBKU0NDb25maWcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMTE2N0RBMEUxOUJDQzkwMDgwNjZERCAvKiBKU0NlbGwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTc0OTcxMTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjFERDg0QTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC05ODg1LDcgKzk4ODQsOSBAQAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENE
ODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAw
RjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgw
RTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMzg0
MjMyMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZFMzg0MjMzMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25zTGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTM1Njk4NzIyMjg0MTE4NzAwOENEQ0NCIC8qIFBhY2tlZENlbGxQdHIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFk
YXB0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNEU2NTc1MjA2NjhFQUEwMEZCODFBQyAvKiBQ
YXJzZUhhc2guaCBpbiBIZWFkZXJzICovLApAQCAtOTk5Miw3ICs5OTkzLDYgQEAKIAkJCQkwRkUw
NTAyODFBQTkwOTU2MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkUwNTAyOTFBQTkwOTU2MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRzVGFibGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTA1MDJCMUFBOTA5NTYwMEQzM0IzMyAvKiBTY29wZU9mZnNl
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlv
bnNMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyog
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA2ODE4
OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NTAzRkEyMTE4OEVGRjY4MDAxMTBGMTQgLyogU2NyaXB0QnJlYWtwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmNwcAppbmRleCAzMTlhYTViZjA3NWNiZjBhZTAxNWIxMjA2OWNkMDQxOWM5ODliMTJkLi5jNjcx
NTYzMjY1NjUwZmZkYjg0YjgxZjU0NzkxN2JhYjdmZWFjYzg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTIyOSw3ICsyMjks
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAg
ICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3Rv
cjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXgsIFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUm
KTsKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9j
ZWR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBWZWN0b3I8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgTWVtb3J5TW9kZSwgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24sIGNvbnN0
IFNpZ25hdHVyZSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
QXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTYzOSw3ICs2MzksOCBAQCBw
cml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAg
IEJhc2ljQmxvY2sqIG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIFZlY3RvcjxUeXBlZFRt
cD4gbV9sb2NhbHM7Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rp
b24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV9vdXRnb2luZ0NhbGxzOworICAgIGNvbnN0
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIG1fd2FzbVRv
V2FzbUV4aXRTdHViczsKICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJl
ZyB9OwogICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAg
R1BSUmVnIG1fd2FzbUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKQEAgLTcw
OCwxNCArNzA5LDE1IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dElu
c3RhbmNlKEJhc2ljQmxvY2sqIGJsb2NrLCBUeXBlZFRtcCBpbnN0CiAgICAgZW1pdFBhdGNocG9p
bnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CiB9CiAKLUFpcklSR2VuZXJh
dG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5
TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBU
aHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSkKK0FpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIG91dGdvaW5nQ2FsbHMsIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMsIE1lbW9yeU1v
ZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUpCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9m
dW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiAgICAgLCBtX3RpZXJVcCh0aWVyVXApCiAgICAg
LCBtX3Byb2MocHJvY2VkdXJlKQogICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCi0gICAgLCBt
X3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgICwg
bV9vdXRnb2luZ0NhbGxzKG91dGdvaW5nQ2FsbHMpCisgICAgLCBtX3dhc21Ub1dhc21FeGl0U3R1
YnMod2FzbVRvV2FzbUV4aXRTdHVicykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8u
aW1wb3J0RnVuY3Rpb25Db3VudCgpKQogewogICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2RlLmFk
ZEJsb2NrKCk7CkBAIC03NjEsMTYgKzc2Myw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVy
YXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvCiAg
ICAgUmVmPEIzOjpBaXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNy
ZWF0ZVNoYXJlZFRhc2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgewogICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgIGNvZGUu
ZW1pdERlZmF1bHRQcm9sb2d1ZShqaXQpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdQUlJl
ZyBjYWxsZWVHUFIgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2go
MCk7Ci0gICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOwotICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVN
b3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3Zl
TG9jYXRpb24pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKGNhbGxlZUdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICAgICAg
ICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKTsKLSAgICAgICAgfQorICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKG51bGxwdHIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAKICAgICAgICAgewogICAg
ICAgICAgICAgY29uc3QgQ2hlY2tlZDxpbnQzMl90PiB3YXNtRnJhbWVTaXplID0gbV9jb2RlLmZy
YW1lU2l6ZSgpOwpAQCAtMTkzNiw4ICsxOTI5LDYgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwK
ICAgICBpZiAocmV0dXJuVHlwZSAhPSBUeXBlOjpWb2lkKQogICAgICAgICByZXN1bHQgPSB0bXBG
b3JUeXBlKHJldHVyblR5cGUpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwot
CiAgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3Rk
OjptYXgobV9tYXhOdW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihhcmdz
LnNpemUoKSkpOwogCkBAIC0xOTczLDExICsxOTY0LDEyIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsCiAgICAgICAgICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOwogICAg
ICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1YiA9IG1f
d2FzbVRvV2FzbUV4aXRTdHVic1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbd2FzbVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFi
bGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBl
bmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwp
LCBmdW5jdGlvbkluZGV4IH0pOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBqaXQuY2FsbChXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbY2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxv
Y2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPih3YXNtVG9XYXNtRXhpdFN0dWIuY29kZSgpKSk7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMjAyNCwxOCArMjAx
NiwyMCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBhdXRvKiBwYXRjaHBvaW50
ID0gYWRkUGF0Y2hwb2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CiAgICAgICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy5yZWFkc1Bpbm5lZCA9IHRydWU7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRj
aFJlZ2lzdGVycysrOwogCiAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdz
OwogICAgICAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCBy
ZXR1cm5UeXBlLCBwYXRjaHBvaW50LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBC
Mzo6VmFsdWVSZXAgcmVwKSB7CiAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCBy
ZXAgfSk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFy
Q2FsbCgpOwotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRl
eCB9KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4qIG91dGdvaW5nQ2FsbHMgPSAmbV9vdXRnb2luZ0NhbGxzOworICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoW291dGdvaW5nQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAg
ICAgICAgICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVv
ZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5l
YXJDYWxsKCk7CisgICAgICAgICAgICBvdXRnb2luZ0NhbGxzLT5hcHBlbmQoeyBmdW5jdGlvbklu
ZGV4LCB7IG1vdmVMb2NhdGlvbiwgY2FsbExvY2F0aW9uIH19KTsKICAgICAgICAgfSk7CiAKICAg
ICAgICAgZW1pdFBhdGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwg
V1RGTW92ZShwYXRjaEFyZ3MpKTsKQEAgLTIwODksNiArMjA4Myw3IEBAIGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hCiAgICAgfSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gZzY0
KCk7CisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlID0gZzY0KCk7CiAgICAgewogICAgICAgICBF
eHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IGc2NCgpOwogICAgICAgICAvLyBD
b21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5n
IGZvci4KQEAgLTIwOTcsNiArMjA5Miw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJ
bmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAgICAg
ICAgIGFwcGVuZChBZGQ2NCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgY2FsbGVlU2lnbmF0dXJl
SW5kZXgpOwogICAgICAgICAKICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVT
aWduYXR1cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRy
eXBvaW50TG9hZExvY2F0aW9uKCkpLCBjYWxsZWVDb2RlKTsgLy8gUG9pbnRlciB0byBjYWxsZWUg
Y29kZS4KKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRl
eCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRM
b2NhdGlvbigpKSwgY2FsbGVlKTsgLy8gUG9pbnRlciB0byBib3hlZCBjYWxsZWUKIAogICAgICAg
ICAvLyBDaGVjayB0aGF0IHRoZSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGluaXRp
YWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXgg
aW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgogICAgICAgICAvLyBGSVhNRTogd2hlbiB3
ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1
c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NzIxMApAQCAtMjE4OSw2ICsyMTg1LDEwIEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hCiAKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGVtaXRBcmdzOwogICAg
IGVtaXRBcmdzLmFwcGVuZChjYWxsZWVDb2RlKTsKKworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFk
ZHIoY2FsbGVlKSwgY2FsbGVlKTsKKyAgICBlbWl0QXJncy5hcHBlbmQoeyBjYWxsZWUsIEIzOjpW
YWx1ZVJlcDo6c3RhY2tBcmd1bWVudChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVn
aXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSB9KTsKKwogICAgIHdhc21DYWxsaW5n
Q29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNoLCB0b1Rt
cFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CiAgICAgICAg
IGVtaXRBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOwogICAgIH0pOwpAQCAtMjIyOSwxMCArMjIy
OSw4IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KICAgICBy
ZXR1cm4gQjM6Ok9yaWdpbigpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4
dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1
bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1l
bW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJV
cCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHZvaWQs
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRp
b25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+
PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1l
bW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJV
cCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAgICBhdXRvIHJl
c3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKLQogICAgIGNvbXBpbGF0aW9u
Q29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4o
KTsKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVl
PENDYWxsSGVscGVycz4oKTsKIApAQCAtMjI1Miw3ICsyMjUwLDcgQEAgRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihD
b21waWxhdGkKICAgICAKICAgICBwcm9jZWR1cmUuc2V0T3B0TGV2ZWwoT3B0aW9uczo6d2ViQXNz
ZW1ibHlCQlFBaXJPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEFpcklSR2VuZXJhdG9yIGly
R2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24s
IHNpZ25hdHVyZSk7CisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2Vk
dXJlLCBjb21waWxhdGlvbkNvbnRleHQub3V0Z29pbmdDYWxscywgd2FzbVRvV2FzbUV4aXRTdHVi
cywgbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25h
dHVyZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVy
YXRvciwgZnVuY3Rpb24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1
cmUsIGluZm8pOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkp
OwogCkBAIC0yMjcyLDEwICsyMjcwLDEwIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpCiAgICAg
ICAgIEIzOjpBaXI6OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOwogICAgICAgICBCMzo6QWly
OjpnZW5lcmF0ZShjb2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsK
ICAgICAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHBy
b2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0
KCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29k
ZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBl
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJh
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaApp
bmRleCAzMzFiNGIwYWQzMTNlNjIzY2E3ZmY0YmQ4ZGU4YTE1ODZmYzdkNTA1Li44MjcyY2UzNTk1
ZmYyOGIzZjljYzg4OTY1YWRiMmE4NGM5ZTg1YTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9u
Q29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5
TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhy
b3dXYXNtRXhjZXB0aW9uID0gbnVsbHB0cik7CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24g
PSBudWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDNkOGRmOGU2
ODcxMDIxMzFiNjRjMWE2ZDY1ZTZmY2NjMTAzYjVlNzUuLmUwMDAzZWNiNzBkNmYyYWNlY2FkZGQz
ZjQyODQ2NGU3YTBiMzhmZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTE3Miw3ICsxNzIsNiBAQCBwdWJsaWM6CiAKICAgICB0
eXBlZGVmIFN0cmluZyBFcnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9yVHlw
ZT4gVW5leHBlY3RlZFJlc3VsdDsKLSAgICB0eXBlZGVmIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiwgRXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAgdHlwZWRlZiBFeHBl
Y3RlZDx2b2lkLCBFcnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIC4uLkFyZ3M+CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGZhaWwoQXJncy4uLiBhcmdzKSBjb25zdApAQCAtMTg1LDcgKzE4NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAg
XAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiwgUHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1v
cnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVk
IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7
CisgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqLCBUaHJvd1dhc21F
eGNlcHRpb24pOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJn
dW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTI4Myw2ICsyODIsNyBAQCBwcml2
YXRlOgogCiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVs
bHB0ciB9OwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX291dGdvaW5nQ2FsbHM7CiAgICAgY29uc3QgTWVt
b3J5TW9kZSBtX21vZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGNvbnN0
IENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9uTW9kZTo6QkJR
TW9kZSB9OwogICAgIGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07
CkBAIC0yOTQsNyArMjk0LDcgQEAgcHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRC
bG9jayB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8dWludDMyX3Q+IG1fb3V0ZXJMb29wczsKICAg
ICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNp
dGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRj
aGVkIHdpdGguCisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJU
YWc+PiYgbV93YXNtVG9XYXNtRXhpdFN0dWJzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0
aGUgZnVuY3Rpb24gaW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRo
LgogICAgIHVuc2lnbmVkJiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgSGFzaE1h
cDxWYWx1ZUtleSwgVmFsdWUqPiBtX2NvbnN0YW50UG9vbDsKICAgICBJbnNlcnRpb25TZXQgbV9j
b25zdGFudEluc2VydGlvblZhbHVlczsKQEAgLTM1NSwxNSArMzU1LDE2IEBAIHZvaWQgQjNJUkdl
bmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNp
Y0Jsb2NrKiBibG9jCiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRl
cm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwg
dW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRp
ZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24p
CitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBp
bmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBvdXRnb2luZ0NhbGxzLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2Rl
LCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwg
VGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlv
bikKICAgICA6IG1faW5mbyhpbmZvKQorICAgICwgbV9vdXRnb2luZ0NhbGxzKG91dGdvaW5nQ2Fs
bHMpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0
aW9uTW9kZSkKICAgICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogICAgICwgbV9s
b29wSW5kZXhGb3JPU1JFbnRyeShsb29wSW5kZXhGb3JPU1JFbnRyeSkKICAgICAsIG1fdGllclVw
KHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCi0gICAgLCBtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgICwgbV93YXNtVG9XYXNtRXhp
dFN0dWJzKHdhc21Ub1dhc21FeGl0U3R1YnMpCiAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICAsIG1fY29uc3RhbnRJbnNlcnRp
b25WYWx1ZXMobV9wcm9jKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBvcnRG
dW5jdGlvbkNvdW50KCkpCkBAIC00MTcsNyArNDE4LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1
cmUKICAgICAgICAgfQogICAgIH0KIAotICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVw
RnJhbWVJblByb2xvZ3VlKCZjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBtX3Byb2Ms
IE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCku
c2V0dXBGcmFtZUluUHJvbG9ndWUobV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwog
CiAgICAgewogICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigp
KTsKQEAgLTE0MDIsOCArMTQwMyw2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICBtX21h
a2VzQ2FsbHMgPSB0cnVlOwogCiAgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVy
blR5cGUoKTsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7Ci0KICAgICBpZiAobV9p
bmZvLmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRl
eCkpIHsKICAgICAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51
bUpTQ2FsbEFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAK
QEAgLTE0MTcsNiArMTQxNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgQmFz
aWNCbG9jayogY29udGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmln
aW4oKSwgaXNXYXNtQ2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRl
ZEJsb2NrKGlzRW1iZWRkZXJCbG9jaykpOwogCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1YiA9IG1fd2FzbVRvV2FzbUV4aXRT
dHVic1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgVmFsdWUqIHdhc21DYWxsUmVzdWx0ID0gd2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdp
bigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMTQyNSwxMSArMTQyNSwxMSBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFz
c3VtZSB3ZSBjb3VsZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVj
a2luZy4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8g
dGhpczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAg
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6
Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVu
Y3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihb
d2FzbVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxs
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5k
KHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwg
ZnVuY3Rpb25JbmRleCB9KTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCA9IGppdC5jYWxsKFdhc21FbnRyeVB0clRhZyk7CisgICAgICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbY2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4od2FzbVRvV2FzbUV4aXRTdHVi
LmNvZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0pOwpAQCAtMTQ3MywxNyArMTQ3MywxOCBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsCiAgICAgICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdl
YkFzc2VtYmx5IGluc3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1v
cnkuCiAgICAgICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRT
dGFja0xpbWl0OjpZZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBj
b250aW51YXRpb24pOwogICAgIH0gZWxzZSB7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiogb3V0Z29pbmdDYWxscyA9ICZtX291dGdvaW5nQ2FsbHM7CiAgICAgICAgIHJl
c3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVu
dEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAg
ICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0
aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKLSAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
Y2FsbCwgZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbklu
ZGV4IH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBv
aW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBj
YWxsZWVHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgICAgICAgICBhdXRv
IG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoY2FsbGVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdp
c3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb2NhdGlvbiA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxl
TmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0Z29pbmdDYWxscy0+YXBwZW5kKHsg
ZnVuY3Rpb25JbmRleCwgeyBtb3ZlTG9jYXRpb24sIGNhbGxMb2NhdGlvbiB9fSk7CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC0xNjI0LDYgKzE2MjUsMTAg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRl
eCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
Y2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSkp
OwogCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKKyAgICAgICAgICAg
IHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9m
Qm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSkpKTsKKwogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNp
Z25hdHVyZS5yZXR1cm5UeXBlKCk7CiAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9u
KCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0Iz
VHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQpIHsKQEAgLTE2MzUsOCArMTY0MCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMsIGJ1dCB0aGUg
d2FzbS0+d2FzbSBzdHViIGFzc3VtZXMgaXQgY2FuCiAgICAgICAgICAgICAvLyB1c2UgYWxsIHRo
ZSBwaW5uZWQgcmVnaXN0ZXJzIGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRl
KFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNr
aW5nKSk7Ci0KICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2RlLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxs
ZWUsIEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
aXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAg
ICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3By
KCksIFdhc21FbnRyeVB0clRhZyk7CkBAIC0xNjk3LDEwICsxNzAyLDggQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjpvcmlnaW4oKSAtPiBPcmlnaW4KICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdp
bj4ob3JpZ2luKTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0
aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUg
Y29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5k
ZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRo
cm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRh
dGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgdW5z
aWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUs
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBU
aWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9u
KQogewotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwot
CiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlx
dWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCkBAIC0xNzIxLDcgKzE3MjQsNyBA
QCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlKENvbXBpbGF0aW9uQwogICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5
QkJRQjNPcHRpbWl6YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlP
TUdPcHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3Io
aW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9u
SW5kZXgsIGxvb3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7
CisgICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIGNvbXBpbGF0
aW9uQ29udGV4dC5vdXRnb2luZ0NhbGxzLCB3YXNtVG9XYXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxv
b3BJbmRleEZvck9TUkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgRnVu
Y3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5k
YXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAg
V0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTE3MzksMTAg
KzE3NDIsMTAgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAgICAgICAgQjM6OnByZXBhcmVG
b3JHZW5lcmF0aW9uKHByb2NlZHVyZSk7CiAgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUs
ICpjb21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAgICBjb21waWxh
dGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VC
eXByb2R1Y3RzKCk7Ci0gICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgICAg
ICBjb21waWxhdGlvbkNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxs
ZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiB7IH07CiB9CiAKIC8vIEN1c3RvbSB3YXNtIG9wcy4gVGhlc2UgYXJlIHRo
ZSBvbmVzIHRvbyBtZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlYTU1MDI0MDE4ZDMwZDM4ZmYx
ZWE3YTdhYmYxYzE2NWJjZjU2N2Y4Li4zNDhiNTQ3ZWUzZDc4N2I2MTJjM2ZkMzYwNDJkNzdkZTgy
MjBhN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmgKQEAgLTQ5LDkgKzQ5LDEyIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAg
IHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gZW1iZWRkZXJFbnRyeXBvaW50
Qnlwcm9kdWN0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlw
b2ludEpJVDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21F
bnRyeXBvaW50Qnlwcm9kdWN0czsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4g
b3V0Z29pbmdDYWxsczsKKyAgICBPcHRpb25hbDxVbmxpbmtlZE1vdmVBbmRDYWxsPiBlbWJlZGRl
ck1vdmVBbmRDYWxsOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3Rl
cnM7CiB9OwogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9u
RGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYs
IHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIs
IFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+PiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9
IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAKaW5kZXggMGU4M2Q1M2YzMTIzOTM3ZmM5Y2MwM2QzZTVlZTE4NGQ1MTcxM2Q0Zi4uYjQ4NTdj
NzZhMTg3YmRlNTFlMjY1MGQ3YWM0MmZjMjQ3YjVlNTA3OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtNTIsOSArNTIsMTAgQEAgbmFtZXNwYWNlIFdh
c21CQlFQbGFuSW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
fQogCi1CQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1h
dGlvbj4gaW5mbywgQXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRp
b24gdGhyb3dXYXNtRXhjZXB0aW9uKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+JiBjYWxsZWVzLCBSZWY8TW9kdWxlSW5m
b3JtYXRpb24+IGluZm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENy
ZWF0ZUVtYmVkZGVyV3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhj
ZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShp
bmZvKSwgV1RGTW92ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJv
d1dhc21FeGNlcHRpb24pCiAgICAgLCBtX3N0cmVhbWluZ1BhcnNlcihtX21vZHVsZUluZm9ybWF0
aW9uLmdldCgpLCAqdGhpcykKKyAgICAsIG1fY2FsbGVlcygmY2FsbGVlcykKICAgICAsIG1fc3Rh
dGUoU3RhdGU6OlZhbGlkYXRlZCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC0xNTks
MTYgKzE2MCwxMCBAQCB2b2lkIEJCUVBsYW46OnByZXBhcmUoKQogCiAgICAgY29uc3QgYXV0byYg
ZnVuY3Rpb25zID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5
UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0
byBKYXZhU2NyaXB0IHN0dWJzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFz
c2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBh
Y2l0eShtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25zLnNpemUoKSwgIiBXZWJBc3Nl
bWJseSBmdW5jdGlvbnMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGls
YXRpb25Db250ZXh0cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIp
Ci0gICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9u
cy5zaXplKCksICIgdGllci11cCBjb3VudHMiKSkKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBh
Y2l0eShtX2NvbXBpbGF0aW9uQ29udGV4dHMsIGZ1bmN0aW9ucy5zaXplKCksICIgY29tcGlsYXRp
b24gY29udGV4dHMiKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxscy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7Ci0gICAgbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnMucmVzaXplKGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRpb25Db250ZXh0
cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7Ci0gICAgbV90aWVyVXBDb3VudHMucmVzaXplKGZ1
bmN0aW9ucy5zaXplKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGlt
cG9ydEluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7ICsraW1wb3J0
SW5kZXgpIHsKICAgICAgICAgSW1wb3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZvcm1hdGlvbi0+
aW1wb3J0c1tpbXBvcnRJbmRleF07CkBAIC0yMzAsNiArMjI1LDcgQEAgcHVibGljOgogCiB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fY2FsbGVlcyk7CiAgICAgQVNTRVJUKG1fc3RhdGUgPj0gU3Rh
dGU6OlByZXBhcmVkKTsKICAgICBkYXRhTG9nTG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJi
b3NlLCAiU3RhcnRpbmcgY29tcGlsYXRpb24iKTsKIApAQCAtMjY2LDEzICsyNjIsNyBAQCB2b2lk
IEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFj
ZSkgPT0gc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihm
dW5jdGlvbiwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKLSAgICAg
ICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlQkJRVGllclVw
Q2hlY2tzKCkpCi0gICAgICAgICAgICBtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA9IG1h
a2VVbmlxdWU8VGllclVwQ291bnQ+KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fdGll
clVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdID0gbnVsbHB0cjsKLSAgICAgICAgVGllclVwQ291bnQq
IHRpZXJVcCA9IG1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdLmdldCgpOwotICAgICAgICBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlUmVzdWx0OworICAgICAgICBFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5k
Q29tcGlsZVJlc3VsdDsKICAgICAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSA9IDA7CiAKICAgICAgICAgLy8gRklYTUU6IFNvbWUgd2VicGFnZXMgdXNlIHZlcnkgbGFyZ2Ug
V2FzbSBtb2R1bGUsIGFuZCBpdCBleGhhdXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1vcnkgaW4gQVJN
NjQgZGV2aWNlcyBzaW5jZSB0aGUgc2l6ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSByZWdpb24gaXMg
b25seSBsaW1pdGVkIHRvIDEyOE1CLgpAQCAtMjgyLDEwICsyNzIsMTEgQEAgdm9pZCBCQlFQbGFu
Ojpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgaWYg
KE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5m
b3JtYXRpb24tPmNvZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1v
ZGVUaHJlc2hvbGQoKSkKICAgICAgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CiAKKyAgICAg
ICAgVGllclVwQ291bnQqIHRpZXJVcCA9IG1fY2FsbGVlcy0+YXQoZnVuY3Rpb25JbmRleCktPnRp
ZXJVcENvdW50KCk7CiAgICAgICAgIGlmICghZm9yY2VVc2luZ0IzICYmIE9wdGlvbnM6Ondhc21C
QlFVc2VzQWlyKCkpCi0gICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFu
ZENvbXBpbGVBaXIobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlv
biwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwg
bV90aHJvd1dhc21FeGNlcHRpb24pOworICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0
ID0gcGFyc2VBbmRDb21waWxlQWlyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4
XSwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dh
c21FeGNlcHRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVS
ZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5k
ZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0
aW9uSW5kZXhdLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwg
VUlOVDMyX01BWCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgICAgICBw
YXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRl
eHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3dhc21Ub1dhc21FeGl0
U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5U
MzJfTUFYLCB0aWVyVXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5M
SUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKQEAgLTI5NCwxMSArMjg1LDExIEBAIHZvaWQgQkJRUGxhbjo6
Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5j
dGlvbkluZGV4XSA9IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0KICAgICAgICAg
aWYgKG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25JbmRleCkgfHwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9ucygpLmNvbnRhaW5zKGZ1bmN0
aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0
aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9p
bnRDYWxsZWU+IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVkZGVyRW50cnlw
b2ludENhbGxlZTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBl
cihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVyZSwgZW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlLmdldCgpLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxG
dW5jdGlvbnMuYWRkKGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2Fs
bGVlKSk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50
cnkpOwogICAgICAgICB9CiAKQEAgLTMxNiw3ICszMDcsOSBAQCB2b2lkIEJCUVBsYW46OmNvbXBs
ZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICBDb21waWxhdGlv
bkNvbnRleHQmIGNvbnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07
CiAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5m
b3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhd
OwogICAgICAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBpbXBv
cnRGdW5jdGlvbkNvdW50ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3Vu
dCgpOworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVu
Y3Rpb25JbmRleCArIGltcG9ydEZ1bmN0aW9uQ291bnQ7CisgICAgICAgICAgICBCQlFDYWxsZWUm
IGNhbGxlZSA9ICptX2NhbGxlZXMtPmF0KGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgQVNT
RVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uSW5k
ZXhTcGFjZVNpemUoKSk7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwpAQCAtMzI1LDkgKzMxOCwxNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBs
ZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5h
bEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VV
bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICAgICAgICAgICAgICBjYWxsZWUuZW50cnlwb2lu
dCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lz
dGVycyk7CisgICAgICAgICAgICAgICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9
IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICAgICAgRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJR
IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRl
eFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5k
ZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUo
Y29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKworICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UgPj0gaW1wb3J0RnVuY3Rp
b25Db3VudCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHRhcmdldEZ1bmN0
aW9uSW5kZXggPSBjYWxsLnRhcmdldEZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxs
ZWVzLT5hdCh0YXJnZXRGdW5jdGlvbkluZGV4KS0+YWRkQ2FsbGVyKGxvY2tlciwgbGlua0J1ZmZl
ciwgY2FsbC51bmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlvbklu
ZGV4KSkgewpAQCAtMzM3LDIzICszMzgsMTggQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dhc21JbnRlcm5h
bEZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGls
YXRpb24+KAorICAgICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbi0+
ZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAog
ICAgICAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRp
b25QdHJUYWcsICJFbWJlZGRlci0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMgbmFtZSAl
cyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBt
YWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRh
KCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuZW1iZWRkZXJFbnRyeXBv
aW50Qnlwcm9kdWN0cykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgZm9y
IChhdXRvJiB1bmxpbmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZXhlY3V0YWJsZUFkZHJlc3M7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fbW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZy
b21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBC
MywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hv
dWxkIGJlIHJlcGxhY2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0NjIKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJs
ZUFkZHJlc3MgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4U3Bh
Y2UpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZUFkZHJlc3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSAtIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQo
KSktPmVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJU
YWc+KCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChj
YWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihleGVj
dXRhYmxlQWRkcmVzcykpOworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVtYmVkZGVyTW92
ZUFuZENhbGwpCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZS5hZGRDYWxsZXIobG9ja2VyLCBs
aW5rQnVmZmVyLCAqY29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsKTsKICAgICAgICAgICAgIH0K
KwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsZWUgOiAqbV9jYWxsZWVzKQor
ICAgICAgICAgICAgY2FsbGVlLT5yZXBhdGNoQ2FsbGVycyhsb2NrZXIsICpjYWxsZWUpOwogICAg
IH0KICAgICAKICAgICBpZiAoIWlzQ29tcGxldGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmgKaW5kZXggODgzNjE3ZmM2N2ZmZWI4MDUxMjA4Yzc0MGUyZjFmOTE4
OGI0MTMwZC4uZTNlNmVlNjYwYmIxN2YzOWJiZGZhNGI0YTBiODRmMDVjMjUyYmIzZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBAIC01MSw3ICs1MSw3IEBAIHB1
YmxpYzoKICAgICBlbnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGlsZSwgVmFsaWRh
dGlvbiB9OwogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNl
IGN5Y2xlLgotICAgIEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFz
eW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93
V2FzbUV4Y2VwdGlvbik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgY29uc3QgVmVjdG9yPFJlZlB0
cjxCQlFDYWxsZWU+PiYsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxl
dGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+
JiYsIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYs
IFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBD
b21wbGV0aW9uVGFzayYmKTsKIApAQCAtOTgsMTIgKzk4LDYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gV1RGTW92ZShtX3dhc21Ub1dhc21FeGl0U3R1YnMpOwogICAgIH0KIAotICAgIFZlY3Rv
cjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4+IHRha2VXYXNtVG9XYXNtQ2FsbHNpdGVz
KCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygp
KTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxscyk7Ci0g
ICAgfQotCiAgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgewogICAgICAgICBJbml0aWFs
LAogICAgICAgICBWYWxpZGF0ZWQsCkBAIC0xMzksMTQgKzEzMywxMyBAQCBwcml2YXRlOgogICAg
IFZlY3Rvcjx1aW50OF90PiBtX3NvdXJjZTsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxM
aW5rSW5mb3M7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJU
YWc+PiBtX3dhc21Ub1dhc21FeGl0U3R1YnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgSGFzaFNldDx1
aW50MzJfdCwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1bmN0aW9uSW5k
aWNlczsKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5h
bEZ1bmN0aW9uczsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlPiwgdHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUlu
dGVybmFsRnVuY3Rpb25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGls
YXRpb25Db250ZXh0czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50Pj4g
bV90aWVyVXBDb3VudHM7CiAKLSAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+PiBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwogICAgIFN0cmVhbWluZ1BhcnNlciBtX3N0
cmVhbWluZ1BhcnNlcjsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+KiBtX2Nh
bGxlZXMgeyBudWxscHRyIH07CiAgICAgU3RhdGUgbV9zdGF0ZTsKIAogICAgIGNvbnN0IEFzeW5j
V29yayBtX2FzeW5jV29yazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJC
UVBsYW5JbmxpbmVzLmgKaW5kZXggODY2MDFhYzllZjNmYjM4NWUwNjAyOTAxYzFhMDRkNTMwYzU2
M2NhOC4uOWJiYzZmMzg5NzUyZDc3MDZlNGM5ZmIxNWM4NTk5ZjU0ZjI4MmY5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKQEAgLTM4LDIx
ICszOCw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiB2b2lkIEJCUVBsYW46OmluaXRp
YWxpemVDYWxsZWVzKGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogewogICAgIEFTU0VSVCghZmFp
bGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50
ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2lu
dGVybmFsRnVuY3Rpb25JbmRleCkgewotCi0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21G
dW5jdGlvbiA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxG
dW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0g
V2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRlclRv
V2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaFBvaW50ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9u
LCBDYWxsZWVCaXRzOjpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21J
bnRlcm5hbEZ1bmN0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwotICAgICAgICBz
aXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8V2FzbTo6
Q2FsbGVlPiB3YXNtRW50cnlwb2ludENhbGxlZSA9IFdhc206OkJCUUNhbGxlZTo6Y3JlYXRlKFdU
Rk1vdmUoZnVuY3Rpb24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92
ZShtX3RpZXJVcENvdW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBD
YWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7Ci0KLSAgICAg
ICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKLSAgICB9CisgICAg
Zm9yICh1bnNpZ25lZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9u
SW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFs
RnVuY3Rpb25JbmRleCkKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBt
X2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRl
eCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IGNlNjEwNzZkMWFjYjc5YWVhNGM1ZThiNzUy
YjE3OTQ4NWNhZjA4ZWUuLmY3ZDQ3YmE5MDM4NmE3MzExN2QxMjY0YjcwMTI0OGU1OWJjY2Q0NjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTQ3LDYg
KzQ3LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4s
IEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2kKICAgICBKSVQgaml0OwogCiAgICAgR1BS
UmVnIHNjcmF0Y2ggPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2go
MCk7CisgICAgR1BSUmVnIGNhbGxlZSA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xv
Z3VlU2NyYXRjaCgxKTsKICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7CiAgICAgQVNTRVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7CiAgICAgQVNT
RVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwpAQCAtNTcsMTMgKzU4
LDIwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBC
aW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpCiAgICAgaml0LmxvYWRXYXNtQ29udGV4dElu
c3RhbmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQgSW5zdGFuY2UqCiAgICAgLy8gR2V0IHRo
ZSBjYWxsZWUncyBXYXNtOjpJbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0J3MgaW5z
dGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24gSW5z
dGFuY2UuCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIElu
c3RhbmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKGltcG9ydEluZGV4KSksIGJhc2VNZW1vcnkp
OyAvLyBJbnN0YW5jZSouCi0gICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVs
aW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8g
aXQgYmVsb3cuCisgICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBh
bHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IGFuZCBjYWxsZWUgc28gd2UgY2FuIHRhaWwgY2Fs
bCB0byBpdCBiZWxvdy4KICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2Ny
YXRjaCwgSW5zdGFuY2U6Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oaW1wb3J0
SW5kZXgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdB
c1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKGltcG9y
dEluZGV4KSksIGNhbGxlZSk7CiAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShiYXNl
TWVtb3J5KTsKIAogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNo
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVnQXNTY3JhdGNo
KTsKICAgICBqaXQuc3RvcmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwogCisgICAgLy8g
U2V0IHRoZSBjYWxsZWUgc2xvdCBpbiB0aGUgY2FsbCBmcmFtZQorICAgIGppdC5sb2FkUHRyKGNh
bGxlZSwgY2FsbGVlKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGJlZW4gY2FsbGVk
LCBzbyBSZXR1cm5QQyBpcyBvbiB0aGUgc3RhY2ssIGJ1dCBoYXZlIG5vdCB5ZXQgcHVzaGVkIHRo
ZSBiYXNlIHBvaW50ZXIsCisgICAgLy8gc28gd2UgaGF2ZSB0byBzdWJ0cmFjdCB0aGUgc3BhY2Ug
Zm9yIENhbGxlckZyYW1lIGZyb20gdGhlIGNhbGxlZSBzbG90CisgICAgaml0LnN0b3JlUHRyKGNh
bGxlZSwgSklUOjpBZGRyZXNzKEpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSk7CisK
ICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXYXNtOjpJ
bnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdz
IGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJz
LgogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKaW5kZXgg
ZThkZGYxNTNkZDlkOTAyMjljNTEyODFlYzI4MTJmN2E1OTExNDFkNi4uOTMzMTRhYjY2Nzc4N2Y2
OTE5OWIxYTQyYzNkMjlkM2ZjNGI2Yzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNhbGxlZS5jcHAKQEAgLTMyLDE2ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi1DYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29t
cGlsYXRpb25Nb2RlLCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKK0NhbGxlZTo6Q2FsbGVlKFdh
c206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUpCiAgICAgOiBtX2NvbXBpbGF0aW9u
TW9kZShjb21waWxhdGlvbk1vZGUpCi0gICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBv
aW50KSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUo
dGhpcyk7CiB9CiAKLUNhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxh
dGlvbk1vZGUsIEVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFp
cjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorQ2FsbGVlOjpDYWxs
ZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgc2l6ZV90IGluZGV4LCBz
dGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKICAgICA6
IG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKLSAgICAsIG1fZW50cnlwb2ludChX
VEZNb3ZlKGVudHJ5cG9pbnQpKQogICAgICwgbV9pbmRleE9yTmFtZShpbmRleCwgV1RGTW92ZShu
YW1lKSkKIHsKICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUo
dGhpcyk7CkBAIC01Miw2ICs1MCw0OCBAQCBDYWxsZWU6On5DYWxsZWUoKQogICAgIENhbGxlZVJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwogfQogCisKK2lubGlu
ZSB2b2lkIHJlcGF0Y2hNb3ZlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4gbW92ZUxvY2F0aW9uLCBDYWxsZWUmIHRhcmdldENh
bGxlZSkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9u
LCBDYWxsZWVCaXRzOjpib3hXYXNtKCZ0YXJnZXRDYWxsZWUpKTsKK30KKworaW5saW5lIHZvaWQg
cmVwYXRjaENhbGwoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBDb2RlTG9jYXRpb25OZWFyQ2FsbDxX
YXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbiwgQ2FsbGVlJiB0YXJnZXRDYWxsZWUpCit7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4odGFyZ2V0Q2FsbGVlLmNvZGUoKSkpOworfQorCit2
b2lkIEJCUUNhbGxlZTo6YWRkQ2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZl
ciYgbGlua0J1ZmZlciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAgIGF1dG8gbW92
ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbC5t
b3ZlTG9jYXRpb24pOworICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsLmNhbGxMb2NhdGlvbik7CisgICAgbV9t
b3ZlTG9jYXRpb25zLmFwcGVuZChtb3ZlTG9jYXRpb24pOworICAgIG1fY2FsbExvY2F0aW9ucy5h
cHBlbmQoY2FsbExvY2F0aW9uKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OmFkZEFuZExpbmtDYWxs
ZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwg
VW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9p
bnQoKS5jb21waWxhdGlvbik7CisKKyAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGwubW92ZUxvY2F0aW9uKTsKKyAgICBhdXRv
IGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0
clRhZz4oY2FsbC5jYWxsTG9jYXRpb24pOworICAgIG1fbW92ZUxvY2F0aW9ucy5hcHBlbmQobW92
ZUxvY2F0aW9uKTsKKyAgICBtX2NhbGxMb2NhdGlvbnMuYXBwZW5kKGNhbGxMb2NhdGlvbik7CisK
KyAgICBDYWxsZWUmIHRhcmdldENhbGxlZSA9IG1fcmVwbGFjZW1lbnQgPyBzdGF0aWNfY2FzdDxD
YWxsZWUmPigqbV9yZXBsYWNlbWVudCkgOiAqdGhpczsKKyAgICByZXBhdGNoTW92ZShsb2NrZXIs
IG1vdmVMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKKyAgICByZXBhdGNoQ2FsbChsb2NrZXIsIGNh
bGxMb2NhdGlvbiwgdGFyZ2V0Q2FsbGVlKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OnJlcGF0Y2hD
YWxsZXJzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIENhbGxlZSYgdGFyZ2V0Q2FsbGVl
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldENhbGxlZS5lbnRyeXBvaW50KCkuY29tcGls
YXRpb24pOworICAgIGZvciAoYXV0byBtb3ZlTG9jYXRpb24gOiBtX21vdmVMb2NhdGlvbnMpCisg
ICAgICAgIHJlcGF0Y2hNb3ZlKGxvY2tlciwgbW92ZUxvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOwor
ICAgIGZvciAoYXV0byBjYWxsTG9jYXRpb24gOiBtX2NhbGxMb2NhdGlvbnMpCisgICAgICAgIHJl
cGF0Y2hDYWxsKGxvY2tlciwgY2FsbExvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOworfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IGY3ZWE0ZDA1YjhkMGE3
MWMxZWU2MmE1NmM0ZDM5ZGE1NDlmMDliN2IuLjk5MDlkYzQwOTU5OTE5YTVjNjlhZmJkZjI1Mjk1
ODI5M2ExMWM0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAg
LTQwLDEyICs0MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogY2xhc3Mg
Q2FsbGVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxlZT4gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxX
YXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5cG9pbnQu
Y29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7IH0KLQotICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1f
ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisgICAgRW50cnlwb2ludCYgZW50cnlw
b2ludCgpIHsgcmV0dXJuIG1fZW50cnlwb2ludDsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxXYXNtRW50cnlQdHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7IH0KICAgICBJbmRl
eE9yTmFtZSBpbmRleE9yTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhPck5hbWU7IH0KICAg
ICBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
aWxhdGlvbk1vZGU7IH0KIAorICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisK
ICAgICBzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4gcmFuZ2UoKSBjb25zdAogICAgIHsKICAgICAg
ICAgdm9pZCogc3RhcnQgPSBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKQEAgLTU2LDc4ICs1Nyw3MCBA
QCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q2FsbGVlKCk7CiAKIHBy
b3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25N
b2RlLCBXYXNtOjpFbnRyeXBvaW50JiYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShX
YXNtOjpDb21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiwgc2l6ZV90LCBzdGQ6OnBh
aXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENhbGxlZShDb21waWxhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENh
bGxlZShDb21waWxhdGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQ
dHI8TmFtZVNlY3Rpb24+PiYmKTsKIAogcHJpdmF0ZToKICAgICBDb21waWxhdGlvbk1vZGUgbV9j
b21waWxhdGlvbk1vZGU7Ci0gICAgV2FzbTo6RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CisgICAg
RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CiAgICAgSW5kZXhPck5hbWUgbV9pbmRleE9yTmFtZTsK
IH07CiAKIGNsYXNzIE9NR0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8T01HQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5
cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmIG5hbWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2Vk
Q2FsbHMpCisgICAgc3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShzaXplX3QgaW5kZXgsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2lu
dCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0NhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSkp
OwogICAgIH0KIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgd2FzbVRvV2Fz
bUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQotCiBwcml2YXRl
OgotICAgIE9NR0NhbGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGlu
ZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAgICAg
OiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZNb3ZlKGVudHJ5cG9p
bnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3dhc21Ub1dhc21DYWxsc2l0
ZXMoV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICBPTUdDYWxsZWUoc2l6ZV90IGluZGV4LCBz
dGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICAg
ICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1l
KSkKICAgICB7CiAgICAgfQotCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IG1f
d2FzbVRvV2FzbUNhbGxzaXRlczsKIH07CiAKIGNsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVlIGZp
bmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPTUdGb3JPU1JF
bnRyeUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3Qg
aW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1l
LCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCisgICAgc3Rh
dGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKHNpemVfdCBpbmRleCwgc3RkOjpw
YWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdURk1vdmUoZW50
cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCBsb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUoaW5kZXgsIFdURk1vdmUobmFtZSksIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCkpOwogICAgIH0KIAogICAgIHVuc2ln
bmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemU7IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2xvb3BJbmRleDsgfQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
d2FzbVRvV2FzbUNhbGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQog
CiBwcml2YXRlOgotICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBl
bnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5h
bWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1
aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlu
a2VkQ2FsbHMpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9y
T1NSRW50cnlNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSkK
LSAgICAgICAgLCBtX3dhc21Ub1dhc21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkK
KyAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBO
YW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgpCisgICAgICAgIDogQ2FsbGVlKENvbXBp
bGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKICAg
ICAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSkKICAgICAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAgICAgewogICAgIH0KIAot
ICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7
CiAgICAgdW5zaWduZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIHVpbnQzMl90
IG1fbG9vcEluZGV4OwogfTsKIAogY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlIGZpbmFs
IDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICBz
dGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3Zl
KGVudHJ5cG9pbnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50
cnlwb2ludENhbGxlZSgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotICAgICAgICA6IENhbGxl
ZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUsIFdURk1vdmUo
ZW50cnlwb2ludCkpCisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKCkKKyAgICAgICAgOiBD
YWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlKQogICAgIHsKICAg
ICB9CiB9OwogCiBjbGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBl
bnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5h
bWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVw
Q291bnQpCisgICAgc3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShzaXplX3QgaW5kZXgsIHN0
ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVu
aXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdU
Rk1vdmUobmFtZSksIFdURk1vdmUodGllclVwQ291bnQpKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEJCUUNhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBD
b3VudCkpKTsKICAgICB9CiAKICAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxs
ZWUoKSB7IHJldHVybiBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0xNDcsMTMgKzE0MCwy
MCBAQCBwdWJsaWM6CiAKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7IHJldHVybiBt
X3RpZXJVcENvdW50LmdldCgpOyB9CiAKKyAgICB2b2lkIGFkZENhbGxlcihjb25zdCBBYnN0cmFj
dExvY2tlciYsIExpbmtCdWZmZXImLCBVbmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAgICB2b2lkIGFk
ZEFuZExpbmtDYWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5rQnVmZmVyJiwgVW5saW5r
ZWRNb3ZlQW5kQ2FsbCk7CisKKyAgICB2b2lkIHJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgQ2FsbGVlJik7CisKIHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5
cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+
JiYgdGllclVwQ291bnQpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6
QkJRTW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAg
QkJRQ2FsbGVlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFt
ZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBD
b3VudCkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBpbmRleCwg
V1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3RpZXJVcENvdW50KFdURk1vdmUodGllclVwQ291
bnQpKQogICAgIHsKICAgICB9CiAKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRy
PFdhc21FbnRyeVB0clRhZz4+IG1fbW92ZUxvY2F0aW9uczsKKyAgICBWZWN0b3I8Q29kZUxvY2F0
aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPj4gbV9jYWxsTG9jYXRpb25zOwogICAgIFJlZlB0
cjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKICAgICBSZWZQdHI8T01H
Q2FsbGVlPiBtX3JlcGxhY2VtZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4g
bV90aWVyVXBDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxpbmdDb252ZW50aW9uLmgKaW5kZXggYjQ0MmI2MTYxYmY5MjMzNzU4MTk3NTgxM2ZmMzgwNmE3
MzFhOTIyNi4uNmZhNDM2OWNjZGNhODhlNGI3MGVkNjQ2OWJiNzYzOTgxNGY4ZTg0MSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgK
QEAgLTg4LDM0ICs4OCwxNiBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgc3RhdGljIHVuc2ln
bmVkIGhlYWRlclNpemVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQotICAgIHZvaWQg
c2V0dXBGcmFtZUluUHJvbG9ndWUoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0
clRhZz4qIGNhbGxlZU1vdmVMb2NhdGlvbiwgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdp
biBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB2b2lkIHNldHVwRnJh
bWVJblByb2xvZ3VlKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBCMzo6
QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2Ug
cmVseSBvbiB0aGlzIGhlcmUgZm9yIG5vdy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldl
IHJlbHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAKLSAgICAgICAgQjM6OlBhdGNocG9pbnRW
YWx1ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9p
bnRWYWx1ZT4ocHJvYywgQjM6OkludDY0LCBvcmlnaW4pOwotICAgICAgICBnZXRDYWxsZWVQYXRj
aHBvaW50LT5yZXN1bHRDb25zdHJhaW50cyA9IHsgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIg
fTsKLSAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpu
b25lKCk7Ci0gICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBwYXJh
bXNbMF0uZ3ByKCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0
ciBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihudWxscHRyKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soW2NhbGxlZU1vdmVMb2NhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQ
b2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50
ZXIsIG9yaWdpbik7Ci0gICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUgPSBibG9jay0+
YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6
Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKLSAgICAgICAgICAgIGdldENh
bGxlZVBhdGNocG9pbnQsCi0gICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
cHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ2FsbGVlKSk7Ci0K
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIHplcm8gaW50byB0
aGUgQ29kZUJsb2NrKiBzcG90IGluIHRoZSBjYWxsIGZyYW1lLAogICAgICAgICAvLyBidXQgdGhl
cmUgYXJlIHBsYWNlcyB0aGF0IGludGVycHJldCBub24tbnVsbCBDb2RlQmxvY2sgc2xvdCB0byBt
ZWFuIGEgdmFsaWQgQ29kZUJsb2NrLgogICAgICAgICAvLyBXaGVuIGRvaW5nIHVud2luZGluZywg
d2UnbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZW50aXJlIHJ1bnRpbWUgaXMgT0sgd2l0aCBh
IG5vbi1udWxsCiAgICAgICAgIC8vIENvZGVCbG9jayBub3QgaW1wbHlpbmcgdGhhdCB0aGUgQ29k
ZUJsb2NrIGlzIHZhbGlkLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7
CiAgICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDb2RlQmxvY2sgPSBibG9jay0+YXBwZW5kTmV3
PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
ICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9y
eVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKICAgICAgICAgICAgIGJsb2NrLT5hcHBl
bmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCAwKSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggZDRhOWNkNjc3MTAyYjU4ZTRm
YzU5ZTFhMjBhZTU2YjhlMjFjNzQzMC4uN2Q1NTQ3NmQyNmMwZGQ3MGFjZjRmNWEwMjMxMzNhMTg5
MTM0ZGQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVC
bG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5j
cHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJXYXNtQkJRUGxhbklubGluZXMuaCIKLSNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVk
ZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBAIC00Nyw3ICs0
NiwxNSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2Rl
IG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bAogewogICAgIFJlZlB0cjxDb2RlQmxvY2s+
IHByb3RlY3RlZFRoaXMgPSB0aGlzOwogCi0gICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQ
bGFuKGNvbnRleHQsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29t
cGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgbV9jYWxsZWVz
LnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICBtX2JveGVkQ2FsbGVlcy5yZXNpemUobV9jYWxs
ZWVDb3VudCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fY2FsbGVlQ291bnQ7IGkr
KykgeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkgKyBpOworICAgICAgICBtX2NhbGxlZXNbaV0gPSBC
QlFDYWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1vZHVsZUluZm9ybWF0aW9uLm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgbWFrZVVuaXF1ZTxUaWVyVXBDb3Vu
dD4oKSk7CisgICAgICAgIG1fYm94ZWRDYWxsZWVzW2ldID0gQ2FsbGVlQml0czo6Ym94V2FzbSht
X2NhbGxlZXNbaV0uZ2V0KCkpOworICAgIH0KKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcg
QkJRUGxhbihjb250ZXh0LCBtX2NhbGxlZXMsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBC
QlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7
CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgaWYgKG1f
cGxhbi0+ZmFpbGVkKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5l
cnJvck1lc3NhZ2UoKTsKQEAgLTU2LDIxICs2MywxOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhD
b250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1
bAogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBldmVudHVhbGx5IGNv
bGxlY3QgdGhlIEJCUSBjb2RlLgotICAgICAgICBtX2NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291
bnQpOwogICAgICAgICBtX29wdGltaXplZENhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOwog
ICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50cy5yZXNpemUobV9jYWxsZWVDb3Vu
dCk7CiAKLSAgICAgICAgbV9wbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNh
bGxlZUluZGV4LCBSZWZQdHI8V2FzbTo6Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZSwgUmVmPFdhc206OkNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICBt
X3BsYW4tPmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0
cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7
CiAgICAgICAgICAgICBpZiAoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAgICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2FsbGVlSW5kZXgsIFdU
Rk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0gPSBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2Fs
bGVlKTsKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUlu
ZGV4XSA9IG1fY2FsbGVlc1tjYWxsZWVJbmRleF0tPmVudHJ5cG9pbnQoKTsKKyAgICAgICAgICAg
IG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1fY2FsbGVlc1tj
YWxsZWVJbmRleF0tPmNvZGUoKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgbV93YXNtVG9XYXNt
RXhpdFN0dWJzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOwotICAgICAgICBt
X3dhc21Ub1dhc21DYWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7
CiAKICAgICAgICAgc2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIH0pLCBXVEZNb3ZlKGNy
ZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCmluZGV4IGRlYTJmZmEzMTgxMjAzZjc4YWFh
NjFjNzBiZjI5NzFiYzAzMjc5ZWQuLmMxMDc3ZDVkN2Y3NjljMzk3ZmY2ZWNlYTJlODk5ZjNjMzQy
NGM5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxv
Y2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAg
LTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAi
V2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8
d3RmL0xvY2suaD4KQEAgLTQwLDkgKzQxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFj
ZSBXYXNtIHsKIAotY2xhc3MgQ2FsbGVlOwotc3RydWN0IENvbnRleHQ7CiBjbGFzcyBCQlFQbGFu
Oworc3RydWN0IENvbnRleHQ7CiBjbGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVsZUluZm9ybWF0
aW9uOwogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7CkBAIC03Niw3ICs3Niw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIFRoZXNlIHR3byBjYWxsZWUgZ2V0dGVycyBhcmUgb25seSB2YWxpZCBv
bmNlIHRoZSBjYWxsZWVzIGhhdmUgYmVlbiBwb3B1bGF0ZWQuCiAKLSAgICBDYWxsZWUmIGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlKQorICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSYgZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4
U3BhY2UpCiAgICAgewogICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwpA
QCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZSk7
CiAgICAgICAgIHJldHVybiAqY2FsbGVlOwogICAgIH0KKwogICAgIENhbGxlZSYgd2FzbUVudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKQEAgLTk2LDcgKzk3LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7
CiAgICAgfQogCi0gICAgQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgQkJRQ2FsbGVlJiB3YXNtQkJRQ2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAg
ICAgewogICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwpAQCAtMTExLDYg
KzExMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmbV93YXNtSW5kaXJlY3RDYWxsRW50
cnlQb2ludHNbY2FsbGVlSW5kZXhdOwogICAgIH0KIAorICAgIHZvaWQqKiBib3hlZENhbGxlZUxv
YWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49
IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0g
ZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOworICAgICAgICByZXR1
cm4gJm1fYm94ZWRDYWxsZWVzW2NhbGxlZUluZGV4XTsKKyAgICB9CisKICAgICBib29sIGlzU2Fm
ZVRvUnVuKE1lbW9yeU1vZGUpOwogCiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlOyB9CkBAIC0xMjQsMTEgKzEzMiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0
Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAg
TWVtb3J5TW9kZSBtX21vZGU7Ci0gICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7
Ci0gICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX29wdGltaXplZENhbGxlZXM7Ci0gICAgSGFz
aE1hcDx1aW50MzJfdCwgUmVmUHRyPENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQz
Ml90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+
IG1fZW1iZWRkZXJDYWxsZWVzOworICAgIFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4gbV9jYWxs
ZWVzOworICAgIFZlY3RvcjxSZWZQdHI8T01HQ2FsbGVlPj4gbV9vcHRpbWl6ZWRDYWxsZWVzOwor
ICAgIFZlY3Rvcjx2b2lkKj4gbV9ib3hlZENhbGxlZXM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwg
UmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVp
bnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJf
dD4+IG1fZW1iZWRkZXJDYWxsZWVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7Ci0gICAgVmVj
dG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNtQ2FsbHNpdGVz
OwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93
YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CiAgICAgc3Rk
OjphdG9taWM8Ym9vbD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKaW5kZXggYTIzNzlmZDU4OWM4OWRmNjM1
N2U2ZTQ0MWJlZDJhNTE4NzM5Y2EzZS4uYzc4YjQ0M2M1OTFlODcwMzRiNDE5NWVjYTAyNzI4ZGVm
ODBjYzg5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVk
ZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKQEAg
LTQxLDYgKzQxLDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1
Y3QgQ29tcGlsYXRpb25Db250ZXh0OworY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwog
Y2xhc3MgSW5zdGFuY2U7CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbjsKIHN0cnVjdCBNb2R1bGVJ
bmZvcm1hdGlvbjsKQEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgU2lnbmF0dXJlOwogc3RydWN0IFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw7CiAKIC8vIENyZWF0ZSB3cmFwcGVyIGNvZGUgdG8gY2FsbCBm
cm9tIGVtYmVkZGVyIC0+IFdlYkFzc2VtYmx5LgotdXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVy
ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4oQ29tcGls
YXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCk+
OwordXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKENvbXBp
bGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIEVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZSosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSk+OwogCiAvLyBDYWxsZWQg
YXMgc29vbiBhcyBhbiBleGNlcHRpb24gaXMgZGV0ZWN0ZWQuIFRoZSByZXR1cm4gdmFsdWUgaXMg
dGhlIFBDIHRvIGNvbnRpbnVlIGF0LgogdXNpbmcgVGhyb3dXYXNtRXhjZXB0aW9uID0gdm9pZCog
KCopKEV4ZWNTdGF0ZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMDY2OWJiNDA3ZTI5NTkzNjIyZmNj
YThlNTE5MTE5NWRkOWI0NmYzYi4uZWEwZTBiNjU4ZTllNDU1ZTliMDFjZGFlMmI0Nzk2YjYyMmI4
MGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjg3LDEw
ICsyODcsMTUgQEAgaW5saW5lIGJvb2wgaXNWYWxpZE5hbWVUeXBlKEludCB2YWwpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitzdHJ1Y3QgVW5saW5rZWRNb3ZlQW5kQ2FsbCB7CisgICAgTWFjcm9B
c3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRpb247CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbExvY2F0aW9uOworfTsKKwogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGwg
ewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBDb2RlTG9jYXRpb25O
ZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbjsKLSAgICBzaXplX3QgZnVuY3Rp
b25JbmRleFNwYWNlOworICAgIHNpemVfdCB0YXJnZXRGdW5jdGlvbkluZGV4U3BhY2U7CisgICAg
VW5saW5rZWRNb3ZlQW5kQ2FsbCB1bmxpbmtlZE1vdmVBbmRDYWxsOwogfTsKIAogc3RydWN0IEVu
dHJ5cG9pbnQgewpAQCAtMzEzLDEwICszMTgsMTIgQEAgc3RydWN0IFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24gewogICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+KjsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2ln
bmF0dXJlSW5kZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgZW50cnlwb2ludExvYWRMb2NhdGlvbik7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgYm94ZWRD
YWxsZWVMb2FkTG9jYXRpb24pOyB9CiAKICAgICAvLyBGSVhNRTogUGFjayBzaWduYXR1cmUgaW5k
ZXggYW5kIGNvZGUgcG9pbnRlciBpbnRvIG9uZSA2NC1iaXQgdmFsdWUuIFNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMT4uCiAgICAgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggeyBTaWduYXR1cmU6OmludmFsaWRJbmRleCB9OwogICAgIExvYWRM
b2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uOworICAgIHZvaWQqKiBib3hlZENhbGxlZUxv
YWRMb2NhdGlvbjsKIH07CiB1c2luZyBGdW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0b3I8V2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUluc3RhbmNlLmgKaW5kZXggZjRmMzUwODdlMjU2ZDA5MmNlNzRiMjFiODQ0MGE5MzcyNWQxNjY4
NS4uN2UyMTI0Zjc2YzYzYmY3NWUyZGIxMjM0OWQ5NTBiMGU5MzY4NDBjYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJs
aWM6CiAgICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB7IG51bGxwdHIgfTsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViOwogICAgICAg
ICB2b2lkKiBpbXBvcnRGdW5jdGlvbiB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcs
IHRoaXMgaXMgYSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+LgorICAgICAgICB2b2lkKiogYm94ZWRD
YWxsZWVMb2FkTG9jYXRpb24geyBudWxscHRyIH07CiAgICAgfTsKICAgICB1bnNpZ25lZCBudW1J
bXBvcnRGdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX251bUltcG9ydEZ1bmN0aW9uczsgfQog
ICAgIEltcG9ydEZ1bmN0aW9uSW5mbyogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVfdCBpbXBvcnRG
dW5jdGlvbk51bSkKQEAgLTE0MSw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlv
bk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVv
ZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5m
bywgd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZldhc21Ub0VtYmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJu
IG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rp
b25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdhc21Ub0VtYmVk
ZGVyU3R1Yik7IH0KICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6
ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1
bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SW1wb3J0RnVuY3Rpb25JbmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBzdGF0aWMgc2l6ZV90
IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVt
KSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKElt
cG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCBi
b3hlZENhbGxlZUxvYWRMb2NhdGlvbik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBp
bXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxUKj4oJmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlvbk51bSktPmlt
cG9ydEZ1bmN0aW9uKTsgfQogCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoSW1wb3J0RnVuY3Rp
b25JbmZvKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2NF90KT4oc2l6
ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykpLCAiV2UgcmVseSBvbiB0aGlzIGZvciB0aGUgYWxpZ25t
ZW50IHRvIGJlIGNvcnJlY3QiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKaW5kZXggYTBiYjZjZjZkOTAzMDY3NDQzNTZk
Mjg4ZWFiMGMyYjUyNTIwNTYyYS4uY2ZhZWFmMmViYzBiMTY0M2NlM2RhNmIxOGYxMGU1MGU3NzBi
MGE1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9T
UkVudHJ5UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHAKQEAgLTU0LDE1ICs1NCwxNSBAQCBuYW1lc3BhY2UgV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKIH0KIAotT01HRm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCog
Y29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYgY2FsbGVlLCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUgbW9k
ZSwgQ29tcGxldGlvblRhc2smJiB0YXNrKQorT01HRm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JF
bnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIFJlZjxCQlFD
YWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5k
ZXgsIENvZGVCbG9jayYgY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBC
YXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVs
ZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9tb2R1bGUo
V1RGTW92ZShtb2R1bGUpKQotICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tG
b3IobW9kZSkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2NhbGxlZShX
VEZNb3ZlKGNhbGxlZSkpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKICAg
ICAsIG1fbG9vcEluZGV4KGxvb3BJbmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUpOworICAgIHNl
dE1vZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJs
ZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9j
a0ZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50
ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZvciAiLCBmdW5j
dGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsK
QEAgLTgxLDQ1ICs4MSwzMyBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxh
dGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0
aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAot
ICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENv
bXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUgPSAwOwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRD
b21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwg
Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9s
b29wSW5kZXgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21w
aWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fY29kZUJsb2NrLT5tX3dhc21Ub1dh
c21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRp
b24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1f
ZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFu
ZENvbXBpbGVSZXN1bHQpKSB7CiAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0
cmluZyhwYXJzZUFuZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5nIHRvIHRpZXIg
dXAgIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgRW50cnlwb2ludCBvbWdFbnRyeXBvaW50OwogICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxv
Y2F0ZSgpKSkgewogICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJp
bmcoIk91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0
IGluZGV4ICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVl
PEIzOjpDb21waWxhdGlvbj4oCisgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUg
PSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCk7CisgICAgY2FsbGVlLT5lbnRyeXBv
aW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoY29udGV4dC5jYWxsZWVTYXZlUmVn
aXN0ZXJzKTsKKyAgICBjYWxsZWUtPmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9IG1ha2VVbmlx
dWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBC
M0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25b
JWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2Up
KSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9p
bnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMg
PSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxl
ZVNhdmVSZWdpc3RlcnMpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0
clRhZz4gZW50cnlwb2ludDsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1
bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+
IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBv
aW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlv
bi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1f
bG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKICAgICB7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+
Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwot
ICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7Ci0KICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgZm9yIChh
dXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAg
ICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5m
b3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAgICAgICAgZW50cnlw
b2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2VdLmNvZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRy
eXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdh
c21FbnRyeVB0clRhZz4oKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRy
VGFnPihlbnRyeXBvaW50KSk7CisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0
Z29pbmdDYWxscykgeworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxsZWUgPSBtX2Nv
ZGVCbG9jay0+d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC50YXJnZXRG
dW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtD
YWxsZXIobG9ja2VyLCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwogICAg
ICAgICB9CiAgICAgfQogICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwpA
QCAtMTMyLDE5ICsxMjAsNiBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxh
dGlvbkVmZm9ydCkKICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5vc3JFbnRy
eVRyaWdnZXJzKClbbV9sb29wSW5kZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb246OkNv
bXBpbGF0aW9uRG9uZTsKICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5tX2Nv
bXBpbGF0aW9uU3RhdHVzRm9yT01HRm9yT1NSRW50cnkgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRp
b25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAgICB9Ci0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7Ci0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgT01HIGNhbGxlZSBp
cyBhZGRlZCB3aGlsZSB3ZSByZWxlYXNlIG1fY29kZUJsb2NrLT5sb2NrLgotICAgICAgICAvLyBV
bnRpbCB3ZSBhZGQgT01HRm9yT1NSRW50cnkgY2FsbGVlIHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50
cnlDYWxsZWUsIHRoaXMgbmV3IE9NRyBmdW5jdGlvbiBsaW5raW5nIGRvZXMgbm90IGhhcHBlbiBm
b3IgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUuCi0gICAgICAgIC8vIFdlIHJlLWxpbmsgdGhp
cyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgYWdhaW4gbm90IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0g
ICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRy
eXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1
bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAg
ICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2Nh
bGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZy
b21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQo
KS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwotICAgICAgICB9CiAgICAgfQogICAgIGRh
dGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlz
aGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291
bnQgYXQ6ICIsIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0
ZShob2xkTG9jayhtX2xvY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaAppbmRleCAwMTUxZGE2NjVhOTY4MzI4Zjk1MDM4ZjVi
NTBjMDg1NzYxZjA1ZGU3Li5kNTZlYTQyMTdkZDcxMGQ1NzUxNjQ1YTliM2ViMDE4YzQzNTBkMGRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50
cnlQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVu
dHJ5UGxhbi5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29sIG11bHRpVGhyZWFk
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gTm90ZTogQ29t
cGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVy
d2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zvck9TUkVudHJ5
UGxhbihDb250ZXh0KiwgUmVmPE1vZHVsZT4mJiwgUmVmPEJCUUNhbGxlZT4mJiwgdWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9u
VGFzayYmKTsKKyAgICBPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYs
IFJlZjxCQlFDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJ
bmRleCwgQ29kZUJsb2NrJiwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8g
Rm9yIHNvbWUgcmVhc29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNz
ZXMuLi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCBh
ODA1ZDAxNmZiOTkyODY0YzdhMDNjODI2NmNjNWQ0ZmI5ODY1YTY5Li5lMGIxMDEwMTRjYzNmYmUx
NGRiM2M3MGIyYTA1ZGNkYmM1OTFmMTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uY3BwCkBAIC01NCwxMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFu
SW50ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdQ
bGFuOjpPTUdQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFz
aykKK09NR1BsYW46Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1
bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2NrLCBDb21wbGV0
aW9uVGFzayYmIHRhc2spCiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxN
b2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3Zl
KHRhc2spKQogICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwgbV9jb2RlQmxv
Y2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKLSAgICBzZXRN
b2RlKG1vZGUpOworICAgIHNldE1vZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0g
bV9tb2R1bGUtPmNvZGVCbG9ja0ZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5JZihXYXNtT01H
UGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgT01HIHBsYW4gZm9yICIsIGZ1bmN0aW9u
SW5kZXgsICIgb2YgbW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOwpAQCAt
NzksNTcgKzc5LDQ4IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAg
ICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBz
aWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIHVuc2lnbmVkIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7Ci0gICAg
YXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVu
Y3Rpb24sIHNpZ25hdHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9N
R01vZGUsIG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CisgICAgYXV0byBwYXJzZUFuZENv
bXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVy
ZSwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1v
ZGU6Ok9NR01vZGUsIG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CiAKICAgICBpZiAoVU5M
SUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgZmFpbChob2xkTG9jayht
X2xvY2spLCBtYWtlU3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAid2hlbiB0
cnlpbmcgdG8gdGllciB1cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFbnRyeXBvaW50IG9tZ0VudHJ5cG9pbnQ7CiAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxs
cHRyLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpKSB7CiAgICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9s
b2NrKSwgbWFrZVN0cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxlIHRpZXJpbmcg
dXAgZnVuY3Rpb24gYXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgb21nRW50cnlwb2ludC5jb21waWxhdGlv
biA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICBSZWY8T01HQ2FsbGVlPiBvbWdD
YWxsZWUgPSBPTUdDYWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5m
b3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CisgICAgb21n
Q2FsbGVlLT5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxh
dGlvbj4oCiAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0
clRhZywgIldlYkFzc2VtYmx5IE9NRyBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rp
b25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmco
SW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1l
U2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAg
ICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAgIG9t
Z0VudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxl
UmVzdWx0LnZhbHVlKCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgb21n
Q2FsbGVlLT5lbnRyeXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoY29udGV4
dC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgQkJRQ2FsbGVlJiBiYnFDYWxsZWUgPSAqbV9j
b2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdOwogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7
Ci0gICAgICAgIFJlZjxPTUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1v
dmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2Vk
Q2FsbHMpKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhcnNlQW5k
Q29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJv
eFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb3B0
aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsKLSAgICAgICAgZW50cnlwb2ludCA9IGNh
bGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHdl
IHB1Ymxpc2ggb3VyIGNhbGxlZSBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGxpbmsgb3VyIGNhbGxz
aXRlcy4gVGhpcyBlbmFibGVzIHVzIHRvIGVuc3VyZSB3ZQogICAgICAgICAvLyBhbHdheXMgY2Fs
bCB0aGUgZmFzdGVzdCBjb2RlLiBBbnkgZnVuY3Rpb24gbGlua2VkIGFmdGVyIHVzIHdpbGwgc2Vl
IG91ciBuZXcgY29kZSBhbmQgdGhlIG5ldyBjYWxsc2l0ZXMsIHdoaWNoIHRoZXkKICAgICAgICAg
Ly8gd2lsbCB1cGRhdGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBi
ZWZvcmUgd2UgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJl
bGVhc2UKICAgICAgICAgLy8gdGhlIGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8gYmUgcHVibGlz
aGVkIHRvby4KICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7
Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4
XSA9IGNhbGxlZS5jb3B5UmVmKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX29wdGltaXplZENh
bGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IG9tZ0NhbGxlZS5jb3B5UmVmKCk7CiAgICAgICAgIHsK
LSAgICAgICAgICAgIEJCUUNhbGxlZSYgYmJxQ2FsbGVlID0gKnN0YXRpY19jYXN0PEJCUUNhbGxl
ZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSk7CiAgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJicUNhbGxlZS50aWVyVXBDb3VudCgpLT5n
ZXRMb2NrKCkpOwotICAgICAgICAgICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5j
b3B5UmVmKCkpOworICAgICAgICAgICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50KG9tZ0NhbGxl
ZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAgYmJxQ2FsbGVlLnRpZXJVcENvdW50KCktPm1fY29t
cGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNv
bXBpbGVkOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rp
b25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rp
b25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93
YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53
YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworCisg
ICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAg
ICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxsZWUgPSBtX2NvZGVCbG9jay0+d2FzbUJCUUNhbGxl
ZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UpOwor
ICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtDYWxsZXIoaG9sZGVyLCBsaW5rQnVm
ZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0x
MzksMzAgKzEzMCwxNCBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAg
ICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CiAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29v
ZCB0byBiZSBwYXJhbm9pZC4KIAotICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxF
bnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKKyAgICBtX2NvZGVCbG9j
ay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IG9tZ0Nh
bGxlZS0+Y29kZSgpOworICAgIG1fY29kZUJsb2NrLT5tX2JveGVkQ2FsbGVlc1ttX2Z1bmN0aW9u
SW5kZXhdID0gQ2FsbGVlQml0czo6Ym94V2FzbShvbWdDYWxsZWUucHRyKCkpOwogICAgIHsKICAg
ICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0KLSAgICAgICAg
YXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgY2FsbHNpdGVzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0
ZXMpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2
ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNh
bGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBh
dDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8g
IiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbHMobV9jb2RlQmxvY2stPm1f
d2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7Ci0gICAgICAgICAgICBpZiAoT01HQ2FsbGVlKiByZXBs
YWNlbWVudENhbGxlZSA9IHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2Nh
bGxlZXNbaV0uZ2V0KCkpLT5yZXBsYWNlbWVudCgpKQotICAgICAgICAgICAgICAgIHJlcGF0Y2hD
YWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAg
ICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBzdGF0aWNfY2Fz
dDxCQlFDYWxsZWUqPihtX2NvZGVCbG9jay0+bV9jYWxsZWVzW2ldLmdldCgpKS0+b3NyRW50cnlD
YWxsZWUoKSkKLSAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndh
c21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgYmJxQ2FsbGVlLnJlcGF0
Y2hDYWxsZXJzKGhvbGRlciwgb21nQ2FsbGVlLmdldCgpKTsKICAgICB9CiAKLSAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVu
Y3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIHN0YXRpY19jYXN0PEJCUUNh
bGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSktPnRp
ZXJVcENvdW50KCktPmNvdW50KCkpOworICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJu
YWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUcgIiwgbV9mdW5jdGlvbkluZGV4LCAiIHdpdGggdGll
ciB1cCBjb3VudCBhdDogIiwgbV9jb2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhd
LmdldCgpLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0ZShob2xkTG9jayht
X2xvY2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR1BsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKaW5k
ZXggY2I3OWI0MzlkNGU5OTRkODcwZTlkYzkwODljNDNhN2Y1ODYwMjU2Ni4uZTY4OWQ1NjY1N2E4
ZDFiYjliZGU4MmVlMDUxNTM1NDg3MGJlODMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBib29sIG11bHRp
VGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gTm90
ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFu
IG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR1BsYW4o
Q29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1v
ZGUsIENvbXBsZXRpb25UYXNrJiYpOworICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+
JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYsIENvbXBsZXRpb25UYXNrJiYp
OwogCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3Qg
ZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggMWFkZThhOGU5NDQ5ZGE4YjNmMDZjZDNkNjk0MjU3
OTJlNmM1ZGY5YS4uYTFlNTdkNDMzMDBkZDM4YmRjM2YxOWExZWY1MzhhNDYwYjFhOWQ4ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtODIs
NyArODIsNyBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKFRpZXJV
cENvdW50JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFjZQogICAgIGlmIChjb21waWxlKSB7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgInRyaWdnZXJPTUdSZXBs
YWNlbWVudCBmb3IgIiwgZnVuY3Rpb25JbmRleCk7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY29t
cGlsZSB0aGUgY29kZS4KLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9N
R1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1v
ZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFs
aXplKCkpKTsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4o
aW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgp
KSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBQbGFuOjpkb250RmluYWxpemUoKSkpOwogICAg
ICAgICBlbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAgICAgICBp
ZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCiAgICAgICAgICAgICBw
bGFuLT53YWl0Rm9yQ29tcGxldGlvbigpOwpAQCAtMTk3LDkgKzE5NywxNCBAQCBzdGF0aWMgdm9p
ZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQs
IEJCUUNhbGxlZSYgYwogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuCiAj
ZW5kaWYKLSAgICAvLyA0LiBDb25maWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRvIGp1bXAgdG8g
T1NSIGVudHJ5IGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rpb24uCisKKyAg
ICAvLyA0LiBVcGRhdGUgdGhlIGNhbGxlZSBzbG90IGluIHRoZSBjYWxsIGZyYW1lIHRvIHRoZSBP
U1IgZW50cnkgY2FsbGVlLgorICAgIHZvaWQqKiBzdGFja1BvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8
dm9pZCoqPihjb250ZXh0LnNwKCkpOworICAgICooc3RhY2tQb2ludGVyICsgQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlIC0gMSkgPSBDYWxsZWVCaXRzOjpib3hXYXNtKCZvc3JFbnRyeUNhbGxlZSk7CisK
KyAgICAvLyA1LiBDb25maWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRvIGp1bXAgdG8gT1NSIGVu
dHJ5IGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rpb24uCiAgICAgY29udGV4
dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDxVQ1BVUmVnaXN0ZXI+
KGJ1ZmZlcik7Ci0gICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSA9IGJpdHdp
c2VfY2FzdDxVQ1BVUmVnaXN0ZXI+KG9zckVudHJ5Q2FsbGVlLmVudHJ5cG9pbnQoKS5leGVjdXRh
YmxlQWRkcmVzczw+KCkpOworICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMSkg
PSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihvc3JFbnRyeUNhbGxlZS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3M8PigpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRy
eU5vdyhQcm9iZTo6Q29udGV4dCYgY29udGV4dCkKQEAgLTM2NSw3ICszNzAsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KQog
CiAgICAgaWYgKHN0YXJ0T1NSRW50cnlDb21waWxhdGlvbikgewogICAgICAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HT1NSIGZvciAiLCBmdW5jdGlvbklu
ZGV4KTsKLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVu
dHJ5UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+
bW9kdWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4LCBs
b29wSW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAg
ICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeVBsYW4oaW5z
dGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwg
UmVmPFdhc206OkJCUUNhbGxlZT4oY2FsbGVlKSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4LCBj
b2RlQmxvY2ssIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdvcmtsaXN0
KCkuZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9u
czo6dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0
aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKaW5kZXgg
NzM1MjIwMjg5MzdjNmRhYzFmYzQ3M2M3ZTRjZGM2NDk1OGNlOGVhNi4uZjEzZjY0NTAyMGIyZjc2
MGIyNGVjY2JmNzNhMGM3YjNjZDlkNGRkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtLmNwcApAQCAtNDIsMjEgKzQyLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVh
dGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQordm9pZCBjcmVhdGVK
U1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqIHNlbGYs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUpCiB7CiAgICAg
Q0NhbGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2lu
dEpJVDsKIAotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigp
OwogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogCiAgICAgLy8gRklYTUUgU3RvcCB1
c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjUzMjEKICAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgw
KSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24g
PSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRy
KSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxl
ZU1vdmVMb2NhdGlvbjsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbGVlTW92ZUxvY2F0aW9uKTsKLSAgICB9KTsKKyAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKENhbGxlZUJpdHM6OmJveFdh
c20oc2VsZikpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKIAogICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBp
bm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlubmVk
UmVncy50b1NhdmUobW9kZSk7CkBAIC02OSw3ICs2Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21wCiAjZW5kaWYKIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwo
dG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRl
ckJhc2VkKTsKLSAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJl
Z2lzdGVyc1RvU3BpbGw7CisgICAgc2VsZi0+ZW50cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3Rl
cnMgPSByZWdpc3RlcnNUb1NwaWxsOwogCiAgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSBy
ZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7CiAgICAgdG90YWxGcmFtZVNp
emUgKz0gV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwpAQCAtMTI1
LDkgKzExOSwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNU
b1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgICAgICB9CiAKICAgICAg
ICAgZW1pdFRocm93V2FzbVRvSlNFeGNlcHRpb24oaml0LCBHUFJJbmZvOjphcmd1bWVudEdQUjIs
IGFyZ3VtZW50c0luY2x1ZGVJNjQgPyBFeGNlcHRpb25UeXBlOjpJNjRBcmd1bWVudFR5cGUgOiBF
eGNlcHRpb25UeXBlOjpJNjRSZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlck1v
dmVBbmRDYWxsID0gVW5saW5rZWRNb3ZlQW5kQ2FsbCB7IH07CiAgICAgR1BSUmVnIHdhc21Db250
ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwog
CiAgICAgewpAQCAtMTk4LDYgKzE5MywxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogCiAg
ICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAgICB9
CisKKyAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigp
LnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVy
TW92ZUFuZENhbGwtPm1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICBqaXQuc3Rv
cmVQdHIoY2FsbGVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICB9CiAKICAgICBpZiAoISFpbmZvLm1lbW9y
eSkgewpAQCAtMjIxLDEyICsyMjAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgICAg
ICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwg
c2NyYXRjaE9yU2l6ZSwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgfQogCi0gICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVu
Y3Rpb25Db3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0
aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25J
bmRleFNwYWNlIH0pOwotICAgIH0pOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlck1v
dmVBbmRDYWxsLT5jYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxs
KCk7CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVn
aXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCku
Z3ByKCk7CkBAIC0yNjYsOCArMjYwLDYgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAKIAogICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKLQotICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc20uaAppbmRleCBiNGI5OGQxNTliMjg0YjdlYzMyM2FhNTAy
YzAzZjkyMWMxMmIwM2E5Li45M2FhMjRkOTY4MGFmZmZkM2I3YTk2ZDE5MWZjZjhjMzkxZDAyMzFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKQEAgLTQxLDcgKzQx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotc3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNv
bnRleHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4q
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgpOwordm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0Jiwg
Y29uc3QgU2lnbmF0dXJlJiwgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKiwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcAppbmRleCAwNTdhYTcwMThiNDRhOGZiYjRhOGQ0NzExM2JkYmViODc0OWRlYzg3
Li5mZDNhZTE4MjA0ZjM1N2JiMzEzNWNlMzU1ZTllNmNjZDIyYTgzOWU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApA
QCAtNDY1LDYgKzQ2NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgICAgIC8vIEZJ
WE1FOiBDdXJyZW50bHkgd2UganVzdCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxk
IHRlYWNoIHRoZSBNb2R1bGUKICAgICAgICAgLy8gaG93IHRvIHJlcGF0Y2ggdXM6CiAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NzAKKyAgICAg
ICAgaml0LmxvYWRQdHIoYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0Nh
bGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICog
c2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgICAgICBq
aXQubG9hZFB0cihlbnRyeXBvaW50TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIpOwogICAgICAg
ICBqaXQuY2FsbChzY3JhdGNoR1BSLCBXYXNtRW50cnlQdHJUYWcpOwogICAgIH0KQEAgLTUzNiwx
MCArNTM4LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgcmV0dXJuIG1fanNDYWxs
RW50cnlwb2ludC5jb2RlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9p
bnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNt
VG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9p
bnRMb2FkTG9jYXRpb24sIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9J
bnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsK
LSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtVG9XYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlG
dW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
LCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgIGZ1bmN0aW9u
LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSk7
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmlzTGFyZ2VBbGxvY2F0aW9uKCks
ICJXZWJBc3NlbWJseUZ1bmN0aW9uIHNob3VsZCBiZSBhbGxvY2F0ZWQgbm90IGluIGxhcmdlIGFs
bG9jYXRpb24gc2luY2UgaXQgaXMgSlNDYWxsZWUuIik7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwpA
QCAtNTUxLDEwICs1NTMsMTAgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhK
U0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJs
eUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNFbnRyeXBv
aW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2Fz
bVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lk
KiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4KQogICAgIDogQmFzZSB7IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSB9Ci0gICAg
LCBtX2pzRW50cnlwb2ludCB7IGpzRW50cnlwb2ludC5lbnRyeXBvaW50KCkgfQotICAgICwgbV9p
bXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24gfQorICAgICwgbV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9pbnQuY29kZSgp
IH0KKyAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dh
c21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiB9CiB7IH0K
IAogdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKaW5kZXggOThjMzQ2NGNkMDcyZDY0NDVlNzdkZTRm
ODhkZTBjY2UzYjQ5NWUzNC4uN2RkZjM5ZDAwOGY0YjY0MjlmOWY3YTEzMWY3ZjlkMzlhNzAxZDE2
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb24uaApAQCAtNjIsMTEgKzYyLDEyIEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5j
dGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwg
Y29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0Vu
dHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiwgV2Fz
bTo6U2lnbmF0dXJlSW5kZXgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVu
c2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxs
ZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0
aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9j
YXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgV2FzbTo6
U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFi
bGVGdW5jdGlvbi5zaWduYXR1cmVJbmRleDsgfQogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVu
Y3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbjsgfQorICAgIHZv
aWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJs
ZUZ1bmN0aW9uLmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOyB9CiAgICAgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbiBpbXBvcnRhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2ltcG9y
dGFibGVGdW5jdGlvbjsgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0
clRhZz4ganNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQpAQCAtNzgsNiArNzksNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9p
bnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5j
dGlvbiwgbV9pbXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9pbXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigp
OyB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50
cnlwb2ludCgpCiAgICAgewpAQCAtOTEsNyArOTMsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdh
c206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpM
b2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgp
OworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgdm9pZCoqIGJveGVkQ2Fs
bGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKICAgICBw
dHJkaWZmX3QgcHJldmlvdXNJbnN0YW5jZU9mZnNldCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
CmluZGV4IDkyZGRjZjc4NmU4MTAwNWEyMWUxZjhiMWY1MGE5ZDIwOWY5ZTY5MjkuLjdhZjFhMDQ1
MmFlMGRmN2ViZGMzYzI0ZDA5ZmZmYmUwN2MxMGUwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAg
LTE5Myw2ICsxOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogCiAgICAgICAgICAgICBX
YXNtOjpJbnN0YW5jZSogY2FsbGVlSW5zdGFuY2UgPSBudWxscHRyOwogICAgICAgICAgICAgV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0
aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U09iamVjdCo+KHZhbHVlKTsKIAogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0
ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKQEAgLTIwNSw2ICsyMDYsNyBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmpl
Y3QqIGltcG9ydE9iagogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4
ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBj
YWxsZWVJbnN0YW5jZSA9ICZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSB3YXNtRnVuY3Rpb24t
PmVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgYm94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24gPSB3YXNtRnVuY3Rpb24tPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRT
aWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCkBA
IC0yMjMsNiArMjI1LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgICAgIGF1
dG8qIGluZm8gPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBv
cnQua2luZEluZGV4KTsKICAgICAgICAgICAgIGluZm8tPnRhcmdldEluc3RhbmNlID0gY2FsbGVl
SW5zdGFuY2U7CiAgICAgICAgICAgICBpbmZvLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiA9
IGVudHJ5cG9pbnRMb2FkTG9jYXRpb247CisgICAgICAgICAgICBpbmZvLT5ib3hlZENhbGxlZUxv
YWRMb2NhdGlvbiA9IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOwogICAgICAgICAgICAgbV9pbnN0
YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pihp
bXBvcnQua2luZEluZGV4KS0+c2V0KHZtLCBtX2luc3RhbmNlLmdldCgpLCBmdW5jdGlvbik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzQ3LDkgKzM1MCwxMCBAQCB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNP
YmplY3QqIGltcG9ydE9iagogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBmdW5jLgogICAg
ICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxv
Y2stPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgp
OwogICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExv
Y2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2Fk
TG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAgICAgIHZvaWQq
KiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9j
YXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZUluZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
LCBmaWVsZCwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRy
eXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2UuZ2V0KCksIGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgYm94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIHdyYXBwZXIgPSBm
dW5jdGlvbjsKICAgICAgICAgfQogCkBAIC00NjAsNyArNDY0LDggQEAgdm9pZCBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBp
bXBvcnRPYmoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAg
ICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBl
bnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9u
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAg
ICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0
YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0
aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2Fk
TG9jYXRpb24gPSBjb2RlQmxvY2stPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5jZS5nZXQoKSwg
ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENh
bGxlZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgbV9zdGFydEZ1
bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtNTc1
LDEzICs1ODAsMTQgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUo
RXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50
cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIFdhc206Oldhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0
aW9uID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRM
b2NhdGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVy
ZUluZGV4KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0
aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAvLyBXaGF0IGlmIHdl
IGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAuCiAgICAgICAg
ICAgICAvLyBEb2VzIChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0cy5mb28gPT09IHRhYmxlLmdl
dCgwKT8KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU4MjUKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0g
V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRl
eCk7CisgICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJB
c3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0
cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5
cG9pbnRMb2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRl
eCk7CiAKICAgICAgICAgICAgIG1faW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5zZXQoZWxl
bWVudEluZGV4LCBmdW5jdGlvbik7CiAgICAgICAgICAgICArK2VsZW1lbnRJbmRleDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcAppbmRleCBjZGU0ZjNjZjI2MDRhZGQ3NmNjMDRmYjIyNGY5YTUyYmQy
ZGEwMzc2Li42Mjg2MmI0MTE3ODQ2NGU2MTNlM2U3OTMwNDI2NzMzMDY1MGU4MTBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24uY3BwCkBAIC02MCw3ICs2MCw5IEBAIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzPFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uPih2bSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3
cmFwcGVyIGZ1bmN0aW9uLiIpOwogICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
ciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3Vs
dCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Pih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJl
SW5kZXgsICZpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5k
ZXgpLT53YXNtVG9FbWJlZGRlclN0dWIgfSApOworICAgIGF1dG8gaW1wb3J0RnVuY3Rpb25JbmZv
ID0gaW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEluZGV4KTsK
KyAgICBzdGF0aWMgdm9pZCogbnVsbEJveGVkQ2FsbGVlID0gbnVsbHB0cjsKKyAgICBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgJmltcG9ydEZ1bmN0aW9uSW5mby0+d2Fz
bVRvRW1iZWRkZXJTdHViLCAmbnVsbEJveGVkQ2FsbGVlIH0pOwogICAgIGNvbnN0IFdhc206OlNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwg
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGluc3RhbmNlKTsKICAg
ICByZXR1cm4gcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378869</attachid>
            <date>2019-09-16 10:10:03 -0700</date>
            <delta_ts>2019-09-17 13:55:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201799-20190916101001.patch</filename>
            <type>text/plain</type>
            <size>120617</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDRkYmQ0YWUxODlmMDYyMGQ2N2I3YzlkZmMyZTg4NDc5ZGExZTQ0Li5mNDhiZGM1Njc5ZWFhOWVh
MTZiYmNkNGE1YzIzOThkN2EyZDQ3YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NyBAQAorMjAxOS0wOS0xNiAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBI
b3dldmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGlu
dGVycHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGlj
aCBmdW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMg
dGhlIGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRl
ciwgc28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdy
aXRpbmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0
aGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0
byB0aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBn
ZW5lcmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdl
IGtlZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAg
Y29kZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAg
LSBDYWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBj
YWxscywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBK
Uy10by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogd2Fz
bS10by13YXNtIHN0dWIsIEpTLXRvLXdhc20gc3R1YiAoY2FsbGVlIGZyYW1lKSwgd2FzbS10by1K
UyBzdHViLCBPTUcgb3NyIGVudHJ5CisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhbHNvIGNoYW5n
ZSBpdCBzbyB0aGF0IHRoZSBjYWxsZWUga2VlcHMgdHJhY2sgb2YgaXRzIGNhbGxlcnMsIGluc3Rl
YWQgb2YgaGF2aW5nIGEgZ2xvYmFsIG1hcHBpbmcKKyAgICAgICAgb2YgY2FsbHMgaW4gdGhlIFdh
c206OkNvZGVCbG9jay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVwYXRjaCBhbGwgY2FsbGVy
cyBvZiBhIGdpdmVuIENhbGxlZSB3aGVuIGl0IHRpZXJzIHVwLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNl
QW5kQ29tcGlsZUFpcik6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6QkJRUGxhbik6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OnByZXBhcmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6
Y29tcGxldGUpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uaDoKKyAgICAgICAgKiB3YXNt
L1dhc21CQlFQbGFuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjppbml0
aWFsaXplQ2FsbGVlcyk6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZS5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cmVwYXRjaE1vdmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZXBhdGNoQ2FsbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6YWRkQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QkJRQ2FsbGVlOjphZGRBbmRMaW5rQ2FsbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJR
Q2FsbGVlOjpyZXBhdGNoQ2FsbGVycyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVlLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6ZW50cnlwb2ludCk6CisgICAgICAgIChKU0M6Oldh
c206OkNhbGxlZTo6Y29kZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxlZTo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2FsbGluZ0NvbnZlbnRpb246OnNldHVwRnJhbWVJblBy
b2xvZ3VlIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogd2FzbS9XYXNt
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVCbG9jazo6ZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206
OkNvZGVCbG9jazo6d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSk6CisgICAgICAgICogd2FzbS9XYXNtRW1iZWRkZXIuaDoKKyAgICAgICAg
KiB3YXNtL1dhc21Gb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbik6CisgICAgICAg
ICogd2FzbS9XYXNtSW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om9m
ZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxh
bjo6T01HRm9yT1NSRW50cnlQbGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50
cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDoK
KyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01H
UGxhbjo6T01HUGxhbik6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbU9NR1BsYW4uaDoKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25z
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJpZ2dlck9NR1JlcGxhY2VtZW50Q29tcGlsZSk6
CisgICAgICAgIChKU0M6Oldhc206OmRvT1NSRW50cnkpOgorICAgICAgICAoSlNDOjpXYXNtOjp0
cmlnZ2VyT1NSRW50cnlOb3cpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20v
anMvSlNUb1dhc20uaDoKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xv
dyk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24pOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpl
dmFsdWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUpOgor
CiAyMDE5LTA5LTE1ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGVhayBvZiBOU01hcFRhYmxlIGluIC1bSlNWaXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVm
ZXJlbmNlOndpdGhPd25lcjpdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
YTZjMGYwMjc1ZTNmMWU1Y2FkNDFlNmE0YzhhNzYyNWViMDc2YjJlMi4uMGM1NzEyNTNkYjcyY2Q3
MWE2M2Q5NzM0ZjFiYjkzMjdjM2M2MmQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMzkzLDYgKzM5Myw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QVUJMSUNfRlJBTUVX
T1JLX0hFQURFUlMKIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9CeXRlY29kZXMuaAog
ICAgICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vSlNDQnVpbHRpbnMuaAor
ICAgICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vV2FzbU9wcy5oCiAKICAg
ICAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaAogICAgICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuaApAQCAtNDYz
LDYgKzQ2NCwxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIGFzc2VtYmxlci9YODZSZWdpc3RlcnMuaAogICAgIGFzc2VtYmxlci9YODZfNjRSZWdp
c3RlcnMuaAogCisgICAgYjMvQjNDb21tb24uaAorICAgIGIzL0IzQ29tcGlsYXRpb24uaAorICAg
IGIzL0IzVHlwZS5oCisKICAgICBiaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuaAogICAgIGJp
bmRpbmdzL1NjcmlwdE9iamVjdC5oCiAgICAgYmluZGluZ3MvU2NyaXB0VmFsdWUuaApAQCAtMTAw
MSw2ICsxMDA2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURF
UlMKICAgICBydW50aW1lL1dyaXRlQmFycmllci5oCiAgICAgcnVudGltZS9Xcml0ZUJhcnJpZXJJ
bmxpbmVzLmgKIAorICAgIHdhc20vV2FzbUNhbGxlZS5oCiAgICAgd2FzbS9XYXNtQ2FwYWJpbGl0
aWVzLmgKICAgICB3YXNtL1dhc21Db2RlQmxvY2suaAogICAgIHdhc20vV2FzbUNvbXBpbGF0aW9u
TW9kZS5oCkBAIC0xMDA4LDEzICsxMDE0LDE2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtRW1iZWRkZXIuaAogICAgIHdhc20vV2Fz
bUV4Y2VwdGlvblR5cGUuaAogICAgIHdhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCisgICAg
d2FzbS9XYXNtRm9ybWF0LmgKICAgICB3YXNtL1dhc21JbmRleE9yTmFtZS5oCiAgICAgd2FzbS9X
YXNtTWVtb3J5LmgKKyAgICB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCiAgICAgd2FzbS9X
YXNtTWVtb3J5TW9kZS5oCiAgICAgd2FzbS9XYXNtTW9kdWxlLmgKICAgICB3YXNtL1dhc21OYW1l
LmgKICAgICB3YXNtL1dhc21OYW1lU2VjdGlvbi5oCiAgICAgd2FzbS9XYXNtUGFnZUNvdW50LmgK
KyAgICB3YXNtL1dhc21TaWduYXR1cmUuaAogICAgIHdhc20vV2FzbVRpZXJVcENvdW50LmgKIAog
ICAgIHdhc20vanMvSlNXZWJBc3NlbWJseS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGUyMmMxNGZhYWFhYzM4MzA3MThjMWIxZmU4MDk3OWNmY2Q3Zjg1YmEuLjYyZWRjYTliOGZh
MGIyNmMzMDU4YmNmZmVjZGEyNzVlYWYyNWNjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJMEYzMzhERjYxQkU5M0Q1NTAwMTNDODhGIC8qIEIz
Q29uc3RyYWluZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzMzhERjQxQkU5M0Q1NTAwMTNDODhGIC8qIEIzQ29uc3RyYWluZWRWYWx1ZS5o
ICovOyB9OwogCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOERGODFCRTk2
QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggKi87IH07CiAJCTBGMzM4REZFMUJFRDUxMjcw
MDEzQzg4RiAvKiBBaXJTaW1wbGlmeUNGRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzMzhERkMxQkVENTEyNzAwMTNDODhGIC8qIEFpclNpbXBsaWZ5
Q0ZHLmggKi87IH07Ci0JCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUw
MDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICovOyB9OworCQkwRjMzOEUwQzFC
RjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDAxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29t
cGlsYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjMzOEUwRTFCRjAyNzZDMDAxM0M4OEYgLyogQjNEYXRhU2VjdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDIxQkYwMjc2QzAw
MTNDODhGIC8qIEIzRGF0YVNlY3Rpb24uaCAqLzsgfTsKIAkJMEYzMzhFMTAxQkYwMjc2QzAwMTND
ODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzMzhFMDQxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50
cy5oICovOyB9OwogCQkwRjMzOEUxMTFCRjAyNzZDMDAxM0M4OEYgLyogQjNPcGFxdWVCeXByb2R1
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4
RTA1MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oICovOyB9OwpAQCAtNjUy
LDcgKzY1Miw3IEBACiAJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZFQzg1
MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyog
QjNDaGVja1NwZWNpYWwuaCAqLzsgfTsKIAkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovOyB9OwotCQkw
RkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW1vbi5oICovOyB9OworCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLzsgfTsK
IAkJMEZFQzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNDFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLzsgfTsKIAkJMEZFQzg1MTAxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUu
aCAqLzsgfTsKQEAgLTY3NSw3ICs2NzUsNyBAQAogCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JD
b2xsZWN0aW9uLmggKi87IH07CiAJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsKIAkJMEZFQzg1
M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaFZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLzsgfTsKKwkJMEZFQzg1M0MxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUM4NTNFMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmggKi87IH07CiAJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87IH07CiAJCTBGRUM4NTQyMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5oICovOyB9OwpAQCAtNzE0MywxMSArNzE0MywxMSBAQAogCQkJCTg2ODkyMUMxMUY5QzBDQjcw
MDExNTlGNiAvKiBKU0JpZ0ludC5oICovLAogCQkJCTg2RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAv
KiBKU0JvdW5kRnVuY3Rpb24uY3BwICovLAogCQkJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAv
KiBKU0JvdW5kRnVuY3Rpb24uaCAqLywKLQkJCQlGRTQ4QkQ0MzIzMjQ1RTg3MDBGMTM2RDAgLyog
SlNDQ29uZmlnLmNwcCAqLywKLQkJCQlGRTQ4QkQ0MjIzMjQ1RTg3MDBGMTM2RDAgLyogSlNDQ29u
ZmlnLmggKi8sCiAJCQkJNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCAq
LywKIAkJCQk2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCAqLywKIAkJCQk1
M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi8sCisJCQkJRkU0OEJENDMyMzI0
NUU4NzAwRjEzNkQwIC8qIEpTQ0NvbmZpZy5jcHAgKi8sCisJCQkJRkU0OEJENDIyMzI0NUU4NzAw
RjEzNkQwIC8qIEpTQ0NvbmZpZy5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2MzJDMCAv
KiBKU0NlbGwuY3BwICovLAogCQkJCUJDMTE2N0Q4MEUxOUJDQzkwMDgwNjZERCAvKiBKU0NlbGwu
aCAqLywKIAkJCQkwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICov
LApAQCAtOTM0OCw3ICs5MzQ4LDYgQEAKIAkJCQkwRkVBMEExMDE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMTG93ZXJERkdUb0IzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUQwMjE3QTBCOTA0MDA3
NzNBRDggLyogRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlD
RjkxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUZFMzg0MjMyMjMyNEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25FbnRyeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEOEEzMUMxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjIzNUJERDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyMzVCRTAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21w
aWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTM4LDcgKzk1MzcsNiBAQAogCQkJCUExRDc5MzAx
MUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1hdFBy
b3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMkJCRkYyMUIwNDRBOEIwMDY2NEI2
OSAvKiBJbnRsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTQ4QkQ0NDIzMjQ1RTkzMDBG
MTM2RDAgLyogSlNDQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhFQkUyNDFDRThGMzU4
MDA0NTMxNDYgLyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJE
ODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUz
NEUwMzU0MUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggaW4g
SGVhZGVycyAqLywKQEAgLTk2MDksNiArOTYwNyw3IEBACiAJCQkJNjU3Q0Y0NTkxOUJGNjY2MjAw
NEFDQkYyIC8qIEpTQ2FsbGVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0I2MDFFQzIwMzRCOEM1
MDA2QkU2NjcgLyogSlNDYXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBOTE4ODBENkE4
MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNDhCRDQ0MjMy
NDVFOTMwMEYxMzZEMCAvKiBKU0NDb25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2N0RB
MEUxOUJDQzkwMDgwNjZERCAvKiBKU0NlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTc0OTcx
MTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjFERDg0QTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBA
IC05ODg1LDcgKzk4ODQsOSBAQAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVy
YW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9w
ZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0
NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMzg0MjMyMjMyNEQ1MUIw
MDlERDQ0NSAvKiBPcHRpb25FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMjI4RUQxNDM2
QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFMzg0MjMzMjMy
NEQ1MUIwMDlERDQ0NSAvKiBPcHRpb25zTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM1Njk4
NzIyMjg0MTE4NzAwOENEQ0NCIC8qIFBhY2tlZENlbGxQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGOURBQTBBMUZEMUMzRDMwMDc5QzVCMiAvKiBQYXJhbGxlbFNvdXJjZUFkYXB0ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzNEU2NTc1MjA2NjhFQUEwMEZCODFBQyAvKiBQYXJzZUhhc2guaCBp
biBIZWFkZXJzICovLApAQCAtOTk5Miw3ICs5OTkzLDYgQEAKIAkJCQkwRkUwNTAyODFBQTkwOTU2
MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAy
OTFBQTkwOTU2MDBEMzNCMzMgLyogU2NvcGVkQXJndW1lbnRzVGFibGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRTA1MDJCMUFBOTA5NTYwMEQzM0IzMyAvKiBTY29wZU9mZnNldC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbnNMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MjE3RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA2ODE4OUFGRTlDMDA2MzMy
MzEgLyogU2NyaXB0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkEyMTE4OEVG
RjY4MDAxMTBGMTQgLyogU2NyaXB0QnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAppbmRleCAz
MTlhYTViZjA3NWNiZjBhZTAxNWIxMjA2OWNkMDQxOWM5ODliMTJkLi5jNjcxNTYzMjY1NjUwZmZk
Yjg0YjgxZjU0NzkxN2JhYjdmZWFjYzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAg
ICB9IHdoaWxlICgwKQogCi0gICAgQWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJV
cENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmKTsKKyAgICBBaXJJ
UkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25J
bmRleCwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYp
OwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNv
bnN0IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTYzOSw3ICs2MzksOCBAQCBwcml2YXRlOgogICAg
IEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIEJhc2ljQmxvY2sq
IG1fcm9vdEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIFZlY3RvcjxUeXBlZFRtcD4gbV9sb2NhbHM7
Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24gaW5kZXggd2hv
c2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgorICAgIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYgbV9vdXRnb2luZ0NhbGxzOworICAgIGNvbnN0IFZlY3RvcjxNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIG1fd2FzbVRvV2FzbUV4aXRTdHVi
czsKICAgICBHUFJSZWcgbV9tZW1vcnlCYXNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwogICAgIEdQ
UlJlZyBtX21lbW9yeVNpemVHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKQEAgLTcwOCwxNCArNzA5LDE1
IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEJhc2lj
QmxvY2sqIGJsb2NrLCBUeXBlZFRtcCBpbnN0CiAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBh
dGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CiB9CiAKLUFpcklSR2VuZXJhdG9yOjpBaXJJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNl
cHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKK0Fp
cklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5m
bywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIG91dGdvaW5nQ2FsbHMsIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2Fz
bUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1YnMsIE1lbW9yeU1vZGUgbW9kZSwgdW5z
aWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0
aW9uIHRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCiAgICAg
OiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9mdW5jdGlvbkluZGV4
KGZ1bmN0aW9uSW5kZXgpCiAgICAgLCBtX3RpZXJVcCh0aWVyVXApCiAgICAgLCBtX3Byb2MocHJv
Y2VkdXJlKQogICAgICwgbV9jb2RlKG1fcHJvYy5jb2RlKCkpCi0gICAgLCBtX3VubGlua2VkV2Fz
bVRvV2FzbUNhbGxzKHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgICwgbV9vdXRnb2luZ0Nh
bGxzKG91dGdvaW5nQ2FsbHMpCisgICAgLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMod2FzbVRvV2Fz
bUV4aXRTdHVicykKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKGluZm8uaW1wb3J0RnVuY3Rp
b25Db3VudCgpKQogewogICAgIG1fY3VycmVudEJsb2NrID0gbV9jb2RlLmFkZEJsb2NrKCk7CkBA
IC03NjEsMTYgKzc2Myw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvCiAgICAgUmVmPEIzOjpB
aXI6OlByb2xvZ3VlR2VuZXJhdG9yPiBwcm9sb2d1ZUdlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRh
c2s8QjM6OkFpcjo6UHJvbG9ndWVHZW5lcmF0b3JGdW5jdGlvbj4oWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgQjM6OkFpcjo6Q29kZSYgY29kZSkgewogICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgIGNvZGUuZW1pdERlZmF1bHRQ
cm9sb2d1ZShqaXQpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7Ci0gICAgICAg
ICAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOwotICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFtjb21waWxhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KGNhbGxlZUdQUiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKLSAgICAgICAgICAgIGppdC5lbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
LSAgICAgICAgfQorICAgICAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG51bGxwdHIs
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAKICAgICAgICAgewogICAgICAgICAgICAgY29u
c3QgQ2hlY2tlZDxpbnQzMl90PiB3YXNtRnJhbWVTaXplID0gbV9jb2RlLmZyYW1lU2l6ZSgpOwpA
QCAtMTkzNiw4ICsxOTI5LDYgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICBpZiAocmV0
dXJuVHlwZSAhPSBUeXBlOjpWb2lkKQogICAgICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKHJldHVy
blR5cGUpOwogCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzOwotCiAgICAgaWYgKG1f
aW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5k
ZXgpKSB7CiAgICAgICAgIG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzID0gc3RkOjptYXgobV9tYXhO
dW1KU0NhbGxBcmd1bWVudHMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhcmdzLnNpemUoKSkpOwog
CkBAIC0xOTczLDExICsxOTY0LDEyIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAg
ICAgICAgICAgcGF0Y2hBcmdzLmFwcGVuZCh7IHRtcCwgcmVwIH0pOwogICAgICAgICAgICAgfSk7
CiAKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1YiA9IG1fd2FzbVRvV2FzbUV4
aXRTdHVic1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbd2FzbVRvV2FzbUV4aXRTdHViXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgp
OwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbklu
ZGV4IH0pOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQu
Y2FsbChXYXNtRW50cnlQdHJUYWcpOworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
Y2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8
V2FzbUVudHJ5UHRyVGFnPih3YXNtVG9XYXNtRXhpdFN0dWIuY29kZSgpKSk7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIApAQCAtMjAyNCwxOCArMjAxNiwyMCBAQCBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBhdXRvKiBwYXRjaHBvaW50ID0gYWRkUGF0Y2hw
b2ludCh0b0IzVHlwZShyZXR1cm5UeXBlKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMu
d3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1Bp
bm5lZCA9IHRydWU7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysr
OwogCiAgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzOwogICAgICAgICB3
YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5zZXR1cENhbGwobV9jb2RlLCByZXR1cm5UeXBlLCBw
YXRjaHBvaW50LCB0b1RtcFZlY3RvcihhcmdzKSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAg
cmVwKSB7CiAgICAgICAgICAgICBwYXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CiAgICAg
ICAgIH0pOwogCi0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwg
ZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleCB9KTsKLSAgICAg
ICAgICAgIH0pOworICAgICAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIG91dGdv
aW5nQ2FsbHMgPSAmbV9vdXRnb2luZ0NhbGxzOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoW291dGdvaW5nQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICBHUFJSZWcgY2FsbGVlR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKyAgICAgICAgICAgIGF1
dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
Y2FsbGVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3Rlcikg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Cisg
ICAgICAgICAgICBvdXRnb2luZ0NhbGxzLT5hcHBlbmQoeyBmdW5jdGlvbkluZGV4LCB7IG1vdmVM
b2NhdGlvbiwgY2FsbExvY2F0aW9uIH19KTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZW1pdFBh
dGNocG9pbnQobV9jdXJyZW50QmxvY2ssIHBhdGNocG9pbnQsIHJlc3VsdCwgV1RGTW92ZShwYXRj
aEFyZ3MpKTsKQEAgLTIwODksNiArMjA4Myw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAg
ICAgfSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gZzY0KCk7CisgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlID0gZzY0KCk7CiAgICAgewogICAgICAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IGc2NCgpOwogICAgICAgICAvLyBDb21wdXRlIHRoZSBv
ZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdlIGFyZSBsb29raW5nIGZvci4KQEAgLTIw
OTcsNiArMjA5Miw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNp
Z25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAgICAgICAgIGFwcGVuZChB
ZGQ2NCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOwogICAg
ICAgICAKICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRl
eCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExv
Y2F0aW9uKCkpLCBjYWxsZWVDb2RlKTsgLy8gUG9pbnRlciB0byBjYWxsZWUgY29kZS4KKyAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1cmVJbmRleCwgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpKSwg
Y2FsbGVlKTsgLy8gUG9pbnRlciB0byBib3hlZCBjYWxsZWUKIAogICAgICAgICAvLyBDaGVjayB0
aGF0IHRoZSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0
cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0
J3Mgbm90IGluaXRpYWxpemVkLgogICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAg
aGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJl
OjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NzIxMApAQCAtMjE4OSw2ICsyMTg1LDEwIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
CiAKICAgICBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGVtaXRBcmdzOwogICAgIGVtaXRBcmdzLmFw
cGVuZChjYWxsZWVDb2RlKTsKKworICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlKSwg
Y2FsbGVlKTsKKyAgICBlbWl0QXJncy5hcHBlbmQoeyBjYWxsZWUsIEIzOjpWYWx1ZVJlcDo6c3Rh
Y2tBcmd1bWVudChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSB9KTsKKwogICAgIHdhc21DYWxsaW5nQ29udmVudGlvbkFp
cigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNoLCB0b1RtcFZlY3Rvcihhcmdz
KSwgWyZdIChUbXAgdG1wLCBCMzo6VmFsdWVSZXAgcmVwKSB7CiAgICAgICAgIGVtaXRBcmdzLmFw
cGVuZCh7IHRtcCwgcmVwIH0pOwogICAgIH0pOwpAQCAtMjIyOSwxMCArMjIyOSw4IEBAIGF1dG8g
QWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KICAgICByZXR1cm4gQjM6Ok9y
aWdpbigpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4s
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRp
b25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21U
b1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9k
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNt
RXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBj
b25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2Fz
bUV4aXRTdHVicywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9k
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNt
RXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1ha2VV
bmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKLQogICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJl
ZGRlckVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKICAgICBjb21w
aWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVy
cz4oKTsKIApAQCAtMjI1Miw3ICsyMjUwLDcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGkKICAg
ICAKICAgICBwcm9jZWR1cmUuc2V0T3B0TGV2ZWwoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJP
cHRpbWl6YXRpb25MZXZlbCgpKTsKIAotICAgIEFpcklSR2VuZXJhdG9yIGlyR2VuZXJhdG9yKGlu
Zm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7
CisgICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJlLCBjb21waWxh
dGlvbkNvbnRleHQub3V0Z29pbmdDYWxscywgd2FzbVRvV2FzbUV4aXRTdHVicywgbW9kZSwgZnVu
Y3Rpb25JbmRleCwgdGllclVwLCB0aHJvd1dhc21FeGNlcHRpb24sIHNpZ25hdHVyZSk7CiAgICAg
RnVuY3Rpb25QYXJzZXI8QWlySVJHZW5lcmF0b3I+IHBhcnNlcihpckdlbmVyYXRvciwgZnVuY3Rp
b24uZGF0YS5kYXRhKCksIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCBzaWduYXR1cmUsIGluZm8pOwog
ICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkpOwogCkBAIC0yMjcy
LDEwICsyMjcwLDEwIEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpCiAgICAgICAgIEIzOjpBaXI6
OnByZXBhcmVGb3JHZW5lcmF0aW9uKGNvZGUpOwogICAgICAgICBCMzo6QWlyOjpnZW5lcmF0ZShj
b2RlLCAqY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUKTsKICAgICAgICAgY29t
cGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cyA9IHByb2NlZHVyZS5yZWxl
YXNlQnlwcm9kdWN0cygpOwotICAgICAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJl
Z2lzdGVycyA9IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAgICAg
IGNvbXBpbGF0aW9uQ29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29kZS5jYWxsZWVTYXZl
UmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiB7IH07CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAppbmRleCAzMzFiNGIw
YWQzMTNlNjIzY2E3ZmY0YmQ4ZGU4YTE1ODZmYzdkNTA1Li44MjcyY2UzNTk1ZmYyOGIzZjljYzg4
OTY1YWRiMmE4NGM5ZTg1YTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQWlySVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNv
bnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0
aW9uID0gbnVsbHB0cik7CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFp
cihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRyKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDNkOGRmOGU2ODcxMDIxMzFiNjRj
MWE2ZDY1ZTZmY2NjMTAzYjVlNzUuLmUwMDAzZWNiNzBkNmYyYWNlY2FkZGQzZjQyODQ2NGU3YTBi
MzhmZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKQEAgLTE3Miw3ICsxNzIsNiBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIFN0cmlu
ZyBFcnJvclR5cGU7CiAgICAgdHlwZWRlZiBVbmV4cGVjdGVkPEVycm9yVHlwZT4gVW5leHBlY3Rl
ZFJlc3VsdDsKLSAgICB0eXBlZGVmIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgRXJyb3JUeXBlPiBSZXN1bHQ7CiAgICAgdHlwZWRlZiBFeHBlY3RlZDx2b2lkLCBF
cnJvclR5cGU+IFBhcnRpYWxSZXN1bHQ7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+
CiAgICAgTkVWRVJfSU5MSU5FIFVuZXhwZWN0ZWRSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGZh
aWwoQXJncy4uLiBhcmdzKSBjb25zdApAQCAtMTg1LDcgKzE4NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hp
bGUgKDApCiAKLSAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJv
Y2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlLCBDb21w
aWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZv
ck9TUkVudHJ5LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQjNJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYsIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVu
dHJ5UHRyVGFnPj4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5
TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBs
b29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqLCBUaHJvd1dhc21FeGNlcHRpb24pOwog
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0
IFNpZ25hdHVyZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExv
Y2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTI4Myw2ICsyODIsNyBAQCBwcml2YXRlOgogCiAgICAg
RnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyIHsgbnVsbHB0ciB9OwogICAg
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CisgICAgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiBtX291dGdvaW5nQ2FsbHM7CiAgICAgY29uc3QgTWVtb3J5TW9kZSBtX21v
ZGUgeyBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyB9OwogICAgIGNvbnN0IENvbXBpbGF0aW9u
TW9kZSBtX2NvbXBpbGF0aW9uTW9kZSB7IENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSB9OwogICAg
IGNvbnN0IHVuc2lnbmVkIG1fZnVuY3Rpb25JbmRleCB7IFVJTlRfTUFYIH07CkBAIC0yOTQsNyAr
Mjk0LDcgQEAgcHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jayB7IG51bGxw
dHIgfTsKICAgICBWZWN0b3I8dWludDMyX3Q+IG1fb3V0ZXJMb29wczsKICAgICBWZWN0b3I8VmFy
aWFibGUqPiBtX2xvY2FsczsKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBm
dW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisg
ICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgbV93YXNt
VG9XYXNtRXhpdFN0dWJzOyAvLyBMaXN0IGVhY2ggY2FsbCBzaXRlIGFuZCB0aGUgZnVuY3Rpb24g
aW5kZXggd2hvc2UgYWRkcmVzcyBpdCBzaG91bGQgYmUgcGF0Y2hlZCB3aXRoLgogICAgIHVuc2ln
bmVkJiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgSGFzaE1hcDxWYWx1ZUtleSwg
VmFsdWUqPiBtX2NvbnN0YW50UG9vbDsKICAgICBJbnNlcnRpb25TZXQgbV9jb25zdGFudEluc2Vy
dGlvblZhbHVlczsKQEAgLTM1NSwxNSArMzU1LDE2IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVz
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Jsb2NrKiBibG9j
CiAgICAgfSk7CiB9CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9u
KiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9y
eU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0
aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitCM0lSR2VuZXJh
dG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBvdXRnb2luZ0Nh
bGxzLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiB3YXNt
VG9XYXNtRXhpdFN0dWJzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVt
b3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQq
IHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICA6IG1f
aW5mbyhpbmZvKQorICAgICwgbV9vdXRnb2luZ0NhbGxzKG91dGdvaW5nQ2FsbHMpCiAgICAgLCBt
X21vZGUobW9kZSkKICAgICAsIG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKICAg
ICAsIG1fZnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQogICAgICwgbV9sb29wSW5kZXhGb3JP
U1JFbnRyeShsb29wSW5kZXhGb3JPU1JFbnRyeSkKICAgICAsIG1fdGllclVwKHRpZXJVcCkKICAg
ICAsIG1fcHJvYyhwcm9jZWR1cmUpCi0gICAgLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzKHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzKQorICAgICwgbV93YXNtVG9XYXNtRXhpdFN0dWJzKHdhc21U
b1dhc21FeGl0U3R1YnMpCiAgICAgLCBtX29zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICAsIG1fY29uc3RhbnRJbnNlcnRpb25WYWx1ZXMobV9w
cm9jKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50
KCkpCkBAIC00MTcsNyArNDE4LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUKICAgICAgICAg
fQogICAgIH0KIAotICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xv
Z3VlKCZjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBtX3Byb2MsIE9yaWdpbigpLCBt
X2N1cnJlbnRCbG9jayk7CisgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUlu
UHJvbG9ndWUobV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwogCiAgICAgewogICAg
ICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigpKTsKQEAgLTE0MDIs
OCArMTQwMyw2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICBtX21ha2VzQ2FsbHMgPSB0
cnVlOwogCiAgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKLSAg
ICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
ID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7Ci0KICAgICBpZiAobV9pbmZvLmlzSW1wb3J0
ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKICAgICAg
ICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3Vt
ZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKQEAgLTE0MTcsNiAr
MTQxNiw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgQmFzaWNCbG9jayogY29u
dGludWF0aW9uID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgaXNXYXNt
Q2FsbCwgRnJlcXVlbnRlZEJsb2NrKGlzV2FzbUJsb2NrKSwgRnJlcXVlbnRlZEJsb2NrKGlzRW1i
ZWRkZXJCbG9jaykpOwogCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQ
dHJUYWc+IHdhc21Ub1dhc21FeGl0U3R1YiA9IG1fd2FzbVRvV2FzbUV4aXRTdHVic1tmdW5jdGlv
bkluZGV4XTsKICAgICAgICAgVmFsdWUqIHdhc21DYWxsUmVzdWx0ID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNXYXNtQmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0
b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQ
aW5uZWQgPSB0cnVlOwpAQCAtMTQyNSwxMSArMTQyNSwxMSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsCiAgICAgICAgICAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSBjb3Vs
ZCBiZSBjYWxsaW5nIHRvIHNvbWV0aGluZyB0aGF0IGlzIGJvdW5kcyBjaGVja2luZy4KICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhpczogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAgICAgICAgICAgICAg
IHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZl
KE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbd2FzbVRvV2FzbUV4
aXRTdHViXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNh
bGwsIGZ1bmN0aW9uSW5kZXhdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRl
eCB9KTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGpp
dC5jYWxsKFdhc21FbnRyeVB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbY2FsbCwgd2FzbVRvV2FzbUV4aXRTdHViXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2Nh
dGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4od2FzbVRvV2FzbUV4aXRTdHViLmNvZGUoKSkpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pOwpAQCAtMTQ3MywxNyArMTQ3MywxOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwo
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAg
ICAgIC8vIFRoZSBjYWxsIGNvdWxkIGhhdmUgYmVlbiB0byBhbm90aGVyIFdlYkFzc2VtYmx5IGlu
c3RhbmNlLCBhbmQgLyBvciBjb3VsZCBoYXZlIG1vZGlmaWVkIG91ciBNZW1vcnkuCiAgICAgICAg
IHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0OjpZ
ZXMsIG1faW5mby5tZW1vcnksIGluc3RhbmNlVmFsdWUoKSwgbV9wcm9jLCBjb250aW51YXRpb24p
OwogICAgIH0gZWxzZSB7CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiog
b3V0Z29pbmdDYWxscyA9ICZtX291dGdvaW5nQ2FsbHM7CiAgICAgICAgIHJlc3VsdCA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBvcmln
aW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbPV0gKFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0aW9uSW5kZXhdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
LSAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rp
b25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwotICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBw
YXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgICAgICAgICBhdXRvIG1vdmVMb2NhdGlv
biA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxw
dHIpLCBjYWxsZWVHUFIpOworICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGxMb2NhdGlvbiA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsK
KyAgICAgICAgICAgICAgICAgICAgb3V0Z29pbmdDYWxscy0+YXBwZW5kKHsgZnVuY3Rpb25JbmRl
eCwgeyBtb3ZlTG9jYXRpb24sIGNhbGxMb2NhdGlvbiB9fSk7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICB9KTsKICAgICB9CkBAIC0xNjI0LDYgKzE2MjUsMTAgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXQKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5j
dGlvbiwKICAgICAgICAgICAgIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpKSkpOwogCisgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKKyAgICAgICAgICAgIHNhZmVDYXN0PGlu
dDMyX3Q+KFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mQm94ZWRDYWxsZWVM
b2FkTG9jYXRpb24oKSkpKTsKKwogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1
cm5UeXBlKCk7CiAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxs
KG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5U
eXBlKSwKICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKQEAgLTE2
MzUsOCArMTY0MCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMsIGJ1dCB0aGUgd2FzbS0+d2FzbSBz
dHViIGFzc3VtZXMgaXQgY2FuCiAgICAgICAgICAgICAvLyB1c2UgYWxsIHRoZSBwaW5uZWQgcmVn
aXN0ZXJzIGFzIHNjcmF0Y2g6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzIxODEKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFBpbm5lZFJlZ2lz
dGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nKSk7Ci0KICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2RlLCBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWUsIEIzOjpWYWx1
ZVJlcDo6c3RhY2tBcmd1bWVudChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0
ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAgICAgICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgICAgIGpp
dC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCksIFdhc21FbnRy
eVB0clRhZyk7CkBAIC0xNjk3LDEwICsxNzAyLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpvcmln
aW4oKSAtPiBPcmlnaW4KICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE9yaWdpbj4ob3JpZ2luKTsK
IH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
Y29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25N
b2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRy
eSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2Vw
dGlvbikKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENvbXBpbGF0aW9u
Q29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9u
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxXYXNtRW50cnlQdHJUYWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgdW5zaWduZWQmIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1v
cnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCog
dGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogewotICAgIGF1
dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwotCiAgICAgY29tcGls
YXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxw
ZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VV
bmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCkBAIC0xNzIxLDcgKzE3MjQsNyBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KENvbXBpbGF0aW9uQwogICAgICAgICA/IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQjNPcHRpbWl6
YXRpb25MZXZlbCgpCiAgICAgICAgIDogT3B0aW9uczo6d2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRp
b25MZXZlbCgpKTsKIAotICAgIEIzSVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2Vk
dXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBvc3JFbnRyeVNjcmF0
Y2hCdWZmZXJTaXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJ
bmRleEZvck9TUkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgQjNJUkdl
bmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIGNvbXBpbGF0aW9uQ29udGV4dC5v
dXRnb2luZ0NhbGxzLCB3YXNtVG9XYXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplLCBtb2RlLCBjb21waWxhdGlvbk1vZGUsIGZ1bmN0aW9uSW5kZXgsIGxvb3BJbmRleEZvck9T
UkVudHJ5LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgRnVuY3Rpb25QYXJzZXI8
QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEoKSwg
ZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlMX0lG
X0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTE3MzksMTAgKzE3NDIsMTAgQEAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZShDb21waWxhdGlvbkMKICAgICAgICAgQjM6OnByZXBhcmVGb3JHZW5lcmF0aW9u
KHByb2NlZHVyZSk7CiAgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUsICpjb21waWxhdGlv
bkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNvbnRleHQu
d2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3RzKCk7
Ci0gICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2Vk
dXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlzdCgpOworICAgICAgICBjb21waWxhdGlv
bkNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0
ZXJBdE9mZnNldExpc3QoKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVy
biB7IH07CiB9CiAKIC8vIEN1c3RvbSB3YXNtIG9wcy4gVGhlc2UgYXJlIHRoZSBvbmVzIHRvbyBt
ZXNzeSB0byBkbyBpbiB3YXNtLmpzb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaAppbmRleCBlYTU1MDI0MDE4ZDMwZDM4ZmYxZWE3YTdhYmYxYzE2
NWJjZjU2N2Y4Li4zNDhiNTQ3ZWUzZDc4N2I2MTJjM2ZkMzYwNDJkNzdkZTgyMjBhN2Q5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTQ5
LDkgKzQ5LDEyIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQgewogICAgIHN0ZDo6dW5pcXVl
X3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gZW1iZWRkZXJFbnRyeXBvaW50Qnlwcm9kdWN0czsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlwb2ludEpJVDsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlw
cm9kdWN0czsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gb3V0Z29pbmdDYWxs
czsKKyAgICBPcHRpb25hbDxVbmxpbmtlZE1vdmVBbmRDYWxsPiBlbWJlZGRlck1vdmVBbmRDYWxs
OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNhdmVSZWdpc3RlcnM7CiB9OwogCi1F
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VB
bmRDb21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0
IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIHVuc2lnbmVkJiBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3Qg
bG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4
Y2VwdGlvbiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0
dXJlJiwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYsIHVu
c2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
dWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIsIFRo
cm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2Fz
bQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5kZXggMGU4
M2Q1M2YzMTIzOTM3ZmM5Y2MwM2QzZTVlZTE4NGQ1MTcxM2Q0Zi4uYjQ4NTdjNzZhMTg3YmRlNTFl
MjY1MGQ3YWM0MmZjMjQ3YjVlNTA3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmNwcApAQCAtNTIsOSArNTIsMTAgQEAgbmFtZXNwYWNlIFdhc21CQlFQbGFuSW50
ZXJuYWwgewogc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1CQlFQbGFu
OjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywg
QXN5bmNXb3JrIHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFw
cGVyJiYgY3JlYXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uKQorQkJRUGxhbjo6QkJRUGxhbihDb250ZXh0KiBjb250ZXh0LCBjb25zdCBWZWN0
b3I8UmVmUHRyPEJCUUNhbGxlZT4+JiBjYWxsZWVzLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IGlu
Zm8sIEFzeW5jV29yayB3b3JrLCBDb21wbGV0aW9uVGFzayYmIHRhc2ssIENyZWF0ZUVtYmVkZGVy
V3JhcHBlciYmIGNyZWF0ZUVtYmVkZGVyV3JhcHBlciwgVGhyb3dXYXNtRXhjZXB0aW9uIHRocm93
V2FzbUV4Y2VwdGlvbikKICAgICA6IEJhc2UoY29udGV4dCwgV1RGTW92ZShpbmZvKSwgV1RGTW92
ZSh0YXNrKSwgV1RGTW92ZShjcmVhdGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRp
b24pCiAgICAgLCBtX3N0cmVhbWluZ1BhcnNlcihtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCAq
dGhpcykKKyAgICAsIG1fY2FsbGVlcygmY2FsbGVlcykKICAgICAsIG1fc3RhdGUoU3RhdGU6OlZh
bGlkYXRlZCkKICAgICAsIG1fYXN5bmNXb3JrKHdvcmspCiB7CkBAIC0xNTksMTYgKzE2MCwxMCBA
QCB2b2lkIEJCUVBsYW46OnByZXBhcmUoKQogCiAgICAgY29uc3QgYXV0byYgZnVuY3Rpb25zID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zOwogICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFj
aXR5KG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0
IHN0dWJzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRv
V2FzbUNhbGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdl
YkFzc2VtYmx5IGNhbGxzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21J
bnRlcm5hbEZ1bmN0aW9ucywgZnVuY3Rpb25zLnNpemUoKSwgIiBXZWJBc3NlbWJseSBmdW5jdGlv
bnMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0
cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpCi0gICAgICAgIHx8
ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV90aWVyVXBDb3VudHMsIGZ1bmN0aW9ucy5zaXplKCksICIg
dGllci11cCBjb3VudHMiKSkKKyAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX2NvbXBp
bGF0aW9uQ29udGV4dHMsIGZ1bmN0aW9ucy5zaXplKCksICIgY29tcGlsYXRpb24gY29udGV4dHMi
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxscy5yZXNp
emUoZnVuY3Rpb25zLnNpemUoKSk7Ci0gICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMucmVzaXpl
KGZ1bmN0aW9ucy5zaXplKCkpOwogICAgIG1fY29tcGlsYXRpb25Db250ZXh0cy5yZXNpemUoZnVu
Y3Rpb25zLnNpemUoKSk7Ci0gICAgbV90aWVyVXBDb3VudHMucmVzaXplKGZ1bmN0aW9ucy5zaXpl
KCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0cy5zaXplKCk7ICsraW1wb3J0SW5kZXgpIHsKICAg
ICAgICAgSW1wb3J0KiBpbXBvcnQgPSAmbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0c1tpbXBv
cnRJbmRleF07CkBAIC0yMzAsNiArMjI1LDcgQEAgcHVibGljOgogCiB2b2lkIEJCUVBsYW46OmNv
bXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogeworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fY2FsbGVlcyk7CiAgICAgQVNTRVJUKG1fc3RhdGUgPj0gU3RhdGU6OlByZXBhcmVk
KTsKICAgICBkYXRhTG9nTG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRp
bmcgY29tcGlsYXRpb24iKTsKIApAQCAtMjY2LDEzICsyNjIsNyBAQCB2b2lkIEJCUVBsYW46OmNv
bXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBBU1NFUlRf
VU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJl
SW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0
dXJlSW5kZXgpOwogICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2ln
bmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKLSAgICAgICAgbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPigpOwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkpCi0g
ICAgICAgICAgICBtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA9IG1ha2VVbmlxdWU8VGll
clVwQ291bnQ+KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fdGllclVwQ291bnRzW2Z1
bmN0aW9uSW5kZXhdID0gbnVsbHB0cjsKLSAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IG1f
dGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdLmdldCgpOwotICAgICAgICBFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVz
dWx0OworICAgICAgICBFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3Vs
dDsKICAgICAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSA9IDA7CiAKICAg
ICAgICAgLy8gRklYTUU6IFNvbWUgd2VicGFnZXMgdXNlIHZlcnkgbGFyZ2UgV2FzbSBtb2R1bGUs
IGFuZCBpdCBleGhhdXN0cyBhbGwgZXhlY3V0YWJsZSBtZW1vcnkgaW4gQVJNNjQgZGV2aWNlcyBz
aW5jZSB0aGUgc2l6ZSBvZiBleGVjdXRhYmxlIG1lbW9yeSByZWdpb24gaXMgb25seSBsaW1pdGVk
IHRvIDEyOE1CLgpAQCAtMjgyLDEwICsyNzIsMTEgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgaWYgKE9wdGlvbnM6Ondl
YkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpICYmIG1fbW9kdWxlSW5mb3JtYXRpb24tPmNv
ZGVTZWN0aW9uU2l6ZSA+PSBPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck1vZGVUaHJlc2hvbGQo
KSkKICAgICAgICAgICAgIGZvcmNlVXNpbmdCMyA9IHRydWU7CiAKKyAgICAgICAgVGllclVwQ291
bnQqIHRpZXJVcCA9IG1fY2FsbGVlcy0+YXQoZnVuY3Rpb25JbmRleCktPnRpZXJVcENvdW50KCk7
CiAgICAgICAgIGlmICghZm9yY2VVc2luZ0IzICYmIE9wdGlvbnM6Ondhc21CQlFVc2VzQWlyKCkp
Ci0gICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIo
bV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJl
LCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9y
bWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21F
eGNlcHRpb24pOworICAgICAgICAgICAgcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRD
b21waWxlQWlyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24s
IHNpZ25hdHVyZSwgbV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCwgbV90aHJvd1dhc21FeGNlcHRpb24p
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJz
ZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlv
biwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21v
ZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCwg
dGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAgICAgICAgICBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9u
SW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwg
Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVy
VXAsIG1fdGhyb3dXYXNtRXhjZXB0aW9uKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKQEAgLTI5NCwxMSArMjg1LDExIEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0
aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XSA9
IFdURk1vdmUoKnBhcnNlQW5kQ29tcGlsZVJlc3VsdCk7Ci0KICAgICAgICAgaWYgKG1fZXhwb3J0
ZWRGdW5jdGlvbkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+cmVmZXJlbmNlZEZ1bmN0aW9ucygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7
CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVu
Y3Rpb25JbmRleCwgbV9jcmVhdGVFbWJlZGRlcldyYXBwZXIobV9jb21waWxhdGlvbkNvbnRleHRz
W2Z1bmN0aW9uSW5kZXhdLCBzaWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1
bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9u
SW5kZXgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+IGVt
YmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVkZGVyRW50cnlwb2ludENhbGxlZTo6
Y3JlYXRlKCk7CisgICAgICAgICAgICBtX2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihtX2NvbXBpbGF0
aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIHNpZ25hdHVyZSwgZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlLmdldCgpLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUpOworICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnMuYWRk
KGZ1bmN0aW9uSW5kZXgsIFdURk1vdmUoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwogICAgICAg
ICB9CiAKQEAgLTMxNiw3ICszMDcsOSBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICBDb21waWxhdGlvbkNvbnRleHQmIGNv
bnRleHQgPSBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAg
ICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmlu
dGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAg
ICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5j
dGlvbkNvdW50KCk7CisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNv
dW50ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOworICAgICAg
ICAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCAr
IGltcG9ydEZ1bmN0aW9uQ291bnQ7CisgICAgICAgICAgICBCQlFDYWxsZWUmIGNhbGxlZSA9ICpt
X2NhbGxlZXMtPmF0KGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgQVNTRVJUKGZ1bmN0aW9u
SW5kZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUo
KSk7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwpAQCAtMzI1LDkgKzMxOCwxNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiBsb2NrZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tm
dW5jdGlvbkluZGV4XS0+ZW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNv
bXBpbGF0aW9uPigKKyAgICAgICAgICAgICAgICBjYWxsZWUuZW50cnlwb2ludCgpLmNhbGxlZVNh
dmVSZWdpc3RlcnMgPSBXVEZNb3ZlKGNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAg
ICAgICAgICAgICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8
QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9uWyVp
XSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5h
c2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNt
RW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKKworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Y2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UgPj0gaW1wb3J0RnVuY3Rpb25Db3VudCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IHRhcmdldEZ1bmN0aW9uSW5kZXggPSBj
YWxsLnRhcmdldEZ1bmN0aW9uSW5kZXhTcGFjZSAtIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9y
dEZ1bmN0aW9uQ291bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsZWVzLT5hdCh0YXJn
ZXRGdW5jdGlvbkluZGV4KS0+YWRkQ2FsbGVyKGxvY2tlciwgbGlua0J1ZmZlciwgY2FsbC51bmxp
bmtlZE1vdmVBbmRDYWxsKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gbV9l
bWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmdldChmdW5jdGlvbkluZGV4KSkgewpAQCAt
MzM3LDIzICszMzgsMTggQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5l
bnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAg
ICAgICAgICAgICAgIGVtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbi0+ZW50cnlwb2ludCgp
LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICAgICAg
ICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJF
bWJlZGRlci0+V2ViQXNzZW1ibHkgZW50cnlwb2ludFslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9u
SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKElu
ZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNl
Y3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAg
ICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQuZW1iZWRkZXJFbnRyeXBvaW50Qnlwcm9kdWN0
cykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgZm9yIChhdXRvJiB1bmxp
bmtlZCA6IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpIHsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgY2FsbCA6IHVubGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFdhc21FbnRyeVB0clRhZz4gZXhlY3V0YWJsZUFkZHJlc3M7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fbW9kdWxlSW5mb3JtYXRpb24tPmlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FIGltcG9ydHMgY291bGQgaGF2ZSBiZWVuIGxpbmtlZCBpbiBCMywgaW5zdGVhZCBv
ZiBnZW5lcmF0aW5nIGEgcGF0Y2hwb2ludC4gVGhpcyBjb25kaXRpb24gc2hvdWxkIGJlIHJlcGxh
Y2VkIGJ5IGEgUkVMRUFTRV9BU1NFUlQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjY0NjIKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFkZHJlc3MgPSBt
X3dhc21Ub1dhc21FeGl0U3R1YnMuYXQoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmNvZGUoKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZUFk
ZHJlc3MgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFj
ZSAtIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSktPmVudHJ5cG9p
bnQuY29tcGlsYXRpb24tPmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihleGVjdXRhYmxlQWRkcmVz
cykpOworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVtYmVkZGVyTW92ZUFuZENhbGwpCisg
ICAgICAgICAgICAgICAgICAgIGNhbGxlZS5hZGRDYWxsZXIobG9ja2VyLCBsaW5rQnVmZmVyLCAq
Y29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICB9
CisKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsZWUgOiAqbV9jYWxsZWVzKQorICAgICAgICAgICAg
Y2FsbGVlLT5yZXBhdGNoQ2FsbGVycyhsb2NrZXIsICpjYWxsZWUpOwogICAgIH0KICAgICAKICAg
ICBpZiAoIWlzQ29tcGxldGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmgKaW5kZXggODgzNjE3ZmM2N2ZmZWI4MDUxMjA4Yzc0MGUyZjFmOTE4OGI0MTMwZC4uZTNl
NmVlNjYwYmIxN2YzOWJiZGZhNGI0YTBiODRmMDVjMjUyYmIzZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBl
bnVtIEFzeW5jV29yayA6IHVpbnQ4X3QgeyBGdWxsQ29tcGlsZSwgVmFsaWRhdGlvbiB9OwogCiAg
ICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRv
IHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAg
IEJCUVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29t
cGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlv
bik7CisgICAgQkJRUGxhbihDb250ZXh0KiwgY29uc3QgVmVjdG9yPFJlZlB0cjxCQlFDYWxsZWU+
PiYsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4sIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJiwg
Q3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQkJRUGxhbihDb250ZXh0KiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIEFzeW5jV29y
aywgQ29tcGxldGlvblRhc2smJiwgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYsIFRocm93V2FzbUV4
Y2VwdGlvbik7CiAgICAgQkJRUGxhbihDb250ZXh0KiwgQXN5bmNXb3JrLCBDb21wbGV0aW9uVGFz
ayYmKTsKIApAQCAtOTgsMTIgKzk4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGTW92
ZShtX3dhc21Ub1dhc21FeGl0U3R1YnMpOwogICAgIH0KIAotICAgIFZlY3RvcjxWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4+IHRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCkKLSAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSAmJiAhaGFzV29yaygpKTsKLSAgICAgICAg
cmV0dXJuIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dhc21DYWxscyk7Ci0gICAgfQotCiAgICAg
ZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgewogICAgICAgICBJbml0aWFsLAogICAgICAgICBW
YWxpZGF0ZWQsCkBAIC0xMzksMTQgKzEzMywxMyBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx1aW50
OF90PiBtX3NvdXJjZTsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBtX3dhc21U
b1dhc21FeGl0U3R1YnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPj4gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnM7CiAgICAgSGFzaFNldDx1aW50MzJfdCwgdHlw
ZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlczsKLSAgICBI
YXNoTWFwPHVpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIHR5cGVu
YW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsK
KyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiwg
dHlwZW5hbWUgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rp
b25zOwogICAgIFZlY3RvcjxDb21waWxhdGlvbkNvbnRleHQ+IG1fY29tcGlsYXRpb25Db250ZXh0
czsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50Pj4gbV90aWVyVXBDb3Vu
dHM7CiAKLSAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+PiBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzOwogICAgIFN0cmVhbWluZ1BhcnNlciBtX3N0cmVhbWluZ1BhcnNl
cjsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEJCUUNhbGxlZT4+KiBtX2NhbGxlZXMgeyBudWxs
cHRyIH07CiAgICAgU3RhdGUgbV9zdGF0ZTsKIAogICAgIGNvbnN0IEFzeW5jV29yayBtX2FzeW5j
V29yazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVz
LmgKaW5kZXggODY2MDFhYzllZjNmYjM4NWUwNjAyOTAxYzFhMDRkNTMwYzU2M2NhOC4uOWJiYzZm
Mzg5NzUyZDc3MDZlNGM5ZmIxNWM4NTk5ZjU0ZjI4MmY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW5JbmxpbmVzLmgKQEAgLTM4LDIxICszOCw4IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVz
KGNvbnN0IEZ1bmN0b3ImIGNhbGxiYWNrKQogewogICAgIEFTU0VSVCghZmFpbGVkKCkpOwotICAg
IGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlv
bkluZGV4IDwgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rp
b25JbmRleCkgewotCi0gICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWU+IGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZTsKLSAgICAgICAgaWYgKGF1dG8gZW1iZWRkZXJUb1dhc21GdW5jdGlvbiA9IG1f
ZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5nZXQoaW50ZXJuYWxGdW5jdGlvbkluZGV4
KSkgewotICAgICAgICAgICAgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gV2FzbTo6RW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShlbWJlZGRlclRvV2FzbUZ1bmN0aW9u
LT5lbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRz
Ojpib3hXYXNtKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZS5nZXQoKSkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBtX3dhc21JbnRlcm5hbEZ1bmN0
aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLmdldCgpOwotICAgICAgICBzaXplX3QgZnVuY3Rp
b25JbmRleFNwYWNlID0gaW50ZXJuYWxGdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgICAgICBSZWY8V2FzbTo6Q2FsbGVlPiB3YXNt
RW50cnlwb2ludENhbGxlZSA9IFdhc206OkJCUUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rp
b24tPmVudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgV1RGTW92ZShtX3RpZXJVcENv
dW50c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpi
b3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7Ci0KLSAgICAgICAgY2FsbGJhY2so
aW50ZXJuYWxGdW5jdGlvbkluZGV4LCBXVEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSks
IFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25l
ZCBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPSAwOyBpbnRlcm5hbEZ1bmN0aW9uSW5kZXggPCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyArK2ludGVybmFsRnVuY3Rpb25JbmRl
eCkKKyAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBtX2VtYmVkZGVyVG9X
YXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwCmluZGV4IGNlNjEwNzZkMWFjYjc5YWVhNGM1ZThiNzUyYjE3OTQ4NWNhZjA4
ZWUuLmY3ZDQ3YmE5MDM4NmE3MzExN2QxMjY0YjcwMTI0OGU1OWJjY2Q0NjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9XYXNtKHVuc2kKICAgICBKSVQgaml0OwogCiAgICAgR1BSUmVnIHNjcmF0Y2gg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisgICAgR1BS
UmVnIGNhbGxlZSA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgx
KTsKICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7
CiAgICAgQVNTRVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7CiAgICAgQVNTRVJUKHBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwpAQCAtNTcsMTMgKzU4LDIwIEBAIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVy
ZT4gd2FzbVRvV2FzbSh1bnNpCiAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHNpemVS
ZWdBc1NjcmF0Y2gpOyAvLyBPbGQgSW5zdGFuY2UqCiAgICAgLy8gR2V0IHRoZSBjYWxsZWUncyBX
YXNtOjpJbnN0YW5jZSBhbmQgc2V0IGl0IGFzIFdhc21Db250ZXh0J3MgaW5zdGFuY2UuIFRoZSBj
YWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVzdG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCiAgICAg
aml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZz
ZXRPZlRhcmdldEluc3RhbmNlKGltcG9ydEluZGV4KSksIGJhc2VNZW1vcnkpOyAvLyBJbnN0YW5j
ZSouCi0gICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdl
dCB0aGUgd2FzbSBlbnRyeXBvaW50IHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCisg
ICAgLy8gV2hpbGUgd2UncmUgYWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUg
d2FzbSBlbnRyeXBvaW50IGFuZCBjYWxsZWUgc28gd2UgY2FuIHRhaWwgY2FsbCB0byBpdCBiZWxv
dy4KICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFu
Y2U6Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oaW1wb3J0SW5kZXgpKSwgc2Ny
YXRjaCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIElu
c3RhbmNlOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKGltcG9ydEluZGV4KSksIGNh
bGxlZSk7CiAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKIAog
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVnQXNTY3JhdGNoKTsKICAgICBqaXQu
c3RvcmVQdHIoc2l6ZVJlZ0FzU2NyYXRjaCwgSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwogCisgICAgLy8gU2V0IHRoZSBjYWxs
ZWUgc2xvdCBpbiB0aGUgY2FsbCBmcmFtZQorICAgIGppdC5sb2FkUHRyKGNhbGxlZSwgY2FsbGVl
KTsKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGJlZW4gY2FsbGVkLCBzbyBSZXR1cm5Q
QyBpcyBvbiB0aGUgc3RhY2ssIGJ1dCBoYXZlIG5vdCB5ZXQgcHVzaGVkIHRoZSBiYXNlIHBvaW50
ZXIsCisgICAgLy8gc28gd2UgaGF2ZSB0byBzdWJ0cmFjdCB0aGUgc3BhY2UgZm9yIENhbGxlckZy
YW1lIGZyb20gdGhlIGNhbGxlZSBzbG90CisgICAgaml0LnN0b3JlUHRyKGNhbGxlZSwgSklUOjpB
ZGRyZXNzKEpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAq
IHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpKSk7CisKICAgICAvLyBGSVhN
RSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXYXNtOjpJbnN0YW5jZSBoYXZl
IHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkg
cmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgogICAgIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAKaW5kZXggZThkZGYxNTNkZDlk
OTAyMjljNTEyODFlYzI4MTJmN2E1OTExNDFkNi4uOTMzMTRhYjY2Nzc4N2Y2OTE5OWIxYTQyYzNk
MjlkM2ZjNGI2Yzg2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxlZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5j
cHAKQEAgLTMyLDE2ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewogCi1DYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2Rl
LCBFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKK0NhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0
aW9uTW9kZSBjb21waWxhdGlvbk1vZGUpCiAgICAgOiBtX2NvbXBpbGF0aW9uTW9kZShjb21waWxh
dGlvbk1vZGUpCi0gICAgLCBtX2VudHJ5cG9pbnQoV1RGTW92ZShlbnRyeXBvaW50KSkKIHsKICAg
ICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUodGhpcyk7CiB9CiAK
LUNhbGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVu
dHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1l
KiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorQ2FsbGVlOjpDYWxsZWUoV2FzbTo6Q29t
cGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29u
c3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKICAgICA6IG1fY29tcGlsYXRp
b25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkKLSAgICAsIG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5
cG9pbnQpKQogICAgICwgbV9pbmRleE9yTmFtZShpbmRleCwgV1RGTW92ZShuYW1lKSkKIHsKICAg
ICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJDYWxsZWUodGhpcyk7CkBAIC01
Miw2ICs1MCw0OCBAQCBDYWxsZWU6On5DYWxsZWUoKQogICAgIENhbGxlZVJlZ2lzdHJ5OjpzaW5n
bGV0b24oKS51bnJlZ2lzdGVyQ2FsbGVlKHRoaXMpOwogfQogCisKK2lubGluZSB2b2lkIHJlcGF0
Y2hNb3ZlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdh
c21FbnRyeVB0clRhZz4gbW92ZUxvY2F0aW9uLCBDYWxsZWUmIHRhcmdldENhbGxlZSkKK3sKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIobW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRz
Ojpib3hXYXNtKCZ0YXJnZXRDYWxsZWUpKTsKK30KKworaW5saW5lIHZvaWQgcmVwYXRjaENhbGwo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50cnlQdHJU
YWc+IGNhbGxMb2NhdGlvbiwgQ2FsbGVlJiB0YXJnZXRDYWxsZWUpCit7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdh
c21FbnRyeVB0clRhZz4odGFyZ2V0Q2FsbGVlLmNvZGUoKSkpOworfQorCit2b2lkIEJCUUNhbGxl
ZTo6YWRkQ2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZlciYgbGlua0J1ZmZl
ciwgVW5saW5rZWRNb3ZlQW5kQ2FsbCBjYWxsKQoreworICAgIGF1dG8gbW92ZUxvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0clRhZz4oY2FsbC5tb3ZlTG9jYXRpb24p
OworICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
V2FzbUVudHJ5UHRyVGFnPihjYWxsLmNhbGxMb2NhdGlvbik7CisgICAgbV9tb3ZlTG9jYXRpb25z
LmFwcGVuZChtb3ZlTG9jYXRpb24pOworICAgIG1fY2FsbExvY2F0aW9ucy5hcHBlbmQoY2FsbExv
Y2F0aW9uKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OmFkZEFuZExpbmtDYWxsZXIoY29uc3QgQWJz
dHJhY3RMb2NrZXImIGxvY2tlciwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgVW5saW5rZWRNb3Zl
QW5kQ2FsbCBjYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5cG9pbnQoKS5jb21waWxh
dGlvbik7CisKKyAgICBhdXRvIG1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxX
YXNtRW50cnlQdHJUYWc+KGNhbGwubW92ZUxvY2F0aW9uKTsKKyAgICBhdXRvIGNhbGxMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbC5j
YWxsTG9jYXRpb24pOworICAgIG1fbW92ZUxvY2F0aW9ucy5hcHBlbmQobW92ZUxvY2F0aW9uKTsK
KyAgICBtX2NhbGxMb2NhdGlvbnMuYXBwZW5kKGNhbGxMb2NhdGlvbik7CisKKyAgICBDYWxsZWUm
IHRhcmdldENhbGxlZSA9IG1fcmVwbGFjZW1lbnQgPyBzdGF0aWNfY2FzdDxDYWxsZWUmPigqbV9y
ZXBsYWNlbWVudCkgOiAqdGhpczsKKyAgICByZXBhdGNoTW92ZShsb2NrZXIsIG1vdmVMb2NhdGlv
biwgdGFyZ2V0Q2FsbGVlKTsKKyAgICByZXBhdGNoQ2FsbChsb2NrZXIsIGNhbGxMb2NhdGlvbiwg
dGFyZ2V0Q2FsbGVlKTsKK30KKwordm9pZCBCQlFDYWxsZWU6OnJlcGF0Y2hDYWxsZXJzKGNvbnN0
IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIENhbGxlZSYgdGFyZ2V0Q2FsbGVlKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKHRhcmdldENhbGxlZS5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24pOworICAg
IGZvciAoYXV0byBtb3ZlTG9jYXRpb24gOiBtX21vdmVMb2NhdGlvbnMpCisgICAgICAgIHJlcGF0
Y2hNb3ZlKGxvY2tlciwgbW92ZUxvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOworICAgIGZvciAoYXV0
byBjYWxsTG9jYXRpb24gOiBtX2NhbGxMb2NhdGlvbnMpCisgICAgICAgIHJlcGF0Y2hDYWxsKGxv
Y2tlciwgY2FsbExvY2F0aW9uLCB0YXJnZXRDYWxsZWUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCmluZGV4IGY3ZWE0ZDA1YjhkMGE3MWMxZWU2MmE1NmM0
ZDM5ZGE1NDlmMDliN2IuLjk5MDlkYzQwOTU5OTE5YTVjNjlhZmJkZjI1Mjk1ODI5M2ExMWM0YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKQEAgLTQwLDEyICs0MCwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogY2xhc3MgQ2FsbGVlIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxlZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IGVudHJ5cG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24t
PmNvZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7IH0KLQotICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlwb2ludC5j
YWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisgICAgRW50cnlwb2ludCYgZW50cnlwb2ludCgpIHsgcmV0
dXJuIG1fZW50cnlwb2ludDsgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNv
ZGUoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7IH0KICAgICBJbmRleE9yTmFtZSBpbmRl
eE9yTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhPck5hbWU7IH0KICAgICBDb21waWxhdGlv
bk1vZGUgY29tcGlsYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxhdGlvbk1vZGU7
IH0KIAorICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyBy
ZXR1cm4gJm1fZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisKICAgICBzdGQ6OnR1
cGxlPHZvaWQqLCB2b2lkKj4gcmFuZ2UoKSBjb25zdAogICAgIHsKICAgICAgICAgdm9pZCogc3Rh
cnQgPSBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKQEAgLTU2LDc4ICs1Nyw3MCBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q2FsbGVlKCk7CiAKIHByb3RlY3RlZDoKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlLCBXYXNtOjpF
bnRyeXBvaW50JiYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21waWxh
dGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQmJiwgc2l6ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFt
ZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxl
ZShDb21waWxhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENhbGxlZShDb21waWxh
dGlvbk1vZGUsIHNpemVfdCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rp
b24+PiYmKTsKIAogcHJpdmF0ZToKICAgICBDb21waWxhdGlvbk1vZGUgbV9jb21waWxhdGlvbk1v
ZGU7Ci0gICAgV2FzbTo6RW50cnlwb2ludCBtX2VudHJ5cG9pbnQ7CisgICAgRW50cnlwb2ludCBt
X2VudHJ5cG9pbnQ7CiAgICAgSW5kZXhPck5hbWUgbV9pbmRleE9yTmFtZTsKIH07CiAKIGNsYXNz
IE9NR0NhbGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8T01HQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVf
dCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5h
bWUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCisgICAg
c3RhdGljIFJlZjxPTUdDYWxsZWU+IGNyZWF0ZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgT01HQ2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE9NR0NhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSkpOwogICAgIH0KIAot
ICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgd2FzbVRvV2FzbUNhbGxzaXRlcygp
IHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQotCiBwcml2YXRlOgotICAgIE9NR0Nh
bGxlZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBh
aXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAgICAgOiBDYWxsZWUoV2Fz
bTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwg
V1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3dhc21Ub1dhc21DYWxsc2l0ZXMoV1RGTW92ZSh1
bmxpbmtlZENhbGxzKSkKKyAgICBPTUdDYWxsZWUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29u
c3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSkKKyAgICAgICAgOiBDYWxsZWUo
Q29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKICAgICB7CiAg
ICAgfQotCi0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IG1fd2FzbVRvV2FzbUNh
bGxzaXRlczsKIH07CiAKIGNsYXNzIE9NR0Zvck9TUkVudHJ5Q2FsbGVlIGZpbmFsIDogcHVibGlj
IENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4g
Y3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6
cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBv
c3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29wSW5kZXgsIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCisgICAgc3RhdGljIFJlZjxPTUdG
b3JPU1JFbnRyeUNhbGxlZT4gY3JlYXRlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5h
bWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCksIGlu
ZGV4LCBXVEZNb3ZlKG5hbWUpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBsb29wSW5kZXgs
IFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
T01HRm9yT1NSRW50cnlDYWxsZWUoaW5kZXgsIFdURk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIGxvb3BJbmRleCkpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX29zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemU7IH0KICAgICB1aW50MzJfdCBsb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xvb3BJ
bmRleDsgfQotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgd2FzbVRvV2FzbUNh
bGxzaXRlcygpIHsgcmV0dXJuIG1fd2FzbVRvV2FzbUNhbGxzaXRlczsgfQogCiBwcml2YXRlOgot
ICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCB1aW50MzJfdCBsb29w
SW5kZXgsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYmIHVubGlua2VkQ2FsbHMpCi0g
ICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlNb2Rl
LCBXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBt
X3dhc21Ub1dhc21DYWxsc2l0ZXMoV1RGTW92ZSh1bmxpbmtlZENhbGxzKSkKKyAgICBPTUdGb3JP
U1JFbnRyeUNhbGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJiBuYW1lLCB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXpl
LCB1aW50MzJfdCBsb29wSW5kZXgpCisgICAgICAgIDogQ2FsbGVlKENvbXBpbGF0aW9uTW9kZTo6
T01HRm9yT1NSRW50cnlNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX29z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUob3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKICAgICAg
ICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiAgICAgewogICAgIH0KIAotICAgIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgdW5zaWdu
ZWQgbV9vc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIHVpbnQzMl90IG1fbG9vcEluZGV4
OwogfTsKIAogY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlIGZpbmFsIDogcHVibGljIENh
bGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+
IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCkKKyAgICBzdGF0aWMgUmVmPEVt
YmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQp
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZSgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQotICAgICAgICA6IENhbGxlZShXYXNtOjpDb21w
aWxhdGlvbk1vZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUsIFdURk1vdmUoZW50cnlwb2ludCkp
CisgICAgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKCkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGls
YXRpb25Nb2RlOjpFbWJlZGRlckVudHJ5cG9pbnRNb2RlKQogICAgIHsKICAgICB9CiB9OwogCiBj
bGFzcyBCQlFDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEJCUUNhbGxlZT4gY3JlYXRlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBz
aXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4m
JiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291bnQpCisgICAg
c3RhdGljIFJlZjxCQlFDYWxsZWU+IGNyZWF0ZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGll
clVwQ291bnQ+JiYgdGllclVwQ291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBCQlFDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSks
IFdURk1vdmUodGllclVwQ291bnQpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJC
UUNhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0aWVyVXBDb3VudCkpKTsKICAg
ICB9CiAKICAgICBPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUoKSB7IHJldHVy
biBtX29zckVudHJ5Q2FsbGVlLmdldCgpOyB9CkBAIC0xNDcsMTMgKzE0MCwyMCBAQCBwdWJsaWM6
CiAKICAgICBUaWVyVXBDb3VudCogdGllclVwQ291bnQoKSB7IHJldHVybiBtX3RpZXJVcENvdW50
LmdldCgpOyB9CiAKKyAgICB2b2lkIGFkZENhbGxlcihjb25zdCBBYnN0cmFjdExvY2tlciYsIExp
bmtCdWZmZXImLCBVbmxpbmtlZE1vdmVBbmRDYWxsKTsKKyAgICB2b2lkIGFkZEFuZExpbmtDYWxs
ZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5rQnVmZmVyJiwgVW5saW5rZWRNb3ZlQW5kQ2Fs
bCk7CisKKyAgICB2b2lkIHJlcGF0Y2hDYWxsZXJzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgQ2Fs
bGVlJik7CisKIHByaXZhdGU6Ci0gICAgQkJRQ2FsbGVlKFdhc206OkVudHJ5cG9pbnQmJiBlbnRy
eXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVT
ZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291
bnQpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgV1RG
TW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFtZSkpCisgICAgQkJRQ2FsbGVlKHNp
emVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYm
IG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCkKKyAgICAg
ICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBpbmRleCwgV1RGTW92ZShuYW1l
KSkKICAgICAgICAgLCBtX3RpZXJVcENvdW50KFdURk1vdmUodGllclVwQ291bnQpKQogICAgIHsK
ICAgICB9CiAKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0
clRhZz4+IG1fbW92ZUxvY2F0aW9uczsKKyAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTmVhckNhbGw8
V2FzbUVudHJ5UHRyVGFnPj4gbV9jYWxsTG9jYXRpb25zOwogICAgIFJlZlB0cjxPTUdGb3JPU1JF
bnRyeUNhbGxlZT4gbV9vc3JFbnRyeUNhbGxlZTsKICAgICBSZWZQdHI8T01HQ2FsbGVlPiBtX3Jl
cGxhY2VtZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4gbV90aWVyVXBDb3Vu
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29u
dmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50
aW9uLmgKaW5kZXggYjQ0MmI2MTYxYmY5MjMzNzU4MTk3NTgxM2ZmMzgwNmE3MzFhOTIyNi4uNmZh
NDM2OWNjZGNhODhlNGI3MGVkNjQ2OWJiNzYzOTgxNGY4ZTg0MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKQEAgLTg4LDM0ICs4
OCwxNiBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgc3RhdGljIHVuc2lnbmVkIGhlYWRlclNp
emVJbkJ5dGVzKCkgeyByZXR1cm4gaGVhZGVyU2l6ZTsgfQotICAgIHZvaWQgc2V0dXBGcmFtZUlu
UHJvbG9ndWUoQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGNhbGxl
ZU1vdmVMb2NhdGlvbiwgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIz
OjpCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB2b2lkIHNldHVwRnJhbWVJblByb2xvZ3Vl
KEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4gb3JpZ2luLCBCMzo6QmFzaWNCbG9jayog
YmxvY2spIGNvbnN0CiAgICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlz
IGhlcmUgZm9yIG5vdy4iKTsKICAgICAgICAgc3RhdGljX2Fzc2VydChDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJlbHkgb24gdGhp
cyBoZXJlIGZvciBub3cuIik7CiAKLSAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogZ2V0Q2Fs
bGVlUGF0Y2hwb2ludCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJv
YywgQjM6OkludDY0LCBvcmlnaW4pOwotICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50LT5yZXN1
bHRDb25zdHJhaW50cyA9IHsgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIgfTsKLSAgICAgICAg
Z2V0Q2FsbGVlUGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7Ci0gICAg
ICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgewotICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBwYXJhbXNbMF0uZ3ByKCk7
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRp
b24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2NhbGxlZU1v
dmVMb2NhdGlvbiwgbW92ZUxvY2F0aW9uXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICAgICAgICAgICAgICAqY2FsbGVlTW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPFdhc21FbnRyeVB0clRhZz4obW92ZUxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7
Ci0gICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUgPSBibG9jay0+YXBwZW5kTmV3PEIz
OjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6
ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVl
Pihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKLSAgICAgICAgICAgIGdldENhbGxlZVBhdGNocG9p
bnQsCi0gICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkFk
ZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ2FsbGVlKSk7Ci0KICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIHplcm8gaW50byB0aGUgQ29kZUJsb2Nr
KiBzcG90IGluIHRoZSBjYWxsIGZyYW1lLAogICAgICAgICAvLyBidXQgdGhlcmUgYXJlIHBsYWNl
cyB0aGF0IGludGVycHJldCBub24tbnVsbCBDb2RlQmxvY2sgc2xvdCB0byBtZWFuIGEgdmFsaWQg
Q29kZUJsb2NrLgogICAgICAgICAvLyBXaGVuIGRvaW5nIHVud2luZGluZywgd2UnbGwgbmVlZCB0
byB2ZXJpZnkgdGhhdCB0aGUgZW50aXJlIHJ1bnRpbWUgaXMgT0sgd2l0aCBhIG5vbi1udWxsCiAg
ICAgICAgIC8vIENvZGVCbG9jayBub3QgaW1wbHlpbmcgdGhhdCB0aGUgQ29kZUJsb2NrIGlzIHZh
bGlkLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1MzIxCisgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7CiAgICAgICAgIEIz
OjpWYWx1ZSogb2Zmc2V0T2ZDb2RlQmxvY2sgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0
VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJl
Z2lzdGVyKSk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9j
LCBCMzo6U3RvcmUsIG9yaWdpbiwKICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6OkNv
bnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCAwKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5jcHAKaW5kZXggZDRhOWNkNjc3MTAyYjU4ZTRmYzU5ZTFhMjBhZTU2
YjhlMjFjNzQzMC4uN2Q1NTQ3NmQyNmMwZGQ3MGFjZjRmNWEwMjMxMzNhMTg5MTM0ZGQ1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKQEAgLTI5LDcg
KzI5LDYgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtQkJRUGxh
bklubGluZXMuaCIKLSNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1h
dC5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgogCkBAIC00Nyw3ICs0NiwxNSBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVs
ZUluZm9ybWF0aW9uJiBtb2R1bAogewogICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb3RlY3RlZFRo
aXMgPSB0aGlzOwogCi0gICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQs
IG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxsQ29tcGlsZSwgY3JlYXRl
U2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RG
TW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CisgICAgbV9jYWxsZWVzLnJlc2l6ZShtX2Nh
bGxlZUNvdW50KTsKKyAgICBtX2JveGVkQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fY2FsbGVlQ291bnQ7IGkrKykgeworICAgICAg
ICB1aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRG
dW5jdGlvbkNvdW50KCkgKyBpOworICAgICAgICBtX2NhbGxlZXNbaV0gPSBCQlFDYWxsZWU6OmNy
ZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1vZHVsZUluZm9ybWF0aW9uLm5hbWVTZWN0aW9uLT5n
ZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgbWFrZVVuaXF1ZTxUaWVyVXBDb3VudD4oKSk7CisgICAg
ICAgIG1fYm94ZWRDYWxsZWVzW2ldID0gQ2FsbGVlQml0czo6Ym94V2FzbShtX2NhbGxlZXNbaV0u
Z2V0KCkpOworICAgIH0KKworICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxhbihjb250
ZXh0LCBtX2NhbGxlZXMsIG1ha2VSZWYobW9kdWxlSW5mb3JtYXRpb24pLCBCQlFQbGFuOjpGdWxs
Q29tcGlsZSwgY3JlYXRlU2hhcmVkVGFzazxQbGFuOjpDYWxsYmFja1R5cGU+KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKFBsYW4mKSB7CiAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICAgICAgaWYgKG1fcGxhbi0+ZmFpbGVk
KCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gbV9wbGFuLT5lcnJvck1lc3NhZ2Uo
KTsKQEAgLTU2LDIxICs2MywxOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250
ZXh0LCBNZW1vcnlNb2RlIG1vZGUsIE1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bAogICAgICAgICB9
CiAKICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBldmVudHVhbGx5IGNvbGxlY3QgdGhlIEJC
USBjb2RlLgotICAgICAgICBtX2NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOwogICAgICAg
ICBtX29wdGltaXplZENhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291bnQpOwogICAgICAgICBtX3dh
c21JbmRpcmVjdENhbGxFbnRyeVBvaW50cy5yZXNpemUobV9jYWxsZWVDb3VudCk7CiAKLSAgICAg
ICAgbV9wbGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBS
ZWZQdHI8V2FzbTo6Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgUmVmPFdhc206
OkNhbGxlZT4mJiB3YXNtRW50cnlwb2ludENhbGxlZSkgeworICAgICAgICBtX3BsYW4tPmluaXRp
YWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0cjxFbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAgICAgICAg
ICBpZiAoZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBtX2VtYmVkZGVyQ2FsbGVlcy5zZXQoY2FsbGVlSW5kZXgsIFdURk1vdmUoZW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1
bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY2Fs
bGVlc1tjYWxsZWVJbmRleF0gPSBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAg
ICAgICAgIG1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1fY2Fs
bGVlc1tjYWxsZWVJbmRleF0tPmVudHJ5cG9pbnQoKTsKKyAgICAgICAgICAgIG1fd2FzbUluZGly
ZWN0Q2FsbEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1fY2FsbGVlc1tjYWxsZWVJbmRleF0t
PmNvZGUoKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgbV93YXNtVG9XYXNtRXhpdFN0dWJzID0g
bV9wbGFuLT50YWtlV2FzbVRvV2FzbUV4aXRTdHVicygpOwotICAgICAgICBtX3dhc21Ub1dhc21D
YWxsc2l0ZXMgPSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtQ2FsbHNpdGVzKCk7CiAKICAgICAgICAg
c2V0Q29tcGlsYXRpb25GaW5pc2hlZCgpOwogICAgIH0pLCBXVEZNb3ZlKGNyZWF0ZUVtYmVkZGVy
V3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVCbG9jay5oCmluZGV4IGRlYTJmZmEzMTgxMjAzZjc4YWFhNjFjNzBiZjI5NzFi
YzAzMjc5ZWQuLmMxMDc3ZDVkN2Y3NjljMzk3ZmY2ZWNlYTJlODk5ZjNjMzQyNGM5MzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKQEAgLTI4LDYgKzI4LDcg
QEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUVtYmVkZGVy
LmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4K
QEAgLTQwLDkgKzQxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAot
Y2xhc3MgQ2FsbGVlOwotc3RydWN0IENvbnRleHQ7CiBjbGFzcyBCQlFQbGFuOworc3RydWN0IENv
bnRleHQ7CiBjbGFzcyBPTUdQbGFuOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogc3RydWN0
IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7CkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIFRoZXNlIHR3byBjYWxsZWUgZ2V0dGVycyBhcmUgb25seSB2YWxpZCBvbmNlIHRoZSBjYWxs
ZWVzIGhhdmUgYmVlbiBwb3B1bGF0ZWQuCiAKLSAgICBDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KQorICAgIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAg
ewogICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1
bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwpAQCAtODYsNiArODYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZSk7CiAgICAgICAgIHJl
dHVybiAqY2FsbGVlOwogICAgIH0KKwogICAgIENhbGxlZSYgd2FzbUVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChydW5uYWJsZSgpKTsKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gKm1fY2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7CiAgICAgfQogCi0g
ICAgQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBm
dW5jdGlvbkluZGV4U3BhY2UpCisgICAgQkJRQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAg
ICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5k
ZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkpOwpAQCAtMTExLDYgKzExMiwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiAmbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbY2Fs
bGVlSW5kZXhdOwogICAgIH0KIAorICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbkZy
b21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1w
b3J0Q291bnQoKSk7CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRl
eFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOworICAgICAgICByZXR1cm4gJm1fYm94ZWRD
YWxsZWVzW2NhbGxlZUluZGV4XTsKKyAgICB9CisKICAgICBib29sIGlzU2FmZVRvUnVuKE1lbW9y
eU1vZGUpOwogCiAgICAgTWVtb3J5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9
CkBAIC0xMjQsMTEgKzEzMiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q29tcGlsYXRpb25G
aW5pc2hlZCgpOwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBt
X21vZGU7Ci0gICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7Ci0gICAgVmVjdG9y
PFJlZlB0cjxDYWxsZWU+PiBtX29wdGltaXplZENhbGxlZXM7Ci0gICAgSGFzaE1hcDx1aW50MzJf
dCwgUmVmUHRyPENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJD
YWxsZWVzOworICAgIFZlY3RvcjxSZWZQdHI8QkJRQ2FsbGVlPj4gbV9jYWxsZWVzOworICAgIFZl
Y3RvcjxSZWZQdHI8T01HQ2FsbGVlPj4gbV9vcHRpbWl6ZWRDYWxsZWVzOworICAgIFZlY3Rvcjx2
b2lkKj4gbV9ib3hlZENhbGxlZXM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFz
aCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRk
ZXJDYWxsZWVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7Ci0gICAgVmVjdG9yPFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3Rv
cjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhp
dFN0dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CiAgICAgc3RkOjphdG9taWM8Ym9v
bD4gbV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUVtYmVkZGVyLmgKaW5kZXggYTIzNzlmZDU4OWM4OWRmNjM1N2U2ZTQ0MWJlZDJh
NTE4NzM5Y2EzZS4uYzc4YjQ0M2M1OTFlODcwMzRiNDE5NWVjYTAyNzI4ZGVmODBjYzg5MyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKQEAgLTQxLDYgKzQxLDcg
QEAgY2xhc3MgRXhlY1N0YXRlOwogbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgQ29tcGlsYXRp
b25Db250ZXh0OworY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwogY2xhc3MgSW5zdGFu
Y2U7CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsK
QEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgU2lnbmF0dXJlOwogc3RydWN0IFVubGlua2VkV2FzbVRv
V2FzbUNhbGw7CiAKIC8vIENyZWF0ZSB3cmFwcGVyIGNvZGUgdG8gY2FsbCBmcm9tIGVtYmVkZGVy
IC0+IFdlYkFzc2VtYmx5LgotdXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5j
dGlvbjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4oQ29tcGlsYXRpb25Db250ZXh0
JiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCk+OwordXNpbmcgQ3Jl
YXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKENvbXBpbGF0aW9uQ29udGV4
dCYsIGNvbnN0IFNpZ25hdHVyZSYsIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSosIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSk+OwogCiAvLyBDYWxsZWQgYXMgc29vbiBhcyBh
biBleGNlcHRpb24gaXMgZGV0ZWN0ZWQuIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIFBDIHRvIGNv
bnRpbnVlIGF0LgogdXNpbmcgVGhyb3dXYXNtRXhjZXB0aW9uID0gdm9pZCogKCopKEV4ZWNTdGF0
ZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggMDY2OWJiNDA3ZTI5NTkzNjIyZmNjYThlNTE5MTE5NWRk
OWI0NmYzYi4uZWEwZTBiNjU4ZTllNDU1ZTliMDFjZGFlMmI0Nzk2YjYyMmI4MGUzZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjg3LDEwICsyODcsMTUgQEAg
aW5saW5lIGJvb2wgaXNWYWxpZE5hbWVUeXBlKEludCB2YWwpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitzdHJ1Y3QgVW5saW5rZWRNb3ZlQW5kQ2FsbCB7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRh
dGFMYWJlbFB0ciBtb3ZlTG9jYXRpb247CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbExv
Y2F0aW9uOworfTsKKwogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGwgewogICAgIFdURl9N
QUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNt
RW50cnlQdHJUYWc+IGNhbGxMb2NhdGlvbjsKLSAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNl
OworICAgIHNpemVfdCB0YXJnZXRGdW5jdGlvbkluZGV4U3BhY2U7CisgICAgVW5saW5rZWRNb3Zl
QW5kQ2FsbCB1bmxpbmtlZE1vdmVBbmRDYWxsOwogfTsKIAogc3RydWN0IEVudHJ5cG9pbnQgewpA
QCAtMzEzLDEwICszMTgsMTIgQEAgc3RydWN0IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24g
ewogICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+KjsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2lnbmF0dXJlSW5kZXgo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwg
c2lnbmF0dXJlSW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9p
bnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbiwgZW50cnlwb2ludExvYWRMb2NhdGlvbik7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9j
YXRpb24pOyB9CiAKICAgICAvLyBGSVhNRTogUGFjayBzaWduYXR1cmUgaW5kZXggYW5kIGNvZGUg
cG9pbnRlciBpbnRvIG9uZSA2NC1iaXQgdmFsdWUuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMT4uCiAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggeyBTaWduYXR1cmU6OmludmFsaWRJbmRleCB9OwogICAgIExvYWRMb2NhdGlvbiBlbnRy
eXBvaW50TG9hZExvY2F0aW9uOworICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbjsK
IH07CiB1c2luZyBGdW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0b3I8V2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgK
aW5kZXggZjRmMzUwODdlMjU2ZDA5MmNlNzRiMjFiODQ0MGE5MzcyNWQxNjY4NS4uN2UyMTI0Zjc2
YzYzYmY3NWUyZGIxMjM0OWQ5NTBiMGU5MzY4NDBjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2lu
dExvYWRMb2NhdGlvbiB7IG51bGxwdHIgfTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViOwogICAgICAgICB2b2lkKiBpbXBv
cnRGdW5jdGlvbiB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcsIHRoaXMgaXMgYSBX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+LgorICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9j
YXRpb24geyBudWxscHRyIH07CiAgICAgfTsKICAgICB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX251bUltcG9ydEZ1bmN0aW9uczsgfQogICAgIEltcG9ydEZ1
bmN0aW9uSW5mbyogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkK
QEAgLTE0MSw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldh
c21FbnRyeXBvaW50TG9hZExvY2F0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1
cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5j
dGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21Ub0Vt
YmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFp
bCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9C
SkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdhc21Ub0VtYmVkZGVyU3R1Yik7IH0K
ICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6ZV90IGltcG9ydEZ1
bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICog
c2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rp
b25JbmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQm94
ZWRDYWxsZWVMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBv
ZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9u
SW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCBib3hlZENhbGxlZUxv
YWRMb2NhdGlvbik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBpbXBvcnRGdW5jdGlv
bih1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxU
Kj4oJmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlvbk51bSktPmltcG9ydEZ1bmN0aW9u
KTsgfQogCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSA9PSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2NF90KT4oc2l6ZW9mKEltcG9ydEZ1
bmN0aW9uSW5mbykpLCAiV2UgcmVseSBvbiB0aGlzIGZvciB0aGUgYWxpZ25tZW50IHRvIGJlIGNv
cnJlY3QiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdG
b3JPU1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zv
ck9TUkVudHJ5UGxhbi5jcHAKaW5kZXggYTBiYjZjZjZkOTAzMDY3NDQzNTZkMjg4ZWFiMGMyYjUy
NTIwNTYyYS4uY2ZhZWFmMmViYzBiMTY0M2NlM2RhNmIxOGYxMGU1MGU3NzBiMGE1OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxh
bi5jcHAKQEAgLTU0LDE1ICs1NCwxNSBAQCBuYW1lc3BhY2UgV2FzbU9NR0Zvck9TUkVudHJ5UGxh
bkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotT01H
Rm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVm
PE1vZHVsZT4mJiBtb2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlv
blRhc2smJiB0YXNrKQorT01HRm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29u
dGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYgY2Fs
bGVlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIENvZGVCbG9j
ayYgY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBCYXNlKGNvbnRleHQs
IG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5m
b3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1
bGUpKQotICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCisg
ICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2NhbGxlZShXVEZNb3ZlKGNhbGxl
ZSkpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKICAgICAsIG1fbG9vcElu
ZGV4KGxvb3BJbmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUpOworICAgIHNldE1vZGUoY29kZUJs
b2NrLm1vZGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKICAgICBB
U1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0ZvcihtX21vZGUp
KTsKICAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJv
c2UsICJTdGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAi
IG9mIG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKQEAgLTgxLDQ1ICs4
MSwzMyBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkK
ICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9u
LCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29u
dGV4dCBjb250ZXh0OwogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAw
OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRl
eHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25N
b2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOwor
ICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQs
IGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnMs
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRl
eCwgbV9sb29wSW5kZXgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1
bHQpKSB7CiAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyhwYXJzZUFu
ZENvbXBpbGVSZXN1bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5nIHRvIHRpZXIgdXAgIiwgU3RyaW5n
OjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgRW50cnlwb2ludCBvbWdFbnRyeXBvaW50OwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigq
Y29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewog
ICAgICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBvZiBl
eGVjdXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0
cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxh
dGlvbj4oCisgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JF
bnRyeUNhbGxlZTo6Y3JlYXRlKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplLCBtX2xvb3BJbmRleCk7CisgICAgY2FsbGVlLT5lbnRyeXBvaW50KCkuY2FsbGVl
U2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoY29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAg
ICBjYWxsZWUtPmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBp
bGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9u
UHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWldICVzIG5hbWUg
JXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgp
LCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5k
YXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3Rz
KSk7CiAKLSAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBh
cnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3Rl
cnMpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlw
b2ludDsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9j
a0Zvcihtb2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9N
R0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0
aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBX
VEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxv
Y2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwotICAgICAgICBlbnRy
eXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7Ci0KICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDog
Y2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAo
Y2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5p
bXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29k
ZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2VdLmNv
ZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9j
b2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxs
LmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRh
Zz4oKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxs
LmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBv
aW50KSk7CisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykg
eworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxsZWUgPSBtX2NvZGVCbG9jay0+d2Fz
bUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4
U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtDYWxsZXIobG9ja2Vy
LCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwpAQCAtMTMyLDE5ICsx
MjAsNiBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkK
ICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5vc3JFbnRyeVRyaWdnZXJzKClb
bV9sb29wSW5kZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9u
ZTsKICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3Rh
dHVzRm9yT01HRm9yT1NSRW50cnkgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNv
bXBpbGVkOwogICAgICAgICB9Ci0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAg
ICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRlZCB3aGls
ZSB3ZSByZWxlYXNlIG1fY29kZUJsb2NrLT5sb2NrLgotICAgICAgICAvLyBVbnRpbCB3ZSBhZGQg
T01HRm9yT1NSRW50cnkgY2FsbGVlIHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxsZWUsIHRo
aXMgbmV3IE9NRyBmdW5jdGlvbiBsaW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhpcyBPTUdG
b3JPU1JFbnRyeSBjYWxsZWUuCi0gICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdGb3JPU1JF
bnRyeSBjYWxsZWUgYWdhaW4gbm90IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0gICAgICAgIGZvciAo
YXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAg
ICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5
cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25J
bmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50
cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbklu
ZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxX
YXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0
clRhZz4oZW50cnlwb2ludCkpOwotICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dMbklmKFdh
c21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9T
UkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIG1f
Y2FsbGVlLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0ZShob2xkTG9jayht
X2xvY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdG
b3JPU1JFbnRyeVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JP
U1JFbnRyeVBsYW4uaAppbmRleCAwMTUxZGE2NjVhOTY4MzI4Zjk1MDM4ZjViNTBjMDg1NzYxZjA1
ZGU3Li5kNTZlYTQyMTdkZDcxMGQ1NzUxNjQ1YTliM2ViMDE4YzQzNTBkMGRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oCkBA
IC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sg
c2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3
aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0
KiwgUmVmPE1vZHVsZT4mJiwgUmVmPEJCUUNhbGxlZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCwgdWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9uVGFzayYmKTsKKyAg
ICBPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIFJlZjxCQlFDYWxs
ZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgQ29kZUJs
b2NrJiwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVh
c29uIGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCBhODA1ZDAxNmZiOTky
ODY0YzdhMDNjODI2NmNjNWQ0ZmI5ODY1YTY5Li5lMGIxMDEwMTRjYzNmYmUxNGRiM2M3MGIyYTA1
ZGNkYmM1OTFmMTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4u
Y3BwCkBAIC01NCwxMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFuSW50ZXJuYWwgewog
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdQbGFuOjpPTUdQbGFu
KENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK09NR1BsYW46
Ok9NR1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYmIHRh
c2spCiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1h
dGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQogICAg
ICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxl
LT5jb2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAg
LCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUpOwor
ICAgIHNldE1vZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5y
dW5uYWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNv
ZGVCbG9ja0ZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFs
Ojp2ZXJib3NlLCAiU3RhcnRpbmcgT01HIHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5kZXgsICIgb2Yg
bW9kdWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOwpAQCAtNzksNTcgKzc5LDQ4
IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemU7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7Ci0gICAgYXV0byBwYXJzZUFu
ZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25h
dHVyZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVu
Y3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CisgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQg
PSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9jb2RlQmxv
Y2stPm1fd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9t
b2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUs
IG1fZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtl
U3RyaW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGll
ciB1cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBFbnRyeXBvaW50IG9tZ0VudHJ5cG9pbnQ7CiAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpKSB7CiAgICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0
cmluZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxlIHRpZXJpbmcgdXAgZnVuY3Rpb24g
YXQgaW5kZXggIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlx
dWU8QjM6OkNvbXBpbGF0aW9uPigKKyAgICBSZWY8T01HQ2FsbGVlPiBvbWdDYWxsZWUgPSBPTUdD
YWxsZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5h
bWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CisgICAgb21nQ2FsbGVlLT5lbnRy
eXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAg
ICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIldlYkFz
c2VtYmx5IE9NRyBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2ln
bmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUo
ZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0
KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUo
Y29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAgIG9tZ0VudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVl
KCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgb21nQ2FsbGVlLT5lbnRy
eXBvaW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoY29udGV4dC5jYWxsZWVTYXZl
UmVnaXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+
IGVudHJ5cG9pbnQ7CisgICAgQkJRQ2FsbGVlJiBiYnFDYWxsZWUgPSAqbV9jb2RlQmxvY2stPm1f
Y2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdOwogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY29kZUJs
b2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAgICAgIFJl
ZjxPTUdDYWxsZWU+IGNhbGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlw
b2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rp
b24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhcnNlQW5kQ29tcGlsZVJlc3Vs
dC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVl
LnB0cigpKSk7CiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVl
c1ttX2Z1bmN0aW9uSW5kZXhdKTsKLSAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlw
b2ludCgpOwogCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIHB1Ymxpc2ggb3Vy
IGNhbGxlZSBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIGxpbmsgb3VyIGNhbGxzaXRlcy4gVGhpcyBl
bmFibGVzIHVzIHRvIGVuc3VyZSB3ZQogICAgICAgICAvLyBhbHdheXMgY2FsbCB0aGUgZmFzdGVz
dCBjb2RlLiBBbnkgZnVuY3Rpb24gbGlua2VkIGFmdGVyIHVzIHdpbGwgc2VlIG91ciBuZXcgY29k
ZSBhbmQgdGhlIG5ldyBjYWxsc2l0ZXMsIHdoaWNoIHRoZXkKICAgICAgICAgLy8gd2lsbCB1cGRh
dGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUgd2UgcmVz
ZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UKICAgICAg
ICAgLy8gdGhlIGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8gYmUgcHVibGlzaGVkIHRvby4KICAg
ICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1f
Y29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5j
b3B5UmVmKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5j
dGlvbkluZGV4XSA9IG9tZ0NhbGxlZS5jb3B5UmVmKCk7CiAgICAgICAgIHsKLSAgICAgICAgICAg
IEJCUUNhbGxlZSYgYmJxQ2FsbGVlID0gKnN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJs
b2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSk7CiAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKGJicUNhbGxlZS50aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkpOwot
ICAgICAgICAgICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwor
ICAgICAgICAgICAgYmJxQ2FsbGVlLnNldFJlcGxhY2VtZW50KG9tZ0NhbGxlZS5jb3B5UmVmKCkp
OwogICAgICAgICAgICAgYmJxQ2FsbGVlLnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0
dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAg
ICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxz
aXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNl
IDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQot
ICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhp
dFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2lu
dENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVu
dHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworCisgICAgICAgIGZvciAo
YXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAgICAgICAgQkJRQ2Fs
bGVlJiB0YXJnZXRDYWxsZWUgPSBtX2NvZGVCbG9jay0+d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAg
dGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtDYWxsZXIoaG9sZGVyLCBsaW5rQnVmZmVyLCBjYWxsLnVu
bGlua2VkTW92ZUFuZENhbGwpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzksMzAgKzEzMCwx
NCBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgcmVzZXRJbnN0
cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsg
Ly8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJh
bm9pZC4KIAotICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tt
X2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKKyAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5k
aXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IG9tZ0NhbGxlZS0+Y29kZSgp
OworICAgIG1fY29kZUJsb2NrLT5tX2JveGVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gQ2Fs
bGVlQml0czo6Ym94V2FzbShvbWdDYWxsZWUucHRyKCkpOwogICAgIHsKICAgICAgICAgTG9ja0hv
bGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0KLSAgICAgICAgYXV0byByZXBhdGNo
Q2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNp
dGVzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29u
c2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0
aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4
U3BhY2UpOwotICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBm
dW5jdGlvbkluZGV4U3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9p
bnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRl
cihlbnRyeXBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbHMobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNh
bGxzaXRlc1tpXSk7Ci0gICAgICAgICAgICBpZiAoT01HQ2FsbGVlKiByZXBsYWNlbWVudENhbGxl
ZSA9IHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbaV0uZ2V0
KCkpLT5yZXBsYWNlbWVudCgpKQotICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNl
bWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgIGlmIChPTUdG
b3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBzdGF0aWNfY2FzdDxCQlFDYWxsZWUq
PihtX2NvZGVCbG9jay0+bV9jYWxsZWVzW2ldLmdldCgpKS0+b3NyRW50cnlDYWxsZWUoKSkKLSAg
ICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxs
c2l0ZXMoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgYmJxQ2FsbGVlLnJlcGF0Y2hDYWxsZXJzKGhv
bGRlciwgb21nQ2FsbGVlLmdldCgpKTsKICAgICB9CiAKLSAgICBkYXRhTG9nTG5JZihXYXNtT01H
UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVuY3Rpb25JbmRleCwg
IiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29k
ZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSktPnRpZXJVcENvdW50KCkt
PmNvdW50KCkpOworICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJGaW5pc2hlZCBPTUcgIiwgbV9mdW5jdGlvbkluZGV4LCAiIHdpdGggdGllciB1cCBjb3VudCBh
dDogIiwgbV9jb2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpLT50aWVy
VXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmgKaW5kZXggY2I3OWI0Mzlk
NGU5OTRkODcwZTlkYzkwODljNDNhN2Y1ODYwMjU2Ni4uZTY4OWQ1NjY1N2E4ZDFiYjliZGU4MmVl
MDUxNTM1NDg3MGJlODMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxh
bi5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gTm90ZTogQ29tcGxldGlv
blRhc2sgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0
aGVyZSB3aWxsIGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR1BsYW4oQ29udGV4dCosIFJl
ZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRp
b25UYXNrJiYpOworICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIENvZGVCbG9jayYsIENvbXBsZXRpb25UYXNrJiYpOwogCiBwcml2YXRl
OgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBh
cmVudCBjbGFzc2VzLi4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0
aW9ucy5jcHAKaW5kZXggMWFkZThhOGU5NDQ5ZGE4YjNmMDZjZDNkNjk0MjU3OTJlNmM1ZGY5YS4u
YTFlNTdkNDMzMDBkZDM4YmRjM2YxOWExZWY1MzhhNDYwYjFhOWQ4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtODIsNyArODIsNyBAQCBz
dGF0aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKFRpZXJVcENvdW50JiB0aWVy
VXAsIE9NR0NhbGxlZSogcmVwbGFjZQogICAgIGlmIChjb21waWxlKSB7CiAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgInRyaWdnZXJPTUdSZXBsYWNlbWVudCBmb3Ig
IiwgZnVuY3Rpb25JbmRleCk7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29k
ZS4KLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFu
Y2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgZnVu
Y3Rpb25JbmRleCwgY29kZUJsb2NrLm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAg
ICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNv
bnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgZnVuY3Rpb25J
bmRleCwgY29kZUJsb2NrLCBQbGFuOjpkb250RmluYWxpemUoKSkpOwogICAgICAgICBlbnN1cmVX
b3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFko
IU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCiAgICAgICAgICAgICBwbGFuLT53YWl0Rm9y
Q29tcGxldGlvbigpOwpAQCAtMTk3LDkgKzE5NywxNCBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5
KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYg
YwogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuCiAjZW5kaWYKLSAgICAv
LyA0LiBDb25maWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRvIGp1bXAgdG8gT1NSIGVudHJ5IGZy
b20gdGhlIGNhbGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rpb24uCisKKyAgICAvLyA0LiBVcGRh
dGUgdGhlIGNhbGxlZSBzbG90IGluIHRoZSBjYWxsIGZyYW1lIHRvIHRoZSBPU1IgZW50cnkgY2Fs
bGVlLgorICAgIHZvaWQqKiBzdGFja1BvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dm9pZCoqPihjb250
ZXh0LnNwKCkpOworICAgICooc3RhY2tQb2ludGVyICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0g
MSkgPSBDYWxsZWVCaXRzOjpib3hXYXNtKCZvc3JFbnRyeUNhbGxlZSk7CisKKyAgICAvLyA1LiBD
b25maWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRvIGp1bXAgdG8gT1NSIGVudHJ5IGZyb20gdGhl
IGNhbGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rpb24uCiAgICAgY29udGV4dC5ncHIoR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDxVQ1BVUmVnaXN0ZXI+KGJ1ZmZlcik7Ci0g
ICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSA9IGJpdHdpc2VfY2FzdDxVQ1BV
UmVnaXN0ZXI+KG9zckVudHJ5Q2FsbGVlLmVudHJ5cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzczw+
KCkpOworICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMSkgPSBiaXR3aXNlX2Nh
c3Q8VUNQVVJlZ2lzdGVyPihvc3JFbnRyeUNhbGxlZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3M8
PigpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhQcm9iZTo6
Q29udGV4dCYgY29udGV4dCkKQEAgLTM2NSw3ICszNzAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
dHJpZ2dlck9TUkVudHJ5Tm93KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KQogCiAgICAgaWYgKHN0
YXJ0T1NSRW50cnlDb21waWxhdGlvbikgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HT1NSIGZvciAiLCBmdW5jdGlvbkluZGV4KTsKLSAgICAg
ICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5UGxhbihpbnN0
YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9kdWxlKCkpLCBS
ZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4LCBsb29wSW5kZXgsIGNv
ZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgICAgIFJlZjxQbGFu
PiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeVBsYW4oaW5zdGFuY2UtPmNvbnRl
eHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVmPFdhc206OkJC
UUNhbGxlZT4oY2FsbGVlKSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4LCBjb2RlQmxvY2ssIFBs
YW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdvcmtsaXN0KCkuZW5xdWV1ZShw
bGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6dXNlQ29uY3Vy
cmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9uKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKaW5kZXggNzM1MjIwMjg5Mzdj
NmRhYzFmYzQ3M2M3ZTRjZGM2NDk1OGNlOGVhNi4uZjEzZjY0NTAyMGIyZjc2MGIyNGVjY2JmNzNh
MGM3YjNjZDlkNGRkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNt
LmNwcApAQCAtNDIsMjEgKzQyLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdy
YXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9k
ZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQordm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqIHNlbGYsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUpCiB7CiAgICAgQ0NhbGxIZWxwZXJz
JiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJVDsKIAotICAg
IGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogICAgIGppdC5l
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogCiAgICAgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNv
ZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEK
ICAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdp
dGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVu
dHJ5UHRyVGFnPiogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1vdmVMb2NhdGlv
bjsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRy
eVB0clRhZz4oY2FsbGVlTW92ZUxvY2F0aW9uKTsKLSAgICB9KTsKKyAgICBqaXQuc3RvcmVQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKENhbGxlZUJpdHM6OmJveFdhc20oc2VsZikpLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAog
ICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVy
SW5mbzo6Z2V0KCk7CiAgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlubmVkUmVncy50b1NhdmUo
bW9kZSk7CkBAIC02OSw3ICs2Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAjZW5kaWYK
IAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwodG9TYXZlLCBSZWdp
c3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJhc2VkKTsKLSAg
ICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1RvU3Bp
bGw7CisgICAgc2VsZi0+ZW50cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3Rl
cnNUb1NwaWxsOwogCiAgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1Nw
aWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7CiAgICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbUNh
bGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwpAQCAtMTI1LDkgKzExOSwxMCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVy
KENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgICAgICB9CiAKICAgICAgICAgZW1pdFRocm93
V2FzbVRvSlNFeGNlcHRpb24oaml0LCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIGFyZ3VtZW50c0lu
Y2x1ZGVJNjQgPyBFeGNlcHRpb25UeXBlOjpJNjRBcmd1bWVudFR5cGUgOiBFeGNlcHRpb25UeXBl
OjpJNjRSZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsID0g
VW5saW5rZWRNb3ZlQW5kQ2FsbCB7IH07CiAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VH
UFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwogCiAgICAgewpAQCAt
MTk4LDYgKzE5MywxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRl
SlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogCiAgICAgICAgICAgICBq
c09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAgICB9CisKKyAgICAgICAg
R1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2Ny
YXRjaCgwKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyTW92ZUFuZENhbGwt
Pm1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVl
R1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKICAgICB9CiAKICAgICBpZiAoISFpbmZvLm1lbW9yeSkgewpAQCAtMjIx
LDEyICsyMjAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNU
b1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgICAgICBqaXQuY2FnZUNv
bmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRjaE9yU2l6
ZSwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgfQogCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwg
PSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5zaWduZWQgZnVuY3Rp
b25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgp
OwotICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0aW9uSW5kZXhTcGFj
ZVNpemUoKSk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
Y2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAg
ICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRleFNwYWNlIH0p
OwotICAgIH0pOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsLT5j
YWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CiAKICAgICBm
b3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGls
bCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CkBAIC0y
NjYsOCArMjYwLDYgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAKIAogICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKLQotICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc20uaAppbmRleCBiNGI5OGQxNTliMjg0YjdlYzMyM2FhNTAyYzAzZjkyMWMxMmIw
M2E5Li45M2FhMjRkOTY4MGFmZmZkM2I3YTk2ZDE5MWZjZjhjMzkxZDAyMzFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFs
RnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwordm9p
ZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0
dXJlJiwgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCBNZW1vcnlNb2RlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApp
bmRleCAwNTdhYTcwMThiNDRhOGZiYjRhOGQ0NzExM2JkYmViODc0OWRlYzg3Li5mZDNhZTE4MjA0
ZjM1N2JiMzEzNWNlMzU1ZTllNmNjZDIyYTgzOWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNDY1LDYgKzQ2
NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1
bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgICAgIC8vIEZJWE1FOiBDdXJyZW50
bHkgd2UganVzdCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxkIHRlYWNoIHRoZSBN
b2R1bGUKICAgICAgICAgLy8gaG93IHRvIHJlcGF0Y2ggdXM6CiAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NzAKKyAgICAgICAgaml0LmxvYWRQ
dHIoYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5z
dG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lz
dGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgICAgICBqaXQubG9hZFB0cihl
bnRyeXBvaW50TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQuY2FsbChz
Y3JhdGNoR1BSLCBXYXNtRW50cnlQdHJUYWcpOwogICAgIH0KQEAgLTUzNiwxMCArNTM4LDEwIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9u
Ojpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgcmV0dXJuIG1fanNDYWxsRW50cnlwb2ludC5j
b2RlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWdu
ZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRp
b24sIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZt
LmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNh
bGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFz
c2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0u
aGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBq
c0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxl
ZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVh
dGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSk7CiAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmlzTGFyZ2VBbGxvY2F0aW9uKCksICJXZWJBc3NlbWJs
eUZ1bmN0aW9uIHNob3VsZCBiZSBhbGxvY2F0ZWQgbm90IGluIGxhcmdlIGFsbG9jYXRpb24gc2lu
Y2UgaXQgaXMgSlNDYWxsZWUuIik7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwpAQCAtNTUxLDEwICs1
NTMsMTAgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uOjpX
ZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQor
V2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsZWUm
IGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExv
Y2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogICAg
IDogQmFzZSB7IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSB9Ci0gICAgLCBtX2pzRW50cnlw
b2ludCB7IGpzRW50cnlwb2ludC5lbnRyeXBvaW50KCkgfQotICAgICwgbV9pbXBvcnRhYmxlRnVu
Y3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24g
fQorICAgICwgbV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9pbnQuY29kZSgpIH0KKyAgICAsIG1f
aW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiB9CiB7IH0KIAogdm9pZCBXZWJB
c3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmgKaW5kZXggOThjMzQ2NGNkMDcyZDY0NDVlNzdkZTRmODhkZTBjY2UzYjQ5
NWUzNC4uN2RkZjM5ZDAwOGY0YjY0MjlmOWY3YTEzMWY3ZjlkMzlhNzAxZDE2MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaApA
QCAtNjIsMTEgKzYyLDEyIEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5n
JiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJl
SW5kZXgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2lnbmVkLCBjb25z
dCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21FbnRy
eXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIFdhc206
OlNpZ25hdHVyZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbi5z
aWduYXR1cmVJbmRleDsgfQogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRM
b2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRh
YmxlRnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbjsgfQorICAgIHZvaWQqKiBib3hlZENh
bGxlZUxvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLmJv
eGVkQ2FsbGVlTG9hZExvY2F0aW9uOyB9CiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
biBpbXBvcnRhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlv
bjsgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4ganNFbnRy
eXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQpAQCAtNzgsNiArNzksNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRp
b24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9pbXBv
cnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZF
bnRyeXBvaW50TG9hZExvY2F0aW9uKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
Qm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNz
ZW1ibHlGdW5jdGlvbiwgbV9pbXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpOyB9CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludCgpCiAg
ICAgewpAQCAtOTEsNyArOTMsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIFdlYkFzc2VtYmx5
RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYg
anNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24g
ZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNh
bGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9j
YXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0
aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKICAgICBwdHJkaWZmX3QgcHJl
dmlvdXNJbnN0YW5jZU9mZnNldCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IDkyZGRj
Zjc4NmU4MTAwNWEyMWUxZjhiMWY1MGE5ZDIwOWY5ZTY5MjkuLjdhZjFhMDQ1MmFlMGRmN2ViZGMz
YzI0ZDA5ZmZmYmUwN2MxMGUwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTE5Myw2ICsxOTMs
NyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogCiAgICAgICAgICAgICBXYXNtOjpJbnN0YW5j
ZSogY2FsbGVlSW5zdGFuY2UgPSBudWxscHRyOwogICAgICAgICAgICAgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBudWxs
cHRyOworICAgICAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uID0gbnVsbHB0
cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZh
bHVlKTsKIAogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24g
RXhvdGljIE9iamVjdDoKQEAgLTIwNSw2ICsyMDYsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9i
agogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0
aW9uLT5zaWduYXR1cmVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBjYWxsZWVJbnN0YW5j
ZSA9ICZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSB3YXNtRnVuY3Rpb24tPmVudHJ5cG9pbnRM
b2FkTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgYm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24gPSB3YXNtRnVuY3Rpb24tPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRl
eCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCkBAIC0yMjMsNiArMjI1
LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgICAgIGF1dG8qIGluZm8gPSBt
X2luc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnQua2luZEluZGV4
KTsKICAgICAgICAgICAgIGluZm8tPnRhcmdldEluc3RhbmNlID0gY2FsbGVlSW5zdGFuY2U7CiAg
ICAgICAgICAgICBpbmZvLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGVudHJ5cG9pbnRM
b2FkTG9jYXRpb247CisgICAgICAgICAgICBpbmZvLT5ib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9
IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOwogICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFu
Y2UoKS5pbXBvcnRGdW5jdGlvbjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+PihpbXBvcnQua2luZElu
ZGV4KS0+c2V0KHZtLCBtX2luc3RhbmNlLmdldCgpLCBmdW5jdGlvbik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMzQ3LDkgKzM1MCwxMCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9y
dE9iagogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBmdW5jLgogICAgICAgICAgICAgV2Fz
bTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVy
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAg
ICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5
cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxl
ZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAg
ICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlG
dW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBmaWVsZCwgbV9p
bnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExv
Y2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIHdyYXBwZXIgPSBmdW5jdGlvbjsKICAg
ICAgICAgfQogCkBAIC00NjAsNyArNDY0LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIFdhc206
Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9h
ZExvY2F0aW9uID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5jZS5nZXQoKSwg
ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1
cmVJbmRleCk7CisgICAgICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSBj
b2RlQmxvY2stPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShz
dGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2Nh
dGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2
bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtNTc1LDEzICs1ODAsMTQg
QEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBl
eGVjKQogCiAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZSA9IGNvZGVCbG9jay0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJs
b2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlv
bkluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IGNv
ZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0
IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAvLyBXaGF0IGlmIHdlIGFsc28gc2V0IGl0
IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAuCiAgICAgICAgICAgICAvLyBEb2Vz
IChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0cy5mb28gPT09IHRhYmxlLmdldCgwKT8KICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUK
ICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlG
dW5jdGlvbjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAg
ICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0
aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0cmluZygpLCBtX2lu
c3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9j
YXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAKICAgICAg
ICAgICAgIG1faW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5zZXQoZWxlbWVudEluZGV4LCBm
dW5jdGlvbik7CiAgICAgICAgICAgICArK2VsZW1lbnRJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcAppbmRleCBjZGU0ZjNjZjI2MDRhZGQ3NmNjMDRmYjIyNGY5YTUyYmQyZGEwMzc2Li42Mjg2
MmI0MTE3ODQ2NGU2MTNlM2U3OTMwNDI2NzMzMDY1MGU4MTBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uY3BwCkBAIC02MCw3ICs2MCw5IEBAIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPCiAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzPFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uPih2bSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0
aW9uLiIpOwogICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwg
bmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBX
YXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZpbnN0
YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgpLT53YXNtVG9F
bWJlZGRlclN0dWIgfSApOworICAgIGF1dG8gaW1wb3J0RnVuY3Rpb25JbmZvID0gaW5zdGFuY2Ut
Pmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEluZGV4KTsKKyAgICBzdGF0aWMg
dm9pZCogbnVsbEJveGVkQ2FsbGVlID0gbnVsbHB0cjsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b24geyBzaWduYXR1cmVJbmRleCwgJmltcG9ydEZ1bmN0aW9uSW5mby0+d2FzbVRvRW1iZWRkZXJT
dHViLCAmbnVsbEJveGVkQ2FsbGVlIH0pOwogICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGluc3RhbmNlKTsKICAgICByZXR1cm4gcmVz
dWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378986</attachid>
            <date>2019-09-17 13:55:46 -0700</date>
            <delta_ts>2019-09-17 16:08:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201799-20190917135545.patch</filename>
            <type>text/plain</type>
            <size>121367</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDRkYmQ0YWUxODlmMDYyMGQ2N2I3YzlkZmMyZTg4NDc5ZGExZTQ0Li40YTdlYzJjNjZiZDI0YWI3
OWE3MWNmMmY1M2RiNzY4ZjQyMjJhMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5OCBAQAorMjAxOS0wOS0xNyAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0
aGUgV2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBI
b3dldmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGlu
dGVycHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGlj
aCBmdW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMg
dGhlIGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRl
ciwgc28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdy
aXRpbmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0
aGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0
byB0aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBn
ZW5lcmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdl
IGtlZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAg
Y29kZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAg
LSBDYWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBj
YWxscywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBK
Uy10by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogaW50
ZXItbW9kdWxlIHdhc20tdG8td2FzbSBzdHViLCBKUy10by13YXNtIHN0dWIgKGNhbGxlZSBmcmFt
ZSksIHdhc20tdG8tSlMgc3R1YiwgT01HIG9zciBlbnRyeQorCisgICAgICAgIEFkZGl0aW9uYWxs
eSwgdGhpcyBwYXRjaCBhbHNvIGNoYW5nZXMgaXQgc28gdGhhdCB0aGUgY2FsbGVlIGtlZXBzIHRy
YWNrIG9mIGl0cyBjYWxsZXJzLCBpbnN0ZWFkIG9mIGhhdmluZyBhIGdsb2JhbCBtYXBwaW5nCisg
ICAgICAgIG9mIGNhbGxzIGluIHRoZSBXYXNtOjpDb2RlQmxvY2suIFRoaXMgbWFrZXMgaXQgZWFz
aWVyIHRvIHJlcGF0Y2ggYWxsIGNhbGxlcnMgb2YgYSBnaXZlbiBDYWxsZWUgd2hlbiBpdCB0aWVy
cyB1cC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6QWlySVJH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAqIHdhc20v
V2FzbUFpcklSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9y
Lmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OkJCUVBsYW46OkJCUVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwcmVwYXJl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAg
ICAgIChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20v
V2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAg
ICAgKiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OkNh
bGxlZSk6CisgICAgICAgIChKU0M6Oldhc206OnJlcGF0Y2hNb3ZlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6cmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFDYWxsZWU6OmFkZENh
bGxlcik6CisgICAgICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6YWRkQW5kTGlua0NhbGxlcik6
CisgICAgICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6cmVwYXRjaENhbGxlcnMpOgorICAgICAg
ICAqIHdhc20vV2FzbUNhbGxlZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmVudHJ5
cG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmNvZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDYWxsZWU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAqIHdh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdD
b252ZW50aW9uOjpzZXR1cEZyYW1lSW5Qcm9sb2d1ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9X
YXNtQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNt
OjpDb2RlQmxvY2s6OmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Ondhc21CQlFDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjplbnRyeXBv
aW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldh
c206OkNvZGVCbG9jazo6Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNw
YWNlKToKKyAgICAgICAgKiB3YXNtL1dhc21FbWJlZGRlci5oOgorICAgICAgICAqIHdhc20vV2Fz
bUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKToKKyAgICAgICAgKiB3YXNtL1dh
c21JbnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZCb3hl
ZENhbGxlZUxvYWRMb2NhdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQ
bGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50cnlQbGFuOjpPTUdGb3JP
U1JFbnRyeVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46Ondv
cmspOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oOgorICAgICAgICAq
IHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQ
bGFuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2Fz
bS9XYXNtT01HUGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbU9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjp0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPU1JF
bnRyeU5vdyk6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6
Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2Fz
bS5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjps
aW5rKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTktMDkt
MTUgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBMZWFrIG9m
IE5TTWFwVGFibGUgaW4gLVtKU1ZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6d2l0
aE93bmVyOl0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhNmMwZjAyNzVl
M2YxZTVjYWQ0MWU2YTRjOGE3NjI1ZWIwNzZiMmUyLi4wYzU3MTI1M2RiNzJjZDcxYTYzZDk3MzRm
MWJiOTMyN2MzYzYyZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0z
OTMsNiArMzkzLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BVQkxJQ19GUkFNRVdPUktfSEVBREVS
Uwogc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICAke0ph
dmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L0J5dGVjb2Rlcy5oCiAgICAgJHtKYXZh
U2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9KU0NCdWlsdGlucy5oCisgICAgJHtKYXZh
U2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XYXNtT3BzLmgKIAogICAgICR7SmF2YVNj
cmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oCiAgICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5oCkBAIC00NjMsNiArNDY0LDEw
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgYXNz
ZW1ibGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJlZ2lzdGVycy5oCiAK
KyAgICBiMy9CM0NvbW1vbi5oCisgICAgYjMvQjNDb21waWxhdGlvbi5oCisgICAgYjMvQjNUeXBl
LmgKKwogICAgIGJpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCiAgICAgYmluZGluZ3MvU2Ny
aXB0T2JqZWN0LmgKICAgICBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5oCkBAIC0xMDAxLDYgKzEwMDYs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1
bnRpbWUvV3JpdGVCYXJyaWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmllcklubGluZXMuaAog
CisgICAgd2FzbS9XYXNtQ2FsbGVlLmgKICAgICB3YXNtL1dhc21DYXBhYmlsaXRpZXMuaAogICAg
IHdhc20vV2FzbUNvZGVCbG9jay5oCiAgICAgd2FzbS9XYXNtQ29tcGlsYXRpb25Nb2RlLmgKQEAg
LTEwMDgsMTMgKzEwMTQsMTYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKICAgICB3YXNtL1dhc21FbWJlZGRlci5oCiAgICAgd2FzbS9XYXNtRXhjZXB0aW9u
VHlwZS5oCiAgICAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKKyAgICB3YXNtL1dhc21G
b3JtYXQuaAogICAgIHdhc20vV2FzbUluZGV4T3JOYW1lLmgKICAgICB3YXNtL1dhc21NZW1vcnku
aAorICAgIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKICAgICB3YXNtL1dhc21NZW1vcnlN
b2RlLmgKICAgICB3YXNtL1dhc21Nb2R1bGUuaAogICAgIHdhc20vV2FzbU5hbWUuaAogICAgIHdh
c20vV2FzbU5hbWVTZWN0aW9uLmgKICAgICB3YXNtL1dhc21QYWdlQ291bnQuaAorICAgIHdhc20v
V2FzbVNpZ25hdHVyZS5oCiAgICAgd2FzbS9XYXNtVGllclVwQ291bnQuaAogCiAgICAgd2FzbS9q
cy9KU1dlYkFzc2VtYmx5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTIyYzE0
ZmFhYWFjMzgzMDcxOGMxYjFmZTgwOTc5Y2ZjZDdmODViYS4uNjJlZGNhOWI4ZmEwYjI2YzMwNThi
Y2ZmZWNkYTI3NWVhZjI1Y2M3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI5
MCw3ICsyOTAsNyBAQAogCQkwRjMzOERGNjFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5l
ZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjMzOERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggKi87IH07CiAJ
CTBGMzM4REZBMUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4REY4MUJFOTZBQTgwMDEzQzg4
RiAvKiBCM0NDYWxsVmFsdWUuaCAqLzsgfTsKIAkJMEYzMzhERkUxQkVENTEyNzAwMTNDODhGIC8q
IEFpclNpbXBsaWZ5Q0ZHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOERGQzFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuaCAqLzsg
fTsKLQkJMEYzMzhFMEMxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTAwMUJGMDI3NkMw
MDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggKi87IH07CisJCTBGMzM4RTBDMUJGMDI3NkMwMDEz
Qzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjMzOEUwMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzM4
RTBFMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwMjFCRjAyNzZDMDAxM0M4OEYgLyog
QjNEYXRhU2VjdGlvbi5oICovOyB9OwogCQkwRjMzOEUxMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNN
b3ZlQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi87IH07
CiAJCTBGMzM4RTExMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDUxQkYwMjc2
QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi87IH07CkBAIC02NTIsNyArNjUyLDcg
QEAKIAkJMEZFQzg1MDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovOyB9OwogCQkwRkVDODUwNjFCREFDREFD
MDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3Bl
Y2lhbC5oICovOyB9OwogCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
RTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTBBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmgg
Ki87IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oICovOyB9OwogCQkwRkVDODUw
RTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0MzJWYWx1ZS5oICovOyB9OwogCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OwpA
QCAtNjc1LDcgKzY3NSw3IEBACiAJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nl
c3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aCAqLzsgfTsKIAkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OwogCQkwRkVDODUzQTFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFs
dWUuaCAqLzsgfTsKLQkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQg
LyogQjNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAq
LzsgfTsKIAkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFD
MDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKIAkJMEZFQzg1NDIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07
CkBAIC03MTQzLDExICs3MTQzLDExIEBACiAJCQkJODY4OTIxQzExRjlDMENCNzAwMTE1OUY2IC8q
IEpTQmlnSW50LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRG
dW5jdGlvbi5jcHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRG
dW5jdGlvbi5oICovLAotCQkJCUZFNDhCRDQzMjMyNDVFODcwMEYxMzZEMCAvKiBKU0NDb25maWcu
Y3BwICovLAotCQkJCUZFNDhCRDQyMjMyNDVFODcwMEYxMzZEMCAvKiBKU0NDb25maWcuaCAqLywK
IAkJCQk2NTdDRjQ1NjE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICovLAogCQkJCTY1
N0NGNDU3MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oICovLAogCQkJCTUzQjYwMUVCMjAz
NEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCAqLywKKwkJCQlGRTQ4QkQ0MzIzMjQ1RTg3MDBGMTM2
RDAgLyogSlNDQ29uZmlnLmNwcCAqLywKKwkJCQlGRTQ4QkQ0MjIzMjQ1RTg3MDBGMTM2RDAgLyog
SlNDQ29uZmlnLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5j
cHAgKi8sCiAJCQkJQkMxMTY3RDgwRTE5QkNDOTAwODA2NkREIC8qIEpTQ2VsbC5oICovLAogCQkJ
CTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi8sCkBAIC05MzQ4
LDcgKzkzNDgsNiBAQAogCQkJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRG
R1RvQjMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5RDAyMTdBMEI5MDQwMDc3M0FEOCAvKiBG
VExMb3dlcmVkTm9kZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNGOTE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkUzODQyMzIy
MzI0RDUxQjAwOURENDQ1IC8qIE9wdGlvbkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMjM1QkREMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTk1MzgsNyArOTUzNyw2IEBACiAJCQkJQTFENzkzMDExQjQzODY0QjAw
NDUxNkY1IC8qIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExMjU4NDZGMUI0NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyQkJGRjIxQjA0NEE4QjAwNjY0QjY5IC8qIEludGxP
YmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFNDhCRDQ0MjMyNDVFOTMwMEYxMzZEMCAvKiBK
U0NDb25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOEVCRTI0MUNFOEYzNTgwMDQ1MzE0NiAv
KiBJbnRsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZG
MjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM0RTAzNTQxRTUz
QkQyOTAwMjEzRjY0IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICov
LApAQCAtOTYwOSw2ICs5NjA3LDcgQEAKIAkJCQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNCRjIgLyog
SlNDYWxsZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzQjYwMUVDMjAzNEI4QzUwMDZCRTY2NyAv
KiBKU0Nhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2QTgwMDI2QzM5QiAv
KiBKU0NCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU0OEJENDQyMzI0NUU5MzAwRjEz
NkQwIC8qIEpTQ0NvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY3REEwRTE5QkNDOTAw
ODA2NkREIC8qIEpTQ2VsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NzQ5NzExNjg3QURFNDAw
QTRGRjZBIC8qIEpTQ2VsbElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUREODRBMThB
OTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTk4ODUsNyAr
OTg4NCw5IEBACiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzA0NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0ODBFMTZGNUNEMDBCMzQ0NjAgLyogT3Bl
cmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzODQyMzIyMzI0RDUxQjAwOURENDQ1IC8q
IE9wdGlvbkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZD
NDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzODQyMzMyMzI0RDUxQjAwOURE
NDQ1IC8qIE9wdGlvbnNMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzU2OTg3MjIyODQxMTg3
MDA4Q0RDQ0IgLyogUGFja2VkQ2VsbFB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5REFBMEEx
RkQxQzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTM0RTY1NzUyMDY2OEVBQTAwRkI4MUFDIC8qIFBhcnNlSGFzaC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC05OTkyLDcgKzk5OTMsNiBAQAogCQkJCTBGRTA1MDI4MUFBOTA5NTYwMEQzM0IzMyAv
KiBTY29wZWRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI5MUFBOTA5NTYw
MEQzM0IzMyAvKiBTY29wZWRBcmd1bWVudHNUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMkIxQUE5MDk1NjAwRDMzQjMzIC8qIFNjb3BlT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQlGRTM4NDIzMzIzMjRENTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMjRFNTUyMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDY4MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3Jp
cHRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDNGQTIxMTg4RUZGNjgwMDExMEYx
NCAvKiBTY3JpcHRCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IDMxOWFhNWJmMDc1
Y2JmMGFlMDE1YjEyMDY5Y2QwNDE5Yzk4OWIxMmQuLmM2NzE1NjMyNjU2NTBmZmRiODRiODFmNTQ3
OTE3YmFiN2ZlYWNjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUg
KDApCiAKLSAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQ
cm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBU
aHJvd1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYpOworICAgIEFpcklSR2VuZXJhdG9y
KGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2Fz
bUVudHJ5UHRyVGFnPj4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVy
VXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CiAKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0
dXJlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOwpAQCAtNjM5LDcgKzYzOSw4IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9j
ayogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgQmFzaWNCbG9jayogbV9yb290Qmxv
Y2sgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPFR5cGVkVG1wPiBtX2xvY2FsczsKLSAgICBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8v
IExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNz
IGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiBtX291dGdvaW5nQ2FsbHM7CisgICAgY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIEdQ
UlJlZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fbWVt
b3J5U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV93YXNtQ29udGV4dElu
c3RhbmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwpAQCAtNzA4LDE0ICs3MDksMTUgQEAgdm9pZCBB
aXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayogYmxv
Y2ssIFR5cGVkVG1wIGluc3QKICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwg
VG1wKCksIGluc3RhbmNlKTsKIH0KIAotQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIElu
dGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJv
d1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQorQWlySVJHZW5lcmF0
b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJv
Y2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgb3V0Z29p
bmdDYWxscywgY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJU
YWc+PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5j
dGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dX
YXNtRXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKICAgICA6IG1faW5mbyhp
bmZvKQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25J
bmRleCkKICAgICAsIG1fdGllclVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCiAg
ICAgLCBtX2NvZGUobV9wcm9jLmNvZGUoKSkKLSAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCisgICAgLCBtX291dGdvaW5nQ2FsbHMob3V0Z29p
bmdDYWxscykKKyAgICAsIG1fd2FzbVRvV2FzbUV4aXRTdHVicyh3YXNtVG9XYXNtRXhpdFN0dWJz
KQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkp
CiB7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKQEAgLTc2MSwxNiAr
NzYzLDcgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm8KICAgICBSZWY8QjM6OkFpcjo6UHJvbG9n
dWVHZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWly
OjpQcm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6
QWlyOjpDb2RlJiBjb2RlKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgY29kZS5lbWl0RGVmYXVsdFByb2xvZ3VlKGpp
dCk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxs
aW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKLSAgICAgICAgICAgIGF1dG8g
bW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIGNhbGxlZUdQUik7Ci0gICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
W2NvbXBpbGF0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY2FsbGVlR1BS
LCBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihudWxscHRyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotICAgICAgICB9
CisgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBDaGVja2Vk
PGludDMyX3Q+IHdhc21GcmFtZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7CkBAIC0xOTM2LDgg
KzE5MjksNiBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgIGlmIChyZXR1cm5UeXBlICE9
IFR5cGU6OlZvaWQpCiAgICAgICAgIHJlc3VsdCA9IHRtcEZvclR5cGUocmV0dXJuVHlwZSk7CiAK
LSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7Ci0KICAgICBpZiAobV9pbmZvLmlzSW1w
b3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKICAg
ICAgICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFy
Z3VtZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKQEAgLTE5NzMs
MTEgKzE5NjQsMTIgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICBw
YXRjaEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CiAgICAgICAgICAgICB9KTsKIAotICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
ZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21F
bnRyeVB0clRhZz4gd2FzbVRvV2FzbUV4aXRTdHViID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1
bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt3YXNt
VG9XYXNtRXhpdFN0dWJdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwg
ZnVuY3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKFdhc21F
bnRyeVB0clRhZyk7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsLCB3YXNt
VG9XYXNtRXhpdFN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQ
dHJUYWc+KHdhc21Ub1dhc21FeGl0U3R1Yi5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0pOwogCkBAIC0yMDI0LDE4ICsyMDE2LDIwIEBAIGF1dG8gQWlySVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsCiAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNU
eXBlKHJldHVyblR5cGUpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5u
ZWQgPSB0cnVlOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1
ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CiAKICAgICAg
ICAgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CiAgICAgICAgIHdhc21DYWxsaW5n
Q29udmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQs
IHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKICAg
ICAgICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKICAgICAgICAgfSk7CiAK
LSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbklu
ZGV4XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxX
YXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwotICAgICAgICAgICAgfSk7
CisgICAgICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogb3V0Z29pbmdDYWxscyA9
ICZtX291dGdvaW5nQ2FsbHM7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbb3V0
Z29pbmdDYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEdQUlJlZyBj
YWxsZWVHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgYXV0byBtb3ZlTG9j
YXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxM
b2NhdGlvbiA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAg
IG91dGdvaW5nQ2FsbHMtPmFwcGVuZCh7IGZ1bmN0aW9uSW5kZXgsIHsgbW92ZUxvY2F0aW9uLCBj
YWxsTG9jYXRpb24gfX0pOwogICAgICAgICB9KTsKIAogICAgICAgICBlbWl0UGF0Y2hwb2ludCht
X2N1cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOwpA
QCAtMjA4OSw2ICsyMDgzLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICB9KTsKIAog
ICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBnNjQoKTsKKyAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsZWUgPSBnNjQoKTsKICAgICB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNp
Z25hdHVyZUluZGV4ID0gZzY0KCk7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0
aGUgdGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgpAQCAtMjA5Nyw2ICsyMDky
LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxl
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICAgICAgYXBwZW5kKEFkZDY0LCBjYWxs
YWJsZUZ1bmN0aW9uQnVmZmVyLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CiAgICAgICAgIAogICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSks
IGNhbGxlZUNvZGUpOyAvLyBQb2ludGVyIHRvIGNhbGxlZSBjb2RlLgorICAgICAgICBhcHBlbmQo
TW92ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCkpLCBjYWxsZWUpOyAv
LyBQb2ludGVyIHRvIGJveGVkIGNhbGxlZQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQg
aXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5p
dGlhbGl6ZWQuCiAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywg
d2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJ
bmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEw
CkBAIC0yMTg5LDYgKzIxODUsMTAgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGly
ZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKIAogICAgIFZl
Y3RvcjxDb25zdHJhaW5lZFRtcD4gZW1pdEFyZ3M7CiAgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxl
ZUNvZGUpOworCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWUpLCBjYWxsZWUpOwor
ICAgIGVtaXRBcmdzLmFwcGVuZCh7IGNhbGxlZSwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpIH0pOworCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBD
YWxsKG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2gsIHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRt
cCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKICAgICAgICAgZW1pdEFyZ3MuYXBwZW5kKHsgdG1w
LCByZXAgfSk7CiAgICAgfSk7CkBAIC0yMjI5LDEwICsyMjI5LDggQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgogICAgIHJldHVybiBCMzo6T3JpZ2luKCk7CiB9
CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQs
IGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24g
dGhyb3dXYXNtRXhjZXB0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0
aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJz
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24g
dGhyb3dXYXNtRXhjZXB0aW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRl
cm5hbEZ1bmN0aW9uPigpOwotCiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlw
b2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29u
dGV4dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCkBA
IC0yMjUyLDcgKzIyNTAsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aQogICAgIAogICAgIHBy
b2NlZHVyZS5zZXRPcHRMZXZlbChPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck9wdGltaXphdGlv
bkxldmVsKCkpOwogCi0gICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2Vk
dXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBmdW5jdGlv
bkluZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsKKyAgICBBaXJJ
UkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIGNvbXBpbGF0aW9uQ29udGV4
dC5vdXRnb2luZ0NhbGxzLCB3YXNtVG9XYXNtRXhpdFN0dWJzLCBtb2RlLCBmdW5jdGlvbkluZGV4
LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlvblBh
cnNlcjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRh
dGEoKSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9G
QUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTIyNzIsMTAgKzIyNzAs
MTAgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGkKICAgICAgICAgQjM6OkFpcjo6cHJlcGFyZUZv
ckdlbmVyYXRpb24oY29kZSk7CiAgICAgICAgIEIzOjpBaXI6OmdlbmVyYXRlKGNvZGUsICpjb21w
aWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNv
bnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1
Y3RzKCk7Ci0gICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0g
Y29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICAgICAgY29tcGlsYXRp
b25Db250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0
T2Zmc2V0TGlzdCgpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHsg
fTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCmluZGV4IDMzMWI0YjBhZDMxM2U2MjNj
YTdmZjRiZDhkZThhMTU4NmZjN2Q1MDUuLjgyNzJjZTM1OTVmZjI4YjNmOWNjODg5NjVhZGIyYTg0
YzllODVhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5oCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3Ry
aW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rp
b25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxs
cHRyKTsKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3Rv
cjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENv
dW50KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggM2Q4ZGY4ZTY4NzEwMjEzMWI2NGMxYTZkNjVlNmZj
Y2MxMDNiNWU3NS4uZTAwMDNlY2I3MGQ2ZjJhY2VjYWRkZDNmNDI4NDY0ZTdhMGIzOGZlNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApA
QCAtMTcyLDcgKzE3Miw2IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgU3RyaW5nIEVycm9yVHlw
ZTsKICAgICB0eXBlZGVmIFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0Owot
ICAgIHR5cGVkZWYgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBF
cnJvclR5cGU+IFJlc3VsdDsKICAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4g
UGFydGlhbFJlc3VsdDsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZF
Ul9JTkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4u
IGFyZ3MpIGNvbnN0CkBAIC0xODUsNyArMTg0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAot
ICAgIEIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBJ
bnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWdu
ZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9k
ZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnks
IFRpZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+
PiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlLCBDb21w
aWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZv
ck9TUkVudHJ5LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJl
Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwg
dWludDMyX3QpOwpAQCAtMjgzLDYgKzI4Miw3IEBAIHByaXZhdGU6CiAKICAgICBGdW5jdGlvblBh
cnNlcjxCM0lSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIG1fb3V0Z29pbmdDYWxsczsKICAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29t
cGlsYXRpb25Nb2RlIHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07CiAgICAgY29uc3QgdW5z
aWduZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsKQEAgLTI5NCw3ICsyOTQsNyBAQCBw
cml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAg
IFZlY3Rvcjx1aW50MzJfdD4gbV9vdXRlckxvb3BzOwogICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1f
bG9jYWxzOwotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdh
c21Ub1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGlu
ZGV4IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBWZWN0b3I8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiBtX3dhc21Ub1dhc21FeGl0
U3R1YnM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9z
ZSBhZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3Ny
RW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1f
Y29uc3RhbnRQb29sOwogICAgIEluc2VydGlvblNldCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVz
OwpAQCAtMzU1LDE1ICszNTUsMTYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNv
bnRleHRJbnN0YW5jZShQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2MKICAgICB9KTsK
IH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0
aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSBtb2Rl
LCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhy
b3dXYXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0IzSVJHZW5lcmF0b3I6OkIzSVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG91dGdvaW5nQ2FsbHMsIFZlY3Rv
cjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0
U3R1YnMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlIG1v
ZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBU
aHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9pbmZvKGluZm8p
CisgICAgLCBtX291dGdvaW5nQ2FsbHMob3V0Z29pbmdDYWxscykKICAgICAsIG1fbW9kZShtb2Rl
KQogICAgICwgbV9jb21waWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQogICAgICwgbV9mdW5j
dGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCiAgICAgLCBtX2xvb3BJbmRleEZvck9TUkVudHJ5KGxv
b3BJbmRleEZvck9TUkVudHJ5KQogICAgICwgbV90aWVyVXAodGllclVwKQogICAgICwgbV9wcm9j
KHByb2NlZHVyZSkKLSAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHMpCisgICAgLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMod2FzbVRvV2FzbUV4aXRT
dHVicykKICAgICAsIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hC
dWZmZXJTaXplKQogICAgICwgbV9jb25zdGFudEluc2VydGlvblZhbHVlcyhtX3Byb2MpCiAgICAg
LCBtX251bUltcG9ydEZ1bmN0aW9ucyhpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKQEAgLTQx
Nyw3ICs0MTgsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUoJmNvbXBp
bGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJs
b2NrKTsKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSht
X3Byb2MsIE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAKICAgICB7CiAgICAgICAgIEIzOjpW
YWx1ZSogZnJhbWVQb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpOwpAQCAtMTQwMiw4ICsxNDAzLDYg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CiAKICAg
ICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwotICAgIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxsczsKLQogICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9u
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KSkgewogICAgICAgICBtX21heE51
bUpTQ2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIApAQCAtMTQxNyw2ICsxNDE2LDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24g
PSBtX3Byb2MuYWRkQmxvY2soKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVx
dWVudGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2Nr
KSk7CiAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4gd2Fz
bVRvV2FzbUV4aXRTdHViID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhdOwog
ICAgICAgICBWYWx1ZSogd2FzbUNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5z
ZXR1cENhbGwobV9wcm9jLCBpc1dhc21CbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJl
dHVyblR5cGUpLAogICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQp
IHsKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRy
dWU7CkBAIC0xNDI1LDExICsxNDI1LDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAg
ICAgICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxp
bmcgdG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9k
ZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt3YXNtVG9XYXNtRXhpdFN0dWJdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
ICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rp
b25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoV2Fz
bUVudHJ5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxs
LCB3YXNtVG9XYXNtRXhpdFN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8
V2FzbUVudHJ5UHRyVGFnPih3YXNtVG9XYXNtRXhpdFN0dWIuY29kZSgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0x
NDczLDE3ICsxNDczLDE4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgLy8gVGhl
IGNhbGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFu
ZCAvIG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KICAgICAgICAgcmVzdG9yZVdl
YkFzc2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZv
Lm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIGNvbnRpbnVhdGlvbik7CiAgICAgfSBl
bHNlIHsKKyAgICAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiBvdXRnb2luZ0Nh
bGxzID0gJm1fb3V0Z29pbmdDYWxsczsKICAgICAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdz
LCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0
ZXNQaW5uZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVh
ZHNQaW5uZWQgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRo
cmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lz
dGVycysrOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtcy5ncFNj
cmF0Y2goMCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1v
dmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxl
ZUdQUik7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bExvY2F0aW9uID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAg
ICAgICAgICAgICBvdXRnb2luZ0NhbGxzLT5hcHBlbmQoeyBmdW5jdGlvbkluZGV4LCB7IG1vdmVM
b2NhdGlvbiwgY2FsbExvY2F0aW9uIH19KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgIH0pOwogICAgIH0KQEAgLTE2MjQsNiArMTYyNSwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAogICAg
ICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CiAKKyAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsZWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdp
bigpLCBjYWxsYWJsZUZ1bmN0aW9uLAorICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlv
bigpKSkpOworCiAgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsK
ICAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBt
X2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAg
ICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTYzNSw4ICsxNjQw
LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJ
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNtIHN0dWIgYXNzdW1l
cyBpdCBjYW4KICAgICAgICAgICAgIC8vIHVzZSBhbGwgdGhlIHBpbm5lZCByZWdpc3RlcnMgYXMg
c2NyYXRjaDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQog
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLQogICAgICAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZSwgQjM6OlZhbHVlUmVwOjpzdGFj
a0FyZ3VtZW50KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFy
YW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsK
QEAgLTE2OTcsMTAgKzE3MDIsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9y
aWdpbgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRD
b21waWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5j
dGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQm
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBD
b3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorRXhw
ZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXAsIFRo
cm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7Ci0KICAgICBjb21waWxhdGlvbkNvbnRl
eHQuZW1iZWRkZXJFbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAg
ICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2Fs
bEhlbHBlcnM+KCk7CiAKQEAgLTE3MjEsNyArMTcyNCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRp
b25DCiAgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFCM09wdGltaXphdGlvbkxldmVs
KCkKICAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsKCkp
OwogCi0gICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3Vs
dC5nZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NS
RW50cnksIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBCM0lSR2VuZXJhdG9yIGly
R2VuZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgY29tcGlsYXRpb25Db250ZXh0Lm91dGdvaW5nQ2Fs
bHMsIHdhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1vZGUs
IGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50cnksIHRp
ZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJh
dG9yPiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5k
YXRhLnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZB
SUxTKHBhcnNlci5wYXJzZSgpKTsKIApAQCAtMTczOSwxMCArMTc0MiwxMCBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
KENvbXBpbGF0aW9uQwogICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJl
KTsKICAgICAgICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53
YXNtRW50cnlwb2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlw
b2ludEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKLSAgICAgICAg
cmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVl
U2F2ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC5j
YWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0
TGlzdCgpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogLy8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMgdG9vIG1lc3N5IHRvIGRv
IGluIHdhc20uanNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5oCmluZGV4IGVhNTUwMjQwMThkMzBkMzhmZjFlYTdhN2FiZjFjMTY1YmNmNTY3Zjgu
LjM0OGI1NDdlZTNkNzg3YjYxMmMzZmQzNjA0MmQ3N2RlODIyMGE3ZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtNDksOSArNDksMTIg
QEAgc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpP
cGFxdWVCeXByb2R1Y3RzPiBlbWJlZGRlckVudHJ5cG9pbnRCeXByb2R1Y3RzOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IHdhc21FbnRyeXBvaW50SklUOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzOwor
ICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBvdXRnb2luZ0NhbGxzOworICAgIE9w
dGlvbmFsPFVubGlua2VkTW92ZUFuZENhbGw+IGVtYmVkZGVyTW92ZUFuZENhbGw7CisgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QgY2FsbGVlU2F2ZVJlZ2lzdGVyczsKIH07CiAKLUV4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUo
Q29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29t
cGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhG
b3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0g
bnVsbHB0cik7CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxh
dGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgdW5zaWduZWQmIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5
TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBs
b29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhj
ZXB0aW9uID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAwZTgzZDUzZjMxMjM5
MzdmYzljYzAzZDNlNWVlMTg0ZDUxNzEzZDRmLi42YzZhZmUzMjk4MTdmYmY1OTgxOGI1ZTZmMTM4
ZDMzOTEyNjM3Yzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwCkBAIC01Miw5ICs1MiwxMCBAQCBuYW1lc3BhY2UgV2FzbUJCUVBsYW5JbnRlcm5hbCB7CiBz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4o
Q29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsg
d29yaywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVh
dGVFbWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24p
CitCQlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxSZWY8QkJR
Q2FsbGVlPj4mIGNhbGxlZXMsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQXN5bmNXb3Jr
IHdvcmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3Jl
YXRlRW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9u
KQogICAgIDogQmFzZShjb250ZXh0LCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spLCBXVEZN
b3ZlKGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICAsIG1f
c3RyZWFtaW5nUGFyc2VyKG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksICp0aGlzKQorICAgICwg
bV9jYWxsZWVzKCZjYWxsZWVzKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKQogICAg
ICwgbV9hc3luY1dvcmsod29yaykKIHsKQEAgLTE1OSwxNiArMTYwLDEwIEBAIHZvaWQgQkJRUGxh
bjo6cHJlcGFyZSgpCiAKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9y
bWF0aW9uLT5mdW5jdGlvbnM7CiAgICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtVG9X
YXNtRXhpdFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IHRvIEphdmFTY3JpcHQgc3R1YnMiKQotICAg
ICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1
bmN0aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2Fs
bHMiKQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rp
b25zLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCi0gICAgICAg
IHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMu
c2l6ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRleHRzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVD
YXBhY2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50
cyIpKQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0
cywgZnVuY3Rpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbnMu
c2l6ZSgpKTsKLSAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25zLnNp
emUoKSk7CiAgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgp
KTsKLSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBJbXBvcnQq
IGltcG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9ydEluZGV4XTsKQEAg
LTIzMCw2ICsyMjUsNyBAQCBwdWJsaWM6CiAKIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9u
cyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jYWxs
ZWVzKTsKICAgICBBU1NFUlQobV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQpOwogICAgIGRhdGFM
b2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBjb21waWxhdGlv
biIpOwogCkBAIC0yNjYsMTMgKzI2Miw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9u
cyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CiAg
ICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0g
ICAgICAgIGlmIChPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSkKLSAgICAgICAgICAgIG1f
dGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdID0gbWFrZVVuaXF1ZTxUaWVyVXBDb3VudD4oKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0g
PSBudWxscHRyOwotICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gbV90aWVyVXBDb3VudHNb
ZnVuY3Rpb25JbmRleF0uZ2V0KCk7Ci0gICAgICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQ7CisgICAgICAg
IEV4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0OwogICAgICAgICB1
bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gMDsKIAogICAgICAgICAvLyBGSVhN
RTogU29tZSB3ZWJwYWdlcyB1c2UgdmVyeSBsYXJnZSBXYXNtIG1vZHVsZSwgYW5kIGl0IGV4aGF1
c3RzIGFsbCBleGVjdXRhYmxlIG1lbW9yeSBpbiBBUk02NCBkZXZpY2VzIHNpbmNlIHRoZSBzaXpl
IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHJlZ2lvbiBpcyBvbmx5IGxpbWl0ZWQgdG8gMTI4TUIuCkBA
IC0yODIsMTAgKzI3MiwxMSBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBpZiAoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFB
aXJNb2RlVGhyZXNob2xkKCkgJiYgbV9tb2R1bGVJbmZvcm1hdGlvbi0+Y29kZVNlY3Rpb25TaXpl
ID49IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpKQogICAgICAgICAg
ICAgZm9yY2VVc2luZ0IzID0gdHJ1ZTsKIAorICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0g
bV9jYWxsZWVzLT5hdChmdW5jdGlvbkluZGV4KS0+dGllclVwQ291bnQoKTsKICAgICAgICAgaWYg
KCFmb3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkKLSAgICAgICAgICAg
IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihtX2NvbXBpbGF0aW9u
Q29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCks
IG1fbW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9j
b21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBt
X3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwg
ZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZSht
X2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBzaWduYXR1cmUs
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRp
b25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXAsIG1fdGhy
b3dXYXNtRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBh
cnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0
aW9uLCBzaWduYXR1cmUsIG1fd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1v
ZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCwgbV90aHJvd1dh
c21FeGNlcHRpb24pOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVz
dWx0KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAt
Mjk0LDExICsyODUsMTEgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFy
c2VBbmRDb21waWxlUmVzdWx0KTsKLQogICAgICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5k
aWNlcy5jb250YWlucyhmdW5jdGlvbkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZl
cmVuY2VkRnVuY3Rpb25zKCkuY29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBt
X2NyZWF0ZUVtYmVkZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRl
eF0sIHNpZ25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0s
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOworICAg
ICAgICAgICAgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gZW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tm
dW5jdGlvbkluZGV4XSwgc2lnbmF0dXJlLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCks
IG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSk7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRl
eCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpKTsKICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIApAQCAtMzE2
LDcgKzMwNyw5IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlcikKICAgICAgICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29t
cGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgICAgIFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlv
blNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5k
ZXgpOwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVu
Y3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsK
KyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291bnQgPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgICAgICAgICBjb25zdCB1
aW50MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW1wb3J0RnVuY3Rp
b25Db3VudDsKKyAgICAgICAgICAgIEJCUUNhbGxlZSYgY2FsbGVlID0gbV9jYWxsZWVzLT5hdChm
dW5jdGlvbkluZGV4KS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3Bh
Y2UgPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4
dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAg
LTMyNSw5ICszMTgsMTYgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25J
bmRleF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlv
bj4oCisgICAgICAgICAgICAgICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5jYWxsZWVTYXZlUmVnaXN0
ZXJzID0gV1RGTW92ZShjb250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgICAgICAgICAg
ICAgIGNhbGxlZS5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21w
aWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
QjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBmdW5jdGlvblslaV0gJXMgbmFt
ZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgp
LCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5k
YXRhKCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9p
bnRCeXByb2R1Y3RzKSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjb250
ZXh0Lm91dGdvaW5nQ2FsbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFy
Z2V0RnVuY3Rpb25JbmRleFNwYWNlID49IGltcG9ydEZ1bmN0aW9uQ291bnQpOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50MzJfdCB0YXJnZXRGdW5jdGlvbkluZGV4ID0gY2FsbC50YXJn
ZXRGdW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlv
bkNvdW50KCk7CisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGVlcy0+YXQodGFyZ2V0RnVuY3Rp
b25JbmRleCktPmFkZENhbGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsIGNhbGwudW5saW5rZWRNb3Zl
QW5kQ2FsbCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoYXV0byBlbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9X
YXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGZ1bmN0aW9uSW5kZXgpKSB7CkBAIC0zMzcsMjMgKzMz
NywxOCBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2Nr
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBlbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQu
Y29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAg
ICAgZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50KCkuY29tcGlsYXRp
b24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJ
TkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIkVtYmVkZGVyLT5X
ZWJBc3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2ln
bmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUo
ZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0
KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAg
ICAgIFdURk1vdmUoY29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkIDogbV91
bmxpbmtlZFdhc21Ub1dhc21DYWxscykgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDog
dW5saW5rZWQpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2R1
bGVJbmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShj
YWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUg
aW1wb3J0cyBjb3VsZCBoYXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRp
bmcgYSBwYXRjaHBvaW50LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBS
RUxFQVNFX0FTU0VSVC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NjQ2MgotICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbVRvV2Fz
bUV4aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuY29kZSgpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1f
d2FzbUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIC0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpKS0+ZW50cnlwb2ludC5jb21waWxh
dGlvbi0+Y29kZSgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2Rl
TG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQuZW1iZWRkZXJNb3ZlQW5kQ2FsbCkKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbGVlLmFkZENhbGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsICpjb250ZXh0LmVt
YmVkZGVyTW92ZUFuZENhbGwpOwogICAgICAgICAgICAgfQorCiAgICAgICAgIH0KKworICAgICAg
ICBmb3IgKGF1dG8mIGNhbGxlZSA6ICptX2NhbGxlZXMpCisgICAgICAgICAgICBjYWxsZWUtPnJl
cGF0Y2hDYWxsZXJzKGxvY2tlciwgY2FsbGVlLmdldCgpKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KCFpc0NvbXBsZXRlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5o
CmluZGV4IDg4MzYxN2ZjNjdmZmViODA1MTIwOGM3NDBlMmYxZjkxODhiNDEzMGQuLmUyMTc0NjI3
ZDJiNDA0MTliMGMzMDZhNjI3NTA5NGFiYmI1ZTRkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBB
c3luY1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKIAogICAgIC8v
IE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUg
UGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBCQlFQ
bGFuKENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRp
b25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwor
ICAgIEJCUVBsYW4oQ29udGV4dCosIGNvbnN0IFZlY3RvcjxSZWY8QkJRQ2FsbGVlPj4mLCBSZWY8
TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVt
YmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEJCUVBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBs
ZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24p
OwogICAgIEJCUVBsYW4oQ29udGV4dCosIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAK
QEAgLTk4LDEyICs5OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV93YXNt
VG9XYXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+PiB0YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpCi0gICAgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBX
VEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpOwotICAgIH0KLQogICAgIGVudW0gY2xh
c3MgU3RhdGUgOiB1aW50OF90IHsKICAgICAgICAgSW5pdGlhbCwKICAgICAgICAgVmFsaWRhdGVk
LApAQCAtMTM5LDE0ICsxMzMsMTMgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dWludDhfdD4gbV9z
b3VyY2U7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFZlY3Rv
cjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhp
dFN0dWJzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1f
d2FzbUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5cGVuYW1lIERl
ZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0gICAgSGFzaE1hcDx1
aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZh
dWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgSGFz
aE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1l
IERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAg
ICBWZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CiAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+IG1fdGllclVwQ291bnRzOwogCi0g
ICAgVmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV91bmxpbmtlZFdhc21U
b1dhc21DYWxsczsKICAgICBTdHJlYW1pbmdQYXJzZXIgbV9zdHJlYW1pbmdQYXJzZXI7CisgICAg
Y29uc3QgVmVjdG9yPFJlZjxCQlFDYWxsZWU+PiogbV9jYWxsZWVzIHsgbnVsbHB0ciB9OwogICAg
IFN0YXRlIG1fc3RhdGU7CiAKICAgICBjb25zdCBBc3luY1dvcmsgbV9hc3luY1dvcms7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCmluZGV4IDg2
NjAxYWM5ZWYzZmIzODVlMDYwMjkwMWMxYTA0ZDUzMGM1NjNjYTguLjliYmM2ZjM4OTc1MmQ3NzA2
ZTRjOWZiMTVjODU5OWY1NGYyODJmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCkBAIC0zOCwyMSArMzgsOCBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgogdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5j
dG9yJiBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1f
d2FzbUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsK
LQotICAgICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7
Ci0gICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9X
YXNtSW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKLSAgICAg
ICAgICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2lu
dCkpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVy
VG9XYXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIElu
dGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJu
YWxGdW5jdGlvbkluZGV4XS5nZXQoKTsKLSAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IGludGVybmFsRnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1
bmN0aW9uQ291bnQoKTsKLSAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRD
YWxsZWUgPSBXYXNtOjpCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBv
aW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlv
bi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJu
YWxGdW5jdGlvbkluZGV4XSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50
ZXIoZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNt
RW50cnlwb2ludENhbGxlZS5wdHIoKSkpOwotCi0gICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVu
Y3Rpb25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdh
c21FbnRyeXBvaW50Q2FsbGVlKSk7Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxG
dW5jdGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpCisgICAgICAg
IGNhbGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgbV9lbWJlZGRlclRvV2FzbUludGVybmFs
RnVuY3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKTsKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cAppbmRleCBjZTYxMDc2ZDFhY2I3OWFlYTRjNWU4Yjc1MmIxNzk0ODVjYWYwOGVlLi5lZWZiOTcy
NTEwYWI4NDMzNWMwM2Y3MDRkZjRiNWIyYjQ1MDM5ZTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC00Nyw2ICs0Nyw3IEBAIEV4cGVjdGVkPE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRv
V2FzbSh1bnNpCiAgICAgSklUIGppdDsKIAogICAgIEdQUlJlZyBzY3JhdGNoID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAgIEdQUlJlZyBjYWxsZWUg
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMSk7CiAgICAgR1BS
UmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwogICAgIEFTU0VS
VChiYXNlTWVtb3J5ICE9IHNjcmF0Y2gpOwogICAgIEFTU0VSVChwaW5uZWRSZWdzLnNpemVSZWdp
c3RlciAhPSBiYXNlTWVtb3J5KTsKQEAgLTU3LDEzICs1OCwyMCBAQCBFeHBlY3RlZDxNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dh
c20odW5zaQogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNo
KTsgLy8gT2xkIEluc3RhbmNlKgogICAgIC8vIEdldCB0aGUgY2FsbGVlJ3MgV2FzbTo6SW5zdGFu
Y2UgYW5kIHNldCBpdCBhcyBXYXNtQ29udGV4dCdzIGluc3RhbmNlLiBUaGUgY2FsbGVyIHdpbGwg
dGFrZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgogICAgIGppdC5sb2FkUHRy
KEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJ
bnN0YW5jZShpbXBvcnRJbmRleCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAgIC8v
IFdoaWxlIHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQgdGhlIHdhc20g
ZW50cnlwb2ludCBzbyB3ZSBjYW4gdGFpbCBjYWxsIHRvIGl0IGJlbG93LgorICAgIC8vIFdoaWxl
IHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQgdGhlIHdhc20gZW50cnlw
b2ludCBhbmQgY2FsbGVlIHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCiAgICAgaml0
LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRP
Zldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOworICAg
IGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbihpbXBvcnRJbmRleCkpLCBjYWxsZWUpOwogICAg
IGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7CiAKICAgICBqaXQubG9h
ZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkU3RhY2tMaW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRjaCk7CiAgICAgaml0LnN0b3JlUHRyKHNp
emVSZWdBc1NjcmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKIAorICAgIC8vIFNldCB0aGUgY2FsbGVlIHNsb3QgaW4g
dGhlIGNhbGwgZnJhbWUKKyAgICBqaXQubG9hZFB0cihjYWxsZWUsIGNhbGxlZSk7CisgICAgLy8g
QXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBiZWVuIGNhbGxlZCwgc28gUmV0dXJuUEMgaXMgb24gdGhl
IHN0YWNrLCBidXQgd2UgaGF2ZSBub3QgeWV0IHB1c2hlZCB0aGUgZnJhbWUgcG9pbnRlciwKKyAg
ICAvLyBzbyB3ZSBoYXZlIHRvIHN1YnRyYWN0IHRoZSBzcGFjZSBmb3IgQ2FsbGVyRnJhbWUgZnJv
bSB0aGUgY2FsbGVlIHNsb3QKKyAgICBqaXQuc3RvcmVQdHIoY2FsbGVlLCBKSVQ6OkFkZHJlc3Mo
SklUOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9m
KFJlZ2lzdGVyKSAtIHNpemVvZihDUFVSZWdpc3RlcikpKTsKKwogICAgIC8vIEZJWE1FIHRoZSBm
b2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdhc206Okluc3RhbmNlIGhhdmUgdGhlIHNh
bWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9yeSByZWdpc3Rl
ciBhcyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMuCiAgICAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAppbmRleCBlOGRkZjE1M2RkOWQ5MDIyOWM1
MTI4MWVjMjgxMmY3YTU5MTE0MWQ2Li45MzMxNGFiNjY3Nzg3ZjY5MTk5YjFhNDJjM2QyOWQzZmM0
YjZjODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcApAQCAt
MzIsMTYgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLUNh
bGxlZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5
cG9pbnQmJiBlbnRyeXBvaW50KQorQ2FsbGVlOjpDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2Rl
IGNvbXBpbGF0aW9uTW9kZSkKICAgICA6IG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9k
ZSkKLSAgICAsIG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQogewogICAgIENhbGxl
ZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckNhbGxlZSh0aGlzKTsKIH0KIAotQ2FsbGVl
OjpDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgRW50cnlwb2lu
dCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQ
dHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCitDYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlv
bk1vZGUgY29tcGlsYXRpb25Nb2RlLCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1l
KiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQogICAgIDogbV9jb21waWxhdGlvbk1vZGUo
Y29tcGlsYXRpb25Nb2RlKQotICAgICwgbV9lbnRyeXBvaW50KFdURk1vdmUoZW50cnlwb2ludCkp
CiAgICAgLCBtX2luZGV4T3JOYW1lKGluZGV4LCBXVEZNb3ZlKG5hbWUpKQogewogICAgIENhbGxl
ZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckNhbGxlZSh0aGlzKTsKQEAgLTUyLDYgKzUw
LDQ4IEBAIENhbGxlZTo6fkNhbGxlZSgpCiAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigp
LnVucmVnaXN0ZXJDYWxsZWUodGhpcyk7CiB9CiAKKworaW5saW5lIHZvaWQgcmVwYXRjaE1vdmUo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5
UHRyVGFnPiBtb3ZlTG9jYXRpb24sIENhbGxlZSYgdGFyZ2V0Q2FsbGVlKQoreworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdh
c20oJnRhcmdldENhbGxlZSkpOworfQorCitpbmxpbmUgdm9pZCByZXBhdGNoQ2FsbChjb25zdCBB
YnN0cmFjdExvY2tlciYsIENvZGVMb2NhdGlvbk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4gY2Fs
bExvY2F0aW9uLCBDYWxsZWUmIHRhcmdldENhbGxlZSkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaE5lYXJDYWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5
UHRyVGFnPih0YXJnZXRDYWxsZWUuY29kZSgpKSk7Cit9CisKK3ZvaWQgQkJRQ2FsbGVlOjphZGRD
YWxsZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBVbmxp
bmtlZE1vdmVBbmRDYWxsIGNhbGwpCit7CisgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihjYWxsLm1vdmVMb2NhdGlvbik7CisgICAg
YXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50
cnlQdHJUYWc+KGNhbGwuY2FsbExvY2F0aW9uKTsKKyAgICBtX21vdmVMb2NhdGlvbnMuYXBwZW5k
KG1vdmVMb2NhdGlvbik7CisgICAgbV9jYWxsTG9jYXRpb25zLmFwcGVuZChjYWxsTG9jYXRpb24p
OworfQorCit2b2lkIEJCUUNhbGxlZTo6YWRkQW5kTGlua0NhbGxlcihjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBVbmxpbmtlZE1vdmVBbmRDYWxs
IGNhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uKTsK
KworICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRy
eVB0clRhZz4oY2FsbC5tb3ZlTG9jYXRpb24pOworICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsLmNhbGxMb2Nh
dGlvbik7CisgICAgbV9tb3ZlTG9jYXRpb25zLmFwcGVuZChtb3ZlTG9jYXRpb24pOworICAgIG1f
Y2FsbExvY2F0aW9ucy5hcHBlbmQoY2FsbExvY2F0aW9uKTsKKworICAgIENhbGxlZSYgdGFyZ2V0
Q2FsbGVlID0gbV9yZXBsYWNlbWVudCA/IHN0YXRpY19jYXN0PENhbGxlZSY+KCptX3JlcGxhY2Vt
ZW50KSA6ICp0aGlzOworICAgIHJlcGF0Y2hNb3ZlKGxvY2tlciwgbW92ZUxvY2F0aW9uLCB0YXJn
ZXRDYWxsZWUpOworICAgIHJlcGF0Y2hDYWxsKGxvY2tlciwgY2FsbExvY2F0aW9uLCB0YXJnZXRD
YWxsZWUpOworfQorCit2b2lkIEJCUUNhbGxlZTo6cmVwYXRjaENhbGxlcnMoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlciwgQ2FsbGVlJiB0YXJnZXRDYWxsZWUpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQodGFyZ2V0Q2FsbGVlLmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbik7CisgICAgZm9yIChh
dXRvIG1vdmVMb2NhdGlvbiA6IG1fbW92ZUxvY2F0aW9ucykKKyAgICAgICAgcmVwYXRjaE1vdmUo
bG9ja2VyLCBtb3ZlTG9jYXRpb24sIHRhcmdldENhbGxlZSk7CisgICAgZm9yIChhdXRvIGNhbGxM
b2NhdGlvbiA6IG1fY2FsbExvY2F0aW9ucykKKyAgICAgICAgcmVwYXRjaENhbGwobG9ja2VyLCBj
YWxsTG9jYXRpb24sIHRhcmdldENhbGxlZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGVlLmgKaW5kZXggZjdlYTRkMDViOGQwYTcxYzFlZTYyYTU2YzRkMzlkYTU0
OWYwOWI3Yi4uOTkwOWRjNDA5NTk5MTlhNWM2OWFmYmRmMjUyOTU4MjkzYTExYzRhMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtNDAsMTIgKzQwLDEzIEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBDYWxsZWUgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8Q2FsbGVlPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50
cnlwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgp
LnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsgfQotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNh
dmVSZWdpc3RlcnM7IH0KKyAgICBFbnRyeXBvaW50JiBlbnRyeXBvaW50KCkgeyByZXR1cm4gbV9l
bnRyeXBvaW50OyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4g
Y29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJl
dGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsgfQogICAgIEluZGV4T3JOYW1lIGluZGV4T3JOYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleE9yTmFtZTsgfQogICAgIENvbXBpbGF0aW9uTW9kZSBj
b21waWxhdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBpbGF0aW9uTW9kZTsgfQogCisg
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAm
bV9lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKwogICAgIHN0ZDo6dHVwbGU8dm9p
ZCosIHZvaWQqPiByYW5nZSgpIGNvbnN0CiAgICAgewogICAgICAgICB2b2lkKiBzdGFydCA9IG1f
ZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3Rh
cnQoKS51bnRhZ2dlZFB0cigpOwpAQCAtNTYsNzggKzU3LDcwIEBAIHB1YmxpYzoKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5DYWxsZWUoKTsKIAogcHJvdGVjdGVkOgotICAgIEpTX0VY
UE9SVF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9p
bnQmJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZSwgV2FzbTo6RW50cnlwb2ludCYmLCBzaXplX3QsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVm
UHRyPE5hbWVTZWN0aW9uPj4mJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKENvbXBp
bGF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKENvbXBpbGF0aW9uTW9k
ZSwgc2l6ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYp
OwogCiBwcml2YXRlOgogICAgIENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZTsKLSAg
ICBXYXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsKKyAgICBFbnRyeXBvaW50IG1fZW50cnlw
b2ludDsKICAgICBJbmRleE9yTmFtZSBtX2luZGV4T3JOYW1lOwogfTsKIAogY2xhc3MgT01HQ2Fs
bGVlIGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPTUdD
YWxsZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4
LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAgICBzdGF0aWMg
UmVmPE9NR0NhbGxlZT4gY3JlYXRlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUq
LCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBPTUdDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUo
bmFtZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgT01HQ2FsbGVlKGluZGV4LCBXVEZNb3ZlKG5hbWUpKSk7CiAgICAgfQogCi0gICAgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB3YXNtVG9XYXNtQ2FsbHNpdGVzKCkgeyByZXR1
cm4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOyB9Ci0KIHByaXZhdGU6Ci0gICAgT01HQ2FsbGVlKFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25z
dCBOYW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IENhbGxlZShXYXNtOjpDb21w
aWxhdGlvbk1vZGU6Ok9NR01vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3Zl
KG5hbWUpKQotICAgICAgICAsIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyhXVEZNb3ZlKHVubGlua2Vk
Q2FsbHMpKQorICAgIE9NR0NhbGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1l
KiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorICAgICAgICA6IENhbGxlZShDb21waWxh
dGlvbk1vZGU6Ok9NR01vZGUsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQogICAgIHsKICAgICB9Ci0K
LSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gbV93YXNtVG9XYXNtQ2FsbHNpdGVz
OwogfTsKIAogY2xhc3MgT01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjcmVhdGUo
V2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNv
bnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5
U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAgICBzdGF0aWMgUmVmPE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlPiBjcmVhdGUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgdWludDMyX3QgbG9vcEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgT01HRm9yT1NSRW50cnlDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdU
Rk1vdmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RGTW92
ZSh1bmxpbmtlZENhbGxzKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JP
U1JFbnRyeUNhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgbG9vcEluZGV4KSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNo
QnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsg
fQogICAgIHVpbnQzMl90IGxvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcEluZGV4OyB9
Ci0gICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB3YXNtVG9XYXNtQ2FsbHNpdGVz
KCkgeyByZXR1cm4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgT01H
Rm9yT1NSRW50cnlDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBp
bmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUs
IHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAgICAg
OiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1v
dmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fd2FzbVRv
V2FzbUNhbGxzaXRlcyhXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIE9NR0Zvck9TUkVudHJ5
Q2FsbGVlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNl
Y3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQz
Ml90IGxvb3BJbmRleCkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JP
U1JFbnRyeU1vZGUsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAgICAgICAsIG1f
bG9vcEluZGV4KGxvb3BJbmRleCkKICAgICB7CiAgICAgfQogCi0gICAgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKICAgICB1bnNpZ25lZCBtX29z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgdWludDMyX3QgbV9sb29wSW5kZXg7CiB9Owog
CiBjbGFzcyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRl
KFdhc206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQorICAgIHN0YXRpYyBSZWY8RW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCkpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKCkpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV2FzbTo6RW50
cnlwb2ludCYmIGVudHJ5cG9pbnQpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9u
TW9kZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSkKKyAgICBF
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoKQorICAgICAgICA6IENhbGxlZShDb21waWxhdGlvbk1v
ZGU6OkVtYmVkZGVyRW50cnlwb2ludE1vZGUpCiAgICAgewogICAgIH0KIH07CiAKIGNsYXNzIEJC
UUNhbGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
QkJRQ2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBp
bmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUs
IHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCkKKyAgICBzdGF0aWMg
UmVmPEJCUUNhbGxlZT4gY3JlYXRlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUq
LCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3Vu
dD4mJiB0aWVyVXBDb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJC
UUNhbGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92
ZSh0aWVyVXBDb3VudCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVl
KGluZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSkpOwogICAgIH0KIAog
ICAgIE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3Ny
RW50cnlDYWxsZWUuZ2V0KCk7IH0KQEAgLTE0NywxMyArMTQwLDIwIEBAIHB1YmxpYzoKIAogICAg
IFRpZXJVcENvdW50KiB0aWVyVXBDb3VudCgpIHsgcmV0dXJuIG1fdGllclVwQ291bnQuZ2V0KCk7
IH0KIAorICAgIHZvaWQgYWRkQ2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZl
ciYsIFVubGlua2VkTW92ZUFuZENhbGwpOworICAgIHZvaWQgYWRkQW5kTGlua0NhbGxlcihjb25z
dCBBYnN0cmFjdExvY2tlciYsIExpbmtCdWZmZXImLCBVbmxpbmtlZE1vdmVBbmRDYWxsKTsKKwor
ICAgIHZvaWQgcmVwYXRjaENhbGxlcnMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBDYWxsZWUmKTsK
KwogcHJpdmF0ZToKLSAgICBCQlFDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQs
IHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+
PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCkKLSAg
ICAgICAgOiBDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBXVEZNb3ZlKGVu
dHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSkKKyAgICBCQlFDYWxsZWUoc2l6ZV90IGlu
ZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwg
c3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYmIHRpZXJVcENvdW50KQorICAgICAgICA6IENh
bGxlZShDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQogICAg
ICAgICAsIG1fdGllclVwQ291bnQoV1RGTW92ZSh0aWVyVXBDb3VudCkpCiAgICAgewogICAgIH0K
IAorICAgIFZlY3RvcjxDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPj4g
bV9tb3ZlTG9jYXRpb25zOworICAgIFZlY3RvcjxDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50
cnlQdHJUYWc+PiBtX2NhbGxMb2NhdGlvbnM7CiAgICAgUmVmUHRyPE9NR0Zvck9TUkVudHJ5Q2Fs
bGVlPiBtX29zckVudHJ5Q2FsbGVlOwogICAgIFJlZlB0cjxPTUdDYWxsZWU+IG1fcmVwbGFjZW1l
bnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiBtX3RpZXJVcENvdW50OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9u
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaApp
bmRleCBiNDQyYjYxNjFiZjkyMzM3NTgxOTc1ODEzZmYzODA2YTczMWE5MjI2Li42ZmE0MzY5Y2Nk
Y2E4OGU0YjcwZWQ2NDY5YmI3NjM5ODE0ZjhlODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaApAQCAtODgsMzQgKzg4LDE2IEBA
IHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgaGVhZGVyU2l6ZUluQnl0
ZXMoKSB7IHJldHVybiBoZWFkZXJTaXplOyB9Ci0gICAgdm9pZCBzZXR1cEZyYW1lSW5Qcm9sb2d1
ZShDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRyVGFnPiogY2FsbGVlTW92ZUxv
Y2F0aW9uLCBCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6OkJhc2lj
QmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHZvaWQgc2V0dXBGcmFtZUluUHJvbG9ndWUoQjM6OlBy
b2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9jaykg
Y29uc3QKICAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
ICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSByZWx5IG9uIHRoaXMgaGVyZSBm
b3Igbm93LiIpOwogICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhlcmUg
Zm9yIG5vdy4iKTsKIAotICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBnZXRDYWxsZWVQYXRj
aHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBCMzo6
SW50NjQsIG9yaWdpbik7Ci0gICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnJlc3VsdENvbnN0
cmFpbnRzID0geyBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlciB9OwotICAgICAgICBnZXRDYWxs
ZWVQYXRjaHBvaW50LT5lZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKLSAgICAgICAgZ2V0
Q2FsbGVlUGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHBhcmFtc1swXS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1vdmVMb2NhdGlvbiA9IGpp
dC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBy
ZXN1bHQpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbY2FsbGVlTW92ZUxvY2F0
aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICpjYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8V2Fz
bUVudHJ5UHRyVGFnPihtb3ZlTG9jYXRpb24pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgQjM6OlZhbHVlKiBmcmFtZVBvaW50ZXIgPSBibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkZyYW1lUG9pbnRlciwgb3JpZ2luKTsKLSAgICAg
ICAgQjM6OlZhbHVlKiBvZmZzZXRPZkNhbGxlZSA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0
NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVn
aXN0ZXIpKTsKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFsdWU+KHByb2Ms
IEIzOjpTdG9yZSwgb3JpZ2luLAotICAgICAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludCwKLSAg
ICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6QWRkLCBvcmln
aW4sIGZyYW1lUG9pbnRlciwgb2Zmc2V0T2ZDYWxsZWUpKTsKLQogICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IGhhdmUgdG8gc3RvcmUgemVybyBpbnRvIHRoZSBDb2RlQmxvY2sqIHNwb3Qg
aW4gdGhlIGNhbGwgZnJhbWUsCiAgICAgICAgIC8vIGJ1dCB0aGVyZSBhcmUgcGxhY2VzIHRoYXQg
aW50ZXJwcmV0IG5vbi1udWxsIENvZGVCbG9jayBzbG90IHRvIG1lYW4gYSB2YWxpZCBDb2RlQmxv
Y2suCiAgICAgICAgIC8vIFdoZW4gZG9pbmcgdW53aW5kaW5nLCB3ZSdsbCBuZWVkIHRvIHZlcmlm
eSB0aGF0IHRoZSBlbnRpcmUgcnVudGltZSBpcyBPSyB3aXRoIGEgbm9uLW51bGwKICAgICAgICAg
Ly8gQ29kZUJsb2NrIG5vdCBpbXBseWluZyB0aGF0IHRoZSBDb2RlQmxvY2sgaXMgdmFsaWQuCiAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEK
KyAgICAgICAgQjM6OlZhbHVlKiBmcmFtZVBvaW50ZXIgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4ocHJvYywgQjM6OkZyYW1lUG9pbnRlciwgb3JpZ2luKTsKICAgICAgICAgQjM6OlZhbHVl
KiBvZmZzZXRPZkNvZGVCbG9jayA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4o
cHJvYywgb3JpZ2luLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIp
KTsKICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFsdWU+KHByb2MsIEIzOjpT
dG9yZSwgb3JpZ2luLAogICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3Q2NFZh
bHVlPihwcm9jLCBvcmlnaW4sIDApLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUNvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29kZUJsb2NrLmNwcAppbmRleCBkNGE5Y2Q2NzcxMDJiNThlNGZjNTllMWEyMGFlNTZiOGUyMWM3
NDMwLi4zYTg3ZjYxYTQ1MGVlN2RiMjRkMGY5YjU5OTI2NzhmY2YwYjc5ODM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcApAQCAtMjksNyArMjksNiBA
QAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIldhc21CQlFQbGFuSW5saW5l
cy5oIgotI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAj
aW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAKQEAgLTQ3LDcgKzQ2LDE1IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1lbW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3Jt
YXRpb24mIG1vZHVsCiB7CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvdGVjdGVkVGhpcyA9IHRo
aXM7CiAKLSAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJCUVBsYW4oY29udGV4dCwgbWFrZVJl
Zihtb2R1bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46OkZ1bGxDb21waWxlLCBjcmVhdGVTaGFyZWRU
YXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKKyAgICBtX2NhbGxlZXMucmVzaXplKG1fY2FsbGVlQ291
bnQpOworICAgIG1fYm94ZWRDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKKyAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbV9jYWxsZWVDb3VudDsgaSsrKSB7CisgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9u
Q291bnQoKSArIGk7CisgICAgICAgIG1fY2FsbGVlc1tpXSA9IEJCUUNhbGxlZTo6Y3JlYXRlKGZ1
bmN0aW9uSW5kZXhTcGFjZSwgbW9kdWxlSW5mb3JtYXRpb24ubmFtZVNlY3Rpb24tPmdldChmdW5j
dGlvbkluZGV4U3BhY2UpLCBtYWtlVW5pcXVlPFRpZXJVcENvdW50PigpKTsKKyAgICAgICAgbV9i
b3hlZENhbGxlZXNbaV0gPSBDYWxsZWVCaXRzOjpib3hXYXNtKG1fY2FsbGVlc1tpXS5wdHIoKSk7
CisgICAgfQorCisgICAgbV9wbGFuID0gYWRvcHRSZWYoKm5ldyBCQlFQbGFuKGNvbnRleHQsIG1f
Y2FsbGVlcywgbWFrZVJlZihtb2R1bGVJbmZvcm1hdGlvbiksIEJCUVBsYW46OkZ1bGxDb21waWxl
LCBjcmVhdGVTaGFyZWRUYXNrPFBsYW46OkNhbGxiYWNrVHlwZT4oW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSAoUGxhbiYpIHsKICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgICAgICBpZiAobV9wbGFuLT5mYWlsZWQoKSkgewog
ICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBtX3BsYW4tPmVycm9yTWVzc2FnZSgpOwpAQCAt
NTYsMjEgKzYzLDE4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvbnRleHQqIGNvbnRleHQsIE1l
bW9yeU1vZGUgbW9kZSwgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsCiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGV2ZW50dWFsbHkgY29sbGVjdCB0aGUgQkJRIGNvZGUu
Ci0gICAgICAgIG1fY2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7CiAgICAgICAgIG1fb3B0
aW1pemVkQ2FsbGVlcy5yZXNpemUobV9jYWxsZWVDb3VudCk7CiAgICAgICAgIG1fd2FzbUluZGly
ZWN0Q2FsbEVudHJ5UG9pbnRzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKIAotICAgICAgICBtX3Bs
YW4tPmluaXRpYWxpemVDYWxsZWVzKFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIFJlZlB0cjxX
YXNtOjpDYWxsZWU+JiYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBSZWY8V2FzbTo6Q2FsbGVl
PiYmIHdhc21FbnRyeXBvaW50Q2FsbGVlKSB7CisgICAgICAgIG1fcGxhbi0+aW5pdGlhbGl6ZUNh
bGxlZXMoWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZT4mJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpIHsKICAgICAgICAgICAgIGlmIChl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpIHsKICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IG1fZW1iZWRkZXJDYWxsZWVzLnNldChjYWxsZWVJbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5
cG9pbnRDYWxsZWUpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0LmlzTmV3RW50cnkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jYWxsZWVzW2Nh
bGxlZUluZGV4XSA9IFdURk1vdmUod2FzbUVudHJ5cG9pbnRDYWxsZWUpOwotICAgICAgICAgICAg
bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbY2FsbGVlSW5kZXhdID0gbV9jYWxsZWVzW2Nh
bGxlZUluZGV4XS0+ZW50cnlwb2ludCgpOworICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RDYWxs
RW50cnlQb2ludHNbY2FsbGVlSW5kZXhdID0gbV9jYWxsZWVzW2NhbGxlZUluZGV4XS0+Y29kZSgp
OwogICAgICAgICB9KTsKIAogICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMgPSBtX3BsYW4t
PnRha2VXYXNtVG9XYXNtRXhpdFN0dWJzKCk7Ci0gICAgICAgIG1fd2FzbVRvV2FzbUNhbGxzaXRl
cyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21DYWxsc2l0ZXMoKTsKIAogICAgICAgICBzZXRDb21w
aWxhdGlvbkZpbmlzaGVkKCk7CiAgICAgfSksIFdURk1vdmUoY3JlYXRlRW1iZWRkZXJXcmFwcGVy
KSwgdGhyb3dXYXNtRXhjZXB0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q29kZUJsb2NrLmgKaW5kZXggZGVhMmZmYTMxODEyMDNmNzhhYWE2MWM3MGJmMjk3MWJjMDMyNzll
ZC4uMTBlZjI0YzQ5YjA1Nzc4OWYyOGM1NjU1NGQ0NTZkYzMzZjczYzRmOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaApAQCAtMjgsNiArMjgsNyBAQAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
IgorI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtRW1iZWRkZXIuaCIKICNp
bmNsdWRlICJXYXNtVGllclVwQ291bnQuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtNDAs
OSArNDEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdhc20gewogCi1jbGFzcyBD
YWxsZWU7Ci1zdHJ1Y3QgQ29udGV4dDsKIGNsYXNzIEJCUVBsYW47CitzdHJ1Y3QgQ29udGV4dDsK
IGNsYXNzIE9NR1BsYW47CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiBzdHJ1Y3QgVW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbDsKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhl
c2UgdHdvIGNhbGxlZSBnZXR0ZXJzIGFyZSBvbmx5IHZhbGlkIG9uY2UgdGhlIGNhbGxlZXMgaGF2
ZSBiZWVuIHBvcHVsYXRlZC4KIAotICAgIENhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVl
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAg
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChydW5uYWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25J
bmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CkBAIC04NiwyOSArODYsMjcgQEAg
cHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWUpOwogICAgICAgICByZXR1cm4g
KmNhbGxlZTsKICAgICB9Ci0gICAgQ2FsbGVlJiB3YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorCisgICAgQkJRQ2Fs
bGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBBU1NFUlQocnVubmFibGUoKSk7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50
KCkpOwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAt
IGZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAgICAgaWYgKG1fb3B0aW1pemVkQ2FsbGVlc1tj
YWxsZWVJbmRleF0pCi0gICAgICAgICAgICByZXR1cm4gKm1fb3B0aW1pemVkQ2FsbGVlc1tjYWxs
ZWVJbmRleF0uZ2V0KCk7Ci0gICAgICAgIHJldHVybiAqbV9jYWxsZWVzW2NhbGxlZUluZGV4XS5n
ZXQoKTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7CiAgICAg
fQogCi0gICAgQ2FsbGVlJiB3YXNtQkJRQ2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21F
bnRyeVB0clRhZz4qIGVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChydW5u
YWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1
bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVu
Y3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICByZXR1cm4g
Km1fY2FsbGVlc1tjYWxsZWVJbmRleF0uZ2V0KCk7CisgICAgICAgIHJldHVybiAmbV93YXNtSW5k
aXJlY3RDYWxsRW50cnlQb2ludHNbY2FsbGVlSW5kZXhdOwogICAgIH0KIAotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+KiBlbnRyeXBvaW50TG9hZExvY2F0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpCisgICAgdm9p
ZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5j
dGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKICAgICAgICAgdW5zaWdu
ZWQgY2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50
KCk7Ci0gICAgICAgIHJldHVybiAmbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbY2FsbGVl
SW5kZXhdOworICAgICAgICByZXR1cm4gJm1fYm94ZWRDYWxsZWVzW2NhbGxlZUluZGV4XTsKICAg
ICB9CiAKICAgICBib29sIGlzU2FmZVRvUnVuKE1lbW9yeU1vZGUpOwpAQCAtMTI0LDExICsxMjIs
MTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKICAgICB1
bnNpZ25lZCBtX2NhbGxlZUNvdW50OwogICAgIE1lbW9yeU1vZGUgbV9tb2RlOwotICAgIFZlY3Rv
cjxSZWZQdHI8Q2FsbGVlPj4gbV9jYWxsZWVzOwotICAgIFZlY3RvcjxSZWZQdHI8Q2FsbGVlPj4g
bV9vcHRpbWl6ZWRDYWxsZWVzOwotICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxDYWxsZWU+
LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyQ2FsbGVlczsKKyAgICBWZWN0
b3I8UmVmPEJCUUNhbGxlZT4+IG1fY2FsbGVlczsKKyAgICBWZWN0b3I8UmVmUHRyPE9NR0NhbGxl
ZT4+IG1fb3B0aW1pemVkQ2FsbGVlczsKKyAgICBWZWN0b3I8dm9pZCo+IG1fYm94ZWRDYWxsZWVz
OworICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU+
LCB0eXBlbmFtZSBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2VtYmVkZGVyQ2FsbGVlczsKICAgICBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbUluZGlyZWN0
Q2FsbEVudHJ5UG9pbnRzOwotICAgIFZlY3RvcjxWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPFdhc21FbnRyeVB0clRhZz4+IG1fd2FzbVRvV2FzbUV4aXRTdHViczsKICAgICBSZWZQdHI8
QkJRUGxhbj4gbV9wbGFuOwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fY29tcGlsYXRpb25GaW5p
c2hlZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRW1iZWRkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5o
CmluZGV4IGEyMzc5ZmQ1ODljODlkZjYzNTdlNmU0NDFiZWQyYTUxODczOWNhM2UuLmM3OGI0NDNj
NTkxZTg3MDM0YjQxOTVlY2EwMjcyOGRlZjgwY2M4OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21FbWJlZGRlci5oCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIEV4ZWNTdGF0ZTsK
IG5hbWVzcGFjZSBXYXNtIHsKIAogc3RydWN0IENvbXBpbGF0aW9uQ29udGV4dDsKK2NsYXNzIEVt
YmVkZGVyRW50cnlwb2ludENhbGxlZTsKIGNsYXNzIEluc3RhbmNlOwogc3RydWN0IEludGVybmFs
RnVuY3Rpb247CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CkBAIC00OCw3ICs0OSw3IEBAIGNs
YXNzIFNpZ25hdHVyZTsKIHN0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOwogCiAvLyBDcmVh
dGUgd3JhcHBlciBjb2RlIHRvIGNhbGwgZnJvbSBlbWJlZGRlciAtPiBXZWJBc3NlbWJseS4KLXVz
aW5nIENyZWF0ZUVtYmVkZGVyV3JhcHBlciA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiwgTWVtb3J5TW9kZSwgdWludDMyX3QpPjsKK3VzaW5nIENyZWF0ZUVtYmVkZGVyV3JhcHBlciA9
IFdURjo6RnVuY3Rpb248dm9pZChDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBTaWduYXR1cmUm
LCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1l
bW9yeU1vZGUpPjsKIAogLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW4gZXhjZXB0aW9uIGlzIGRldGVj
dGVkLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBQQyB0byBjb250aW51ZSBhdC4KIHVzaW5nIFRo
cm93V2FzbUV4Y2VwdGlvbiA9IHZvaWQqICgqKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25U
eXBlLCBJbnN0YW5jZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmlu
ZGV4IDA2NjliYjQwN2UyOTU5MzYyMmZjY2E4ZTUxOTExOTVkZDliNDZmM2IuLmVhMGUwYjY1OGU5
ZTQ1NWU5YjAxY2RhZTJiNDc5NmI2MjJiODBlM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgKQEAgLTI4NywxMCArMjg3LDE1IEBAIGlubGluZSBib29sIGlzVmFsaWRO
YW1lVHlwZShJbnQgdmFsKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RydWN0IFVubGlua2Vk
TW92ZUFuZENhbGwgeworICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0
aW9uOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxMb2NhdGlvbjsKK307CisKIHN0cnVj
dCBVbmxpbmtlZFdhc21Ub1dhc21DYWxsIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExP
Q0FURUQ7Ci0gICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPiBjYWxsTG9j
YXRpb247Ci0gICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZTsKKyAgICBzaXplX3QgdGFyZ2V0
RnVuY3Rpb25JbmRleFNwYWNlOworICAgIFVubGlua2VkTW92ZUFuZENhbGwgdW5saW5rZWRNb3Zl
QW5kQ2FsbDsKIH07CiAKIHN0cnVjdCBFbnRyeXBvaW50IHsKQEAgLTMxMywxMCArMzE4LDEyIEBA
IHN0cnVjdCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsKICAgICB1c2luZyBMb2FkTG9j
YXRpb24gPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPio7CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZUluZGV4KTsgfQog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIGVudHJ5
cG9pbnRMb2FkTG9jYXRpb24pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJveGVk
Q2FsbGVlTG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKTsgfQogCiAgICAgLy8g
RklYTUU6IFBhY2sgc2lnbmF0dXJlIGluZGV4IGFuZCBjb2RlIHBvaW50ZXIgaW50byBvbmUgNjQt
Yml0IHZhbHVlLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU1MTE+LgogICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4IHsgU2lnbmF0dXJlOjpp
bnZhbGlkSW5kZXggfTsKICAgICBMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbjsK
KyAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb247CiB9OwogdXNpbmcgRnVuY3Rpb25J
bmRleFNwYWNlID0gVmVjdG9yPFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24+OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCmluZGV4IGY0ZjM1MDg3ZTI1NmQw
OTJjZTc0YjIxYjg0NDBhOTM3MjVkMTY2ODUuLjdlMjEyNGY3NmM2M2JmNzVlMmRiMTIzNDlkOTUw
YjBlOTM2ODQwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21J
bnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5o
CkBAIC0xMzAsNiArMTMwLDcgQEAgcHVibGljOgogICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24geyBudWxs
cHRyIH07CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdh
c21Ub0VtYmVkZGVyU3R1YjsKICAgICAgICAgdm9pZCogaW1wb3J0RnVuY3Rpb24geyBudWxscHRy
IH07IC8vIEluIGEgSlMgZW1iZWRkaW5nLCB0aGlzIGlzIGEgV3JpdGVCYXJyaWVyPEpTT2JqZWN0
Pi4KKyAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uIHsgbnVsbHB0ciB9Owog
ICAgIH07CiAgICAgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9udW1JbXBvcnRGdW5jdGlvbnM7IH0KICAgICBJbXBvcnRGdW5jdGlvbkluZm8qIGltcG9ydEZ1
bmN0aW9uSW5mbyhzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pCkBAIC0xNDEsNiArMTQyLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2Nh
dGlvbihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsg
aW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9P
RkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKTsg
fQogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZXYXNtVG9FbWJlZGRlclN0dWIoc2l6ZV90IGlt
cG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9u
TnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0
RnVuY3Rpb25JbmZvLCB3YXNtVG9FbWJlZGRlclN0dWIpOyB9CiAgICAgc3RhdGljIHNpemVfdCBv
ZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4g
b2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlv
bkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVuY3Rp
b24pOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9u
KHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBv
cnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNF
VE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24pOyB9CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogaW1wb3J0RnVuY3Rpb24odW5zaWduZWQgaW1wb3J0RnVu
Y3Rpb25OdW0pIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KCZpbXBvcnRGdW5jdGlvbklu
Zm8oaW1wb3J0RnVuY3Rpb25OdW0pLT5pbXBvcnRGdW5jdGlvbik7IH0KIAogICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mPHNpemVvZih1aW50NjRfdCk+KHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pKSwgIldlIHJl
bHkgb24gdGhpcyBmb3IgdGhlIGFsaWdubWVudCB0byBiZSBjb3JyZWN0Iik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCmlu
ZGV4IGEwYmI2Y2Y2ZDkwMzA2NzQ0MzU2ZDI4OGVhYjBjMmI1MjUyMDU2MmEuLmNmYWVhZjJlYmMw
YjE2NDNjZTNkYTZiMThmMTBlNTBlNzcwYjBhNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCkBAIC01NCwxNSArNTQs
MTUgQEAgbmFtZXNwYWNlIFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbCB7CiBzdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLU9NR0Zvck9TUkVudHJ5UGxhbjo6T01H
Rm9yT1NSRW50cnlQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCBS
ZWY8QkJRQ2FsbGVlPiYmIGNhbGxlZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3Qg
bG9vcEluZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK09NR0Zv
ck9TUkVudHJ5UGxhbjo6T01HRm9yT1NSRW50cnlQbGFuKENvbnRleHQqIGNvbnRleHQsIFJlZjxN
b2R1bGU+JiYgbW9kdWxlLCBSZWY8QkJRQ2FsbGVlPiYmIGNhbGxlZSwgdWludDMyX3QgZnVuY3Rp
b25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4LCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQ29tcGxl
dGlvblRhc2smJiB0YXNrKQogICAgIDogQmFzZShjb250ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8
TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92
ZSh0YXNrKSkKICAgICAsIG1fbW9kdWxlKFdURk1vdmUobW9kdWxlKSkKLSAgICAsIG1fY29kZUJs
b2NrKCptX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUpKQorICAgICwgbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogICAgICwgbV9jYWxsZWUoV1RGTW92ZShjYWxsZWUpKQogICAgICwgbV9mdW5jdGlv
bkluZGV4KGZ1bmN0aW9uSW5kZXgpCiAgICAgLCBtX2xvb3BJbmRleChsb29wSW5kZXgpCiB7Ci0g
ICAgc2V0TW9kZShtb2RlKTsKKyAgICBzZXRNb2RlKGNvZGVCbG9jay5tb2RlKCkpOwogICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+cnVubmFibGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0
cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobV9tb2RlKSk7CiAgICAgZGF0YUxvZ0xuSWYo
V2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAiU3RhcnRpbmcgT01HRm9y
T1NSRW50cnkgcGxhbiBmb3IgIiwgZnVuY3Rpb25JbmRleCwgIiBvZiBtb2R1bGU6ICIsIFJhd1Bv
aW50ZXIoJm1fbW9kdWxlLmdldCgpKSk7CkBAIC04MSw0NSArODEsMzMgQEAgdm9pZCBPTUdGb3JP
U1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsK
ICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4gdW5saW5rZWRDYWxsczsKICAgICBDb21waWxhdGlvbkNvbnRleHQgY29udGV4dDsKICAgICB1
bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gMDsKLSAgICBhdXRvIHBhcnNlQW5k
Q29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0
dXJlLCB1bmxpbmtlZENhbGxzLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6T01HRm9yT1NSRW50cnlN
b2RlLCBtX2Z1bmN0aW9uSW5kZXgsIG1fbG9vcEluZGV4KTsKKyAgICBhdXRvIHBhcnNlQW5kQ29t
cGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShjb250ZXh0LCBmdW5jdGlvbiwgc2lnbmF0dXJl
LCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzLCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9k
ZTo6T01HRm9yT1NSRW50cnlNb2RlLCBtX2Z1bmN0aW9uSW5kZXgsIG1fbG9vcEluZGV4KTsKIAog
ICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewogICAgICAgICBmYWls
KGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcocGFyc2VBbmRDb21waWxlUmVzdWx0LmVycm9y
KCksICJ3aGVuIHRyeWluZyB0byB0aWVyIHVwICIsIFN0cmluZzo6bnVtYmVyKG1fZnVuY3Rpb25J
bmRleCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEVudHJ5cG9pbnQgb21nRW50
cnlwb2ludDsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmNvbnRleHQud2FzbUVudHJ5cG9p
bnRKSVQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKFVOTElLRUxZ
KGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpIHsKICAgICAgICAgQmFzZTo6ZmFpbCho
b2xkTG9jayhtX2xvY2spLCBtYWtlU3RyaW5nKCJPdXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2hp
bGUgdGllcmluZyB1cCBmdW5jdGlvbiBhdCBpbmRleCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0
aW9uSW5kZXgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBvbWdFbnRyeXBvaW50
LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAorICAgIFJlZjxPTUdG
b3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50cnlDYWxsZWU6OmNyZWF0ZShm
dW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQo
ZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5k
ZXgpOworICAgIGNhbGxlZS0+ZW50cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZN
b3ZlKGNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgY2FsbGVlLT5lbnRyeXBvaW50
KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgIEZJ
TkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5
IE9NR0Zvck9TUkVudHJ5IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4
LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9y
TmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9u
LT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RG
TW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogCi0gICAgb21nRW50cnlw
b2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQu
dmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgQVNTRVJUKG1f
Y29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAg
UmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6
Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JF
bnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxz
KSk7CiAgICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VB
bmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6
Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKLSAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50
cnlwb2ludCgpOwotCiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb2RlQmxvY2st
Pm1fbG9jayk7Ci0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNh
bGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNw
YWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgp
KQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNt
RXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2Up
LmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICBmb3Ig
KGF1dG8mIGNhbGwgOiBjb250ZXh0Lm91dGdvaW5nQ2FsbHMpIHsKKyAgICAgICAgICAgIEJCUUNh
bGxlZSYgdGFyZ2V0Q2FsbGVlID0gbV9jb2RlQmxvY2stPndhc21CQlFDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGNhbGwudGFyZ2V0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAg
IHRhcmdldENhbGxlZS5hZGRBbmRMaW5rQ2FsbGVyKGxvY2tlciwgbGlua0J1ZmZlciwgY2FsbC51
bmxpbmtlZE1vdmVBbmRDYWxsKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXNldEluc3RydWN0
aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKQEAgLTEzMiwxOSArMTIwLDYgQEAgdm9pZCBPTUdGb3JP
U1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgICAgICBtX2NhbGxl
ZS0+dGllclVwQ291bnQoKS0+b3NyRW50cnlUcmlnZ2VycygpW21fbG9vcEluZGV4XSA9IFRpZXJV
cENvdW50OjpUcmlnZ2VyUmVhc29uOjpDb21waWxhdGlvbkRvbmU7CiAgICAgICAgICAgICBtX2Nh
bGxlZS0+dGllclVwQ291bnQoKS0+bV9jb21waWxhdGlvblN0YXR1c0Zvck9NR0Zvck9TUkVudHJ5
ID0gVGllclVwQ291bnQ6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKICAgICAgICAgfQot
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAvLyBJdCBpcyBwb3NzaWJs
ZSB0aGF0IGEgbmV3IE9NRyBjYWxsZWUgaXMgYWRkZWQgd2hpbGUgd2UgcmVsZWFzZSBtX2NvZGVC
bG9jay0+bG9jay4KLSAgICAgICAgLy8gVW50aWwgd2UgYWRkIE9NR0Zvck9TUkVudHJ5IGNhbGxl
ZSB0byBCQlFDYWxsZWUncyBtX29zckVudHJ5Q2FsbGVlLCB0aGlzIG5ldyBPTUcgZnVuY3Rpb24g
bGlua2luZyBkb2VzIG5vdCBoYXBwZW4gZm9yIHRoaXMgT01HRm9yT1NSRW50cnkgY2FsbGVlLgot
ICAgICAgICAvLyBXZSByZS1saW5rIHRoaXMgT01HRm9yT1NSRW50cnkgY2FsbGVlIGFnYWluIG5v
dCB0byBtaXNzIHRoYXQgY2hhbmNlLgotICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUt
Pndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKLSAgICAgICAgICAgIGlmIChjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1
bmN0aW9uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2st
Pm1fd2FzbVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9j
ay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rp
b25JbmRleFNwYWNlKS5lbnRyeXBvaW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwot
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsK
LSAgICAgICAgfQogICAgIH0KICAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFu
SW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUdGb3JPU1JFbnRyeSAiLCBtX2Z1bmN0aW9u
SW5kZXgsICIgd2l0aCB0aWVyIHVwIGNvdW50IGF0OiAiLCBtX2NhbGxlZS0+dGllclVwQ291bnQo
KS0+Y291bnQoKSk7CiAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgKaW5kZXgg
MDE1MWRhNjY1YTk2ODMyOGY5NTAzOGY1YjUwYzA4NTc2MWYwNWRlNy4uZDU2ZWE0MjE3ZGQ3MTBk
NTc1MTY0NWE5YjNlYjAxOGM0MzUwZDBkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uaApAQCAtNDgsNyArNDgsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBtdWx0aVRocmVhZGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIC8vIE5vdGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJl
ZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBj
eWNsZS4KLSAgICBPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIFJl
ZjxCQlFDYWxsZWU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRl
eCwgTWVtb3J5TW9kZSwgQ29tcGxldGlvblRhc2smJik7CisgICAgT01HRm9yT1NSRW50cnlQbGFu
KENvbnRleHQqLCBSZWY8TW9kdWxlPiYmLCBSZWY8QkJRQ2FsbGVlPiYmLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIENvZGVCbG9jayYsIENvbXBsZXRpb25UYXNr
JiYpOwogCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJlYXNvbiBmcmllbmRzaGlwIGRvZXNu
J3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT01HUGxhbi5jcHAKaW5kZXggYTgwNWQwMTZmYjk5Mjg2NGM3YTAzYzgyNjZjYzVkNGZi
OTg2NWE2OS4uNGM1ZjE5OTNkMDUzOWQ2MDU5OThlMjRmMzE0NWNjNTc1ZGU4N2JiMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcApAQCAtNTQsMTMgKzU0LDEz
IEBAIG5hbWVzcGFjZSBXYXNtT01HUGxhbkludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZl
cmJvc2UgPSBmYWxzZTsKIH0KIAotT01HUGxhbjo6T01HUGxhbihDb250ZXh0KiBjb250ZXh0LCBS
ZWY8TW9kdWxlPiYmIG1vZHVsZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgTWVtb3J5TW9kZSBt
b2RlLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCitPTUdQbGFuOjpPTUdQbGFuKENvbnRleHQqIGNv
bnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb2Rl
QmxvY2smIGNvZGVCbG9jaywgQ29tcGxldGlvblRhc2smJiB0YXNrKQogICAgIDogQmFzZShjb250
ZXh0LCBtYWtlUmVmKGNvbnN0X2Nhc3Q8TW9kdWxlSW5mb3JtYXRpb24mPihtb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCkpKSwgV1RGTW92ZSh0YXNrKSkKICAgICAsIG1fbW9kdWxlKFdURk1vdmUo
bW9kdWxlKSkKLSAgICAsIG1fY29kZUJsb2NrKCptX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUp
KQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1
bmN0aW9uSW5kZXgpCiB7Ci0gICAgc2V0TW9kZShtb2RlKTsKKyAgICBzZXRNb2RlKGNvZGVCbG9j
ay5tb2RlKCkpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cnVubmFibGUoKSk7CiAgICAgQVNT
RVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobV9tb2RlKSk7
CiAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlN0YXJ0aW5n
IE9NRyBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9mIG1vZHVsZTogIiwgUmF3UG9pbnRl
cigmbV9tb2R1bGUuZ2V0KCkpKTsKQEAgLTc5LDU3ICs3OSw0OCBAQCB2b2lkIE9NR1BsYW46Ondv
cmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICBBU1NFUlQodmFs
aWRhdGVGdW5jdGlvbihmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpKSk7CiAKLSAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gdW5saW5rZWRDYWxs
czsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplOwogICAgIENvbXBpbGF0
aW9uQ29udGV4dCBjb250ZXh0OwotICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFy
c2VBbmRDb21waWxlKGNvbnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMs
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgsIFVJTlQzMl9N
QVgpOworICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNv
bnRleHQsIGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0
U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0
KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdNb2RlLCBtX2Z1bmN0aW9uSW5kZXgsIFVJ
TlQzMl9NQVgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7
CiAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyhwYXJzZUFuZENvbXBp
bGVSZXN1bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5nIHRvIHRpZXIgdXAgIiwgU3RyaW5nOjpudW1i
ZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRW50
cnlwb2ludCBvbWdFbnRyeXBvaW50OwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4
dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAg
ICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewogICAgICAg
ICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBvZiBleGVjdXRh
YmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmluZzo6
bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4o
CisgICAgUmVmPE9NR0NhbGxlZT4gb21nQ2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0
aW9uSW5kZXhTcGFjZSkpOworICAgIG9tZ0NhbGxlZS0+ZW50cnlwb2ludCgpLmNvbXBpbGF0aW9u
ID0gbWFrZVVuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsIEIzQ29tcGlsYXRpb25QdHJUYWcsICJXZWJBc3NlbWJseSBPTUcgZnVuY3Rpb25b
JWldICVzIG5hbWUgJXMiLCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2Up
KSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9p
bnRCeXByb2R1Y3RzKSk7CiAKLSAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMg
PSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxl
ZVNhdmVSZWdpc3RlcnMpOworICAgIG9tZ0NhbGxlZS0+ZW50cnlwb2ludCgpLmNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSBXVEZNb3ZlKGNvbnRleHQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CiAKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OworICAgIEJC
UUNhbGxlZSYgYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5k
ZXhdLmdldCgpOwogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1f
bW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7Ci0gICAgICAgIFJlZjxPTUdDYWxsZWU+IGNh
bGxlZSA9IE9NR0NhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9u
SW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlv
bkluZGV4U3BhY2UpLCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxs
ZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7CiAgICAg
ICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5k
ZXhdKTsKLSAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIHB1Ymxpc2ggb3VyIGNhbGxlZSBhdCB0aGUg
c2FtZSB0aW1lIGFzIHdlIGxpbmsgb3VyIGNhbGxzaXRlcy4gVGhpcyBlbmFibGVzIHVzIHRvIGVu
c3VyZSB3ZQogICAgICAgICAvLyBhbHdheXMgY2FsbCB0aGUgZmFzdGVzdCBjb2RlLiBBbnkgZnVu
Y3Rpb24gbGlua2VkIGFmdGVyIHVzIHdpbGwgc2VlIG91ciBuZXcgY29kZSBhbmQgdGhlIG5ldyBj
YWxsc2l0ZXMsIHdoaWNoIHRoZXkKICAgICAgICAgLy8gd2lsbCB1cGRhdGUuIEl0J3MgYWxzbyBv
ayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUgd2UgcmVzZXQgdGhlIGluc3RydWN0
aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UKICAgICAgICAgLy8gdGhlIGxvY2sg
b3VyIGNvZGUgaXMgcmVhZHkgdG8gYmUgcHVibGlzaGVkIHRvby4KICAgICAgICAgTG9ja0hvbGRl
ciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX29w
dGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7CisgICAg
ICAgIG1fY29kZUJsb2NrLT5tX29wdGltaXplZENhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IG9t
Z0NhbGxlZS5jb3B5UmVmKCk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEJCUUNhbGxlZSYgYmJx
Q2FsbGVlID0gKnN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNb
bV9mdW5jdGlvbkluZGV4XS5nZXQoKSk7CiAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKGJicUNhbGxlZS50aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkpOwotICAgICAgICAgICAgYmJx
Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgYmJx
Q2FsbGVlLnNldFJlcGxhY2VtZW50KG9tZ0NhbGxlZS5jb3B5UmVmKCkpOwogICAgICAgICAgICAg
YmJxQ2FsbGVlLnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVy
VXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAgICB9Ci0gICAgICAg
IGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50
OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAg
IGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRh
Z2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21F
bnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworCisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNv
bnRleHQub3V0Z29pbmdDYWxscykgeworICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxs
ZWUgPSBtX2NvZGVCbG9jay0+d2FzbUJCUUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2Fs
bC50YXJnZXRGdW5jdGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFk
ZEFuZExpbmtDYWxsZXIoaG9sZGVyLCBsaW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENh
bGwpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzksMzAgKzEzMCwxNCBAQCB2b2lkIE9NR1Bs
YW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25B
bGxUaHJlYWRzKCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJs
eSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KIAotICAgIG1f
Y29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhd
ID0gZW50cnlwb2ludDsKKyAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQ
b2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IG9tZ0NhbGxlZS0+Y29kZSgpOworICAgIG1fY29kZUJs
b2NrLT5tX2JveGVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gQ2FsbGVlQml0czo6Ym94V2Fz
bShvbWdDYWxsZWUucHRyKCkpOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9j
b2RlQmxvY2stPm1fbG9jayk7Ci0KLSAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNv
bnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKLSAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRj
aGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlv
bigpKSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAg
ICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3Bh
Y2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxM
b2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2Fz
bUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Nv
ZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICByZXBhdGNoQ2FsbHMobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7Ci0g
ICAgICAgICAgICBpZiAoT01HQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IHN0YXRpY19jYXN0
PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbaV0uZ2V0KCkpLT5yZXBsYWNlbWVu
dCgpKQotICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxl
ZSogb3NyRW50cnlDYWxsZWUgPSBzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NvZGVCbG9jay0+
bV9jYWxsZWVzW2ldLmdldCgpKS0+b3NyRW50cnlDYWxsZWUoKSkKLSAgICAgICAgICAgICAgICBy
ZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgYmJxQ2FsbGVlLnJlcGF0Y2hDYWxsZXJzKGhvbGRlciwgb21nQ2FsbGVl
LmdldCgpKTsKICAgICB9CiAKLSAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2
ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAg
Y291bnQgYXQ6ICIsIHN0YXRpY19jYXN0PEJCUUNhbGxlZSo+KG1fY29kZUJsb2NrLT5tX2NhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSktPnRpZXJVcENvdW50KCktPmNvdW50KCkpOworICAg
IGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUcg
IiwgbV9mdW5jdGlvbkluZGV4LCAiIHdpdGggdGllciB1cCBjb3VudCBhdDogIiwgbV9jb2RlQmxv
Y2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsK
ICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdQbGFuLmgKaW5kZXggY2I3OWI0MzlkNGU5OTRkODcwZTlkYzkwODljNDNh
N2Y1ODYwMjU2Ni4uZTY4OWQ1NjY1N2E4ZDFiYjliZGU4MmVlMDUxNTM1NDg3MGJlODMwOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCkBAIC00Niw3ICs0Niw3IEBA
IHB1YmxpYzoKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hvdWxkIG5vdCBob2xk
IGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgcmVmZXJl
bmNlIGN5Y2xlLgotICAgIE9NR1BsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIE1lbW9yeU1vZGUsIENvbXBsZXRpb25UYXNrJiYpOworICAgIE9NR1Bs
YW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvZGVC
bG9jayYsIENvbXBsZXRpb25UYXNrJiYpOwogCiBwcml2YXRlOgogICAgIC8vIEZvciBzb21lIHJl
YXNvbiBmcmllbmRzaGlwIGRvZXNuJ3QgZXh0ZW5kIHRvIHBhcmVudCBjbGFzc2VzLi4uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggMWFkZThh
OGU5NDQ5ZGE4YjNmMDZjZDNkNjk0MjU3OTJlNmM1ZGY5YS4uNzljNjQwYjM2N2Y2NzA4ZjllMTU5
ZDhjNTk5ZjljYjNiNjEyNjZhYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PcGVyYXRpb25zLmNwcApAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgdm9pZCB0cmlnZ2VyT01H
UmVwbGFjZW1lbnRDb21waWxlKFRpZXJVcENvdW50JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFj
ZQogICAgIGlmIChjb21waWxlKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgInRyaWdnZXJPTUdSZXBsYWNlbWVudCBmb3IgIiwgZnVuY3Rpb25JbmRleCk7CiAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KLSAgICAgICAgUmVmPFBsYW4+
IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdh
c206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2Nr
Lm1vZGUoKSwgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKKyAgICAgICAgUmVmPFBsYW4+IHBsYW4g
PSBhZG9wdFJlZigqbmV3IE9NR1BsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1v
ZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBQbGFu
Ojpkb250RmluYWxpemUoKSkpOwogICAgICAgICBlbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxh
bi5jb3B5UmVmKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJl
bnRKSVQoKSkpCiAgICAgICAgICAgICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigpOwpAQCAtMTk3
LDkgKzE5NywxNCBAQCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwg
UHJvYmU6OkNvbnRleHQmIGNvbnRleHQsIEJCUUNhbGxlZSYgYwogI2Vsc2UKICNlcnJvciBVbnN1
cHBvcnRlZCBhcmNoaXRlY3R1cmUuCiAjZW5kaWYKLSAgICAvLyA0LiBDb25maWd1cmUgYXJndW1l
bnQgcmVnaXN0ZXJzIHRvIGp1bXAgdG8gT1NSIGVudHJ5IGZyb20gdGhlIGNhbGxlciBvZiB0aGlz
IHJ1bnRpbWUgZnVuY3Rpb24uCisKKyAgICAvLyA0LiBVcGRhdGUgdGhlIGNhbGxlZSBzbG90IGlu
IHRoZSBjYWxsIGZyYW1lIHRvIHRoZSBPU1IgZW50cnkgY2FsbGVlLgorICAgIFJlZ2lzdGVyKiBz
dGFja1BvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8UmVnaXN0ZXIqPihjb250ZXh0LnNwKCkpOworICAg
ICooc3RhY2tQb2ludGVyICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gMSkgPSBiaXR3aXNlX2Nh
c3Q8UmVnaXN0ZXI+KENhbGxlZUJpdHM6OmJveFdhc20oJm9zckVudHJ5Q2FsbGVlKSk7CisKKyAg
ICAvLyA1LiBDb25maWd1cmUgYXJndW1lbnQgcmVnaXN0ZXJzIHRvIGp1bXAgdG8gT1NSIGVudHJ5
IGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIHJ1bnRpbWUgZnVuY3Rpb24uCiAgICAgY29udGV4dC5n
cHIoR1BSSW5mbzo6YXJndW1lbnRHUFIwKSA9IGJpdHdpc2VfY2FzdDxVQ1BVUmVnaXN0ZXI+KGJ1
ZmZlcik7Ci0gICAgY29udGV4dC5ncHIoR1BSSW5mbzo6YXJndW1lbnRHUFIxKSA9IGJpdHdpc2Vf
Y2FzdDxVQ1BVUmVnaXN0ZXI+KG9zckVudHJ5Q2FsbGVlLmVudHJ5cG9pbnQoKS5leGVjdXRhYmxl
QWRkcmVzczw+KCkpOworICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMSkgPSBi
aXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihvc3JFbnRyeUNhbGxlZS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3M8PigpKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5v
dyhQcm9iZTo6Q29udGV4dCYgY29udGV4dCkKQEAgLTM2NSw3ICszNzAsNyBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KFByb2JlOjpDb250ZXh0JiBjb250ZXh0KQogCiAg
ICAgaWYgKHN0YXJ0T1NSRW50cnlDb21waWxhdGlvbikgewogICAgICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HT1NSIGZvciAiLCBmdW5jdGlvbkluZGV4
KTsKLSAgICAgICAgUmVmPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigqbmV3IE9NR0Zvck9TUkVudHJ5
UGxhbihpbnN0YW5jZS0+Y29udGV4dCgpLCBSZWY8V2FzbTo6TW9kdWxlPihpbnN0YW5jZS0+bW9k
dWxlKCkpLCBSZWY8V2FzbTo6QkJRQ2FsbGVlPihjYWxsZWUpLCBmdW5jdGlvbkluZGV4LCBsb29w
SW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CisgICAgICAg
IFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeVBsYW4oaW5zdGFu
Y2UtPmNvbnRleHQoKSwgUmVmPFdhc206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVm
PFdhc206OkJCUUNhbGxlZT4oY2FsbGVlKSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4LCBjb2Rl
QmxvY2ssIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7CiAgICAgICAgIGVuc3VyZVdvcmtsaXN0KCku
ZW5xdWV1ZShwbGFuLmNvcHlSZWYoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghT3B0aW9uczo6
dXNlQ29uY3VycmVudEpJVCgpKSkKICAgICAgICAgICAgIHBsYW4tPndhaXRGb3JDb21wbGV0aW9u
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKaW5kZXggNzM1
MjIwMjg5MzdjNmRhYzFmYzQ3M2M3ZTRjZGM2NDk1OGNlOGVhNi4uZjEzZjY0NTAyMGIyZjc2MGIy
NGVjY2JmNzNhMGM3YjNjZDlkNGRkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTVG9XYXNtLmNwcApAQCAtNDIsMjEgKzQyLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVK
U1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4q
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
TWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQordm9pZCBjcmVhdGVKU1Rv
V2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUqIHNlbGYsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUpCiB7CiAgICAgQ0Nh
bGxIZWxwZXJzJiBqaXQgPSAqY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2ludEpJ
VDsKIAotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwog
ICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogCiAgICAgLy8gRklYTUUgU3RvcCB1c2lu
ZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjUzMjEKICAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBq
aXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwg
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBqaXQuc3RvcmVQdHIoR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHI8V2FzbUVudHJ5UHRyVGFnPiogbGlua2VkQ2FsbGVlTW92ZSA9ICZyZXN1bHQtPmNhbGxlZU1v
dmVMb2NhdGlvbjsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgICpsaW5rZWRDYWxsZWVNb3ZlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
PFdhc21FbnRyeVB0clRhZz4oY2FsbGVlTW92ZUxvY2F0aW9uKTsKLSAgICB9KTsKKyAgICBqaXQu
c3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKENhbGxlZUJpdHM6OmJveFdhc20o
c2VsZikpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKIAogICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5l
ZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlubmVkUmVn
cy50b1NhdmUobW9kZSk7CkBAIC02OSw3ICs2Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21w
CiAjZW5kaWYKIAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwodG9T
YXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJh
c2VkKTsKLSAgICByZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lz
dGVyc1RvU3BpbGw7CisgICAgc2VsZi0+ZW50cnlwb2ludCgpLmNhbGxlZVNhdmVSZWdpc3RlcnMg
PSByZWdpc3RlcnNUb1NwaWxsOwogCiAgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdp
c3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVvZih2b2lkKik7CiAgICAgdG90YWxGcmFtZVNpemUg
Kz0gV2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOwpAQCAtMTI1LDkg
KzExOSwxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dh
c21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgICAgICB9CiAKICAgICAgICAg
ZW1pdFRocm93V2FzbVRvSlNFeGNlcHRpb24oaml0LCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIGFy
Z3VtZW50c0luY2x1ZGVJNjQgPyBFeGNlcHRpb25UeXBlOjpJNjRBcmd1bWVudFR5cGUgOiBFeGNl
cHRpb25UeXBlOjpJNjRSZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlck1vdmVB
bmRDYWxsID0gVW5saW5rZWRNb3ZlQW5kQ2FsbCB7IH07CiAgICAgR1BSUmVnIHdhc21Db250ZXh0
SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwogCiAg
ICAgewpAQCAtMTk4LDYgKzE5MywxMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogCiAgICAg
ICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAgICB9CisK
KyAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnBy
b2xvZ3VlU2NyYXRjaCgwKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyTW92
ZUFuZENhbGwtPm1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBjYWxsZWVHUFIpOworICAgICAgICBqaXQuc3RvcmVQ
dHIoY2FsbGVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICB9CiAKICAgICBpZiAoISFpbmZvLm1lbW9yeSkg
ewpAQCAtMjIxLDEyICsyMjAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4g
Y3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgICAgICBq
aXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2Ny
YXRjaE9yU2l6ZSwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgfQogCi0gICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIGluZm8uaW1wb3J0RnVuY3Rp
b25Db3VudCgpOwotICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBpbmZvLmZ1bmN0aW9u
SW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY2FsbCwgZnVuY3Rpb25JbmRleFNwYWNlXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy0+YXBwZW5kKHsgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsKSwgZnVuY3Rpb25JbmRl
eFNwYWNlIH0pOwotICAgIH0pOworICAgIGNvbXBpbGF0aW9uQ29udGV4dC5lbWJlZGRlck1vdmVB
bmRDYWxsLT5jYWxsTG9jYXRpb24gPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7
CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0
ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3By
KCk7CkBAIC0yNjYsOCArMjYwLDYgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAKIAogICAgIGpp
dC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKLQotICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc20uaAppbmRleCBiNGI5OGQxNTliMjg0YjdlYzMyM2FhNTAyYzAz
ZjkyMWMxMmIwM2E5Li45M2FhMjRkOTY4MGFmZmZkM2I3YTk2ZDE5MWZjZjhjMzkxZDAyMzFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKQEAgLTQxLDcgKzQxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotc3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRl
eHQmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpOwordm9pZCBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29u
c3QgU2lnbmF0dXJlJiwgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKiwgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mLCBNZW1vcnlNb2RlKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAppbmRleCAwNTdhYTcwMThiNDRhOGZiYjRhOGQ0NzExM2JkYmViODc0OWRlYzg3Li5m
ZDNhZTE4MjA0ZjM1N2JiMzEzNWNlMzU1ZTllNmNjZDIyYTgzOWU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAt
NDY1LDYgKzQ2NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgICAgIC8vIEZJWE1F
OiBDdXJyZW50bHkgd2UganVzdCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxkIHRl
YWNoIHRoZSBNb2R1bGUKICAgICAgICAgLy8gaG93IHRvIHJlcGF0Y2ggdXM6CiAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NzAKKyAgICAgICAg
aml0LmxvYWRQdHIoYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6
ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgICAgICBqaXQu
bG9hZFB0cihlbnRyeXBvaW50TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIpOwogICAgICAgICBq
aXQuY2FsbChzY3JhdGNoR1BSLCBXYXNtRW50cnlQdHJUYWcpOwogICAgIH0KQEAgLTUzNiwxMCAr
NTM4LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgcmV0dXJuIG1fanNDYWxsRW50
cnlwb2ludC5jb2RlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVu
Y3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQs
IFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9X
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24sIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRy
aW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtVG9XYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5j
dGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBi
b3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgIGZ1bmN0aW9uLT5m
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSk7CiAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmlzTGFyZ2VBbGxvY2F0aW9uKCksICJX
ZWJBc3NlbWJseUZ1bmN0aW9uIHNob3VsZCBiZSBhbGxvY2F0ZWQgbm90IGluIGxhcmdlIGFsbG9j
YXRpb24gc2luY2UgaXQgaXMgSlNDYWxsZWUuIik7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwpAQCAt
NTUxLDEwICs1NTMsMTAgQEAgU3RydWN0dXJlKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1
bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJseUZ1
bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50
LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRv
V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNt
OjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiog
Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4KQogICAgIDogQmFzZSB7IHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSB9Ci0gICAgLCBt
X2pzRW50cnlwb2ludCB7IGpzRW50cnlwb2ludC5lbnRyeXBvaW50KCkgfQotICAgICwgbV9pbXBv
cnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2Fk
TG9jYXRpb24gfQorICAgICwgbV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9pbnQuY29kZSgpIH0K
KyAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiB9CiB7IH0KIAog
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKaW5kZXggOThjMzQ2NGNkMDcyZDY0NDVlNzdkZTRmODhk
ZTBjY2UzYjQ5NWUzNC4uN2RkZjM5ZDAwOGY0YjY0MjlmOWY3YTEzMWY3ZjlkMzlhNzAxZDE2MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uaApAQCAtNjIsMTEgKzYyLDEyIEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlv
biogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29u
c3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5
cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiwgV2FzbTo6
U2lnbmF0dXJlSW5kZXgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2ln
bmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUm
IGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9u
IHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVG
dW5jdGlvbi5zaWduYXR1cmVJbmRleDsgfQogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9pbXBvcnRhYmxlRnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbjsgfQorICAgIHZvaWQq
KiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1
bmN0aW9uLmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOyB9CiAgICAgV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbiBpbXBvcnRhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFi
bGVGdW5jdGlvbjsgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4ganNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQpAQCAtNzgsNiArNzksNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRM
b2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlv
biwgbV9pbXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9pbXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigpOyB9
CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlw
b2ludCgpCiAgICAgewpAQCAtOTEsNyArOTMsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206
OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2Fk
TG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwor
ICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
OjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgdm9pZCoqIGJveGVkQ2FsbGVl
TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKICAgICBwdHJk
aWZmX3QgcHJldmlvdXNJbnN0YW5jZU9mZnNldCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmlu
ZGV4IDkyZGRjZjc4NmU4MTAwNWEyMWUxZjhiMWY1MGE5ZDIwOWY5ZTY5MjkuLjdhZjFhMDQ1MmFl
MGRmN2ViZGMzYzI0ZDA5ZmZmYmUwN2MxMGUwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTE5
Myw2ICsxOTMsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3QqIGltcG9ydE9iagogCiAgICAgICAgICAgICBXYXNt
OjpJbnN0YW5jZSogY2FsbGVlSW5zdGFuY2UgPSBudWxscHRyOwogICAgICAgICAgICAgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24gPSBudWxscHRyOworICAgICAgICAgICAgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9u
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09i
amVjdCo+KHZhbHVlKTsKIAogICAgICAgICAgICAgLy8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQg
RnVuY3Rpb24gRXhvdGljIE9iamVjdDoKQEAgLTIwNSw2ICsyMDYsNyBAQCB2b2lkIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmplY3Qq
IGltcG9ydE9iagogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0g
d2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBjYWxs
ZWVJbnN0YW5jZSA9ICZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSB3YXNtRnVuY3Rpb24tPmVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgYm94ZWRDYWxsZWVM
b2FkTG9jYXRpb24gPSB3YXNtRnVuY3Rpb24tPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWdu
YXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCkBAIC0y
MjMsNiArMjI1LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgICAgIGF1dG8q
IGluZm8gPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnQu
a2luZEluZGV4KTsKICAgICAgICAgICAgIGluZm8tPnRhcmdldEluc3RhbmNlID0gY2FsbGVlSW5z
dGFuY2U7CiAgICAgICAgICAgICBpbmZvLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGVu
dHJ5cG9pbnRMb2FkTG9jYXRpb247CisgICAgICAgICAgICBpbmZvLT5ib3hlZENhbGxlZUxvYWRM
b2NhdGlvbiA9IGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uOwogICAgICAgICAgICAgbV9pbnN0YW5j
ZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+PihpbXBv
cnQua2luZEluZGV4KS0+c2V0KHZtLCBtX2luc3RhbmNlLmdldCgpLCBmdW5jdGlvbik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzQ3LDkgKzM1MCwxMCBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgSlNPYmpl
Y3QqIGltcG9ydE9iagogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBmdW5jLgogICAgICAg
ICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2st
PmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwog
ICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0
aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9j
YXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBi
b3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRp
b25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJl
JiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2Vi
QXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBm
aWVsZCwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBv
aW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVM
b2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIHdyYXBwZXIgPSBmdW5j
dGlvbjsKICAgICAgICAgfQogCkBAIC00NjAsNyArNDY0LDggQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBv
cnRPYmoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRk
ZXJFbnRyeXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAg
ICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRy
eXBvaW50TG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5j
ZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9u
LCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9j
YXRpb24gPSBjb2RlQmxvY2stPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5jZS5nZXQoKSwgZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxl
ZUxvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0
aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtNTc1LDEz
ICs1ODAsMTQgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhl
Y1N0YXRlKiBleGVjKQogCiAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSA9IGNvZGVCbG9jay0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9u
ID0gY29kZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2Nh
dGlvbiA9IGNvZGVCbG9jay0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJl
JiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9u
ICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAvLyBXaGF0IGlmIHdlIGFs
c28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAuCiAgICAgICAgICAg
ICAvLyBEb2VzIChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0cy5mb28gPT09IHRhYmxlLmdldCgw
KT8KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjU4MjUKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7
CisgICAgICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIFN0cmlu
ZygpLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9p
bnRMb2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7
CiAKICAgICAgICAgICAgIG1faW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5zZXQoZWxlbWVu
dEluZGV4LCBmdW5jdGlvbik7CiAgICAgICAgICAgICArK2VsZW1lbnRJbmRleDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmNwcAppbmRleCBjZGU0ZjNjZjI2MDRhZGQ3NmNjMDRmYjIyNGY5YTUyYmQyZGEw
Mzc2Li42Mjg2MmI0MTE3ODQ2NGU2MTNlM2U3OTMwNDI2NzMzMDY1MGU4MTBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwCkBAIC02MCw3ICs2MCw5IEBAIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzPFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uPih2bSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFw
cGVyIGZ1bmN0aW9uLiIpOwogICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvciwg
bnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2
bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5k
ZXgsICZpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgp
LT53YXNtVG9FbWJlZGRlclN0dWIgfSApOworICAgIGF1dG8gaW1wb3J0RnVuY3Rpb25JbmZvID0g
aW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEluZGV4KTsKKyAg
ICBzdGF0aWMgdm9pZCogbnVsbEJveGVkQ2FsbGVlID0gbnVsbHB0cjsKKyAgICBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgJmltcG9ydEZ1bmN0aW9uSW5mby0+d2FzbVRv
RW1iZWRkZXJTdHViLCAmbnVsbEJveGVkQ2FsbGVlIH0pOwogICAgIGNvbnN0IFdhc206OlNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGluc3RhbmNlKTsKICAgICBy
ZXR1cm4gcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379003</attachid>
            <date>2019-09-17 16:08:43 -0700</date>
            <delta_ts>2019-09-17 16:52:35 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-201799-20190917160841.patch</filename>
            <type>text/plain</type>
            <size>121734</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDRkYmQ0YWUxODlmMDYyMGQ2N2I3YzlkZmMyZTg4NDc5ZGExZTQ0Li43ZDE5YmYyYTRkYjNlNzQx
MDM2MDNkYTBmNTU0NzIzOTk3ZTcwMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5OCBAQAorMjAxOS0wOS0xNyAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBDaGFuZ2UgV2ViQXNzZW1ibHkgY2FsbGluZyBjb252ZW50aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNzk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUg
V2FzbTo6Q2FsbGVlIHdyaXRlcyBpdHNlbGYgdG8gQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLiBIb3dl
dmVyLCB0aGlzIHdvbid0IHdvcmsgd2hlbgorICAgICAgICB3ZSBoYXZlIHRoZSBXYXNtIGludGVy
cHJldGVyLCBzaW5jZSB3ZSBuZWVkIHRoZSBjYWxsZWUgaW4gb3JkZXIgdG8ga25vdyB3aGljaCBm
dW5jdGlvbiBhcmUgd2UgZXhlY3V0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgdGhl
IGNhbGxpbmcgY29udmVudGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSBpbnRlcnByZXRlciwg
c28gdGhhdCB0aGUgY2FsbGVyCisgICAgICAgIGJlY29tZXMgcmVzcG9uc2libGUgZm9yIHdyaXRp
bmcgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYWxsIGZyYW1lLgorICAgICAgICBIb3dldmVyLCB0aGVy
ZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGU6IHN0dWJzIGNhbiBzdGlsbCB3cml0ZSB0byB0
aGUgY2FsbGVlIHNsb3QsIHNpbmNlIHRoZXkgYXJlIGluZGl2aWR1YWxseQorICAgICAgICBnZW5l
cmF0ZWQgYW5kIHdpbGwgc3RpbGwgYmUgcHJlc2VudCBpbiB0aGUgaW50ZXJwcmV0ZXIuIFdlIGtl
ZXAgdGhpcyBkZXNpZ24gdG8gYXZvaWQgZW1pdHRpbmcgdW5uZWNlc3NhcnkKKyAgICAgICAgY29k
ZSB3aGVuIHdlIGtub3cgc3RhdGljYWxseSB3aG8gaXMgdGhlIGNhbGxlZToKKyAgICAgICAgLSBD
YWxsZXIgd3JpdGVzIHRvIGNhbGwgZnJhbWU6IGludHJhLW1vZHVsZSBkaXJlY3Qgd2FzbSBjYWxs
cywgaW5kaXJlY3Qgd2FzbSBjYWxscywgSlMtdG8td2FzbSBzdHViIChuZXcgZnJhbWUpLCBKUy10
by13YXNtIElDLgorICAgICAgICAtIENhbGxlZSB3cml0ZXMgdG8gY2FsbCBmcmFtZTogaW50ZXIt
bW9kdWxlIHdhc20tdG8td2FzbSBzdHViLCBKUy10by13YXNtIHN0dWIgKGNhbGxlZSBmcmFtZSks
IHdhc20tdG8tSlMgc3R1YiwgT01HIG9zciBlbnRyeQorCisgICAgICAgIEFkZGl0aW9uYWxseSwg
dGhpcyBwYXRjaCBhbHNvIGNoYW5nZXMgaXQgc28gdGhhdCB0aGUgY2FsbGVlIGtlZXBzIHRyYWNr
IG9mIGl0cyBjYWxsZXJzLCBpbnN0ZWFkIG9mIGhhdmluZyBhIGdsb2JhbCBtYXBwaW5nCisgICAg
ICAgIG9mIGNhbGxzIGluIHRoZSBXYXNtOjpDb2RlQmxvY2suIFRoaXMgbWFrZXMgaXQgZWFzaWVy
IHRvIHJlcGF0Y2ggYWxsIGNhbGxlcnMgb2YgYSBnaXZlbiBDYWxsZWUgd2hlbiBpdCB0aWVycyB1
cC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAqIHdhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cGFyc2VBbmRDb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6
CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJC
UVBsYW46OkJCUVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpwcmVwYXJlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyk6CisgICAgICAg
IChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBsZXRlKToKKyAgICAgICAgKiB3YXNtL1dhc21CQlFQ
bGFuLmg6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMpOgorICAgICAgICAqIHdhc20vV2Fz
bUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAg
KiB3YXNtL1dhc21DYWxsZWUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OkNhbGxl
ZSk6CisgICAgICAgIChKU0M6Oldhc206OnJlcGF0Y2hNb3ZlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFDYWxsZWU6OmFkZENhbGxl
cik6CisgICAgICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6YWRkQW5kTGlua0NhbGxlcik6Cisg
ICAgICAgIChKU0M6Oldhc206OkJCUUNhbGxlZTo6cmVwYXRjaENhbGxlcnMpOgorICAgICAgICAq
IHdhc20vV2FzbUNhbGxlZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmVudHJ5cG9p
bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpDYWxsZWU6OmNvZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpDYWxsZWU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAqIHdhc20v
V2FzbUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252
ZW50aW9uOjpzZXR1cEZyYW1lSW5Qcm9sb2d1ZSBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNt
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjpDb2RlQmxvY2sp
OgorICAgICAgICAqIHdhc20vV2FzbUNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpD
b2RlQmxvY2s6OmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Up
OgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6Ondhc21CQlFDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJsb2NrOjplbnRyeXBvaW50
TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSk6CisgICAgICAgIChKU0M6Oldhc206
OkNvZGVCbG9jazo6Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNl
KToKKyAgICAgICAgKiB3YXNtL1dhc21FbWJlZGRlci5oOgorICAgICAgICAqIHdhc20vV2FzbUZv
cm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
OjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21J
bnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZCb3hlZENh
bGxlZUxvYWRMb2NhdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFu
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JF
bnRyeVBsYW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46Ondvcmsp
OgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oOgorICAgICAgICAqIHdh
c20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjpPTUdQbGFu
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5oOgorICAgICAgICAqIHdhc20vV2FzbU9wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjp0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21waWxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6ZG9PU1JFbnRyeSk6CisgICAgICAgIChKU0M6Oldhc206OnRyaWdnZXJPU1JFbnRy
eU5vdyk6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6Oldh
c206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5o
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KToKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5r
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSk6CisKIDIwMTktMDktMTUg
IERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBMZWFrIG9mIE5T
TWFwVGFibGUgaW4gLVtKU1ZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6d2l0aE93
bmVyOl0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhNmMwZjAyNzVlM2Yx
ZTVjYWQ0MWU2YTRjOGE3NjI1ZWIwNzZiMmUyLi4wYzU3MTI1M2RiNzJjZDcxYTYzZDk3MzRmMWJi
OTMyN2MzYzYyZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0zOTMs
NiArMzkzLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BVQkxJQ19GUkFNRVdPUktfSEVBREVSUwog
c2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICAke0phdmFT
Y3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L0J5dGVjb2Rlcy5oCiAgICAgJHtKYXZhU2Ny
aXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9KU0NCdWlsdGlucy5oCisgICAgJHtKYXZhU2Ny
aXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9XYXNtT3BzLmgKIAogICAgICR7SmF2YVNjcmlw
dENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5oCiAgICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5oCkBAIC00NjMsNiArNDY0LDEwIEBA
IHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgYXNzZW1i
bGVyL1g4NlJlZ2lzdGVycy5oCiAgICAgYXNzZW1ibGVyL1g4Nl82NFJlZ2lzdGVycy5oCiAKKyAg
ICBiMy9CM0NvbW1vbi5oCisgICAgYjMvQjNDb21waWxhdGlvbi5oCisgICAgYjMvQjNUeXBlLmgK
KwogICAgIGJpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCiAgICAgYmluZGluZ3MvU2NyaXB0
T2JqZWN0LmgKICAgICBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5oCkBAIC0xMDAxLDYgKzEwMDYsNyBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRp
bWUvV3JpdGVCYXJyaWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmllcklubGluZXMuaAogCisg
ICAgd2FzbS9XYXNtQ2FsbGVlLmgKICAgICB3YXNtL1dhc21DYXBhYmlsaXRpZXMuaAogICAgIHdh
c20vV2FzbUNvZGVCbG9jay5oCiAgICAgd2FzbS9XYXNtQ29tcGlsYXRpb25Nb2RlLmgKQEAgLTEw
MDgsMTMgKzEwMTQsMTYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICB3YXNtL1dhc21FbWJlZGRlci5oCiAgICAgd2FzbS9XYXNtRXhjZXB0aW9uVHlw
ZS5oCiAgICAgd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKKyAgICB3YXNtL1dhc21Gb3Jt
YXQuaAogICAgIHdhc20vV2FzbUluZGV4T3JOYW1lLmgKICAgICB3YXNtL1dhc21NZW1vcnkuaAor
ICAgIHdhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgKICAgICB3YXNtL1dhc21NZW1vcnlNb2Rl
LmgKICAgICB3YXNtL1dhc21Nb2R1bGUuaAogICAgIHdhc20vV2FzbU5hbWUuaAogICAgIHdhc20v
V2FzbU5hbWVTZWN0aW9uLmgKICAgICB3YXNtL1dhc21QYWdlQ291bnQuaAorICAgIHdhc20vV2Fz
bVNpZ25hdHVyZS5oCiAgICAgd2FzbS9XYXNtVGllclVwQ291bnQuaAogCiAgICAgd2FzbS9qcy9K
U1dlYkFzc2VtYmx5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTIyYzE0ZmFh
YWFjMzgzMDcxOGMxYjFmZTgwOTc5Y2ZjZDdmODViYS4uNjJlZGNhOWI4ZmEwYjI2YzMwNThiY2Zm
ZWNkYTI3NWVhZjI1Y2M3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI5MCw3
ICsyOTAsNyBAQAogCQkwRjMzOERGNjFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMz
OERGNDFCRTkzRDU1MDAxM0M4OEYgLyogQjNDb25zdHJhaW5lZFZhbHVlLmggKi87IH07CiAJCTBG
MzM4REZBMUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4REY4MUJFOTZBQTgwMDEzQzg4RiAv
KiBCM0NDYWxsVmFsdWUuaCAqLzsgfTsKIAkJMEYzMzhERkUxQkVENTEyNzAwMTNDODhGIC8qIEFp
clNpbXBsaWZ5Q0ZHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjMzOERGQzFCRUQ1MTI3MDAxM0M4OEYgLyogQWlyU2ltcGxpZnlDRkcuaCAqLzsgfTsK
LQkJMEYzMzhFMEMxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTAwMUJGMDI3NkMwMDEz
Qzg4RiAvKiBCM0NvbXBpbGF0aW9uLmggKi87IH07CisJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4
RiAvKiBCM0NvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjMzOEUwMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzM4RTBF
MUJGMDI3NkMwMDEzQzg4RiAvKiBCM0RhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUwMjFCRjAyNzZDMDAxM0M4OEYgLyogQjNE
YXRhU2VjdGlvbi5oICovOyB9OwogCQkwRjMzOEUxMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3Zl
Q29uc3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjMzOEUwNDFCRjAyNzZDMDAxM0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggKi87IH07CiAJ
CTBGMzM4RTExMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMzhFMDUxQkYwMjc2QzAw
MTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0LmggKi87IH07CkBAIC02NTIsNyArNjUyLDcgQEAK
IAkJMEZFQzg1MDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovOyB9OwogCQkwRkVDODUwNjFCREFDREFDMDA4
MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lh
bC5oICovOyB9OwogCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRTFC
REFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi87IH07Ci0JCTBGRUM4NTBBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi87
IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oICovOyB9OwogCQkwRkVDODUwRTFC
REFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnN0MzJWYWx1ZS5oICovOyB9OwogCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dDY0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OwpAQCAt
Njc1LDcgKzY3NSw3IEBACiAJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAq
LzsgfTsKIAkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OwogCQkwRkVDODUzQTFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUu
aCAqLzsgfTsKLQkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVHlwZS5oICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyog
QjNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLzsg
fTsKIAkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFDMDA4
MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKIAkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07CkBA
IC03MTQzLDExICs3MTQzLDExIEBACiAJCQkJODY4OTIxQzExRjlDMENCNzAwMTE1OUY2IC8qIEpT
QmlnSW50LmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5j
dGlvbi5jcHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5j
dGlvbi5oICovLAotCQkJCUZFNDhCRDQzMjMyNDVFODcwMEYxMzZEMCAvKiBKU0NDb25maWcuY3Bw
ICovLAotCQkJCUZFNDhCRDQyMjMyNDVFODcwMEYxMzZEMCAvKiBKU0NDb25maWcuaCAqLywKIAkJ
CQk2NTdDRjQ1NjE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICovLAogCQkJCTY1N0NG
NDU3MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oICovLAogCQkJCTUzQjYwMUVCMjAzNEI4
QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCAqLywKKwkJCQlGRTQ4QkQ0MzIzMjQ1RTg3MDBGMTM2RDAg
LyogSlNDQ29uZmlnLmNwcCAqLywKKwkJCQlGRTQ4QkQ0MjIzMjQ1RTg3MDBGMTM2RDAgLyogSlND
Q29uZmlnLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAg
Ki8sCiAJCQkJQkMxMTY3RDgwRTE5QkNDOTAwODA2NkREIC8qIEpTQ2VsbC5oICovLAogCQkJCTBG
OTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi8sCkBAIC05MzQ4LDcg
KzkzNDgsNiBAQAogCQkJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
QjMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5RDAyMTdBMEI5MDQwMDc3M0FEOCAvKiBGVExM
b3dlcmVkTm9kZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNGOTE5RDBCQUMxMDBC
MUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkUzODQyMzIyMzI0
RDUxQjAwOURENDQ1IC8qIE9wdGlvbkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMx
QzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MjM1QkREMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjIzNUJFMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTk1MzgsNyArOTUzNyw2IEBACiAJCQkJQTFENzkzMDExQjQzODY0QjAwNDUx
NkY1IC8qIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
MjU4NDZGMUI0NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyQkJGRjIxQjA0NEE4QjAwNjY0QjY5IC8qIEludGxPYmpl
Y3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFNDhCRDQ0MjMyNDVFOTMwMEYxMzZEMCAvKiBKU0ND
b25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOEVCRTI0MUNFOEYzNTgwMDQ1MzE0NiAvKiBJ
bnRsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZGMjAw
MTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM0RTAzNTQxRTUzQkQy
OTAwMjEzRjY0IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICovLApA
QCAtOTYwOSw2ICs5NjA3LDcgQEAKIAkJCQk2NTdDRjQ1OTE5QkY2NjYyMDA0QUNCRjIgLyogSlND
YWxsZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzQjYwMUVDMjAzNEI4QzUwMDZCRTY2NyAvKiBK
U0Nhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE5MTg4MEQ2QTgwMDI2QzM5QiAvKiBK
U0NCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU0OEJENDQyMzI0NUU5MzAwRjEzNkQw
IC8qIEpTQ0NvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY3REEwRTE5QkNDOTAwODA2
NkREIC8qIEpTQ2VsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NzQ5NzExNjg3QURFNDAwQTRG
RjZBIC8qIEpTQ2VsbElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUREODRBMThBOTQ1
QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTk4ODUsNyArOTg4
NCw5IEBACiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzA0NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0ODBFMTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzODQyMzIyMzI0RDUxQjAwOURENDQ1IC8qIE9w
dGlvbkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDgg
LyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzODQyMzMyMzI0RDUxQjAwOURENDQ1
IC8qIE9wdGlvbnNMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzU2OTg3MjIyODQxMTg3MDA4
Q0RDQ0IgLyogUGFja2VkQ2VsbFB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5REFBMEExRkQx
QzNEMzAwNzlDNUIyIC8qIFBhcmFsbGVsU291cmNlQWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTM0RTY1NzUyMDY2OEVBQTAwRkI4MUFDIC8qIFBhcnNlSGFzaC5oIGluIEhlYWRlcnMgKi8s
CkBAIC05OTkyLDcgKzk5OTMsNiBAQAogCQkJCTBGRTA1MDI4MUFBOTA5NTYwMEQzM0IzMyAvKiBT
Y29wZWRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI5MUFBOTA5NTYwMEQz
M0IzMyAvKiBTY29wZWRBcmd1bWVudHNUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUw
MkIxQUE5MDk1NjAwRDMzQjMzIC8qIFNjb3BlT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQlG
RTM4NDIzMzIzMjRENTFCMDA5REQ0NDUgLyogT3B0aW9uc0xpc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMjRFNTUyMTdFRTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDY4MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRB
cmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDNGQTIxMTg4RUZGNjgwMDExMEYxNCAv
KiBTY3JpcHRCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IDMxOWFhNWJmMDc1Y2Jm
MGFlMDE1YjEyMDY5Y2QwNDE5Yzk4OWIxMmQuLmM2NzE1NjMyNjU2NTBmZmRiODRiODFmNTQ3OTE3
YmFiN2ZlYWNjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21B
aXJJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiBmYWlsKF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDAp
CiAKLSAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9j
ZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBUaHJv
d1dhc21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYpOworICAgIEFpcklSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYsIGNvbnN0IFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVu
dHJ5UHRyVGFnPj4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBD
b3VudCosIFRocm93V2FzbUV4Y2VwdGlvbiwgY29uc3QgU2lnbmF0dXJlJik7CiAKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJl
Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwg
dWludDMyX3QpOwpAQCAtNjM5LDcgKzYzOSw4IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayog
bV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgQmFzaWNCbG9jayogbV9yb290QmxvY2sg
eyBudWxscHRyIH07CiAgICAgVmVjdG9yPFR5cGVkVG1wPiBtX2xvY2FsczsKLSAgICBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7IC8vIExp
c3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBhZGRyZXNzIGl0
IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCisgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiBtX291dGdvaW5nQ2FsbHM7CisgICAgY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYgbV93YXNtVG9XYXNtRXhpdFN0dWJzOwogICAgIEdQUlJl
ZyBtX21lbW9yeUJhc2VHUFIgeyBJbnZhbGlkR1BSUmVnIH07CiAgICAgR1BSUmVnIG1fbWVtb3J5
U2l6ZUdQUiB7IEludmFsaWRHUFJSZWcgfTsKICAgICBHUFJSZWcgbV93YXNtQ29udGV4dEluc3Rh
bmNlR1BSIHsgSW52YWxpZEdQUlJlZyB9OwpAQCAtNzA4LDE0ICs3MDksMTUgQEAgdm9pZCBBaXJJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ss
IFR5cGVkVG1wIGluc3QKICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1w
KCksIGluc3RhbmNlKTsKIH0KIAotQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVy
bmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dh
c21FeGNlcHRpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQorQWlySVJHZW5lcmF0b3I6
OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgb3V0Z29pbmdD
YWxscywgY29uc3QgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+
PiYgd2FzbVRvV2FzbUV4aXRTdHVicywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNt
RXhjZXB0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKICAgICA6IG1faW5mbyhpbmZv
KQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRl
eCkKICAgICAsIG1fdGllclVwKHRpZXJVcCkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCiAgICAg
LCBtX2NvZGUobV9wcm9jLmNvZGUoKSkKLSAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMo
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCisgICAgLCBtX291dGdvaW5nQ2FsbHMob3V0Z29pbmdD
YWxscykKKyAgICAsIG1fd2FzbVRvV2FzbUV4aXRTdHVicyh3YXNtVG9XYXNtRXhpdFN0dWJzKQog
ICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMoaW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCiB7
CiAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2NvZGUuYWRkQmxvY2soKTsKQEAgLTc2MSwxNiArNzYz
LDcgQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm8KICAgICBSZWY8QjM6OkFpcjo6UHJvbG9ndWVH
ZW5lcmF0b3I+IHByb2xvZ3VlR2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxCMzo6QWlyOjpQ
cm9sb2d1ZUdlbmVyYXRvckZ1bmN0aW9uPihbPV0gKENDYWxsSGVscGVycyYgaml0LCBCMzo6QWly
OjpDb2RlJiBjb2RlKSB7CiAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgY29kZS5lbWl0RGVmYXVsdFByb2xvZ3VlKGppdCk7
Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHdhc21DYWxsaW5n
Q29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKLSAgICAgICAgICAgIGF1dG8gbW92
ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobnVsbHB0ciksIGNhbGxlZUdQUik7Ci0gICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soW2Nv
bXBpbGF0aW9uLCBtb3ZlTG9jYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoY2FsbGVlR1BSLCBD
YWxsRnJhbWVTbG90OjpjYWxsZWUpOwotICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihudWxscHRyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotICAgICAgICB9Cisg
ICAgICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobnVsbHB0ciwgQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBDaGVja2VkPGlu
dDMyX3Q+IHdhc21GcmFtZVNpemUgPSBtX2NvZGUuZnJhbWVTaXplKCk7CkBAIC0xOTM2LDggKzE5
MjksNiBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgIGlmIChyZXR1cm5UeXBlICE9IFR5
cGU6OlZvaWQpCiAgICAgICAgIHJlc3VsdCA9IHRtcEZvclR5cGUocmV0dXJuVHlwZSk7CiAKLSAg
ICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
ID0gJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHM7Ci0KICAgICBpZiAobV9pbmZvLmlzSW1wb3J0
ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkpIHsKICAgICAg
ICAgbV9tYXhOdW1KU0NhbGxBcmd1bWVudHMgPSBzdGQ6Om1heChtX21heE51bUpTQ2FsbEFyZ3Vt
ZW50cywgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFyZ3Muc2l6ZSgpKSk7CiAKQEAgLTE5NzMsMTEg
KzE5NjQsMTIgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICBwYXRj
aEFyZ3MuYXBwZW5kKHsgdG1wLCByZXAgfSk7CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVu
Y3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4gd2FzbVRvV2FzbUV4aXRTdHViID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0
aW9uSW5kZXhdOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt3YXNtVG9X
YXNtRXhpdFN0dWJdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVu
Y3Rpb25JbmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7CisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGppdC5jYWxsKFdhc21FbnRy
eVB0clRhZyk7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsLCB3YXNtVG9X
YXNtRXhpdFN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJU
YWc+KHdhc21Ub1dhc21FeGl0U3R1Yi5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwogCkBAIC0yMDI0LDE4ICsyMDE2LDIwIEBAIGF1dG8gQWlySVJHZW5lcmF0
b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsCiAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRvQjNUeXBl
KHJldHVyblR5cGUpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQg
PSB0cnVlOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CiAKICAgICAgICAg
VmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3M7CiAgICAgICAgIHdhc21DYWxsaW5nQ29u
dmVudGlvbkFpcigpLnNldHVwQ2FsbChtX2NvZGUsIHJldHVyblR5cGUsIHBhdGNocG9pbnQsIHRv
VG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKICAgICAg
ICAgICAgIHBhdGNoQXJncy5hcHBlbmQoeyB0bXAsIHJlcCB9KTsKICAgICAgICAgfSk7CiAKLSAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
ZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7Ci0gICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNt
RW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOwotICAgICAgICAgICAgfSk7Cisg
ICAgICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogb3V0Z29pbmdDYWxscyA9ICZt
X291dGdvaW5nQ2FsbHM7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbb3V0Z29p
bmdDYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEdQUlJlZyBjYWxs
ZWVHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDApOworICAgICAgICAgICAgYXV0byBtb3ZlTG9jYXRp
b24gPSBqaXQubW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgY2FsbGVlR1BSKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSkpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxMb2Nh
dGlvbiA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKKyAgICAgICAgICAgIG91
dGdvaW5nQ2FsbHMtPmFwcGVuZCh7IGZ1bmN0aW9uSW5kZXgsIHsgbW92ZUxvY2F0aW9uLCBjYWxs
TG9jYXRpb24gfX0pOwogICAgICAgICB9KTsKIAogICAgICAgICBlbWl0UGF0Y2hwb2ludChtX2N1
cnJlbnRCbG9jaywgcGF0Y2hwb2ludCwgcmVzdWx0LCBXVEZNb3ZlKHBhdGNoQXJncykpOwpAQCAt
MjA4OSw2ICsyMDgzLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVu
c2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICB9KTsKIAogICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBnNjQoKTsKKyAgICBFeHByZXNzaW9uVHlwZSBj
YWxsZWUgPSBnNjQoKTsKICAgICB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNpZ25h
dHVyZUluZGV4ID0gZzY0KCk7CiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBpbiB0aGUg
dGFibGUgaW5kZXggc3BhY2Ugd2UgYXJlIGxvb2tpbmcgZm9yLgpAQCAtMjA5Nyw2ICsyMDkyLDcg
QEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICAgICAgYXBwZW5kKEFkZDY0LCBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CiAgICAgICAgIAogICAgICAg
ICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSksIGNh
bGxlZUNvZGUpOyAvLyBQb2ludGVyIHRvIGNhbGxlZSBjb2RlLgorICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVyZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uOjpvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9uKCkpLCBjYWxsZWUpOyAvLyBQ
b2ludGVyIHRvIGJveGVkIGNhbGxlZQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNu
J3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlh
bGl6ZWQuCiAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2Ug
Y2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRl
eCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCkBA
IC0yMTg5LDYgKzIxODUsMTAgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKIAogICAgIFZlY3Rv
cjxDb25zdHJhaW5lZFRtcD4gZW1pdEFyZ3M7CiAgICAgZW1pdEFyZ3MuYXBwZW5kKGNhbGxlZUNv
ZGUpOworCisgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWUpLCBjYWxsZWUpOworICAg
IGVtaXRBcmdzLmFwcGVuZCh7IGNhbGxlZSwgQjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpIH0pOworCiAgICAgd2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkuc2V0dXBDYWxs
KG1fY29kZSwgcmV0dXJuVHlwZSwgcGF0Y2gsIHRvVG1wVmVjdG9yKGFyZ3MpLCBbJl0gKFRtcCB0
bXAsIEIzOjpWYWx1ZVJlcCByZXApIHsKICAgICAgICAgZW1pdEFyZ3MuYXBwZW5kKHsgdG1wLCBy
ZXAgfSk7CiAgICAgfSk7CkBAIC0yMjI5LDEwICsyMjI5LDggQEAgYXV0byBBaXJJUkdlbmVyYXRv
cjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgogICAgIHJldHVybiBCMzo6T3JpZ2luKCk7CiB9CiAK
LUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJz
ZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNv
bnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uKQorRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVB
aXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9u
RGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJzLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhy
b3dXYXNtRXhjZXB0aW9uKQogewotICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5h
bEZ1bmN0aW9uPigpOwotCiAgICAgY29tcGlsYXRpb25Db250ZXh0LmVtYmVkZGVyRW50cnlwb2lu
dEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgIGNvbXBpbGF0aW9uQ29udGV4
dC53YXNtRW50cnlwb2ludEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogCkBAIC0y
MjUyLDcgKzIyNTAsNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aQogICAgIAogICAgIHByb2Nl
ZHVyZS5zZXRPcHRMZXZlbChPcHRpb25zOjp3ZWJBc3NlbWJseUJCUUFpck9wdGltaXphdGlvbkxl
dmVsKCkpOwogCi0gICAgQWlySVJHZW5lcmF0b3IgaXJHZW5lcmF0b3IoaW5mbywgcHJvY2VkdXJl
LCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlLCBmdW5jdGlvbklu
ZGV4LCB0aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsKKyAgICBBaXJJUkdl
bmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIGNvbXBpbGF0aW9uQ29udGV4dC5v
dXRnb2luZ0NhbGxzLCB3YXNtVG9XYXNtRXhpdFN0dWJzLCBtb2RlLCBmdW5jdGlvbkluZGV4LCB0
aWVyVXAsIHRocm93V2FzbUV4Y2VwdGlvbiwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlvblBhcnNl
cjxBaXJJUkdlbmVyYXRvcj4gcGFyc2VyKGlyR2VuZXJhdG9yLCBmdW5jdGlvbi5kYXRhLmRhdGEo
KSwgZnVuY3Rpb24uZGF0YS5zaXplKCksIHNpZ25hdHVyZSwgaW5mbyk7CiAgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKQEAgLTIyNzIsMTAgKzIyNzAsMTAg
QEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGkKICAgICAgICAgQjM6OkFpcjo6cHJlcGFyZUZvckdl
bmVyYXRpb24oY29kZSk7CiAgICAgICAgIEIzOjpBaXI6OmdlbmVyYXRlKGNvZGUsICpjb21waWxh
dGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQpOwogICAgICAgICBjb21waWxhdGlvbkNvbnRl
eHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzID0gcHJvY2VkdXJlLnJlbGVhc2VCeXByb2R1Y3Rz
KCk7Ci0gICAgICAgIHJlc3VsdC0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gY29k
ZS5jYWxsZWVTYXZlUmVnaXN0ZXJBdE9mZnNldExpc3QoKTsKKyAgICAgICAgY29tcGlsYXRpb25D
b250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zm
c2V0TGlzdCgpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHsgfTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oCmluZGV4IDMzMWI0YjBhZDMxM2U2MjNjYTdm
ZjRiZDhkZThhMTU4NmZjN2Q1MDUuLjgyNzJjZTM1OTVmZjI4YjNmOWNjODg5NjVhZGIyYTg0Yzll
ODVhNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5oCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25E
YXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+Jiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyLCBUaHJvd1dhc21FeGNlcHRpb24gPSBudWxscHRy
KTsKK0V4cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9u
Q29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50
KiA9IG51bGxwdHIsIFRocm93V2FzbUV4Y2VwdGlvbiA9IG51bGxwdHIpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKaW5kZXggM2Q4ZGY4ZTY4NzEwMjEzMWI2NGMxYTZkNjVlNmZjY2Mx
MDNiNWU3NS4uZTAwMDNlY2I3MGQ2ZjJhY2VjYWRkZDNmNDI4NDY0ZTdhMGIzOGZlNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAt
MTcyLDcgKzE3Miw2IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgU3RyaW5nIEVycm9yVHlwZTsK
ICAgICB0eXBlZGVmIFVuZXhwZWN0ZWQ8RXJyb3JUeXBlPiBVbmV4cGVjdGVkUmVzdWx0OwotICAg
IHR5cGVkZWYgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBFcnJv
clR5cGU+IFJlc3VsdDsKICAgICB0eXBlZGVmIEV4cGVjdGVkPHZvaWQsIEVycm9yVHlwZT4gUGFy
dGlhbFJlc3VsdDsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uQXJncz4KICAgICBORVZFUl9J
TkxJTkUgVW5leHBlY3RlZFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZmFpbChBcmdzLi4uIGFy
Z3MpIGNvbnN0CkBAIC0xODUsNyArMTg0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IGZhaWwoX19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAg
IEIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBJbnRl
cm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQm
IG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwg
dW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRp
ZXJVcENvdW50KiwgVGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiwgVmVjdG9yPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiYs
IHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlLCBDb21waWxh
dGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIGxvb3BJbmRleEZvck9T
UkVudHJ5LCBUaWVyVXBDb3VudCosIFRocm93V2FzbUV4Y2VwdGlvbik7CiAKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWlu
dDMyX3QpOwpAQCAtMjgzLDYgKzI4Miw3IEBAIHByaXZhdGU6CiAKICAgICBGdW5jdGlvblBhcnNl
cjxCM0lSR2VuZXJhdG9yPiogbV9wYXJzZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIG1faW5mbzsKKyAgICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IG1fb3V0Z29pbmdDYWxsczsKICAgICBjb25zdCBNZW1vcnlNb2RlIG1fbW9kZSB7IE1lbW9yeU1v
ZGU6OkJvdW5kc0NoZWNraW5nIH07CiAgICAgY29uc3QgQ29tcGlsYXRpb25Nb2RlIG1fY29tcGls
YXRpb25Nb2RlIHsgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlIH07CiAgICAgY29uc3QgdW5zaWdu
ZWQgbV9mdW5jdGlvbkluZGV4IHsgVUlOVF9NQVggfTsKQEAgLTI5NCw3ICsyOTQsNyBAQCBwcml2
YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIFZl
Y3Rvcjx1aW50MzJfdD4gbV9vdXRlckxvb3BzOwogICAgIFZlY3RvcjxWYXJpYWJsZSo+IG1fbG9j
YWxzOwotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgbV91bmxpbmtlZFdhc21U
b1dhc21DYWxsczsgLy8gTGlzdCBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4
IHdob3NlIGFkZHJlc3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBWZWN0b3I8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiBtX3dhc21Ub1dhc21FeGl0U3R1
YnM7IC8vIExpc3QgZWFjaCBjYWxsIHNpdGUgYW5kIHRoZSBmdW5jdGlvbiBpbmRleCB3aG9zZSBh
ZGRyZXNzIGl0IHNob3VsZCBiZSBwYXRjaGVkIHdpdGguCiAgICAgdW5zaWduZWQmIG1fb3NyRW50
cnlTY3JhdGNoQnVmZmVyU2l6ZTsKICAgICBIYXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fY29u
c3RhbnRQb29sOwogICAgIEluc2VydGlvblNldCBtX2NvbnN0YW50SW5zZXJ0aW9uVmFsdWVzOwpA
QCAtMzU1LDE1ICszNTUsMTYgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRl
eHRJbnN0YW5jZShQcm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2MKICAgICB9KTsKIH0K
IAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbywgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9u
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSBtb2RlLCBD
b21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1
bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCwgVGhyb3dX
YXNtRXhjZXB0aW9uIHRocm93V2FzbUV4Y2VwdGlvbikKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIG91dGdvaW5nQ2FsbHMsIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4mIHdhc21Ub1dhc21FeGl0U3R1
YnMsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBNZW1vcnlNb2RlIG1vZGUs
IENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgs
IHVuc2lnbmVkIGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogdGllclVwLCBUaHJv
d1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQogICAgIDogbV9pbmZvKGluZm8pCisg
ICAgLCBtX291dGdvaW5nQ2FsbHMob3V0Z29pbmdDYWxscykKICAgICAsIG1fbW9kZShtb2RlKQog
ICAgICwgbV9jb21waWxhdGlvbk1vZGUoY29tcGlsYXRpb25Nb2RlKQogICAgICwgbV9mdW5jdGlv
bkluZGV4KGZ1bmN0aW9uSW5kZXgpCiAgICAgLCBtX2xvb3BJbmRleEZvck9TUkVudHJ5KGxvb3BJ
bmRleEZvck9TUkVudHJ5KQogICAgICwgbV90aWVyVXAodGllclVwKQogICAgICwgbV9wcm9jKHBy
b2NlZHVyZSkKLSAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMpCisgICAgLCBtX3dhc21Ub1dhc21FeGl0U3R1YnMod2FzbVRvV2FzbUV4aXRTdHVi
cykKICAgICAsIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplKQogICAgICwgbV9jb25zdGFudEluc2VydGlvblZhbHVlcyhtX3Byb2MpCiAgICAgLCBt
X251bUltcG9ydEZ1bmN0aW9ucyhpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKQEAgLTQxNyw3
ICs0MTgsNyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBGcmFtZUluUHJvbG9ndWUoJmNvbXBpbGF0
aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24sIG1fcHJvYywgT3JpZ2luKCksIG1fY3VycmVudEJsb2Nr
KTsKKyAgICB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZShtX3By
b2MsIE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiAKICAgICB7CiAgICAgICAgIEIzOjpWYWx1
ZSogZnJhbWVQb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpOwpAQCAtMTQwMiw4ICsxNDAzLDYgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLAogICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CiAKICAgICBU
eXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwotICAgIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxpbmtl
ZFdhc21Ub1dhc21DYWxsczsKLQogICAgIGlmIChtX2luZm8uaXNJbXBvcnRlZEZ1bmN0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KSkgewogICAgICAgICBtX21heE51bUpT
Q2FsbEFyZ3VtZW50cyA9IHN0ZDo6bWF4KG1fbWF4TnVtSlNDYWxsQXJndW1lbnRzLCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oYXJncy5zaXplKCkpKTsKIApAQCAtMTQxNyw2ICsxNDE2LDcgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLAogICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBt
X3Byb2MuYWRkQmxvY2soKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBpc1dhc21DYWxsLCBGcmVxdWVu
dGVkQmxvY2soaXNXYXNtQmxvY2spLCBGcmVxdWVudGVkQmxvY2soaXNFbWJlZGRlckJsb2NrKSk7
CiAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4gd2FzbVRv
V2FzbUV4aXRTdHViID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzW2Z1bmN0aW9uSW5kZXhdOwogICAg
ICAgICBWYWx1ZSogd2FzbUNhbGxSZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1
cENhbGwobV9wcm9jLCBpc1dhc21CbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVy
blR5cGUpLAogICAgICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsK
ICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7
CkBAIC0xNDI1LDExICsxNDI1LDExIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAg
ICAgICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlIGNvdWxkIGJlIGNhbGxpbmcg
dG8gc29tZXRoaW5nIHRoYXQgaXMgYm91bmRzIGNoZWNraW5nLgogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6
Qm91bmRzQ2hlY2tpbmcpKTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFt3YXNtVG9XYXNtRXhpdFN0dWJdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAg
ICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9
IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY2FsbCwgZnVuY3Rpb25J
bmRleF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4IH0pOworICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gaml0LmNhbGwoV2FzbUVu
dHJ5UHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFtjYWxsLCB3
YXNtVG9XYXNtRXhpdFN0dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8V2Fz
bUVudHJ5UHRyVGFnPih3YXNtVG9XYXNtRXhpdFN0dWIuY29kZSgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CkBAIC0xNDcz
LDE3ICsxNDczLDE4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICAgICAgLy8gVGhlIGNh
bGwgY291bGQgaGF2ZSBiZWVuIHRvIGFub3RoZXIgV2ViQXNzZW1ibHkgaW5zdGFuY2UsIGFuZCAv
IG9yIGNvdWxkIGhhdmUgbW9kaWZpZWQgb3VyIE1lbW9yeS4KICAgICAgICAgcmVzdG9yZVdlYkFz
c2VtYmx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6OlllcywgbV9pbmZvLm1l
bW9yeSwgaW5zdGFuY2VWYWx1ZSgpLCBtX3Byb2MsIGNvbnRpbnVhdGlvbik7CiAgICAgfSBlbHNl
IHsKKyAgICAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiBvdXRnb2luZ0NhbGxz
ID0gJm1fb3V0Z29pbmdDYWxsczsKICAgICAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0
b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgICAgIFs9XSAoUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNQ
aW5uZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQ
aW5uZWQgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFt1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgZnVuY3Rpb25JbmRleF0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVh
ZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soW3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjYWxsLCBmdW5jdGlvbkluZGV4XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rZWRX
YXNtVG9XYXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdh
c21FbnRyeVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXggfSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cysrOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtcy5ncFNjcmF0
Y2goMCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVX
aXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIGNhbGxlZUdQ
Uik7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpOworICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbExv
Y2F0aW9uID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOworICAgICAgICAgICAg
ICAgICAgICBvdXRnb2luZ0NhbGxzLT5hcHBlbmQoeyBmdW5jdGlvbkluZGV4LCB7IG1vdmVMb2Nh
dGlvbiwgY2FsbExvY2F0aW9uIH19KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pOwogICAgIH0KQEAgLTE2MjQsNiArMTYyNSwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAogICAgICAg
ICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zm
c2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkpKSk7CiAKKyAgICBFeHByZXNzaW9uVHlwZSBj
YWxsZWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LCBjYWxsYWJsZUZ1bmN0aW9uLAorICAgICAgICAgICAgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbigp
KSkpOworCiAgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUoKTsKICAg
ICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9jLCBtX2N1
cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAogICAgICAg
ICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpAQCAtMTYzNSw4ICsxNjQwLDgg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRl
eCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgbm90IGhhdmUgdG8gZG8gdGhpcywgYnV0IHRoZSB3YXNtLT53YXNtIHN0dWIgYXNzdW1lcyBp
dCBjYW4KICAgICAgICAgICAgIC8vIHVzZSBhbGwgdGhlIHBpbm5lZCByZWdpc3RlcnMgYXMgc2Ny
YXRjaDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjE4MQogICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQo
KS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKLQogICAgICAgICAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGNhbGxlZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxlZSwgQjM6OlZhbHVlUmVwOjpzdGFja0Fy
Z3VtZW50KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAgICAgaml0LmNhbGwocGFyYW1z
W3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSwgV2FzbUVudHJ5UHRyVGFnKTsKQEAg
LTE2OTcsMTAgKzE3MDIsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IE9yaWdp
bgogICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8T3JpZ2luPihvcmlnaW4pOwogfQogCi1FeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlv
bkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgdW5zaWduZWQmIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3Vu
dCogdGllclVwLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQorRXhwZWN0
ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiBjb21w
aWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4+JiB3YXNtVG9XYXNtRXhpdFN0dWJzLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwg
Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
dWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXAsIFRocm93
V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCiB7Ci0gICAgYXV0byByZXN1bHQgPSBt
YWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7Ci0KICAgICBjb21waWxhdGlvbkNvbnRleHQu
ZW1iZWRkZXJFbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAg
Y29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhl
bHBlcnM+KCk7CiAKQEAgLTE3MjEsNyArMTcyNCw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25D
CiAgICAgICAgID8gT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFCM09wdGltaXphdGlvbkxldmVsKCkK
ICAgICAgICAgOiBPcHRpb25zOjp3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsKCkpOwog
Ci0gICAgQjNJUkdlbmVyYXRvciBpckdlbmVyYXRvcihpbmZvLCBwcm9jZWR1cmUsIHJlc3VsdC5n
ZXQoKSwgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUs
IG1vZGUsIGNvbXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50
cnksIHRpZXJVcCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICBCM0lSR2VuZXJhdG9yIGlyR2Vu
ZXJhdG9yKGluZm8sIHByb2NlZHVyZSwgY29tcGlsYXRpb25Db250ZXh0Lm91dGdvaW5nQ2FsbHMs
IHdhc21Ub1dhc21FeGl0U3R1YnMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1vZGUsIGNv
bXBpbGF0aW9uTW9kZSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4Rm9yT1NSRW50cnksIHRpZXJV
cCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9y
PiBwYXJzZXIoaXJHZW5lcmF0b3IsIGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRh
LnNpemUoKSwgc2lnbmF0dXJlLCBpbmZvKTsKICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlci5wYXJzZSgpKTsKIApAQCAtMTczOSwxMCArMTc0MiwxMCBAQCBFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlKENv
bXBpbGF0aW9uQwogICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlKTsK
ICAgICAgICAgQjM6OmdlbmVyYXRlKHByb2NlZHVyZSwgKmNvbXBpbGF0aW9uQ29udGV4dC53YXNt
RW50cnlwb2ludEpJVCk7CiAgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC53YXNtRW50cnlwb2lu
dEJ5cHJvZHVjdHMgPSBwcm9jZWR1cmUucmVsZWFzZUJ5cHJvZHVjdHMoKTsKLSAgICAgICAgcmVz
dWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2
ZVJlZ2lzdGVyQXRPZmZzZXRMaXN0KCk7CisgICAgICAgIGNvbXBpbGF0aW9uQ29udGV4dC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zmc2V0TGlz
dCgpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHsgfTsKIH0KIAog
Ly8gQ3VzdG9tIHdhc20gb3BzLiBUaGVzZSBhcmUgdGhlIG9uZXMgdG9vIG1lc3N5IHRvIGRvIGlu
IHdhc20uanNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5oCmluZGV4IGVhNTUwMjQwMThkMzBkMzhmZjFlYTdhN2FiZjFjMTY1YmNmNTY3ZjguLjM0
OGI1NDdlZTNkNzg3YjYxMmMzZmQzNjA0MmQ3N2RlODIyMGE3ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtNDksOSArNDksMTIgQEAg
c3RydWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpPcGFx
dWVCeXByb2R1Y3RzPiBlbWJlZGRlckVudHJ5cG9pbnRCeXByb2R1Y3RzOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDQ2FsbEhlbHBlcnM+IHdhc21FbnRyeXBvaW50SklUOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzOworICAg
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiBvdXRnb2luZ0NhbGxzOworICAgIE9wdGlv
bmFsPFVubGlua2VkTW92ZUFuZENhbGw+IGVtYmVkZGVyTW92ZUFuZENhbGw7CisgICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QgY2FsbGVlU2F2ZVJlZ2lzdGVyczsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29t
cGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRj
aEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGls
YXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JP
U1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0aW9uID0gbnVs
bHB0cik7CitFeHBlY3RlZDx2b2lkLCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlv
bkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4+JiwgdW5zaWduZWQmIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9k
ZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29w
SW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0ciwgVGhyb3dXYXNtRXhjZXB0
aW9uID0gbnVsbHB0cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAwZTgzZDUzZjMxMjM5Mzdm
YzljYzAzZDNlNWVlMTg0ZDUxNzEzZDRmLi42YzZhZmUzMjk4MTdmYmY1OTgxOGI1ZTZmMTM4ZDMz
OTEyNjM3Yzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
CkBAIC01Miw5ICs1MiwxMCBAQCBuYW1lc3BhY2UgV2FzbUJCUVBsYW5JbnRlcm5hbCB7CiBzdGF0
aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLUJCUVBsYW46OkJCUVBsYW4oQ29u
dGV4dCogY29udGV4dCwgUmVmPE1vZHVsZUluZm9ybWF0aW9uPiBpbmZvLCBBc3luY1dvcmsgd29y
aywgQ29tcGxldGlvblRhc2smJiB0YXNrLCBDcmVhdGVFbWJlZGRlcldyYXBwZXImJiBjcmVhdGVF
bWJlZGRlcldyYXBwZXIsIFRocm93V2FzbUV4Y2VwdGlvbiB0aHJvd1dhc21FeGNlcHRpb24pCitC
QlFQbGFuOjpCQlFQbGFuKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxSZWY8QkJRQ2Fs
bGVlPj4mIGNhbGxlZXMsIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gaW5mbywgQXN5bmNXb3JrIHdv
cmssIENvbXBsZXRpb25UYXNrJiYgdGFzaywgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyJiYgY3JlYXRl
RW1iZWRkZXJXcmFwcGVyLCBUaHJvd1dhc21FeGNlcHRpb24gdGhyb3dXYXNtRXhjZXB0aW9uKQog
ICAgIDogQmFzZShjb250ZXh0LCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKHRhc2spLCBXVEZNb3Zl
KGNyZWF0ZUVtYmVkZGVyV3JhcHBlciksIHRocm93V2FzbUV4Y2VwdGlvbikKICAgICAsIG1fc3Ry
ZWFtaW5nUGFyc2VyKG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksICp0aGlzKQorICAgICwgbV9j
YWxsZWVzKCZjYWxsZWVzKQogICAgICwgbV9zdGF0ZShTdGF0ZTo6VmFsaWRhdGVkKQogICAgICwg
bV9hc3luY1dvcmsod29yaykKIHsKQEAgLTE1OSwxNiArMTYwLDEwIEBAIHZvaWQgQkJRUGxhbjo6
cHJlcGFyZSgpCiAKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5mdW5jdGlvbnM7CiAgICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtVG9XYXNt
RXhpdFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IHRvIEphdmFTY3JpcHQgc3R1YnMiKQotICAgICAg
ICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGZ1bmN0
aW9ucy5zaXplKCksICIgdW5saW5rZWQgV2ViQXNzZW1ibHkgdG8gV2ViQXNzZW1ibHkgY2FsbHMi
KQotICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fd2FzbUludGVybmFsRnVuY3Rpb25z
LCBmdW5jdGlvbnMuc2l6ZSgpLCAiIFdlYkFzc2VtYmx5IGZ1bmN0aW9ucyIpCi0gICAgICAgIHx8
ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV9jb21waWxhdGlvbkNvbnRleHRzLCBmdW5jdGlvbnMuc2l6
ZSgpLCAiIGNvbXBpbGF0aW9uIGNvbnRleHRzIikKLSAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBh
Y2l0eShtX3RpZXJVcENvdW50cywgZnVuY3Rpb25zLnNpemUoKSwgIiB0aWVyLXVwIGNvdW50cyIp
KQorICAgICAgICB8fCAhdHJ5UmVzZXJ2ZUNhcGFjaXR5KG1fY29tcGlsYXRpb25Db250ZXh0cywg
ZnVuY3Rpb25zLnNpemUoKSwgIiBjb21waWxhdGlvbiBjb250ZXh0cyIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLnJlc2l6ZShmdW5jdGlvbnMuc2l6
ZSgpKTsKLSAgICBtX3dhc21JbnRlcm5hbEZ1bmN0aW9ucy5yZXNpemUoZnVuY3Rpb25zLnNpemUo
KSk7CiAgICAgbV9jb21waWxhdGlvbkNvbnRleHRzLnJlc2l6ZShmdW5jdGlvbnMuc2l6ZSgpKTsK
LSAgICBtX3RpZXJVcENvdW50cy5yZXNpemUoZnVuY3Rpb25zLnNpemUoKSk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGltcG9ydEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbXBvcnRzLnNpemUoKTsgKytpbXBvcnRJbmRleCkgewogICAgICAgICBJbXBvcnQqIGlt
cG9ydCA9ICZtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRzW2ltcG9ydEluZGV4XTsKQEAgLTIz
MCw2ICsyMjUsNyBAQCBwdWJsaWM6CiAKIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jYWxsZWVz
KTsKICAgICBBU1NFUlQobV9zdGF0ZSA+PSBTdGF0ZTo6UHJlcGFyZWQpOwogICAgIGRhdGFMb2dM
bklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJTdGFydGluZyBjb21waWxhdGlvbiIp
OwogCkBAIC0yNjYsMTMgKzI2Miw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7CiAgICAg
ICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9kdWxl
SW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
W2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0gICAg
ICAgIGlmIChPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSkKLSAgICAgICAgICAgIG1fdGll
clVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdID0gbWFrZVVuaXF1ZTxUaWVyVXBDb3VudD4oKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gPSBu
dWxscHRyOwotICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gbV90aWVyVXBDb3VudHNbZnVu
Y3Rpb25JbmRleF0uZ2V0KCk7Ci0gICAgICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQ7CisgICAgICAgIEV4
cGVjdGVkPHZvaWQsIFN0cmluZz4gcGFyc2VBbmRDb21waWxlUmVzdWx0OwogICAgICAgICB1bnNp
Z25lZCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplID0gMDsKIAogICAgICAgICAvLyBGSVhNRTog
U29tZSB3ZWJwYWdlcyB1c2UgdmVyeSBsYXJnZSBXYXNtIG1vZHVsZSwgYW5kIGl0IGV4aGF1c3Rz
IGFsbCBleGVjdXRhYmxlIG1lbW9yeSBpbiBBUk02NCBkZXZpY2VzIHNpbmNlIHRoZSBzaXplIG9m
IGV4ZWN1dGFibGUgbWVtb3J5IHJlZ2lvbiBpcyBvbmx5IGxpbWl0ZWQgdG8gMTI4TUIuCkBAIC0y
ODIsMTAgKzI3MiwxMSBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogICAgICAgICBpZiAoT3B0aW9uczo6d2ViQXNzZW1ibHlCQlFBaXJN
b2RlVGhyZXNob2xkKCkgJiYgbV9tb2R1bGVJbmZvcm1hdGlvbi0+Y29kZVNlY3Rpb25TaXplID49
IE9wdGlvbnM6OndlYkFzc2VtYmx5QkJRQWlyTW9kZVRocmVzaG9sZCgpKQogICAgICAgICAgICAg
Zm9yY2VVc2luZ0IzID0gdHJ1ZTsKIAorICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gbV9j
YWxsZWVzLT5hdChmdW5jdGlvbkluZGV4KS0+dGllclVwQ291bnQoKTsKICAgICAgICAgaWYgKCFm
b3JjZVVzaW5nQjMgJiYgT3B0aW9uczo6d2FzbUJCUVVzZXNBaXIoKSkKLSAgICAgICAgICAgIHBh
cnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUFpcihtX2NvbXBpbGF0aW9uQ29u
dGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNt
VG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1f
bW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CisgICAg
ICAgICAgICBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGVBaXIobV9jb21w
aWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgc2lnbmF0dXJlLCBtX3dh
c21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVu
Y3Rpb25JbmRleCwgdGllclVwLCBtX3Rocm93V2FzbUV4Y2VwdGlvbik7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2Nv
bXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG9zckVudHJ5U2NyYXRjaEJ1
ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25N
b2RlOjpCQlFNb2RlLCBmdW5jdGlvbkluZGV4LCBVSU5UMzJfTUFYLCB0aWVyVXAsIG1fdGhyb3dX
YXNtRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9u
LCBzaWduYXR1cmUsIG1fd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6
OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIFVJTlQzMl9NQVgsIHRpZXJVcCwgbV90aHJvd1dhc21F
eGNlcHRpb24pOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVzdWx0
KSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwpAQCAtMjk0
LDExICsyODUsMTEgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdID0gV1RGTW92ZSgqcGFyc2VB
bmRDb21waWxlUmVzdWx0KTsKLQogICAgICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNl
cy5jb250YWlucyhmdW5jdGlvbkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZlcmVu
Y2VkRnVuY3Rpb25zKCkuY29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
bV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZGV4LCBtX2Ny
ZWF0ZUVtYmVkZGVyV3JhcHBlcihtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0s
IHNpZ25hdHVyZSwgJm1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgZnVuY3Rpb25JbmRleCkpOworICAgICAg
ICAgICAgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gZW1iZWRkZXJFbnRyeXBvaW50
Q2FsbGVlID0gV2FzbTo6RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgIG1fY3JlYXRlRW1iZWRkZXJXcmFwcGVyKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XSwgc2lnbmF0dXJlLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCksIG1f
bW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSk7CisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmRleCwg
V1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpKTsKICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgIH0KIApAQCAtMzE2LDcg
KzMwNyw5IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlcikKICAgICAgICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGls
YXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XTsKICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNp
Z25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rp
b25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKKyAg
ICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291bnQgPSBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CisgICAgICAgICAgICBjb25zdCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBmdW5jdGlvbkluZGV4ICsgaW1wb3J0RnVuY3Rpb25D
b3VudDsKKyAgICAgICAgICAgIEJCUUNhbGxlZSYgY2FsbGVlID0gbV9jYWxsZWVzLT5hdChmdW5j
dGlvbkluZGV4KS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2Ug
PCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53
YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKQEAgLTMy
NSw5ICszMTgsMTYgQEAgdm9pZCBCQlFQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRl
eF0tPmVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4o
CisgICAgICAgICAgICAgICAgY2FsbGVlLmVudHJ5cG9pbnQoKS5jYWxsZWVTYXZlUmVnaXN0ZXJz
ID0gV1RGTW92ZShjb250ZXh0LmNhbGxlZVNhdmVSZWdpc3RlcnMpOworICAgICAgICAgICAgICAg
IGNhbGxlZS5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxh
dGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjND
b21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBmdW5jdGlvblslaV0gJXMgbmFtZSAl
cyIsIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBt
YWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRh
KCkpLAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRC
eXByb2R1Y3RzKSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjb250ZXh0
Lm91dGdvaW5nQ2FsbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGwudGFyZ2V0
RnVuY3Rpb25JbmRleFNwYWNlID49IGltcG9ydEZ1bmN0aW9uQ291bnQpOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50MzJfdCB0YXJnZXRGdW5jdGlvbkluZGV4ID0gY2FsbC50YXJnZXRG
dW5jdGlvbkluZGV4U3BhY2UgLSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNv
dW50KCk7CisgICAgICAgICAgICAgICAgICAgIG1fY2FsbGVlcy0+YXQodGFyZ2V0RnVuY3Rpb25J
bmRleCktPmFkZENhbGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsIGNhbGwudW5saW5rZWRNb3ZlQW5k
Q2FsbCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBp
ZiAoYXV0byBlbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNt
SW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGZ1bmN0aW9uSW5kZXgpKSB7CkBAIC0zMzcsMjMgKzMzNywx
OCBAQCB2b2lkIEJCUVBsYW46OmNvbXBsZXRlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBlbWJlZGRlclRvV2FzbUludGVybmFsRnVuY3Rpb24tPmVudHJ5cG9pbnQuY29t
cGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCisgICAgICAgICAgICAgICAg
ZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uLT5lbnRyeXBvaW50KCkuY29tcGlsYXRpb24g
PSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAgICAgICAgICAgICAgIEZJTkFM
SVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIkVtYmVkZGVyLT5XZWJB
c3NlbWJseSBlbnRyeXBvaW50WyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0
dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgICAg
IFdURk1vdmUoY29udGV4dC5lbWJlZGRlckVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBmb3IgKGF1dG8mIHVubGlua2VkIDogbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxscykgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogdW5s
aW5rZWQpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPiBleGVjdXRhYmxlQWRkcmVzczsKLSAgICAgICAgICAgICAgICBpZiAobV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxs
LmZ1bmN0aW9uSW5kZXhTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUUgaW1w
b3J0cyBjb3VsZCBoYXZlIGJlZW4gbGlua2VkIGluIEIzLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcg
YSBwYXRjaHBvaW50LiBUaGlzIGNvbmRpdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSRUxF
QVNFX0FTU0VSVC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ2
MgotICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2FzbVRvV2FzbUV4
aXRTdHVicy5hdChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuY29kZSgpOwotICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlQWRkcmVzcyA9IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zLmF0KGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIC0gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpKS0+ZW50cnlwb2ludC5jb21waWxhdGlv
bi0+Y29kZSgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGV4ZWN1dGFibGVBZGRyZXNzKSk7CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQuZW1iZWRkZXJNb3ZlQW5kQ2FsbCkKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGVlLmFkZENhbGxlcihsb2NrZXIsIGxpbmtCdWZmZXIsICpjb250ZXh0LmVtYmVk
ZGVyTW92ZUFuZENhbGwpOwogICAgICAgICAgICAgfQorCiAgICAgICAgIH0KKworICAgICAgICBm
b3IgKGF1dG8mIGNhbGxlZSA6ICptX2NhbGxlZXMpCisgICAgICAgICAgICBjYWxsZWUtPnJlcGF0
Y2hDYWxsZXJzKGxvY2tlciwgY2FsbGVlLmdldCgpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFp
c0NvbXBsZXRlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5oCmlu
ZGV4IDg4MzYxN2ZjNjdmZmViODA1MTIwOGM3NDBlMmYxZjkxODhiNDEzMGQuLmUyMTc0NjI3ZDJi
NDA0MTliMGMzMDZhNjI3NTA5NGFiYmI1ZTRkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJCUVBsYW4uaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBBc3lu
Y1dvcmsgOiB1aW50OF90IHsgRnVsbENvbXBpbGUsIFZhbGlkYXRpb24gfTsKIAogICAgIC8vIE5v
dGU6IENvbXBsZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxh
biBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBCQlFQbGFu
KENvbnRleHQqLCBSZWY8TW9kdWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25U
YXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOworICAg
IEJCUVBsYW4oQ29udGV4dCosIGNvbnN0IFZlY3RvcjxSZWY8QkJRQ2FsbGVlPj4mLCBSZWY8TW9k
dWxlSW5mb3JtYXRpb24+LCBBc3luY1dvcmssIENvbXBsZXRpb25UYXNrJiYsIENyZWF0ZUVtYmVk
ZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IEJCUVBsYW4oQ29udGV4dCosIFZlY3Rvcjx1aW50OF90PiYmLCBBc3luY1dvcmssIENvbXBsZXRp
b25UYXNrJiYsIENyZWF0ZUVtYmVkZGVyV3JhcHBlciYmLCBUaHJvd1dhc21FeGNlcHRpb24pOwog
ICAgIEJCUVBsYW4oQ29udGV4dCosIEFzeW5jV29yaywgQ29tcGxldGlvblRhc2smJik7CiAKQEAg
LTk4LDEyICs5OCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURk1vdmUobV93YXNtVG9X
YXNtRXhpdFN0dWJzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+PiB0YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpCi0gICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghZmFpbGVkKCkgJiYgIWhhc1dvcmsoKSk7Ci0gICAgICAgIHJldHVybiBXVEZN
b3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpOwotICAgIH0KLQogICAgIGVudW0gY2xhc3Mg
U3RhdGUgOiB1aW50OF90IHsKICAgICAgICAgSW5pdGlhbCwKICAgICAgICAgVmFsaWRhdGVkLApA
QCAtMTM5LDE0ICsxMzMsMTMgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dWludDhfdD4gbV9zb3Vy
Y2U7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0
dWJzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4+IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zOwogICAgIEhhc2hTZXQ8dWludDMyX3QsIHR5cGVuYW1lIERlZmF1
bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50MzJfdD4+IG1fZXhwb3J0ZWRGdW5jdGlvbkluZGljZXM7Ci0gICAgSGFzaE1hcDx1aW50
MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCB0eXBlbmFtZSBEZWZhdWx0
SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDMyX3Q+PiBtX2VtYmVkZGVyVG9XYXNtSW50ZXJuYWxGdW5jdGlvbnM7CisgICAgSGFzaE1h
cDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERl
ZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uczsKICAgICBW
ZWN0b3I8Q29tcGlsYXRpb25Db250ZXh0PiBtX2NvbXBpbGF0aW9uQ29udGV4dHM7CiAgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4+IG1fdGllclVwQ291bnRzOwogCi0gICAg
VmVjdG9yPFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPj4gbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsczsKICAgICBTdHJlYW1pbmdQYXJzZXIgbV9zdHJlYW1pbmdQYXJzZXI7CisgICAgY29u
c3QgVmVjdG9yPFJlZjxCQlFDYWxsZWU+PiogbV9jYWxsZWVzIHsgbnVsbHB0ciB9OwogICAgIFN0
YXRlIG1fc3RhdGU7CiAKICAgICBjb25zdCBBc3luY1dvcmsgbV9hc3luY1dvcms7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbklubGluZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCmluZGV4IDg2NjAx
YWM5ZWYzZmIzODVlMDYwMjkwMWMxYTA0ZDUzMGM1NjNjYTguLjliYmM2ZjM4OTc1MmQ3NzA2ZTRj
OWZiMTVjODU5OWY1NGYyODJmOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CQlFQbGFuSW5saW5lcy5oCkBAIC0zOCwyMSArMzgsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgogdm9pZCBCQlFQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhjb25zdCBGdW5jdG9y
JiBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGludGVybmFsRnVuY3Rpb25JbmRleCA9IDA7IGludGVybmFsRnVuY3Rpb25JbmRleCA8IG1fd2Fz
bUludGVybmFsRnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpIHsKLQot
ICAgICAgICBSZWZQdHI8V2FzbTo6Q2FsbGVlPiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWU7Ci0g
ICAgICAgIGlmIChhdXRvIGVtYmVkZGVyVG9XYXNtRnVuY3Rpb24gPSBtX2VtYmVkZGVyVG9XYXNt
SW50ZXJuYWxGdW5jdGlvbnMuZ2V0KGludGVybmFsRnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAg
ICAgIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IFdhc206OkVtYmVkZGVyRW50cnlwb2ludENh
bGxlZTo6Y3JlYXRlKFdURk1vdmUoZW1iZWRkZXJUb1dhc21GdW5jdGlvbi0+ZW50cnlwb2ludCkp
OwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGVtYmVkZGVyVG9X
YXNtRnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShlbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWUuZ2V0KCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEludGVy
bmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbaW50ZXJuYWxG
dW5jdGlvbkluZGV4XS5nZXQoKTsKLSAgICAgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9
IGludGVybmFsRnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0
aW9uQ291bnQoKTsKLSAgICAgICAgUmVmPFdhc206OkNhbGxlZT4gd2FzbUVudHJ5cG9pbnRDYWxs
ZWUgPSBXYXNtOjpCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0aW9uLT5lbnRyeXBvaW50
KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+
Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBDb3VudHNbaW50ZXJuYWxG
dW5jdGlvbkluZGV4XSkpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
ZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50
cnlwb2ludENhbGxlZS5wdHIoKSkpOwotCi0gICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVuY3Rp
b25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdhc21F
bnRyeXBvaW50Q2FsbGVlKSk7Ci0gICAgfQorICAgIGZvciAodW5zaWduZWQgaW50ZXJuYWxGdW5j
dGlvbkluZGV4ID0gMDsgaW50ZXJuYWxGdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zLnNpemUoKTsgKytpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpCisgICAgICAgIGNh
bGxiYWNrKGludGVybmFsRnVuY3Rpb25JbmRleCwgbV9lbWJlZGRlclRvV2FzbUludGVybmFsRnVu
Y3Rpb25zLmdldChpbnRlcm5hbEZ1bmN0aW9uSW5kZXgpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcApp
bmRleCBjZTYxMDc2ZDFhY2I3OWFlYTRjNWU4Yjc1MmIxNzk0ODVjYWYwOGVlLi5lZWZiOTcyNTEw
YWI4NDMzNWMwM2Y3MDRkZjRiNWIyYjQ1MDM5ZTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC00Nyw2ICs0Nyw3IEBAIEV4cGVjdGVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2Fz
bSh1bnNpCiAgICAgSklUIGppdDsKIAogICAgIEdQUlJlZyBzY3JhdGNoID0gd2FzbUNhbGxpbmdD
b252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAgIEdQUlJlZyBjYWxsZWUgPSB3
YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMSk7CiAgICAgR1BSUmVn
IGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwogICAgIEFTU0VSVChi
YXNlTWVtb3J5ICE9IHNjcmF0Y2gpOwogICAgIEFTU0VSVChwaW5uZWRSZWdzLnNpemVSZWdpc3Rl
ciAhPSBiYXNlTWVtb3J5KTsKQEAgLTU3LDEzICs1OCwyMCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub1dhc20o
dW5zaQogICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNoKTsg
Ly8gT2xkIEluc3RhbmNlKgogICAgIC8vIEdldCB0aGUgY2FsbGVlJ3MgV2FzbTo6SW5zdGFuY2Ug
YW5kIHNldCBpdCBhcyBXYXNtQ29udGV4dCdzIGluc3RhbmNlLiBUaGUgY2FsbGVyIHdpbGwgdGFr
ZSBjYXJlIG9mIHJlc3RvcmluZyBpdHMgb3duIEluc3RhbmNlLgogICAgIGppdC5sb2FkUHRyKEpJ
VDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJnZXRJbnN0
YW5jZShpbXBvcnRJbmRleCkpLCBiYXNlTWVtb3J5KTsgLy8gSW5zdGFuY2UqLgotICAgIC8vIFdo
aWxlIHdlJ3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQgdGhlIHdhc20gZW50
cnlwb2ludCBzbyB3ZSBjYW4gdGFpbCBjYWxsIHRvIGl0IGJlbG93LgorICAgIC8vIFdoaWxlIHdl
J3JlIGFjY2Vzc2luZyB0aGF0IGNhY2hlbGluZSwgYWxzbyBnZXQgdGhlIHdhc20gZW50cnlwb2lu
dCBhbmQgY2FsbGVlIHNvIHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCiAgICAgaml0Lmxv
YWRQdHIoSklUOjpBZGRyZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZldh
c21FbnRyeXBvaW50TG9hZExvY2F0aW9uKGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOworICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZCb3hlZENhbGxlZUxvYWRMb2NhdGlvbihpbXBvcnRJbmRleCkpLCBjYWxsZWUpOwogICAgIGpp
dC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7CiAKICAgICBqaXQubG9hZFB0
cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
U3RhY2tMaW1pdCgpKSwgc2l6ZVJlZ0FzU2NyYXRjaCk7CiAgICAgaml0LnN0b3JlUHRyKHNpemVS
ZWdBc1NjcmF0Y2gsIEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRTdGFja0xpbWl0KCkpKTsKIAorICAgIC8vIFNldCB0aGUgY2FsbGVlIHNsb3QgaW4gdGhl
IGNhbGwgZnJhbWUKKyAgICBqaXQubG9hZFB0cihjYWxsZWUsIGNhbGxlZSk7CisgICAgLy8gQXQg
dGhpcyBwb2ludCwgd2UgaGF2ZSBiZWVuIGNhbGxlZCwgc28gUmV0dXJuUEMgaXMgb24gdGhlIHN0
YWNrLCBidXQgd2UgaGF2ZSBub3QgeWV0IHB1c2hlZCB0aGUgZnJhbWUgcG9pbnRlciwKKyAgICAv
LyBzbyB3ZSBoYXZlIHRvIHN1YnRyYWN0IHRoZSBzcGFjZSBmb3IgQ2FsbGVyRnJhbWUgZnJvbSB0
aGUgY2FsbGVlIHNsb3QKKyAgICBqaXQuc3RvcmVQdHIoY2FsbGVlLCBKSVQ6OkFkZHJlc3MoSklU
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJl
Z2lzdGVyKSAtIHNpemVvZihDUFVSZWdpc3RlcikpKTsKKwogICAgIC8vIEZJWE1FIHRoZSBmb2xs
b3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdhc206Okluc3RhbmNlIGhhdmUgdGhlIHNhbWUg
cGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9yeSByZWdpc3RlciBh
cyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMuCiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAppbmRleCBlOGRkZjE1M2RkOWQ5MDIyOWM1MTI4
MWVjMjgxMmY3YTU5MTE0MWQ2Li45MzMxNGFiNjY3Nzg3ZjY5MTk5YjFhNDJjM2QyOWQzZmM0YjZj
ODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcApAQCAtMzIs
MTYgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKLUNhbGxl
ZTo6Q2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIEVudHJ5cG9p
bnQmJiBlbnRyeXBvaW50KQorQ2FsbGVlOjpDYWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNv
bXBpbGF0aW9uTW9kZSkKICAgICA6IG1fY29tcGlsYXRpb25Nb2RlKGNvbXBpbGF0aW9uTW9kZSkK
LSAgICAsIG1fZW50cnlwb2ludChXVEZNb3ZlKGVudHJ5cG9pbnQpKQogewogICAgIENhbGxlZVJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckNhbGxlZSh0aGlzKTsKIH0KIAotQ2FsbGVlOjpD
YWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgRW50cnlwb2ludCYm
IGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8
TmFtZVNlY3Rpb24+PiYmIG5hbWUpCitDYWxsZWU6OkNhbGxlZShXYXNtOjpDb21waWxhdGlvbk1v
ZGUgY29tcGlsYXRpb25Nb2RlLCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQogICAgIDogbV9jb21waWxhdGlvbk1vZGUoY29t
cGlsYXRpb25Nb2RlKQotICAgICwgbV9lbnRyeXBvaW50KFdURk1vdmUoZW50cnlwb2ludCkpCiAg
ICAgLCBtX2luZGV4T3JOYW1lKGluZGV4LCBXVEZNb3ZlKG5hbWUpKQogewogICAgIENhbGxlZVJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckNhbGxlZSh0aGlzKTsKQEAgLTUyLDYgKzUwLDQ4
IEBAIENhbGxlZTo6fkNhbGxlZSgpCiAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLnVu
cmVnaXN0ZXJDYWxsZWUodGhpcyk7CiB9CiAKKworaW5saW5lIHZvaWQgcmVwYXRjaE1vdmUoY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8V2FzbUVudHJ5UHRy
VGFnPiBtb3ZlTG9jYXRpb24sIENhbGxlZSYgdGFyZ2V0Q2FsbGVlKQoreworICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20o
JnRhcmdldENhbGxlZSkpOworfQorCitpbmxpbmUgdm9pZCByZXBhdGNoQ2FsbChjb25zdCBBYnN0
cmFjdExvY2tlciYsIENvZGVMb2NhdGlvbk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4gY2FsbExv
Y2F0aW9uLCBDYWxsZWUmIHRhcmdldENhbGxlZSkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaE5lYXJDYWxsKGNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRy
VGFnPih0YXJnZXRDYWxsZWUuY29kZSgpKSk7Cit9CisKK3ZvaWQgQkJRQ2FsbGVlOjphZGRDYWxs
ZXIoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBVbmxpbmtl
ZE1vdmVBbmRDYWxsIGNhbGwpCit7CisgICAgYXV0byBtb3ZlTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8V2FzbUVudHJ5UHRyVGFnPihjYWxsLm1vdmVMb2NhdGlvbik7CisgICAgYXV0
byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQ
dHJUYWc+KGNhbGwuY2FsbExvY2F0aW9uKTsKKyAgICBtX21vdmVMb2NhdGlvbnMuYXBwZW5kKG1v
dmVMb2NhdGlvbik7CisgICAgbV9jYWxsTG9jYXRpb25zLmFwcGVuZChjYWxsTG9jYXRpb24pOwor
fQorCit2b2lkIEJCUUNhbGxlZTo6YWRkQW5kTGlua0NhbGxlcihjb25zdCBBYnN0cmFjdExvY2tl
ciYgbG9ja2VyLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBVbmxpbmtlZE1vdmVBbmRDYWxsIGNh
bGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlwb2ludCgpLmNvbXBpbGF0aW9uKTsKKwor
ICAgIGF1dG8gbW92ZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPFdhc21FbnRyeVB0
clRhZz4oY2FsbC5tb3ZlTG9jYXRpb24pOworICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8V2FzbUVudHJ5UHRyVGFnPihjYWxsLmNhbGxMb2NhdGlv
bik7CisgICAgbV9tb3ZlTG9jYXRpb25zLmFwcGVuZChtb3ZlTG9jYXRpb24pOworICAgIG1fY2Fs
bExvY2F0aW9ucy5hcHBlbmQoY2FsbExvY2F0aW9uKTsKKworICAgIENhbGxlZSYgdGFyZ2V0Q2Fs
bGVlID0gbV9yZXBsYWNlbWVudCA/IHN0YXRpY19jYXN0PENhbGxlZSY+KCptX3JlcGxhY2VtZW50
KSA6ICp0aGlzOworICAgIHJlcGF0Y2hNb3ZlKGxvY2tlciwgbW92ZUxvY2F0aW9uLCB0YXJnZXRD
YWxsZWUpOworICAgIHJlcGF0Y2hDYWxsKGxvY2tlciwgY2FsbExvY2F0aW9uLCB0YXJnZXRDYWxs
ZWUpOworfQorCit2b2lkIEJCUUNhbGxlZTo6cmVwYXRjaENhbGxlcnMoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlciwgQ2FsbGVlJiB0YXJnZXRDYWxsZWUpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQodGFyZ2V0Q2FsbGVlLmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbik7CisgICAgZm9yIChhdXRv
IG1vdmVMb2NhdGlvbiA6IG1fbW92ZUxvY2F0aW9ucykKKyAgICAgICAgcmVwYXRjaE1vdmUobG9j
a2VyLCBtb3ZlTG9jYXRpb24sIHRhcmdldENhbGxlZSk7CisgICAgZm9yIChhdXRvIGNhbGxMb2Nh
dGlvbiA6IG1fY2FsbExvY2F0aW9ucykKKyAgICAgICAgcmVwYXRjaENhbGwobG9ja2VyLCBjYWxs
TG9jYXRpb24sIHRhcmdldENhbGxlZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGVlLmgKaW5kZXggZjdlYTRkMDViOGQwYTcxYzFlZTYyYTU2YzRkMzlkYTU0OWYw
OWI3Yi4uN2VlZWQ1MmMyZWUzNTJkOTdmNmYyNjNhMjM5MjdlYWQwYTg5NzY3MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaApAQCAtNDAsMTIgKzQwLDEzIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiBjbGFzcyBDYWxsZWUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8Q2FsbGVlPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlw
b2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJl
dGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsgfQotCi0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50LmNhbGxlZVNhdmVS
ZWdpc3RlcnM7IH0KKyAgICBFbnRyeXBvaW50JiBlbnRyeXBvaW50KCkgeyByZXR1cm4gbV9lbnRy
eXBvaW50OyB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gY29k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLnJldGFn
Z2VkPFdhc21FbnRyeVB0clRhZz4oKTsgfQogICAgIEluZGV4T3JOYW1lIGluZGV4T3JOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleE9yTmFtZTsgfQogICAgIENvbXBpbGF0aW9uTW9kZSBjb21w
aWxhdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBpbGF0aW9uTW9kZTsgfQogCisgICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9l
bnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKwogICAgIHN0ZDo6dHVwbGU8dm9pZCos
IHZvaWQqPiByYW5nZSgpIGNvbnN0CiAgICAgewogICAgICAgICB2b2lkKiBzdGFydCA9IG1fZW50
cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQo
KS51bnRhZ2dlZFB0cigpOwpAQCAtNTYsNzggKzU3LDcwIEBAIHB1YmxpYzoKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIH5DYWxsZWUoKTsKIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9S
VF9QUklWQVRFIENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGUsIFdhc206OkVudHJ5cG9pbnQm
Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9kZSwg
V2FzbTo6RW50cnlwb2ludCYmLCBzaXplX3QsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRy
PE5hbWVTZWN0aW9uPj4mJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKENvbXBpbGF0
aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2FsbGVlKENvbXBpbGF0aW9uTW9kZSwg
c2l6ZV90LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYpOwog
CiBwcml2YXRlOgogICAgIENvbXBpbGF0aW9uTW9kZSBtX2NvbXBpbGF0aW9uTW9kZTsKLSAgICBX
YXNtOjpFbnRyeXBvaW50IG1fZW50cnlwb2ludDsKKyAgICBFbnRyeXBvaW50IG1fZW50cnlwb2lu
dDsKICAgICBJbmRleE9yTmFtZSBtX2luZGV4T3JOYW1lOwogfTsKIAogY2xhc3MgT01HQ2FsbGVl
IGZpbmFsIDogcHVibGljIENhbGxlZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPTUdDYWxs
ZWU+IGNyZWF0ZShXYXNtOjpFbnRyeXBvaW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBz
dGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAgICBzdGF0aWMgUmVm
PE9NR0NhbGxlZT4gY3JlYXRlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBS
ZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBPTUdDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1vdmUobmFt
ZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgT01HQ2FsbGVlKGluZGV4LCBXVEZNb3ZlKG5hbWUpKSk7CiAgICAgfQogCi0gICAgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB3YXNtVG9XYXNtQ2FsbHNpdGVzKCkgeyByZXR1cm4g
bV93YXNtVG9XYXNtQ2FsbHNpdGVzOyB9Ci0KIHByaXZhdGU6Ci0gICAgT01HQ2FsbGVlKFdhc206
OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50LCBzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBO
YW1lKiwgUmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mJiB1bmxpbmtlZENhbGxzKQotICAgICAgICA6IENhbGxlZShXYXNtOjpDb21waWxh
dGlvbk1vZGU6Ok9NR01vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5h
bWUpKQotICAgICAgICAsIG1fd2FzbVRvV2FzbUNhbGxzaXRlcyhXVEZNb3ZlKHVubGlua2VkQ2Fs
bHMpKQorICAgIE9NR0NhbGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwg
UmVmUHRyPE5hbWVTZWN0aW9uPj4mJiBuYW1lKQorICAgICAgICA6IENhbGxlZShDb21waWxhdGlv
bk1vZGU6Ok9NR01vZGUsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQogICAgIHsKICAgICB9Ci0KLSAg
ICBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwog
fTsKIAogY2xhc3MgT01HRm9yT1NSRW50cnlDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjcmVhdGUoV2Fz
bTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0
IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKKyAgICBzdGF0aWMgUmVmPE9NR0Zvck9TUkVudHJ5
Q2FsbGVlPiBjcmVhdGUoc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJlZlB0
cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSwgdWludDMyX3QgbG9vcEluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgT01HRm9yT1NSRW50cnlDYWxsZWUoV1RGTW92ZShlbnRyeXBvaW50KSwgaW5kZXgsIFdURk1v
dmUobmFtZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGxvb3BJbmRleCwgV1RGTW92ZSh1
bmxpbmtlZENhbGxzKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBPTUdGb3JPU1JF
bnRyeUNhbGxlZShpbmRleCwgV1RGTW92ZShuYW1lKSwgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6
ZSwgbG9vcEluZGV4KSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZTsgfQog
ICAgIHVpbnQzMl90IGxvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcEluZGV4OyB9Ci0g
ICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB3YXNtVG9XYXNtQ2FsbHNpdGVzKCkg
eyByZXR1cm4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgT01HRm9y
T1NSRW50cnlDYWxsZWUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRl
eCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHVu
c2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90IGxvb3BJbmRleCwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiYgdW5saW5rZWRDYWxscykKLSAgICAgICAgOiBD
YWxsZWUoV2FzbTo6Q29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIFdURk1vdmUo
ZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fd2FzbVRvV2Fz
bUNhbGxzaXRlcyhXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKQorICAgIE9NR0Zvck9TUkVudHJ5Q2Fs
bGVlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rp
b24+PiYmIG5hbWUsIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIHVpbnQzMl90
IGxvb3BJbmRleCkKKyAgICAgICAgOiBDYWxsZWUoQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JF
bnRyeU1vZGUsIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZShvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQogICAgICAgICAsIG1fbG9v
cEluZGV4KGxvb3BJbmRleCkKICAgICB7CiAgICAgfQogCi0gICAgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+IG1fd2FzbVRvV2FzbUNhbGxzaXRlczsKICAgICB1bnNpZ25lZCBtX29zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemU7CiAgICAgdWludDMyX3QgbV9sb29wSW5kZXg7CiB9OwogCiBj
bGFzcyBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgZmluYWwgOiBwdWJsaWMgQ2FsbGVlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVtYmVkZGVyRW50cnlwb2ludENhbGxlZT4gY3JlYXRlKFdh
c206OkVudHJ5cG9pbnQmJiBlbnRyeXBvaW50KQorICAgIHN0YXRpYyBSZWY8RW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKFdURk1vdmUoZW50cnlwb2ludCkpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlKCkpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUoV2FzbTo6RW50cnlw
b2ludCYmIGVudHJ5cG9pbnQpCi0gICAgICAgIDogQ2FsbGVlKFdhc206OkNvbXBpbGF0aW9uTW9k
ZTo6RW1iZWRkZXJFbnRyeXBvaW50TW9kZSwgV1RGTW92ZShlbnRyeXBvaW50KSkKKyAgICBFbWJl
ZGRlckVudHJ5cG9pbnRDYWxsZWUoKQorICAgICAgICA6IENhbGxlZShDb21waWxhdGlvbk1vZGU6
OkVtYmVkZGVyRW50cnlwb2ludE1vZGUpCiAgICAgewogICAgIH0KIH07CiAKIGNsYXNzIEJCUUNh
bGxlZSBmaW5hbCA6IHB1YmxpYyBDYWxsZWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QkJR
Q2FsbGVlPiBjcmVhdGUoV2FzbTo6RW50cnlwb2ludCYmIGVudHJ5cG9pbnQsIHNpemVfdCBpbmRl
eCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBSZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0
ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4mJiB0aWVyVXBDb3VudCkKKyAgICBzdGF0aWMgUmVm
PEJCUUNhbGxlZT4gY3JlYXRlKHNpemVfdCBpbmRleCwgc3RkOjpwYWlyPGNvbnN0IE5hbWUqLCBS
ZWZQdHI8TmFtZVNlY3Rpb24+PiYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUaWVyVXBDb3VudD4m
JiB0aWVyVXBDb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJCUUNh
bGxlZShXVEZNb3ZlKGVudHJ5cG9pbnQpLCBpbmRleCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh0
aWVyVXBDb3VudCkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQkJRQ2FsbGVlKGlu
ZGV4LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHRpZXJVcENvdW50KSkpOwogICAgIH0KIAogICAg
IE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSgpIHsgcmV0dXJuIG1fb3NyRW50
cnlDYWxsZWUuZ2V0KCk7IH0KQEAgLTE0MCwyMCArMTMzLDI3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldERpZFN0YXJ0Q29tcGlsaW5nT1NSRW50cnlDYWxsZWUoYm9vbCB2YWx1ZSkgeyBtX2RpZFN0
YXJ0Q29tcGlsaW5nT1NSRW50cnlDYWxsZWUgPSB2YWx1ZTsgfQogCiAgICAgT01HQ2FsbGVlKiBy
ZXBsYWNlbWVudCgpIHsgcmV0dXJuIG1fcmVwbGFjZW1lbnQuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dFJlcGxhY2VtZW50KFJlZjxPTUdDYWxsZWU+JiYgcmVwbGFjZW1lbnQpCisgICAgdm9pZCBzZXRS
ZXBsYWNlbWVudChjb25zdCBBYnN0cmFjdExvY2tlciYsIFJlZjxPTUdDYWxsZWU+JiYgcmVwbGFj
ZW1lbnQpCiAgICAgewogICAgICAgICBtX3JlcGxhY2VtZW50ID0gV1RGTW92ZShyZXBsYWNlbWVu
dCk7CiAgICAgfQogCiAgICAgVGllclVwQ291bnQqIHRpZXJVcENvdW50KCkgeyByZXR1cm4gbV90
aWVyVXBDb3VudC5nZXQoKTsgfQogCisgICAgdm9pZCBhZGRDYWxsZXIoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBMaW5rQnVmZmVyJiwgVW5saW5rZWRNb3ZlQW5kQ2FsbCk7CisgICAgdm9pZCBhZGRB
bmRMaW5rQ2FsbGVyKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgTGlua0J1ZmZlciYsIFVubGlua2Vk
TW92ZUFuZENhbGwpOworCisgICAgdm9pZCByZXBhdGNoQ2FsbGVycyhjb25zdCBBYnN0cmFjdExv
Y2tlciYsIENhbGxlZSYpOworCiBwcml2YXRlOgotICAgIEJCUUNhbGxlZShXYXNtOjpFbnRyeXBv
aW50JiYgZW50cnlwb2ludCwgc2l6ZV90IGluZGV4LCBzdGQ6OnBhaXI8Y29uc3QgTmFtZSosIFJl
ZlB0cjxOYW1lU2VjdGlvbj4+JiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFRpZXJVcENvdW50PiYm
IHRpZXJVcENvdW50KQotICAgICAgICA6IENhbGxlZShXYXNtOjpDb21waWxhdGlvbk1vZGU6OkJC
UU1vZGUsIFdURk1vdmUoZW50cnlwb2ludCksIGluZGV4LCBXVEZNb3ZlKG5hbWUpKQorICAgIEJC
UUNhbGxlZShzaXplX3QgaW5kZXgsIHN0ZDo6cGFpcjxjb25zdCBOYW1lKiwgUmVmUHRyPE5hbWVT
ZWN0aW9uPj4mJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+JiYgdGllclVwQ291
bnQpCisgICAgICAgIDogQ2FsbGVlKENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgaW5kZXgsIFdU
Rk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90aWVyVXBDb3VudChXVEZNb3ZlKHRpZXJVcENvdW50
KSkKICAgICB7CiAgICAgfQogCisgICAgVmVjdG9yPENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxX
YXNtRW50cnlQdHJUYWc+PiBtX21vdmVMb2NhdGlvbnM7CisgICAgVmVjdG9yPENvZGVMb2NhdGlv
bk5lYXJDYWxsPFdhc21FbnRyeVB0clRhZz4+IG1fY2FsbExvY2F0aW9uczsKICAgICBSZWZQdHI8
T01HRm9yT1NSRW50cnlDYWxsZWU+IG1fb3NyRW50cnlDYWxsZWU7CiAgICAgUmVmUHRyPE9NR0Nh
bGxlZT4gbV9yZXBsYWNlbWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGllclVwQ291bnQ+IG1f
dGllclVwQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q2FsbGluZ0NvbnZlbnRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
aW5nQ29udmVudGlvbi5oCmluZGV4IGI0NDJiNjE2MWJmOTIzMzc1ODE5NzU4MTNmZjM4MDZhNzMx
YTkyMjYuLjZmYTQzNjljY2RjYTg4ZTRiNzBlZDY0NjliYjc2Mzk4MTRmOGU4NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oCkBA
IC04OCwzNCArODgsMTYgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25l
ZCBoZWFkZXJTaXplSW5CeXRlcygpIHsgcmV0dXJuIGhlYWRlclNpemU7IH0KLSAgICB2b2lkIHNl
dHVwRnJhbWVJblByb2xvZ3VlKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxXYXNtRW50cnlQdHJU
YWc+KiBjYWxsZWVNb3ZlTG9jYXRpb24sIEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpPcmlnaW4g
b3JpZ2luLCBCMzo6QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgdm9pZCBzZXR1cEZyYW1l
SW5Qcm9sb2d1ZShCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6T3JpZ2luIG9yaWdpbiwgQjM6OkJh
c2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChDYWxs
RnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpIDwgaGVhZGVyU2l6ZSwgIldlIHJl
bHkgb24gdGhpcyBoZXJlIGZvciBub3cuIik7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSBy
ZWx5IG9uIHRoaXMgaGVyZSBmb3Igbm93LiIpOwogCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFs
dWUqIGdldENhbGxlZVBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50
VmFsdWU+KHByb2MsIEIzOjpJbnQ2NCwgb3JpZ2luKTsKLSAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hw
b2ludC0+cmVzdWx0Q29uc3RyYWludHMgPSB7IEIzOjpWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyIH07
Ci0gICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPmVmZmVjdHMgPSBCMzo6RWZmZWN0czo6bm9u
ZSgpOwotICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcGFyYW1z
WzBdLmdwcigpOwotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIg
bW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KFtjYWxsZWVNb3ZlTG9jYXRpb24sIG1vdmVMb2NhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KG1vdmVMb2NhdGlvbik7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9p
bnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVy
LCBvcmlnaW4pOwotICAgICAgICBCMzo6VmFsdWUqIG9mZnNldE9mQ2FsbGVlID0gYmxvY2stPmFw
cGVuZE5ldzxCMzo6Q29uc3Q2NFZhbHVlPihwcm9jLCBvcmlnaW4sIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSAqIHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpN
ZW1vcnlWYWx1ZT4ocHJvYywgQjM6OlN0b3JlLCBvcmlnaW4sCi0gICAgICAgICAgICBnZXRDYWxs
ZWVQYXRjaHBvaW50LAotICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHBy
b2MsIEIzOjpBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNhbGxlZSkpOwotCiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSB6ZXJvIGludG8gdGhl
IENvZGVCbG9jayogc3BvdCBpbiB0aGUgY2FsbCBmcmFtZSwKICAgICAgICAgLy8gYnV0IHRoZXJl
IGFyZSBwbGFjZXMgdGhhdCBpbnRlcnByZXQgbm9uLW51bGwgQ29kZUJsb2NrIHNsb3QgdG8gbWVh
biBhIHZhbGlkIENvZGVCbG9jay4KICAgICAgICAgLy8gV2hlbiBkb2luZyB1bndpbmRpbmcsIHdl
J2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGVudGlyZSBydW50aW1lIGlzIE9LIHdpdGggYSBu
b24tbnVsbAogICAgICAgICAvLyBDb2RlQmxvY2sgbm90IGltcGx5aW5nIHRoYXQgdGhlIENvZGVC
bG9jayBpcyB2YWxpZC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NTMyMQorICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwog
ICAgICAgICBCMzo6VmFsdWUqIG9mZnNldE9mQ29kZUJsb2NrID0gYmxvY2stPmFwcGVuZE5ldzxC
Mzo6Q29uc3Q2NFZhbHVlPihwcm9jLCBvcmlnaW4sIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAq
IHNpemVvZihSZWdpc3RlcikpOwogICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlW
YWx1ZT4ocHJvYywgQjM6OlN0b3JlLCBvcmlnaW4sCiAgICAgICAgICAgICBibG9jay0+YXBwZW5k
TmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgMCksCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCmluZGV4IGQ0YTljZDY3NzEwMmI1OGU0ZmM1
OWUxYTIwYWU1NmI4ZTIxYzc0MzAuLjNhODdmNjFhNDUwZWU3ZGIyNGQwZjliNTk5MjY3OGZjZjBi
Nzk4MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3Bw
CkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAi
V2FzbUJCUVBsYW5JbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUg
Ildhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKIApAQCAtNDcsNyArNDYs
MTUgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29udGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBt
b2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWwKIHsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBw
cm90ZWN0ZWRUaGlzID0gdGhpczsKIAotICAgIG1fcGxhbiA9IGFkb3B0UmVmKCpuZXcgQkJRUGxh
bihjb250ZXh0LCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJRUGxhbjo6RnVsbENvbXBp
bGUsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgeworICAgIG1fY2FsbGVlcy5y
ZXNpemUobV9jYWxsZWVDb3VudCk7CisgICAgbV9ib3hlZENhbGxlZXMucmVzaXplKG1fY2FsbGVl
Q291bnQpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX2NhbGxlZUNvdW50OyBpKysp
IHsKKyAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gbW9kdWxlSW5mb3JtYXRp
b24uaW1wb3J0RnVuY3Rpb25Db3VudCgpICsgaTsKKyAgICAgICAgbV9jYWxsZWVzW2ldID0gQkJR
Q2FsbGVlOjpjcmVhdGUoZnVuY3Rpb25JbmRleFNwYWNlLCBtb2R1bGVJbmZvcm1hdGlvbi5uYW1l
U2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG1ha2VVbmlxdWU8VGllclVwQ291bnQ+
KCkpOworICAgICAgICBtX2JveGVkQ2FsbGVlc1tpXSA9IENhbGxlZUJpdHM6OmJveFdhc20obV9j
YWxsZWVzW2ldLnB0cigpKTsKKyAgICB9CisKKyAgICBtX3BsYW4gPSBhZG9wdFJlZigqbmV3IEJC
UVBsYW4oY29udGV4dCwgbV9jYWxsZWVzLCBtYWtlUmVmKG1vZHVsZUluZm9ybWF0aW9uKSwgQkJR
UGxhbjo6RnVsbENvbXBpbGUsIGNyZWF0ZVNoYXJlZFRhc2s8UGxhbjo6Q2FsbGJhY2tUeXBlPihb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldIChQbGFuJikgewog
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgICAgIGlmIChtX3Bs
YW4tPmZhaWxlZCgpKSB7CiAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1fcGxhbi0+ZXJy
b3JNZXNzYWdlKCk7CkBAIC01NiwyMSArNjMsMTggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29u
dGV4dCogY29udGV4dCwgTWVtb3J5TW9kZSBtb2RlLCBNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWwK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgZXZlbnR1YWxseSBjb2xs
ZWN0IHRoZSBCQlEgY29kZS4KLSAgICAgICAgbV9jYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50
KTsKICAgICAgICAgbV9vcHRpbWl6ZWRDYWxsZWVzLnJlc2l6ZShtX2NhbGxlZUNvdW50KTsKICAg
ICAgICAgbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHMucmVzaXplKG1fY2FsbGVlQ291bnQp
OwogCi0gICAgICAgIG1fcGxhbi0+aW5pdGlhbGl6ZUNhbGxlZXMoWyZdICh1bnNpZ25lZCBjYWxs
ZWVJbmRleCwgUmVmUHRyPFdhc206OkNhbGxlZT4mJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUs
IFJlZjxXYXNtOjpDYWxsZWU+JiYgd2FzbUVudHJ5cG9pbnRDYWxsZWUpIHsKKyAgICAgICAgbV9w
bGFuLT5pbml0aWFsaXplQ2FsbGVlcyhbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBSZWZQdHI8
RW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlPiYmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSkgewog
ICAgICAgICAgICAgaWYgKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSkgewogICAgICAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gbV9lbWJlZGRlckNhbGxlZXMuc2V0KGNhbGxlZUluZGV4LCBXVEZN
b3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdID0gV1RGTW92ZSh3YXNtRW50cnlwb2ludENhbGxl
ZSk7Ci0gICAgICAgICAgICBtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRl
eF0gPSBtX2NhbGxlZXNbY2FsbGVlSW5kZXhdLT5lbnRyeXBvaW50KCk7CisgICAgICAgICAgICBt
X3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF0gPSBtX2NhbGxlZXNbY2Fs
bGVlSW5kZXhdLT5jb2RlKCk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIG1fd2FzbVRvV2FzbUV4
aXRTdHVicyA9IG1fcGxhbi0+dGFrZVdhc21Ub1dhc21FeGl0U3R1YnMoKTsKLSAgICAgICAgbV93
YXNtVG9XYXNtQ2FsbHNpdGVzID0gbV9wbGFuLT50YWtlV2FzbVRvV2FzbUNhbGxzaXRlcygpOwog
CiAgICAgICAgIHNldENvbXBpbGF0aW9uRmluaXNoZWQoKTsKICAgICB9KSwgV1RGTW92ZShjcmVh
dGVFbWJlZGRlcldyYXBwZXIpLCB0aHJvd1dhc21FeGNlcHRpb24pKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suaAppbmRleCBkZWEyZmZhMzE4MTIwM2Y3OGFhYTYx
YzcwYmYyOTcxYmMwMzI3OWVkLi4xMGVmMjRjNDliMDU3Nzg5ZjI4YzU2NTU0ZDQ1NmRjMzNmNzNj
NGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCkBAIC0y
OCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldh
c21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgogI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CkBAIC00MCw5ICs0MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2Ug
V2FzbSB7CiAKLWNsYXNzIENhbGxlZTsKLXN0cnVjdCBDb250ZXh0OwogY2xhc3MgQkJRUGxhbjsK
K3N0cnVjdCBDb250ZXh0OwogY2xhc3MgT01HUGxhbjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlv
bjsKIHN0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOwpAQCAtNzYsNyArNzYsNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBUaGVzZSB0d28gY2FsbGVlIGdldHRlcnMgYXJlIG9ubHkgdmFsaWQgb25j
ZSB0aGUgY2FsbGVlcyBoYXZlIGJlZW4gcG9wdWxhdGVkLgogCi0gICAgQ2FsbGVlJiBlbWJlZGRl
ckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKKyAgICBFbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUmIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKQEAg
LTg2LDI5ICs4NiwyNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZSk7
CiAgICAgICAgIHJldHVybiAqY2FsbGVlOwogICAgIH0KLSAgICBDYWxsZWUmIHdhc21FbnRyeXBv
aW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3Bh
Y2UpCisKKyAgICBCQlFDYWxsZWUmIHdhc21CQlFDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChydW5u
YWJsZSgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1
bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUluZGV4ID0gZnVu
Y3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRDb3VudCgpOwotICAgICAgICBpZiAobV9v
cHRpbWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4XSkKLSAgICAgICAgICAgIHJldHVybiAqbV9vcHRp
bWl6ZWRDYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKLSAgICAgICAgcmV0dXJuICptX2NhbGxl
ZXNbY2FsbGVlSW5kZXhdLmdldCgpOworICAgICAgICByZXR1cm4gbV9jYWxsZWVzW2NhbGxlZUlu
ZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICBDYWxsZWUmIHdhc21CQlFDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiogZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21G
dW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKHJ1bm5hYmxlKCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlv
bkluZGV4U3BhY2UgPj0gZnVuY3Rpb25JbXBvcnRDb3VudCgpKTsKICAgICAgICAgdW5zaWduZWQg
Y2FsbGVlSW5kZXggPSBmdW5jdGlvbkluZGV4U3BhY2UgLSBmdW5jdGlvbkltcG9ydENvdW50KCk7
Ci0gICAgICAgIHJldHVybiAqbV9jYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKKyAgICAgICAg
cmV0dXJuICZtX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tjYWxsZWVJbmRleF07CiAgICAg
fQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4qIGVudHJ5cG9p
bnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkKKyAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25J
bmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA+PSBmdW5jdGlvbkltcG9ydENvdW50KCkp
OwogICAgICAgICB1bnNpZ25lZCBjYWxsZWVJbmRleCA9IGZ1bmN0aW9uSW5kZXhTcGFjZSAtIGZ1
bmN0aW9uSW1wb3J0Q291bnQoKTsKLSAgICAgICAgcmV0dXJuICZtX3dhc21JbmRpcmVjdENhbGxF
bnRyeVBvaW50c1tjYWxsZWVJbmRleF07CisgICAgICAgIHJldHVybiAmbV9ib3hlZENhbGxlZXNb
Y2FsbGVlSW5kZXhdOwogICAgIH0KIAogICAgIGJvb2wgaXNTYWZlVG9SdW4oTWVtb3J5TW9kZSk7
CkBAIC0xMjQsMTEgKzEyMiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q29tcGlsYXRpb25G
aW5pc2hlZCgpOwogICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiAgICAgTWVtb3J5TW9kZSBt
X21vZGU7Ci0gICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX2NhbGxlZXM7Ci0gICAgVmVjdG9y
PFJlZlB0cjxDYWxsZWU+PiBtX29wdGltaXplZENhbGxlZXM7Ci0gICAgSGFzaE1hcDx1aW50MzJf
dCwgUmVmUHRyPENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJD
YWxsZWVzOworICAgIFZlY3RvcjxSZWY8QkJRQ2FsbGVlPj4gbV9jYWxsZWVzOworICAgIFZlY3Rv
cjxSZWZQdHI8T01HQ2FsbGVlPj4gbV9vcHRpbWl6ZWRDYWxsZWVzOworICAgIFZlY3Rvcjx2b2lk
Kj4gbV9ib3hlZENhbGxlZXM7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPEVtYmVkZGVy
RW50cnlwb2ludENhbGxlZT4sIHR5cGVuYW1lIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJD
YWxsZWVzOwogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
Pj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7Ci0gICAgVmVjdG9yPFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPj4gbV93YXNtVG9XYXNtQ2FsbHNpdGVzOwogICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gbV93YXNtVG9XYXNtRXhpdFN0
dWJzOwogICAgIFJlZlB0cjxCQlFQbGFuPiBtX3BsYW47CiAgICAgc3RkOjphdG9taWM8Ym9vbD4g
bV9jb21waWxhdGlvbkZpbmlzaGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21FbWJlZGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUVtYmVkZGVyLmgKaW5kZXggYTIzNzlmZDU4OWM4OWRmNjM1N2U2ZTQ0MWJlZDJhNTE4
NzM5Y2EzZS4uYzc4YjQ0M2M1OTFlODcwMzRiNDE5NWVjYTAyNzI4ZGVmODBjYzg5MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKQEAgLTQxLDYgKzQxLDcgQEAg
Y2xhc3MgRXhlY1N0YXRlOwogbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgQ29tcGlsYXRpb25D
b250ZXh0OworY2xhc3MgRW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlOwogY2xhc3MgSW5zdGFuY2U7
CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKQEAg
LTQ4LDcgKzQ5LDcgQEAgY2xhc3MgU2lnbmF0dXJlOwogc3RydWN0IFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw7CiAKIC8vIENyZWF0ZSB3cmFwcGVyIGNvZGUgdG8gY2FsbCBmcm9tIGVtYmVkZGVyIC0+
IFdlYkFzc2VtYmx5LgotdXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlv
bjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4oQ29tcGlsYXRpb25Db250ZXh0Jiwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCk+OwordXNpbmcgQ3JlYXRl
RW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKENvbXBpbGF0aW9uQ29udGV4dCYs
IGNvbnN0IFNpZ25hdHVyZSYsIEVtYmVkZGVyRW50cnlwb2ludENhbGxlZSosIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSk+OwogCiAvLyBDYWxsZWQgYXMgc29vbiBhcyBhbiBl
eGNlcHRpb24gaXMgZGV0ZWN0ZWQuIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIFBDIHRvIGNvbnRp
bnVlIGF0LgogdXNpbmcgVGhyb3dXYXNtRXhjZXB0aW9uID0gdm9pZCogKCopKEV4ZWNTdGF0ZSos
IFdhc206OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgKaW5kZXggMDY2OWJiNDA3ZTI5NTkzNjIyZmNjYThlNTE5MTE5NWRkOWI0
NmYzYi4uZWEwZTBiNjU4ZTllNDU1ZTliMDFjZGFlMmI0Nzk2YjYyMmI4MGUzZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtMjg3LDEwICsyODcsMTUgQEAgaW5s
aW5lIGJvb2wgaXNWYWxpZE5hbWVUeXBlKEludCB2YWwpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CitzdHJ1Y3QgVW5saW5rZWRNb3ZlQW5kQ2FsbCB7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbFB0ciBtb3ZlTG9jYXRpb247CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbExvY2F0
aW9uOworfTsKKwogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGwgewogICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxXYXNtRW50
cnlQdHJUYWc+IGNhbGxMb2NhdGlvbjsKLSAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlOwor
ICAgIHNpemVfdCB0YXJnZXRGdW5jdGlvbkluZGV4U3BhY2U7CisgICAgVW5saW5rZWRNb3ZlQW5k
Q2FsbCB1bmxpbmtlZE1vdmVBbmRDYWxsOwogfTsKIAogc3RydWN0IEVudHJ5cG9pbnQgewpAQCAt
MzEzLDEwICszMTgsMTIgQEAgc3RydWN0IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gewog
ICAgIHVzaW5nIExvYWRMb2NhdGlvbiA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQ
dHJUYWc+KjsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgc2ln
bmF0dXJlSW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRM
b2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbiwgZW50cnlwb2ludExvYWRMb2NhdGlvbik7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24pOyB9CiAKICAgICAvLyBGSVhNRTogUGFjayBzaWduYXR1cmUgaW5kZXggYW5kIGNvZGUgcG9p
bnRlciBpbnRvIG9uZSA2NC1iaXQgdmFsdWUuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTUxMT4uCiAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXggeyBTaWduYXR1cmU6OmludmFsaWRJbmRleCB9OwogICAgIExvYWRMb2NhdGlvbiBlbnRyeXBv
aW50TG9hZExvY2F0aW9uOworICAgIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbjsKIH07
CiB1c2luZyBGdW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0b3I8V2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21J
bnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKaW5k
ZXggZjRmMzUwODdlMjU2ZDA5MmNlNzRiMjFiODQ0MGE5MzcyNWQxNjY4NS4uN2UyMTI0Zjc2YzYz
YmY3NWUyZGIxMjM0OWQ5NTBiMGU5MzY4NDBjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUluc3RhbmNlLmgKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbiB7IG51bGxwdHIgfTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViOwogICAgICAgICB2b2lkKiBpbXBvcnRG
dW5jdGlvbiB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcsIHRoaXMgaXMgYSBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+LgorICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRp
b24geyBudWxscHRyIH07CiAgICAgfTsKICAgICB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMo
KSBjb25zdCB7IHJldHVybiBtX251bUltcG9ydEZ1bmN0aW9uczsgfQogICAgIEltcG9ydEZ1bmN0
aW9uSW5mbyogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkKQEAg
LTE0MSw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4g
b2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlv
bkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbUVudHJ5cG9p
bnRMb2FkTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21Ub0VtYmVk
ZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgp
ICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVD
VF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdhc21Ub0VtYmVkZGVyU3R1Yik7IH0KICAg
ICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6ZV90IGltcG9ydEZ1bmN0
aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6
ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25J
bmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQm94ZWRD
YWxsZWVMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZz
ZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5m
bykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCBib3hlZENhbGxlZUxvYWRM
b2NhdGlvbik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBpbXBvcnRGdW5jdGlvbih1
bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4o
JmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlvbk51bSktPmltcG9ydEZ1bmN0aW9uKTsg
fQogCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSA9PSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2NF90KT4oc2l6ZW9mKEltcG9ydEZ1bmN0
aW9uSW5mbykpLCAiV2UgcmVseSBvbiB0aGlzIGZvciB0aGUgYWxpZ25tZW50IHRvIGJlIGNvcnJl
Y3QiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JP
U1JFbnRyeVBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9T
UkVudHJ5UGxhbi5jcHAKaW5kZXggYTBiYjZjZjZkOTAzMDY3NDQzNTZkMjg4ZWFiMGMyYjUyNTIw
NTYyYS4uY2ZhZWFmMmViYzBiMTY0M2NlM2RhNmIxOGYxMGU1MGU3NzBiMGE1OCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5j
cHAKQEAgLTU0LDE1ICs1NCwxNSBAQCBuYW1lc3BhY2UgV2FzbU9NR0Zvck9TUkVudHJ5UGxhbklu
dGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotT01HRm9y
T1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1v
ZHVsZT4mJiBtb2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYgY2FsbGVlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGxldGlvblRh
c2smJiB0YXNrKQorT01HRm9yT1NSRW50cnlQbGFuOjpPTUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4
dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIFJlZjxCQlFDYWxsZWU+JiYgY2FsbGVl
LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXgsIENvZGVCbG9jayYg
Y29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYmIHRhc2spCiAgICAgOiBCYXNlKGNvbnRleHQsIG1h
a2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlvbiY+KG1vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQogICAgICwgbV9tb2R1bGUoV1RGTW92ZShtb2R1bGUp
KQotICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSkpCisgICAg
LCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX2NhbGxlZShXVEZNb3ZlKGNhbGxlZSkp
CiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKICAgICAsIG1fbG9vcEluZGV4
KGxvb3BJbmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUpOworICAgIHNldE1vZGUoY29kZUJsb2Nr
Lm1vZGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5uYWJsZSgpKTsKICAgICBBU1NF
UlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0ZvcihtX21vZGUpKTsK
ICAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJTdGFydGluZyBPTUdGb3JPU1JFbnRyeSBwbGFuIGZvciAiLCBmdW5jdGlvbkluZGV4LCAiIG9m
IG1vZHVsZTogIiwgUmF3UG9pbnRlcigmbV9tb2R1bGUuZ2V0KCkpKTsKQEAgLTgxLDQ1ICs4MSwz
MyBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAg
ICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBz
aWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4
dCBjb250ZXh0OwogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUgPSAwOwot
ICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQs
IGZ1bmN0aW9uLCBzaWduYXR1cmUsIHVubGlua2VkQ2FsbHMsIG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2Rl
OjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwgbV9sb29wSW5kZXgpOworICAg
IGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKGNvbnRleHQsIGZ1
bmN0aW9uLCBzaWduYXR1cmUsIG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnMsIG9z
ckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9k
ZSwgQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGUsIG1fZnVuY3Rpb25JbmRleCwg
bV9sb29wSW5kZXgpOwogCiAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQp
KSB7CiAgICAgICAgIGZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmluZyhwYXJzZUFuZENv
bXBpbGVSZXN1bHQuZXJyb3IoKSwgIndoZW4gdHJ5aW5nIHRvIHRpZXIgdXAgIiwgU3RyaW5nOjpu
dW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
RW50cnlwb2ludCBvbWdFbnRyeXBvaW50OwogICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29u
dGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
ICAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkgewogICAg
ICAgICBCYXNlOjpmYWlsKGhvbGRMb2NrKG1fbG9jayksIG1ha2VTdHJpbmcoIk91dCBvZiBleGVj
dXRhYmxlIG1lbW9yeSB3aGlsZSB0aWVyaW5nIHVwIGZ1bmN0aW9uIGF0IGluZGV4ICIsIFN0cmlu
Zzo6bnVtYmVyKG1fZnVuY3Rpb25JbmRleCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG9tZ0VudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlv
bj4oCisgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRy
eUNhbGxlZTo6Y3JlYXRlKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZm
ZXJTaXplLCBtX2xvb3BJbmRleCk7CisgICAgY2FsbGVlLT5lbnRyeXBvaW50KCkuY2FsbGVlU2F2
ZVJlZ2lzdGVycyA9IFdURk1vdmUoY29udGV4dC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKKyAgICBj
YWxsZWUtPmVudHJ5cG9pbnQoKS5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8QjM6OkNvbXBpbGF0
aW9uPigKICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBCM0NvbXBpbGF0aW9uUHRy
VGFnLCAiV2ViQXNzZW1ibHkgT01HRm9yT1NSRW50cnkgZnVuY3Rpb25bJWldICVzIG5hbWUgJXMi
LCBtX2Z1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBt
YWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRh
KCkpLAogICAgICAgICBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3RzKSk7
CiAKLSAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNl
QW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMp
OwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2lu
dDsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zv
cihtb2RlKCkpKTsKLSAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zv
ck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25J
bmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9u
SW5kZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZN
b3ZlKHVubGlua2VkQ2FsbHMpKTsKICAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBh
dGNoUG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0
aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwotICAgICAgICBlbnRyeXBv
aW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7Ci0KICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2Fs
bGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2Fs
bC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBv
cnRGdW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJs
b2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUo
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2Rl
QmxvY2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1
bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4o
KTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNh
bGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50
KSk7CisgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNvbnRleHQub3V0Z29pbmdDYWxscykgewor
ICAgICAgICAgICAgQkJRQ2FsbGVlJiB0YXJnZXRDYWxsZWUgPSBtX2NvZGVCbG9jay0+d2FzbUJC
UUNhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC50YXJnZXRGdW5jdGlvbkluZGV4U3Bh
Y2UpOworICAgICAgICAgICAgdGFyZ2V0Q2FsbGVlLmFkZEFuZExpbmtDYWxsZXIobG9ja2VyLCBs
aW5rQnVmZmVyLCBjYWxsLnVubGlua2VkTW92ZUFuZENhbGwpOwogICAgICAgICB9CiAgICAgfQog
ICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwpAQCAtMTMyLDE5ICsxMjAs
NiBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAg
ICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5vc3JFbnRyeVRyaWdnZXJzKClbbV9s
b29wSW5kZXhdID0gVGllclVwQ291bnQ6OlRyaWdnZXJSZWFzb246OkNvbXBpbGF0aW9uRG9uZTsK
ICAgICAgICAgICAgIG1fY2FsbGVlLT50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVz
Rm9yT01HRm9yT1NSRW50cnkgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBp
bGVkOwogICAgICAgICB9Ci0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAg
IC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRlZCB3aGlsZSB3
ZSByZWxlYXNlIG1fY29kZUJsb2NrLT5sb2NrLgotICAgICAgICAvLyBVbnRpbCB3ZSBhZGQgT01H
Rm9yT1NSRW50cnkgY2FsbGVlIHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxsZWUsIHRoaXMg
bmV3IE9NRyBmdW5jdGlvbiBsaW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhpcyBPTUdGb3JP
U1JFbnRyeSBjYWxsZWUuCi0gICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdGb3JPU1JFbnRy
eSBjYWxsZWUgYWdhaW4gbm90IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0gICAgICAgIGZvciAoYXV0
byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAg
ICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlw
b2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4
U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNt
RW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVh
ckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRh
Zz4oZW50cnlwb2ludCkpOwotICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dMbklmKFdhc21P
TUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVu
dHJ5ICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIgdXAgY291bnQgYXQ6ICIsIG1fY2Fs
bGVlLT50aWVyVXBDb3VudCgpLT5jb3VudCgpKTsKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xv
Y2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JP
U1JFbnRyeVBsYW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JF
bnRyeVBsYW4uaAppbmRleCAwMTUxZGE2NjVhOTY4MzI4Zjk1MDM4ZjViNTBjMDg1NzYxZjA1ZGU3
Li5kNTZlYTQyMTdkZDcxMGQ1NzUxNjQ1YTliM2ViMDE4YzQzNTBkMGRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oCkBAIC00
OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBib29sIG11bHRpVGhyZWFkZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gTm90ZTogQ29tcGxldGlvblRhc2sgc2hv
dWxkIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBQbGFuIG90aGVyd2lzZSB0aGVyZSB3aWxs
IGJlIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIE9NR0Zvck9TUkVudHJ5UGxhbihDb250ZXh0Kiwg
UmVmPE1vZHVsZT4mJiwgUmVmPEJCUUNhbGxlZT4mJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
dWludDMyX3QgbG9vcEluZGV4LCBNZW1vcnlNb2RlLCBDb21wbGV0aW9uVGFzayYmKTsKKyAgICBP
TUdGb3JPU1JFbnRyeVBsYW4oQ29udGV4dCosIFJlZjxNb2R1bGU+JiYsIFJlZjxCQlFDYWxsZWU+
JiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleCwgQ29kZUJsb2Nr
JiwgQ29tcGxldGlvblRhc2smJik7CiAKIHByaXZhdGU6CiAgICAgLy8gRm9yIHNvbWUgcmVhc29u
IGZyaWVuZHNoaXAgZG9lc24ndCBleHRlbmQgdG8gcGFyZW50IGNsYXNzZXMuLi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCBhODA1ZDAxNmZiOTkyODY0
YzdhMDNjODI2NmNjNWQ0ZmI5ODY1YTY5Li40MTQ2OTBmZWE5OWNhMjI3MGE4ZTg1MDdkYjZhOGU4
OTQ4ODA4MTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01H
UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3Bw
CkBAIC01NCwxMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdhc21PTUdQbGFuSW50ZXJuYWwgewogc3Rh
dGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfQogCi1PTUdQbGFuOjpPTUdQbGFuKENv
bnRleHQqIGNvbnRleHQsIFJlZjxNb2R1bGU+JiYgbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBNZW1vcnlNb2RlIG1vZGUsIENvbXBsZXRpb25UYXNrJiYgdGFzaykKK09NR1BsYW46Ok9N
R1BsYW4oQ29udGV4dCogY29udGV4dCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUsIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIENvZGVCbG9jayYgY29kZUJsb2NrLCBDb21wbGV0aW9uVGFzayYmIHRhc2sp
CiAgICAgOiBCYXNlKGNvbnRleHQsIG1ha2VSZWYoY29uc3RfY2FzdDxNb2R1bGVJbmZvcm1hdGlv
biY+KG1vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKSkpLCBXVEZNb3ZlKHRhc2spKQogICAgICwg
bV9tb2R1bGUoV1RGTW92ZShtb2R1bGUpKQotICAgICwgbV9jb2RlQmxvY2soKm1fbW9kdWxlLT5j
b2RlQmxvY2tGb3IobW9kZSkpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBt
X2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKIHsKLSAgICBzZXRNb2RlKG1vZGUpOworICAg
IHNldE1vZGUoY29kZUJsb2NrLm1vZGUoKSk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5ydW5u
YWJsZSgpKTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVC
bG9ja0ZvcihtX21vZGUpKTsKICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2
ZXJib3NlLCAiU3RhcnRpbmcgT01HIHBsYW4gZm9yICIsIGZ1bmN0aW9uSW5kZXgsICIgb2YgbW9k
dWxlOiAiLCBSYXdQb2ludGVyKCZtX21vZHVsZS5nZXQoKSkpOwpAQCAtNzksNTcgKzc5LDQ4IEBA
IHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OwogICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uLCBzaWduYXR1cmUsIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAotICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiB1bmxpbmtlZENhbGxzOwogICAgIHVuc2lnbmVkIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emU7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7Ci0gICAgYXV0byBwYXJzZUFuZENv
bXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVy
ZSwgdW5saW5rZWRDYWxscywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1bGVJbmZv
cm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1fZnVuY3Rp
b25JbmRleCwgVUlOVDMyX01BWCk7CisgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBw
YXJzZUFuZENvbXBpbGUoY29udGV4dCwgZnVuY3Rpb24sIHNpZ25hdHVyZSwgbV9jb2RlQmxvY2st
Pm1fd2FzbVRvV2FzbUV4aXRTdHVicywgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUsIG1f
ZnVuY3Rpb25JbmRleCwgVUlOVDMyX01BWCk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5k
Q29tcGlsZVJlc3VsdCkpIHsKICAgICAgICAgZmFpbChob2xkTG9jayhtX2xvY2spLCBtYWtlU3Ry
aW5nKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC5lcnJvcigpLCAid2hlbiB0cnlpbmcgdG8gdGllciB1
cCAiLCBTdHJpbmc6Om51bWJlcihtX2Z1bmN0aW9uSW5kZXgpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBFbnRyeXBvaW50IG9tZ0VudHJ5cG9pbnQ7CiAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwogICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9j
YXRlKCkpKSB7CiAgICAgICAgIEJhc2U6OmZhaWwoaG9sZExvY2sobV9sb2NrKSwgbWFrZVN0cmlu
ZygiT3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxlIHRpZXJpbmcgdXAgZnVuY3Rpb24gYXQg
aW5kZXggIiwgU3RyaW5nOjpudW1iZXIobV9mdW5jdGlvbkluZGV4KSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgb21nRW50cnlwb2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8
QjM6OkNvbXBpbGF0aW9uPigKKyAgICBSZWY8T01HQ2FsbGVlPiBvbWdDYWxsZWUgPSBPTUdDYWxs
ZWU6OmNyZWF0ZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVT
ZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSk7CisgICAgb21nQ2FsbGVlLT5lbnRyeXBv
aW50KCkuY29tcGlsYXRpb24gPSBtYWtlVW5pcXVlPEIzOjpDb21waWxhdGlvbj4oCiAgICAgICAg
IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgQjNDb21waWxhdGlvblB0clRhZywgIldlYkFzc2Vt
Ymx5IE9NRyBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0
dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1
bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29u
dGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKIAotICAgIG9tZ0VudHJ5cG9pbnQuY2Fs
bGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCkt
PmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CisgICAgb21nQ2FsbGVlLT5lbnRyeXBv
aW50KCkuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUoY29udGV4dC5jYWxsZWVTYXZlUmVn
aXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVu
dHJ5cG9pbnQ7CisgICAgQkJRQ2FsbGVlJiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9jYWxs
ZWVzW21fZnVuY3Rpb25JbmRleF0uZ2V0KCk7CiAgICAgewogICAgICAgICBBU1NFUlQobV9jb2Rl
QmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKLSAgICAgICAg
UmVmPE9NR0NhbGxlZT4gY2FsbGVlID0gT01HQ2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRy
eXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2Vj
dGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUodW5saW5rZWRDYWxscykpOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21waWxlUmVz
dWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxs
ZWUucHRyKCkpKTsKICAgICAgICAgQVNTRVJUKCFtX2NvZGVCbG9jay0+bV9vcHRpbWl6ZWRDYWxs
ZWVzW21fZnVuY3Rpb25JbmRleF0pOwotICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRy
eXBvaW50KCk7CiAKICAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBv
dXIgY2FsbGVlIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlz
IGVuYWJsZXMgdXMgdG8gZW5zdXJlIHdlCiAgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0
ZXN0IGNvZGUuIEFueSBmdW5jdGlvbiBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBj
b2RlIGFuZCB0aGUgbmV3IGNhbGxzaXRlcywgd2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVw
ZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSBy
ZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQogICAg
ICAgICAvLyB0aGUgbG9jayBvdXIgY29kZSBpcyByZWFkeSB0byBiZSBwdWJsaXNoZWQgdG9vLgog
ICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
bV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gY2FsbGVl
LmNvcHlSZWYoKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fb3B0aW1pemVkQ2FsbGVlc1ttX2Z1
bmN0aW9uSW5kZXhdID0gb21nQ2FsbGVlLmNvcHlSZWYoKTsKICAgICAgICAgewotICAgICAgICAg
ICAgQkJRQ2FsbGVlJiBiYnFDYWxsZWUgPSAqc3RhdGljX2Nhc3Q8QkJRQ2FsbGVlKj4obV9jb2Rl
QmxvY2stPm1fY2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKTsKICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soYmJxQ2FsbGVlLnRpZXJVcENvdW50KCktPmdldExvY2soKSk7
Ci0gICAgICAgICAgICBiYnFDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7
CisgICAgICAgICAgICBiYnFDYWxsZWUuc2V0UmVwbGFjZW1lbnQoaG9sZGVyLCBvbWdDYWxsZWUu
Y29weVJlZigpKTsKICAgICAgICAgICAgIGJicUNhbGxlZS50aWVyVXBDb3VudCgpLT5tX2NvbXBp
bGF0aW9uU3RhdHVzRm9yT01HID0gVGllclVwQ291bnQ6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21w
aWxlZDsKICAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21U
b1dhc21DYWxsc2l0ZXMoKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKLSAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9u
SW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9u
Q291bnQoKSkKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2Fz
bVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2Fz
bUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlKS5lbnRyeXBvaW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwotCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKworICAg
ICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjb250ZXh0Lm91dGdvaW5nQ2FsbHMpIHsKKyAgICAgICAg
ICAgIEJCUUNhbGxlZSYgdGFyZ2V0Q2FsbGVlID0gbV9jb2RlQmxvY2stPndhc21CQlFDYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwudGFyZ2V0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAg
ICAgICAgICAgIHRhcmdldENhbGxlZS5hZGRBbmRMaW5rQ2FsbGVyKGhvbGRlciwgbGlua0J1ZmZl
ciwgY2FsbC51bmxpbmtlZE1vdmVBbmRDYWxsKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTM5
LDMwICsxMzAsMTQgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAg
IHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwogICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2Qg
dG8gYmUgcGFyYW5vaWQuCiAKLSAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50
cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7CisgICAgbV9jb2RlQmxvY2st
Pm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBvbWdDYWxs
ZWUtPmNvZGUoKTsKKyAgICBtX2NvZGVCbG9jay0+bV9ib3hlZENhbGxlZXNbbV9mdW5jdGlvbklu
ZGV4XSA9IENhbGxlZUJpdHM6OmJveFdhc20ob21nQ2FsbGVlLnB0cigpKTsKICAgICB7CiAgICAg
ICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotCi0gICAgICAgIGF1
dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bD4mIGNhbGxzaXRlcykgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVz
KSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVy
Ym9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxs
LmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4
U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6
ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIs
IFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlcy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgcmVwYXRjaENhbGxzKG1fY29kZUJsb2NrLT5tX3dh
c21Ub1dhc21DYWxsc2l0ZXNbaV0pOwotICAgICAgICAgICAgaWYgKE9NR0NhbGxlZSogcmVwbGFj
ZW1lbnRDYWxsZWUgPSBzdGF0aWNfY2FzdDxCQlFDYWxsZWUqPihtX2NvZGVCbG9jay0+bV9jYWxs
ZWVzW2ldLmdldCgpKS0+cmVwbGFjZW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXBhdGNoQ2Fs
bHMocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAgICAgICAg
ICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gc3RhdGljX2Nhc3Q8
QkJRQ2FsbGVlKj4obV9jb2RlQmxvY2stPm1fY2FsbGVlc1tpXS5nZXQoKSktPm9zckVudHJ5Q2Fs
bGVlKCkpCi0gICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNt
VG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAgICB9CisgICAgICAgIGJicUNhbGxlZS5yZXBhdGNo
Q2FsbGVycyhob2xkZXIsIG9tZ0NhbGxlZS5nZXQoKSk7CiAgICAgfQogCi0gICAgZGF0YUxvZ0xu
SWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NRyAiLCBtX2Z1bmN0
aW9uSW5kZXgsICIgd2l0aCB0aWVyIHVwIGNvdW50IGF0OiAiLCBzdGF0aWNfY2FzdDxCQlFDYWxs
ZWUqPihtX2NvZGVCbG9jay0+bV9jYWxsZWVzW21fZnVuY3Rpb25JbmRleF0uZ2V0KCkpLT50aWVy
VXBDb3VudCgpLT5jb3VudCgpKTsKKyAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFs
Ojp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVuY3Rpb25JbmRleCwgIiB3aXRoIHRpZXIg
dXAgY291bnQgYXQ6ICIsIG1fY29kZUJsb2NrLT5tX2NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS0+
dGllclVwQ291bnQoKS0+Y291bnQoKSk7CiAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFu
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5oCmluZGV4IGNiNzli
NDM5ZDRlOTk0ZDg3MGU5ZGM5MDg5YzQzYTdmNTg2MDI1NjYuLmU2ODlkNTY2NTdhOGQxYmI5YmRl
ODJlZTA1MTUzNTQ4NzBiZTgzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R1BsYW4uaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtdWx0aVRocmVhZGVk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIE5vdGU6IENvbXBs
ZXRpb25UYXNrIHNob3VsZCBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgUGxhbiBvdGhlcndp
c2UgdGhlcmUgd2lsbCBiZSBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBPTUdQbGFuKENvbnRleHQq
LCBSZWY8TW9kdWxlPiYmLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBNZW1vcnlNb2RlLCBDb21w
bGV0aW9uVGFzayYmKTsKKyAgICBPTUdQbGFuKENvbnRleHQqLCBSZWY8TW9kdWxlPiYmLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBDb2RlQmxvY2smLCBDb21wbGV0aW9uVGFzayYmKTsKIAogcHJp
dmF0ZToKICAgICAvLyBGb3Igc29tZSByZWFzb24gZnJpZW5kc2hpcCBkb2Vzbid0IGV4dGVuZCB0
byBwYXJlbnQgY2xhc3Nlcy4uLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9w
ZXJhdGlvbnMuY3BwCmluZGV4IDFhZGU4YThlOTQ0OWRhOGIzZjA2Y2QzZDY5NDI1NzkyZTZjNWRm
OWEuLjc5YzY0MGIzNjdmNjcwOGY5ZTE1OWQ4YzU5OWY5Y2IzYjYxMjY2YWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKQEAgLTgyLDcgKzgyLDcg
QEAgc3RhdGljIHZvaWQgdHJpZ2dlck9NR1JlcGxhY2VtZW50Q29tcGlsZShUaWVyVXBDb3VudCYg
dGllclVwLCBPTUdDYWxsZWUqIHJlcGxhY2UKICAgICBpZiAoY29tcGlsZSkgewogICAgICAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICJ0cmlnZ2VyT01HUmVwbGFjZW1lbnQg
Zm9yICIsIGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhl
IGNvZGUuCi0gICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKGlu
c3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSks
IGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jay5tb2RlKCksIFBsYW46OmRvbnRGaW5hbGl6ZSgpKSk7
CisgICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoKm5ldyBPTUdQbGFuKGluc3RhbmNl
LT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+KGluc3RhbmNlLT5tb2R1bGUoKSksIGZ1bmN0
aW9uSW5kZXgsIGNvZGVCbG9jaywgUGxhbjo6ZG9udEZpbmFsaXplKCkpKTsKICAgICAgICAgZW5z
dXJlV29ya2xpc3QoKS5lbnF1ZXVlKHBsYW4uY29weVJlZigpKTsKICAgICAgICAgaWYgKFVOTElL
RUxZKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkpKQogICAgICAgICAgICAgcGxhbi0+d2Fp
dEZvckNvbXBsZXRpb24oKTsKQEAgLTE5Nyw5ICsxOTcsMTQgQEAgc3RhdGljIHZvaWQgZG9PU1JF
bnRyeShJbnN0YW5jZSogaW5zdGFuY2UsIFByb2JlOjpDb250ZXh0JiBjb250ZXh0LCBCQlFDYWxs
ZWUmIGMKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLgogI2VuZGlmCi0g
ICAgLy8gNC4gQ29uZmlndXJlIGFyZ3VtZW50IHJlZ2lzdGVycyB0byBqdW1wIHRvIE9TUiBlbnRy
eSBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBydW50aW1lIGZ1bmN0aW9uLgorCisgICAgLy8gNC4g
VXBkYXRlIHRoZSBjYWxsZWUgc2xvdCBpbiB0aGUgY2FsbCBmcmFtZSB0byB0aGUgT1NSIGVudHJ5
IGNhbGxlZS4KKyAgICBSZWdpc3Rlciogc3RhY2tQb2ludGVyID0gYml0d2lzZV9jYXN0PFJlZ2lz
dGVyKj4oY29udGV4dC5zcCgpKTsKKyAgICAqKHN0YWNrUG9pbnRlciArIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAtIDEpID0gYml0d2lzZV9jYXN0PFJlZ2lzdGVyPihDYWxsZWVCaXRzOjpib3hXYXNt
KCZvc3JFbnRyeUNhbGxlZSkpOworCisgICAgLy8gNS4gQ29uZmlndXJlIGFyZ3VtZW50IHJlZ2lz
dGVycyB0byBqdW1wIHRvIE9TUiBlbnRyeSBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBydW50aW1l
IGZ1bmN0aW9uLgogICAgIGNvbnRleHQuZ3ByKEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPSBiaXR3
aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihidWZmZXIpOwotICAgIGNvbnRleHQuZ3ByKEdQUkluZm86
OmFyZ3VtZW50R1BSMSkgPSBiaXR3aXNlX2Nhc3Q8VUNQVVJlZ2lzdGVyPihvc3JFbnRyeUNhbGxl
ZS5lbnRyeXBvaW50KCkuZXhlY3V0YWJsZUFkZHJlc3M8PigpKTsKKyAgICBjb250ZXh0LmdwcihH
UFJJbmZvOjphcmd1bWVudEdQUjEpID0gYml0d2lzZV9jYXN0PFVDUFVSZWdpc3Rlcj4ob3NyRW50
cnlDYWxsZWUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzPD4oKSk7CiB9CiAKIHZvaWQgSklUX09Q
RVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCkBAIC0z
NjUsNyArMzcwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhQcm9i
ZTo6Q29udGV4dCYgY29udGV4dCkKIAogICAgIGlmIChzdGFydE9TUkVudHJ5Q29tcGlsYXRpb24p
IHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAidHJpZ2dlck9N
R09TUiBmb3IgIiwgZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgIFJlZjxQbGFuPiBwbGFuID0gYWRv
cHRSZWYoKm5ldyBPTUdGb3JPU1JFbnRyeVBsYW4oaW5zdGFuY2UtPmNvbnRleHQoKSwgUmVmPFdh
c206Ok1vZHVsZT4oaW5zdGFuY2UtPm1vZHVsZSgpKSwgUmVmPFdhc206OkJCUUNhbGxlZT4oY2Fs
bGVlKSwgZnVuY3Rpb25JbmRleCwgbG9vcEluZGV4LCBjb2RlQmxvY2subW9kZSgpLCBQbGFuOjpk
b250RmluYWxpemUoKSkpOworICAgICAgICBSZWY8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKCpuZXcg
T01HRm9yT1NSRW50cnlQbGFuKGluc3RhbmNlLT5jb250ZXh0KCksIFJlZjxXYXNtOjpNb2R1bGU+
KGluc3RhbmNlLT5tb2R1bGUoKSksIFJlZjxXYXNtOjpCQlFDYWxsZWU+KGNhbGxlZSksIGZ1bmN0
aW9uSW5kZXgsIGxvb3BJbmRleCwgY29kZUJsb2NrLCBQbGFuOjpkb250RmluYWxpemUoKSkpOwog
ICAgICAgICBlbnN1cmVXb3JrbGlzdCgpLmVucXVldWUocGxhbi5jb3B5UmVmKCkpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSkpCiAgICAgICAgICAg
ICBwbGFuLT53YWl0Rm9yQ29tcGxldGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc20uY3BwCmluZGV4IDczNTIyMDI4OTM3YzZkYWMxZmM0NzNjN2U0Y2RjNjQ5NThj
ZThlYTYuLmYxM2Y2NDUwMjBiMmY3NjBiMjRlY2NiZjczYTBjN2IzY2Q5ZDRkZDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKQEAgLTQyLDIxICs0MiwxNSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1zdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4
dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCkKK3ZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYg
Y29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgRW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlKiBzZWxmLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVt
b3J5TW9kZSBtb2RlKQogewogICAgIENDYWxsSGVscGVycyYgaml0ID0gKmNvbXBpbGF0aW9uQ29u
dGV4dC5lbWJlZGRlckVudHJ5cG9pbnRKSVQ7CiAKLSAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlx
dWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsK
IAogICAgIC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tzLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCiAgICAgaml0LnN0b3JlNjQoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFiZWxQ
dHIgY2FsbGVlTW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQ
Uik7Ci0gICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJh
bWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0g
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPFdhc21FbnRyeVB0clRhZz4qIGxpbmtlZENhbGxl
ZU1vdmUgPSAmcmVzdWx0LT5jYWxsZWVNb3ZlTG9jYXRpb247Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAqbGlua2VkQ2FsbGVlTW92
ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxXYXNtRW50cnlQdHJUYWc+KGNhbGxlZU1vdmVMb2Nh
dGlvbik7Ci0gICAgfSk7CisgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihDYWxsZWVCaXRzOjpib3hXYXNtKHNlbGYpKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAKICAgICBjb25zdCBQaW5uZWRSZWdpc3Rl
ckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwogICAgIFJlZ2lz
dGVyU2V0IHRvU2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1vZGUpOwpAQCAtNjksNyArNjMsNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVy
KENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogI2VuZGlmCiAKICAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCByZWdpc3RlcnNUb1NwaWxsKHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNl
dEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCk7Ci0gICAgcmVzdWx0LT5lbnRyeXBvaW50LmNh
bGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOworICAgIHNlbGYtPmVudHJ5cG9p
bnQoKS5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcmVnaXN0ZXJzVG9TcGlsbDsKIAogICAgIHVuc2ln
bmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yodm9p
ZCopOwogICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVy
U2l6ZUluQnl0ZXMoKTsKQEAgLTEyNSw5ICsxMTksMTAgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNv
bXAKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRUaHJvd1dhc21Ub0pTRXhjZXB0aW9uKGppdCwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBhcmd1bWVudHNJbmNsdWRlSTY0ID8gRXhjZXB0aW9uVHlw
ZTo6STY0QXJndW1lbnRUeXBlIDogRXhjZXB0aW9uVHlwZTo6STY0UmV0dXJuVHlwZSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBjb21waWxh
dGlvbkNvbnRleHQuZW1iZWRkZXJNb3ZlQW5kQ2FsbCA9IFVubGlua2VkTW92ZUFuZENhbGwgeyB9
OwogICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlR1BSID0gcGlubmVkUmVncy53YXNtQ29u
dGV4dEluc3RhbmNlUG9pbnRlcjsKIAogICAgIHsKQEAgLTE5OCw2ICsxOTMsMTAgQEAgc3RkOjp1
bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxh
dGlvbkNvbnRleHQmIGNvbXAKIAogICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKTsKICAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSB3YXNt
Q2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMCk7CisgICAgICAgIGNvbXBp
bGF0aW9uQ29udGV4dC5lbWJlZGRlck1vdmVBbmRDYWxsLT5tb3ZlTG9jYXRpb24gPSBqaXQubW92
ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgY2FsbGVl
R1BSKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQog
CiAgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsKQEAgLTIyMSwxMiArMjIwLDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlv
bkNvbnRleHQmIGNvbXAKICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQ
cmltaXRpdmUsIGJhc2VNZW1vcnksIHNjcmF0Y2hPclNpemUsIHNjcmF0Y2hPclNpemUpOwogICAg
IH0KIAotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFi
bGVOZWFyQ2FsbCgpOwotICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9u
SW5kZXggKyBpbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICBBU1NFUlQoZnVuY3Rpb25J
bmRleFNwYWNlIDwgaW5mby5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAgIGppdC5hZGRM
aW5rVGFzayhbdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNhbGwsIGZ1bmN0aW9uSW5kZXhTcGFj
ZV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRyeVB0
clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsKLSAgICB9KTsKKyAgICBjb21waWxh
dGlvbkNvbnRleHQuZW1iZWRkZXJNb3ZlQW5kQ2FsbC0+Y2FsbExvY2F0aW9uID0gaml0LnRocmVh
ZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwogCiAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zm
c2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKICAgICAgICAgR1BSUmVnIHJl
ZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOwpAQCAtMjY2LDggKzI2MCw2IEBAIHN0ZDo6dW5p
cXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRp
b25Db250ZXh0JiBjb21wCiAKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBq
aXQucmV0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c20uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKaW5kZXggYjRi
OThkMTU5YjI4NGI3ZWMzMjNhYTUwMmMwM2Y5MjFjMTJiMDNhOS4uOTNhYTI0ZDk2ODBhZmZmZDNi
N2E5NmQxOTFmY2Y4YzM5MWQwMjMxYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc20uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5oCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2Ug
V2FzbSB7CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2Fz
bVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlN
b2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKK3ZvaWQgY3JlYXRlSlNUb1dhc21XcmFwcGVy
KENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IFNpZ25hdHVyZSYsIEVtYmVkZGVyRW50cnlwb2lu
dENhbGxlZSosIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSk7CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggMDU3YWE3MDE4YjQ0YThmYmI0
YThkNDcxMTNiZGJlYjg3NDlkZWM4Ny4uZmQzYWUxODIwNGYzNTdiYjMxMzVjZTM1NWU5ZTZjY2Qy
MmE4MzllNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTQ2NSw2ICs0NjUsOCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2lu
dFNsb3coKQogICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlIGp1c3QgZG8gYW4gaW5kaXJl
Y3QganVtcC4gQnV0IHdlIHNob3VsZCB0ZWFjaCB0aGUgTW9kdWxlCiAgICAgICAgIC8vIGhvdyB0
byByZXBhdGNoIHVzOgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk2NTcwCisgICAgICAgIGppdC5sb2FkUHRyKGJveGVkQ2FsbGVlTG9hZExvY2F0
aW9uKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKICAgICAgICAgaml0LmxvYWRQdHIoZW50cnlwb2ludExvYWRMb2NhdGlvbigp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LmNhbGwoc2NyYXRjaEdQUiwgV2FzbUVudHJ5UHRy
VGFnKTsKICAgICB9CkBAIC01MzYsMTAgKzUzOCwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3co
KQogICAgIHJldHVybiBtX2pzQ2FsbEVudHJ5cG9pbnQuY29kZSgpOwogfQogCi1XZWJBc3NlbWJs
eUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdh
c206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206
OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlvbiogV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpz
RW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0
aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB2b2lkKiogYm94ZWRDYWxsZWVM
b2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogewogICAg
IE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdl
YkFzc2VtYmx5RnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1
Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24g
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFw
KSkgV2ViQXNzZW1ibHlGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGpzRW50
cnlwb2ludCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4
KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtVG9XYXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVy
ZUluZGV4KTsKICAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxl
bmd0aCwgbmFtZSwgaW5zdGFuY2UpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9u
LT5pc0xhcmdlQWxsb2NhdGlvbigpLCAiV2ViQXNzZW1ibHlGdW5jdGlvbiBzaG91bGQgYmUgYWxs
b2NhdGVkIG5vdCBpbiBsYXJnZSBhbGxvY2F0aW9uIHNpbmNlIGl0IGlzIEpTQ2FsbGVlLiIpOwog
ICAgIHJldHVybiBmdW5jdGlvbjsKQEAgLTU1MSwxMCArNTUzLDEwIEBAIFN0cnVjdHVyZSogV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNt
OjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5RnVuY3Rpb246Oldl
YkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbiwgdm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNtOjpT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKICAgICA6IEJhc2UgeyB2bSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUgfQotICAgICwgbV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9pbnQuZW50
cnlwb2ludCgpIH0KLSAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgs
IHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0KKyAgICAsIG1fanNFbnRyeXBvaW50
IHsganNFbnRyeXBvaW50LmNvZGUoKSB9CisgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNp
Z25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgYm94ZWRDYWxs
ZWVMb2FkTG9jYXRpb24gfQogeyB9CiAKIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCmluZGV4IDk4
YzM0NjRjZDA3MmQ2NDQ1ZTc3ZGU0Zjg4ZGUwY2NlM2I0OTVlMzQuLjdkZGYzOWQwMDhmNGI2NDI5
ZjlmN2ExMzFmN2Y5ZDM5YTcwMWQxNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKQEAgLTYyLDExICs2MiwxMiBAQCBwdWJs
aWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uOjpMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgdm9p
ZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKTsKIAogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KICAgICBX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLmVudHJ5cG9pbnRM
b2FkTG9jYXRpb247IH0KKyAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbi5ib3hlZENhbGxlZUxvYWRMb2NhdGlvbjsg
fQogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaW1wb3J0YWJsZUZ1bmN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb247IH0KIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGpzRW50cnlwb2ludChBcml0eUNoZWNrTW9kZSBh
cml0eSkKQEAgLTc4LDYgKzc5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb24sIG1faW1wb3J0YWJsZUZ1bmN0aW9uKSArIFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJveGVkQ2FsbGVlTG9hZExvY2F0aW9u
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb24sIG1faW1wb3J0
YWJsZUZ1bmN0aW9uKSArIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mQm94
ZWRDYWxsZWVMb2FkTG9jYXRpb24oKTsgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnQoKQogICAgIHsKQEAgLTkxLDcgKzkzLDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24s
IFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9j
YXRpb24sIHZvaWQqKiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5k
ZXgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVu
dHJ5cG9pbnRTbG93KCk7CiAgICAgcHRyZGlmZl90IHByZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCA5MmRkY2Y3ODZlODEwMDVhMjFlMWY4YjFmNTBh
OWQyMDlmOWU2OTI5Li43YWYxYTA0NTJhZTBkZjdlYmRjM2MyNGQwOWZmZmJlMDdjMTBlMGI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQuY3BwCkBAIC0xOTMsNiArMTkzLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBv
cnRPYmoKIAogICAgICAgICAgICAgV2FzbTo6SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0gbnVs
bHB0cjsKICAgICAgICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2Nh
dGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHZvaWQq
KiBib3hlZENhbGxlZUxvYWRMb2NhdGlvbiA9IG51bGxwdHI7CiAgICAgICAgICAgICBKU09iamVj
dCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7CiAKICAgICAgICAgICAgIC8v
IGlpLiBJZiB2IGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3Q6CkBAIC0yMDUs
NiArMjA2LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgICAgICAgICAgICAg
aW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsK
ICAgICAgICAgICAgICAgICAgICAgY2FsbGVlSW5zdGFuY2UgPSAmd2FzbUZ1bmN0aW9uLT5pbnN0
YW5jZSgpLT5pbnN0YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICBlbnRyeXBvaW50TG9hZExv
Y2F0aW9uID0gd2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7CisgICAgICAg
ICAgICAgICAgICAgIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uID0gd2FzbUZ1bmN0aW9uLT5ib3hl
ZENhbGxlZUxvYWRMb2NhdGlvbigpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtV3JhcHBlckZ1bmN0aW9u
LT5zaWduYXR1cmVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3Vy
ZSBiZSB2LltbQ2xvc3VyZV1dLgpAQCAtMjIzLDYgKzIyNSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBKU09iamVjdCogaW1w
b3J0T2JqCiAgICAgICAgICAgICBhdXRvKiBpbmZvID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5p
bXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0LmtpbmRJbmRleCk7CiAgICAgICAgICAgICBpbmZvLT50
YXJnZXRJbnN0YW5jZSA9IGNhbGxlZUluc3RhbmNlOwogICAgICAgICAgICAgaW5mby0+d2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBlbnRyeXBvaW50TG9hZExvY2F0aW9uOworICAgICAgICAg
ICAgaW5mby0+Ym94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSBib3hlZENhbGxlZUxvYWRMb2NhdGlv
bjsKICAgICAgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb248V3Jp
dGVCYXJyaWVyPEpTT2JqZWN0Pj4oaW1wb3J0LmtpbmRJbmRleCktPnNldCh2bSwgbV9pbnN0YW5j
ZS5nZXQoKSwgZnVuY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM0
Nyw5ICszNTAsMTAgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUsIEpTT2JqZWN0KiBpbXBvcnRPYmoKICAgICAgICAgICAgIC8vICAg
ICBjLiBSZXR1cm4gZnVuYy4KICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlID0gY29kZUJsb2NrLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29k
ZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRl
eCk7CisgICAgICAgICAgICB2b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSBjb2RlQmxv
Y2stPmJveGVkQ2FsbGVlTG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7
CiAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVs
ZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKICAgICAgICAg
ICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1
bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgZmllbGQsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVy
RW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgp
OworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIGZpZWxk
LCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRM
b2FkTG9jYXRpb24sIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAg
ICAgICAgICAgICB3cmFwcGVyID0gZnVuY3Rpb247CiAgICAgICAgIH0KIApAQCAtNDYwLDcgKzQ2
NCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlLCBKU09iamVjdCogaW1wb3J0T2JqCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+
ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0
aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+
ZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlv
bkluZGV4U3BhY2UpOwotICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24g
PSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksICJzdGFydCIsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxl
ZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAg
dm9pZCoqIGJveGVkQ2FsbGVlTG9hZExvY2F0aW9uID0gY29kZUJsb2NrLT5ib3hlZENhbGxlZUxv
YWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2Up
OworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3Nl
bWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICJzdGFy
dCIsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2lu
dExvYWRMb2NhdGlvbiwgYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsK
ICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTU3NSwxMyArNTgwLDE0IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICAgICAgV2Fz
bTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2stPmVtYmVkZGVy
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAg
ICAgICAgICAgICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRp
b24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+ZW50cnlwb2ludExvYWRMb2Nh
dGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICB2
b2lkKiogYm94ZWRDYWxsZWVMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmJveGVkQ2FsbGVlTG9h
ZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKICAgICAgICAg
ICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2F5
IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBpbmRleCAwLgogICAg
ICAgICAgICAgLy8gV2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4gRWxlbWVu
dCB3LyBpbmRleCAwLgogICAgICAgICAgICAgLy8gRG9lcyAobmV3IEluc3RhbmNlKC4uLikpLmV4
cG9ydHMuZm9vID09PSB0YWJsZS5nZXQoMCk/CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODI1CiAgICAgICAgICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSgKLSAgICAg
ICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgU3RyaW5nKCksIG1f
aW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRM
b2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBib3hlZENhbGxlZUxvYWRM
b2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogCiAgICAgICAgICAgICBtX2luc3RhbmNlLT50YWJs
ZSh0YWJsZUluZGV4KS0+c2V0KGVsZW1lbnRJbmRleCwgZnVuY3Rpb24pOwogICAgICAgICAgICAg
KytlbGVtZW50SW5kZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggY2RlNGYzY2YyNjA0
YWRkNzZjYzA0ZmIyMjRmOWE1MmJkMmRhMDM3Ni4uNjI4NjJiNDExNzg0NjRlNjEzZTNlNzkzMDQy
NjczMzA2NTBlODEwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtNjAsNyArNjAsOSBA
QCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246
OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsTwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0
aW9uLT5pbmhlcml0czxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0pLCAiV2Ugc2hvdWxk
IG5ldmVyIGRvdWJsZSB3cmFwIGEgd3JhcHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFt
ZSA9ICIiOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVu
Y3Rpb24oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhv
c3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFi
bGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCAmaW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0
RnVuY3Rpb25JbmZvKGltcG9ydEluZGV4KS0+d2FzbVRvRW1iZWRkZXJTdHViIH0gKTsKKyAgICBh
dXRvIGltcG9ydEZ1bmN0aW9uSW5mbyA9IGluc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0
aW9uSW5mbyhpbXBvcnRJbmRleCk7CisgICAgc3RhdGljIHZvaWQqIG51bGxCb3hlZENhbGxlZSA9
IG51bGxwdHI7CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFw
KSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZp
bXBvcnRGdW5jdGlvbkluZm8tPndhc21Ub0VtYmVkZGVyU3R1YiwgJm51bGxCb3hlZENhbGxlZSB9
KTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3Jl
YXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1
bmN0aW9uLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>