<?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>179288</bug_id>
          
          <creation_ts>2017-11-04 14:41:42 -0700</creation_ts>
          <short_desc>GC should support isoheaps</short_desc>
          <delta_ts>2018-08-28 18:00:05 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=180185</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=180425</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>179876</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1368389</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-04 14:41:42 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368390</commentid>
    <comment_count>1</comment_count>
      <attachid>326045</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-04 14:42:12 -0700</bug_when>
    <thetext>Created attachment 326045
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368406</commentid>
    <comment_count>2</comment_count>
      <attachid>326052</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-04 16:33:33 -0700</bug_when>
    <thetext>Created attachment 326052
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368473</commentid>
    <comment_count>3</comment_count>
      <attachid>326076</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-05 13:07:32 -0800</bug_when>
    <thetext>Created attachment 326076
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368798</commentid>
    <comment_count>4</comment_count>
      <attachid>326160</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-06 14:56:30 -0800</bug_when>
    <thetext>Created attachment 326160
close to done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369095</commentid>
    <comment_count>5</comment_count>
      <attachid>326228</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-07 11:34:23 -0800</bug_when>
    <thetext>Created attachment 326228
almost done

Oh man, the patch size is a total lie.  That&apos;s what happens when files get renamed and then edited.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369178</commentid>
    <comment_count>6</comment_count>
      <attachid>326254</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-07 13:37:35 -0800</bug_when>
    <thetext>Created attachment 326254
more

it&apos;s starting to compile!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369201</commentid>
    <comment_count>7</comment_count>
      <attachid>326260</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-07 14:21:36 -0800</bug_when>
    <thetext>Created attachment 326260
jsc is compiling maybe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369222</commentid>
    <comment_count>8</comment_count>
      <attachid>326264</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-07 14:38:35 -0800</bug_when>
    <thetext>Created attachment 326264
more things compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373195</commentid>
    <comment_count>9</comment_count>
      <attachid>327208</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-17 11:59:32 -0800</bug_when>
    <thetext>Created attachment 327208
it ran 3d-cube so it&apos;s probably solid</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373197</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-17 12:02:42 -0800</bug_when>
    <thetext>Attachment 327208 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoAlignedMemoryAllocator.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/ForwardingHeaders/runtime/JSSegmentedVariableObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/runtime/VM.cpp:80:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:43:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;deferralContext&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSDestructibleObjectHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/CompleteSubspace.cpp:61:  Declaration has space between type name and * in void *result  [whitespace/declaration] [3]
ERROR: Source/WebCore/ForwardingHeaders/runtime/JSDestructibleObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/runtime/JSStringHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 12 in 75 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373677</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-19 08:07:26 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #9)
&gt; Created attachment 327208 [details]
&gt; it ran 3d-cube so it&apos;s probably solid

Wow, totally called it.  JSC and WK tests passed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373679</commentid>
    <comment_count>12</comment_count>
      <attachid>327342</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-19 08:10:18 -0800</bug_when>
    <thetext>Created attachment 327342
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373680</commentid>
    <comment_count>13</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-19 08:12:50 -0800</bug_when>
    <thetext>Attachment 327342 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoAlignedMemoryAllocator.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/ForwardingHeaders/runtime/JSSegmentedVariableObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/runtime/VM.cpp:80:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:43:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;deferralContext&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSDestructibleObjectHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/CompleteSubspace.cpp:61:  Declaration has space between type name and * in void *result  [whitespace/declaration] [3]
ERROR: Source/WebCore/ForwardingHeaders/runtime/JSDestructibleObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/runtime/JSStringHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 12 in 75 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373681</commentid>
    <comment_count>14</comment_count>
      <attachid>327343</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-19 08:12:55 -0800</bug_when>
    <thetext>Created attachment 327343
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373682</commentid>
    <comment_count>15</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-19 08:16:30 -0800</bug_when>
    <thetext>Attachment 327343 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/IsoAlignedMemoryAllocator.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/ForwardingHeaders/runtime/JSSegmentedVariableObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/runtime/VM.cpp:80:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:43:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;deferralContext&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSDestructibleObjectHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/CompleteSubspace.cpp:61:  Declaration has space between type name and * in void *result  [whitespace/declaration] [3]
ERROR: Source/WebCore/ForwardingHeaders/runtime/JSDestructibleObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/runtime/JSStringHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 12 in 75 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373683</commentid>
    <comment_count>16</comment_count>
      <attachid>327344</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-19 09:15:16 -0800</bug_when>
    <thetext>Created attachment 327344
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373684</commentid>
    <comment_count>17</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-19 09:17:37 -0800</bug_when>
    <thetext>Attachment 327344 did not pass style-queue:


ERROR: Source/WebCore/ForwardingHeaders/runtime/JSSegmentedVariableObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/heap/IsoAlignedMemoryAllocator.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:43:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;deferralContext&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/ForwardingHeaders/runtime/JSDestructibleObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/runtime/JSStringHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/VM.cpp:80:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSDestructibleObjectHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/CompleteSubspace.cpp:61:  Declaration has space between type name and * in void *result  [whitespace/declaration] [3]
Total errors found: 12 in 78 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374716</commentid>
    <comment_count>18</comment_count>
      <attachid>327580</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-25 18:37:03 -0800</bug_when>
    <thetext>Created attachment 327580
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374717</commentid>
    <comment_count>19</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-25 18:39:34 -0800</bug_when>
    <thetext>Attachment 327580 did not pass style-queue:


ERROR: Source/WebCore/ForwardingHeaders/runtime/JSSegmentedVariableObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/heap/IsoAlignedMemoryAllocator.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:37:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:43:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;deferralContext&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/IsoSubspace.h:46:  The parameter name &quot;failureMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/ForwardingHeaders/runtime/JSDestructibleObjectHeapCellType.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
ERROR: Source/JavaScriptCore/runtime/JSStringHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/VM.cpp:80:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSDestructibleObjectHeapCellType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/CompleteSubspace.cpp:61:  Declaration has space between type name and * in void *result  [whitespace/declaration] [3]
Total errors found: 12 in 80 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375588</commentid>
    <comment_count>20</comment_count>
      <attachid>327580</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-11-28 16:15:33 -0800</bug_when>
    <thetext>Comment on attachment 327580
the patch

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

r=me
My main comment is about your use of AllocationFailureMode inside allocatorFor and allocatorForNonVirtual. It feels like a weird use since it can return nullptr.

&gt; Source/JavaScriptCore/heap/CompleteSubspace.cpp:83
&gt; +    // enough: it will have 

unfinished thought here (I know this is a copied comment, but we might as well clean it up now)

&gt; Source/JavaScriptCore/heap/CompleteSubspace.cpp:126
&gt; +    if (MarkedAllocator* allocator = allocatorFor(size, AllocationFailureMode::Assert))
&gt; +        return allocator-&gt;allocate(deferralContext, AllocationFailureMode::ReturnNull);

Ditto about weird use for AllocationFailureMode

&gt; Source/JavaScriptCore/heap/CompleteSubspace.h:61
&gt; +ALWAYS_INLINE MarkedAllocator* CompleteSubspace::allocatorForNonVirtual(size_t size, AllocationFailureMode failureMode)

ditto about weird use of AllocationFailureMode

&gt; Source/JavaScriptCore/heap/HeapCellType.cpp:47
&gt; +        MethodTable::DestroyFunctionPtr destroy = classInfo-&gt;methodTable.destroy;

style nit: I&apos;d just write `auto` for the type here

&gt; Source/JavaScriptCore/heap/Subspace.h:58
&gt; +    virtual MarkedAllocator* allocatorFor(size_t, AllocationFailureMode) = 0;

This feels like a really weird use of AllocationFailureMode. We never really assert if it&apos;s null in the subclasses of Subspace. This is allowed to return nullptr even if AllocationFailurueMode == Assert.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1575
&gt; +        MarkedAllocator* allocator = subspaceFor&lt;ClassType&gt;(vm)-&gt;allocatorForNonVirtual(size, AllocationFailureMode::Assert);

See comments about AllocationFailureMode used for this function and the virtual variant. I think we need some other type because this can return nullptr even though it&apos;s called with Assert

&gt; Source/JavaScriptCore/runtime/ExecutableBase.h:87
&gt; +    static void subspaceFor(VM&amp;) { }

Maybe also RELEASE_ASSERT_NOT_REACHED? (I get what you&apos;re doing w/ return type, but might as well catch anyone calling this w/out caring for return type)

Alternatively, does =delete work on arbitrary member functions? If so, you could just do that too I believe and the compiler will catch it in all scenarios.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375617</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-28 17:25:53 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #20)
&gt; Comment on attachment 327580 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=327580&amp;action=review
&gt; 
&gt; r=me
&gt; My main comment is about your use of AllocationFailureMode inside
&gt; allocatorFor and allocatorForNonVirtual. It feels like a weird use since it
&gt; can return nullptr.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CompleteSubspace.cpp:83
&gt; &gt; +    // enough: it will have 
&gt; 
&gt; unfinished thought here (I know this is a copied comment, but we might as
&gt; well clean it up now)
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CompleteSubspace.cpp:126
&gt; &gt; +    if (MarkedAllocator* allocator = allocatorFor(size, AllocationFailureMode::Assert))
&gt; &gt; +        return allocator-&gt;allocate(deferralContext, AllocationFailureMode::ReturnNull);
&gt; 
&gt; Ditto about weird use for AllocationFailureMode
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CompleteSubspace.h:61
&gt; &gt; +ALWAYS_INLINE MarkedAllocator* CompleteSubspace::allocatorForNonVirtual(size_t size, AllocationFailureMode failureMode)
&gt; 
&gt; ditto about weird use of AllocationFailureMode
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/HeapCellType.cpp:47
&gt; &gt; +        MethodTable::DestroyFunctionPtr destroy = classInfo-&gt;methodTable.destroy;
&gt; 
&gt; style nit: I&apos;d just write `auto` for the type here
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Subspace.h:58
&gt; &gt; +    virtual MarkedAllocator* allocatorFor(size_t, AllocationFailureMode) = 0;
&gt; 
&gt; This feels like a really weird use of AllocationFailureMode. We never really
&gt; assert if it&apos;s null in the subclasses of Subspace. This is allowed to return
&gt; nullptr even if AllocationFailurueMode == Assert.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1575
&gt; &gt; +        MarkedAllocator* allocator = subspaceFor&lt;ClassType&gt;(vm)-&gt;allocatorForNonVirtual(size, AllocationFailureMode::Assert);
&gt; 
&gt; See comments about AllocationFailureMode used for this function and the
&gt; virtual variant. I think we need some other type because this can return
&gt; nullptr even though it&apos;s called with Assert

Right, for large allocations maybe. I’ll look into giving that a different enum. 

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ExecutableBase.h:87
&gt; &gt; +    static void subspaceFor(VM&amp;) { }
&gt; 
&gt; Maybe also RELEASE_ASSERT_NOT_REACHED? (I get what you&apos;re doing w/ return
&gt; type, but might as well catch anyone calling this w/out caring for return
&gt; type)
&gt; 
&gt; Alternatively, does =delete work on arbitrary member functions? If so, you
&gt; could just do that too I believe and the compiler will catch it in all
&gt; scenarios.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376194</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-29 20:35:49 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #21)
&gt; (In reply to Saam Barati from comment #20)
&gt; &gt; Comment on attachment 327580 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1575
&gt; &gt; &gt; +        MarkedAllocator* allocator = subspaceFor&lt;ClassType&gt;(vm)-&gt;allocatorForNonVirtual(size, AllocationFailureMode::Assert);
&gt; &gt; 
&gt; &gt; See comments about AllocationFailureMode used for this function and the
&gt; &gt; virtual variant. I think we need some other type because this can return
&gt; &gt; nullptr even though it&apos;s called with Assert
&gt; 
&gt; Right, for large allocations maybe. I’ll look into giving that a different
&gt; enum. 

Yeah, that was all messed up. I introduced:

enum class AllocatorForMode {
    MustAlreadyHaveAllocator,
    EnsureAllocator,
    AllocatorIfExists
};

Now it makes more sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376195</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-29 20:40:16 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/225314/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376196</commentid>
    <comment_count>24</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-29 20:41:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/35765225&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376254</commentid>
    <comment_count>25</comment_count>
      <attachid>327580</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-11-30 02:31:48 -0800</bug_when>
    <thetext>Comment on attachment 327580
the patch

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

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5709
&gt; +        MarkedAllocator* allocator = subspaceFor&lt;JSRopeString&gt;(vm())-&gt;allocatorForNonVirtual(sizeof(JSRopeString), AllocationFailureMode::Assert);

This crashes in Linux ports. But I don&apos;t think this is limited in Linux environment.
The reason is simple: an allocator for sizeof(JSRopeString)&apos;s size class is not initialized because JSRopeString is not allocated well in initialization phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378092</commentid>
    <comment_count>26</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-12-04 21:57:58 -0800</bug_when>
    <thetext>This change added a lot of leaks on the bots (from ~400 Kb to over 100 Mb).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378096</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-04 22:22:25 -0800</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #26)
&gt; This change added a lot of leaks on the bots (from ~400 Kb to over 100 Mb).

Bug?  Happy to take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378175</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-05 08:55:54 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #27)
&gt; (In reply to Alexey Proskuryakov from comment #26)
&gt; &gt; This change added a lot of leaks on the bots (from ~400 Kb to over 100 Mb).
&gt; 
&gt; Bug?  Happy to take a look.

Found it.  https://bugs.webkit.org/show_bug.cgi?id=180425</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454651</commentid>
    <comment_count>29</comment_count>
      <attachid>327580</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-08-28 18:00:05 -0700</bug_when>
    <thetext>Comment on attachment 327580
the patch

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

&gt; Source/JavaScriptCore/heap/CompleteSubspace.cpp:81
&gt; +    // prevent simultaneously MarkedAllocator creations from multiple threads. This code ensures

Typo: simultaneously =&gt; simultaneous.

&gt;&gt;&gt; Source/JavaScriptCore/heap/CompleteSubspace.cpp:83
&gt;&gt;&gt; +    // enough: it will have 
&gt;&gt; 
&gt;&gt; unfinished thought here (I know this is a copied comment, but we might as well clean it up now)
&gt; 
&gt; Right, for large allocations maybe. I’ll look into giving that a different enum.

You never cleaned this up! :(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326045</attachid>
            <date>2017-11-04 14:42:12 -0700</date>
            <delta_ts>2017-11-04 16:33:33 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23350</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYgKzU0MCw4IEBACiAJCTBGREIyQ0NBMTczREE1
MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZh
bHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEQjJDRTgxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFNjE3NDgzMEEy
MDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZEQjJDRUExNzQ4OTZDNzAwN0Iz
QzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNM
b2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMUIxRkFFNjFG
NDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTFFMUZBRTZCNjYwMDZGMzkwMSAv
KiBTdWJzcGFjZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRENFMTFEMUZBRTZCNjQwMDZGMzkwMSAvKiBTdWJzcGFjZUJhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkREQkZCNjE2NjZF
RURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAwQzU1RkVG
IC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJMEZERTg3RkMxREZFNkU1
MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREU4N0ZCMURGRTZFNTAwMDY0QzM5MCAv
KiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcw
MDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQuaCAqLzsgfTsKQEAg
LTI2NjYsNiArMjY2OCw4IEBACiAJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3Jr
bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXb3JrbGlz
dC5jcHA7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3QuaDsgcGF0aCA9IGRmZy9ERkdX
b3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNFOTE3NDg5NkM3
MDA3QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb25jdXJyZW50SlNMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRENFMTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRENFMTFEMUZBRTZCNjQwMDZGMzkwMSAvKiBTdWJzcGFjZUJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3Vic3BhY2VCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRFODdGODFE
RkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU0ODcsNiArNTQ5MSw3IEBACiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5QjZD
IC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0MTYw
MEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEExREI5
NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLAorCQkJCTBGRENFMTFCMUZBRTYx
RjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLywKIAkJCQkwRjk2MzAzNTFE
NDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJMEY5NjMw
MzYxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRkRF
ODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8sCkBAIC01NjE1LDYg
KzU2MjAsNyBAQAogCQkJCTE0NTcyMjg1MTQzN0UxNDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVz
LmggKi8sCiAJCQkJMEY3REYxMzExRTI5NzBENTAwOTU5NTFCIC8qIFN1YnNwYWNlLmNwcCAqLywK
IAkJCQkwRjdERjEzMjFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vic3BhY2UuaCAqLywKKwkJCQkwRkRD
RTExRDFGQUU2QjY0MDA2RjM5MDEgLyogU3Vic3BhY2VCYXNlLmggKi8sCiAJCQkJMEY3REYxMzMx
RTI5NzBENTAwOTU5NTFCIC8qIFN1YnNwYWNlSW5saW5lcy5oICovLAogCQkJCTBGRDBFNUVEMUU0
NjhBNTQwMDA2QUIwOCAvKiBTd2VlcGluZ1Njb3BlLmggKi8sCiAJCQkJMEZENzlBMkIxRUJCQkRC
MjAwREE4OEQzIC8qIFN5bmNocm9ub3VzbmVzcy5jcHAgKi8sCkBAIC04NzE5LDYgKzg3MjUsNyBA
QAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMEQxQzAzMEQ1QzAwMzhCQkNBIC8q
IEpJVERpdkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQ0UxMUUxRkFFNkI2NjAw
NkYzOTAxIC8qIFN1YnNwYWNlQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwODIxNEJB
NTcyRDAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjE0
RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtODgzMCw2ICs4ODM3LDcgQEAKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBC
QkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDk3MjI3
NTJEQzU0NDU5QjkxMjVCNTM5IC8qIEpTTW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRENFMTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMz
QSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMUQxQjkwMTND
MzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDI0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmgiCiAKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKwogbmFtZXNwYWNlIEpTQyB7
IAogCiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKQEAg
LTM2LDYgKzM4LDQxIEBAIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6On5BbGlnbmVkTWVtb3J5QWwK
IHsKIH0KIAordm9pZCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpyZWdpc3RlckFsbG9jYXRvcihN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2Nh
dG9yLT5uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgIAorICAg
IGlmICghbV9maXJzdEFsbG9jYXRvcikgeworICAgICAgICBmb3IgKFN1YnNwYWNlQmFzZSogc3Vi
c3BhY2UgPSBtX2ZpcnN0U3Vic3BhY2U7IHN1YnNwYWNlOyBzdWJzcGFjZSA9IHN1YnNwYWNlLT5u
ZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkKKyAgICAgICAgICAgIHN1YnNw
YWNlLT5kaWRDcmVhdGVGaXJzdEFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgICAgICAKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFzdEFsbG9jYXRvcik7CisgICAgICAgIG1fZmlyc3RBbGxv
Y2F0b3IgPSBhbGxvY2F0b3I7CisgICAgICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbGFzdEFsbG9jYXRvci0+c2V0TmV4dEFs
bG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIG1fbGFzdEFs
bG9jYXRvciA9IGFsbG9jYXRvcjsKK30KKworLy8gRklYTUU6IFdlIHVzZSB0aGlzIGlkaW9tIGEg
bG90LiBXZSBzaG91bGQgY29tZSB1cCB3aXRoIGEgY2xldmVyIHRlbXBsYXRlIGZvciB0aGlzIGtp
bmQgb2YKKy8vIHNpbmdseS1saW5rZWQgbGlzdCwgd2hlcmUgZWFjaCBlbGVtZW50IG1heSBiZSBv
biBtdWx0aXBsZSBsaXN0cy4KK3ZvaWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJT
dWJzcGFjZShTdWJzcGFjZUJhc2UqIHN1YnNwYWNlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFz
dWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgIAor
ICAgIGlmICghbV9maXJzdFN1YnNwYWNlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xh
c3RTdWJzcGFjZSk7CisgICAgICAgIG1fZmlyc3RTdWJzcGFjZSA9IHN1YnNwYWNlOworICAgICAg
ICBtX2xhc3RTdWJzcGFjZSA9IHN1YnNwYWNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9sYXN0U3Vic3BhY2UtPnNldE5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeVN1YnNwYWNl
KHN1YnNwYWNlKTsKKyAgICBtX2xhc3RTdWJzcGFjZSA9IHN1YnNwYWNlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIE1hcmtlZEFs
bG9jYXRvcjsKKwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CkBAIC00MCw2ICs0MiwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZy
ZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHJlZ2lzdGVyQWxsb2NhdG9yKE1h
cmtlZEFsbG9jYXRvciopOworICAgIE1hcmtlZEFsbG9jYXRvciogZmlyc3RBbGxvY2F0b3IoKSBj
b25zdCB7IHJldHVybiBtX2ZpcnN0QWxsb2NhdG9yOyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyU3Vi
c3BhY2UoU3Vic3BhY2VCYXNlKik7CisKK3ByaXZhdGU6CisgICAgTWFya2VkQWxsb2NhdG9yKiBt
X2ZpcnN0QWxsb2NhdG9yOworICAgIE1hcmtlZEFsbG9jYXRvciogbV9sYXN0QWxsb2NhdG9yOwor
ICAgIFN1YnNwYWNlQmFzZSogbV9maXJzdFN1YnNwYWNlOworICAgIFN1YnNwYWNlQmFzZSogbV9s
YXN0U3Vic3BhY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0Mg
eworCitlbnVtIGNsYXNzIEFsbG9jYXRpb25GYWlsdXJlTW9kZSB7CisgICAgQXNzZXJ0LAorICAg
IFJldHVybk51bGwKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI0NDU4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNiw5ICsxMzYsMTEgQEAgcHVibGljOgogICAgIAogICAgIE1hcmtlZEFsbG9j
YXRvciogbmV4dEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvcjsgfQog
ICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlOyB9CisgICAgTWFya2VkQWxsb2NhdG9yKiBu
ZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7IH0KICAgICAKICAgICB2b2lk
IHNldE5leHRBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxs
b2NhdG9yID0gYWxsb2NhdG9yOyB9CiAgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5TdWJzcGFj
ZShNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNl
ID0gYWxsb2NhdG9yOyB9CisgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvcklu
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGFsbG9jYXRvcjsgfQogICAgIAogICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpOwogICAgIApAQCAtMTk2LDYgKzE5
OCw3IEBAIHByaXZhdGU6CiAgICAgU3Vic3BhY2UqIG1fc3Vic3BhY2U7CiAgICAgTWFya2VkQWxs
b2NhdG9yKiBtX25leHRBbGxvY2F0b3IgeyBudWxscHRyIH07CiAgICAgTWFya2VkQWxsb2NhdG9y
KiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlIHsgbnVsbHB0ciB9OworICAgIE1hcmtlZEFsbG9j
YXRvciogbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9
OwogfTsKIAogaW5saW5lIHB0cmRpZmZfdCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxp
c3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAko
cmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3Bh
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsOCArNTYyLDYgQEAgTWFya2VkQWxsb2NhdG9y
KiBNYXJrZWRTcGFjZTo6YWRkTWFya2VkQQogICAgIGlmICghbV9maXJzdEFsbG9jYXRvcikgewog
ICAgICAgICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwogICAgICAgICBtX2xhc3RBbGxv
Y2F0b3IgPSBhbGxvY2F0b3I7Ci0gICAgICAgIGZvciAoU3Vic3BhY2UqIHN1YnNwYWNlIDogbV9z
dWJzcGFjZXMpCi0gICAgICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRlRmlyc3RBbGxvY2F0b3Io
YWxsb2NhdG9yKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2xhc3RBbGxvY2F0b3ItPnNldE5l
eHRBbGxvY2F0b3IoYWxsb2NhdG9yKTsKICAgICAgICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2Nh
dG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZp
c2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsOSArMTczLDYgQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgV2Vha1NldDsKICAgICBmcmllbmQgY2xhc3MgU3Vic3BhY2U7CiAgICAgCi0gICAgdm9p
ZCogYWxsb2NhdGVTbG93KFN1YnNwYWNlJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwot
ICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhTdWJzcGFjZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
c2l6ZV90KTsKLQogICAgIC8vIFVzZSB0aGlzIHZlcnNpb24gd2hlbiBjYWxsaW5nIGZyb20gd2l0
aGluIHRoZSBHQyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlIGFsbG9jYXRvcnMKICAgICAvLyBoYXZl
IGFscmVhZHkgYmVlbiBzdG9wcGVkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTks
NyBAQCBTdWJzcGFjZTo6U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoCiAgICAgLCBtX25h
bWUobmFtZSkKICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQogICAgICwgbV9hbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpCi0gICAgLCBtX2FsbG9jYXRv
ckZvckVtcHR5QWxsb2NhdGlvbihtX3NwYWNlLmZpcnN0QWxsb2NhdG9yKCkpCisgICAgLCBtX2Fs
bG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbihtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPmZpcnN0
QWxsb2NhdG9yKCkpCiB7CiAgICAgLy8gSXQncyByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHdlJ3Jl
IEdDaW5nIHJpZ2h0IG5vdyBldmVuIGlmIHRoZSBjbGllbnQgaXMgY2FyZWZ1bCB0byBvbmx5CiAg
ICAgLy8gY3JlYXRlIHN1YnNwYWNlcyByaWdodCBhZnRlciBWTSBjcmVhdGlvbiwgc2luY2UgY29s
bGVjdENvbnRpbnVvdXNseSAoYW5kIHByb2JhYmx5IG90aGVyCkBAIC04OSw1MCArODksMTMgQEAg
dm9pZCBTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogYwogICAgIERlc3Ryb3lGdW5j
KCkodm0sIGNlbGwpOwogfQogCi0vLyBUaGUgcmVhc29uIHdoeSB3ZSBkaXN0aW5ndWlzaCBiZXR3
ZWVuIGFsbG9jYXRlIGFuZCB0cnlBbGxvY2F0ZSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9m
Ci0vLyBjaGVja3Mgb24gdGhlIGFsbG9jYXRpb24gcGF0aCBpbiBib3RoIGNhc2VzLiBMaWtld2lz
ZSwgdGhlIHJlYXNvbiB3aHkgd2UgaGF2ZSBvdmVybG9hZHMgd2l0aCBhbmQKLS8vIHdpdGhvdXQg
ZGVmZXJyYWxDb250ZXh0IGlzIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgY29kZSBmb3IgY2Fs
bGluZyBhbGxvY2F0ZSB3aGVuIHlvdSBkb24ndAotLy8gbmVlZCB0aGUgZGVmZXJyYWxDb250ZXh0
Lgotdm9pZCogU3Vic3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJl
c3VsdDsKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JG
b3Ioc2l6ZSkpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoKTsKLSAgICBl
bHNlCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlU2xvdyhudWxscHRyLCBzaXplKTsKLSAgICBk
aWRBbGxvY2F0ZShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNw
YWNlOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qg
c2l6ZSkKK3ZvaWQqIFN1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KQogewogICAgIHZvaWQgKnJlc3VsdDsKICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCiAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+
YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGFs
bG9jYXRlU2xvdyhkZWZlcnJhbENvbnRleHQsIHNpemUpOwotICAgIGRpZEFsbG9jYXRlKHJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9jYXRl
KHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJlc3VsdCA9
IGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IHRy
eUFsbG9jYXRlU2xvdyhudWxscHRyLCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZShHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lk
KiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2Nh
dG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPnRyeUFsbG9jYXRlKGRl
ZmVycmFsQ29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVNs
b3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93
KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIGRpZEFsbG9jYXRlKHJl
c3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0NCwxNiArMTA3LDEyIEBAIHZvaWQg
U3Vic3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKICAgICAgICAgICAgIGFsbG9jYXRvci5w
cmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgICAgICB9KTsKIAotICAgIG1fYWxsb2NhdG9yRm9y
RW1wdHlBbGxvY2F0aW9uID0gbV9zcGFjZS5maXJzdEFsbG9jYXRvcigpOworICAgIG1fYWxsb2Nh
dG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5maXJzdEFs
bG9jYXRvcigpOwogfQogCiBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5
QmxvY2tUb1N0ZWFsKCkKIHsKLSAgICBmb3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRp
b247IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFs
bG9jYXRpb24tPm5leHRBbGxvY2F0b3IoKSkgewotICAgICAgICBTdWJzcGFjZSogb3RoZXJTdWJz
cGFjZSA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5zdWJzcGFjZSgpOwotICAgICAg
ICBpZiAob3RoZXJTdWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpICE9IGFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKyAgICBm
b3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb247IG1fYWxsb2NhdG9yRm9yRW1wdHlB
bGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPm5leHRBbGxvY2F0b3JJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkgewogICAgICAgICBpZiAoTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2sgPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+ZmluZEVtcHR5Qmxv
Y2tUb1N0ZWFsKCkpCiAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CiAgICAgfQpAQCAtMTkzLDE5
ICsxNTIsMjEgQEAgTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFjZTo6YWxsb2NhdG9yRm9yUwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvcklu
U3Vic3BhY2UobV9maXJzdEFsbG9jYXRvcik7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LT5yZWdpc3RlckFsbG9jYXRvcihhbGxvY2F0b3IpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CiAgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKICAgICByZXR1cm4gYWxsb2Nh
dG9yOwogfQogCi12b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQordm9pZCogU3Vic3BhY2U6OmFsbG9jYXRl
U2xvdyhzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIHZvaWQqIHJlc3VsdCA9IHRy
eUFsbG9jYXRlU2xvdyhkZWZlcnJhbENvbnRleHQsIHNpemUpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CisgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6
QXNzZXJ0KQorICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCit2b2lkKiBTdWJzcGFjZTo6dHJ5QWxs
b2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
KQogewogICAgIHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7CiAgICAg
CkBAIC0yMzUsMTMgKzE5Niw1IEBAIHZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coR0NE
ZWZlcnIKICAgICByZXR1cm4gYWxsb2NhdGlvbi0+Y2VsbCgpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgU3Vic3BhY2U6OmRpZEFsbG9jYXRlKHZvaWQqIHB0cikKLXsKLSAgICBVTlVTRURfUEFS
QU0ocHRyKTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIHVzZWZ1bCBmb3IgbG9nZ2luZyBhbGxvY2F0
aW9ucywgb3IgZG9pbmcgb3RoZXIga2luZHMgb2YgZGVidWdnaW5nIGhhY2tzLiBKdXN0IG1ha2UK
LSAgICAvLyBzdXJlIHlvdSBKU0NfZm9yY2VHQ1Nsb3dQYXRocz10cnVlLgotfQotCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShy
ZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIK
ICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
QEAgLTY1LDExICs2Niw3IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IqIHRyeUFsbG9j
YXRvckZvcihzaXplX3QpOwogICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVf
dCk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCos
IHNpemVfdCk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGUo
c2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShHQ0RlZmVy
cmFsQ29udGV4dCosIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2Nh
dGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAg
ICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApAQCAtMTAwLDEyICs5
NywxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFya2VkQWxsb2NhdG9yKiogYWxsb2NhdG9yRm9y
U2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQogCisgICAg
U3Vic3BhY2UqIG5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9CisgICAgdm9p
ZCBzZXROZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoU3Vic3BhY2UqIHN1YnNw
YWNlKSB7IG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yID0gc3Vic3BhY2U7
IH0KKwogcHJpdmF0ZToKICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvclNsb3coc2l6
ZV90KTsKICAgICAKICAgICAvLyBUaGVzZSBzbG93IHBhdGhzIGFyZSBjb25jZXJuZWQgd2l0aCBs
YXJnZSBhbGxvY2F0aW9ucyBhbmQgYWxsb2NhdG9yIGNyZWF0aW9uLgotICAgIHZvaWQqIGFsbG9j
YXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2Nh
dGVTbG93KEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZVNs
b3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqKTsKICAg
ICAKICAgICB2b2lkIGRpZEFsbG9jYXRlKHZvaWQqKTsKICAgICAKQEAgLTEyMCw2ICsxMjAsNyBA
QCBwcml2YXRlOgogICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRvciB7IG51bGxw
dHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9u
IHsgbnVsbHB0ciB9OyAvLyBVc2VzIHRoZSBNYXJrZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9j
a3MuCiAgICAgU2VudGluZWxMaW5rZWRMaXN0PExhcmdlQWxsb2NhdGlvbiwgQmFzaWNSYXdTZW50
aW5lbE5vZGU8TGFyZ2VBbGxvY2F0aW9uPj4gbV9sYXJnZUFsbG9jYXRpb25zOworICAgIFN1YnNw
YWNlKiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsK
IH07CiAKIEFMV0FZU19JTkxJTkUgTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFjZTo6dHJ5QWxsb2Nh
dG9yRm9yKHNpemVfdCBzaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2VCYXNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgi
CisjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworCisv
LyBUaGUgaWRlYSBvZiBzdWJzcGFjZXMgaXMgdGhhdCB5b3UgY2FuIHByb3ZpZGUgc29tZSBjdXN0
b20gYmVoYXZpb3IgZm9yIHlvdXIgb2JqZWN0cyBpZiB5b3UKKy8vIGFsbG9jYXRlIHRoZW0gZnJv
bSBhIGN1c3RvbSBTdWJzcGFjZSBpbiB3aGljaCB5b3Ugb3ZlcnJpZGUgc29tZSBvZiB0aGUgdmly
dHVhbCBtZXRob2RzLiBUaGlzCisvLyBjbGFzcyBpcyB0aGUgYmFzZWNsYXNzIG9mIFN1YnNwYWNl
cy4gVXN1YWxseSB5b3Ugd2lsbCB1c2UgZWl0aGVyIFN1YnNwYWNlIG9yIEZpeGVkU2l6ZVN1YnNw
YWNlLgorY2xhc3MgU3Vic3BhY2VCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdWJz
cGFjZUJhc2UpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEpT
X0VYUE9SVF9QUklWQVRFIFN1YnNwYWNlQmFzZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGxvY2F0
b3JBdHRyaWJ1dGVzLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB+U3Vic3BhY2VCYXNlKCk7CisgICAgCisgICAgY29uc3QgY2hhciogbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kYXRhKCk7IH0KKyAgICBNYXJrZWRTcGFjZSYgc3Bh
Y2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlOyB9CisgICAgCisgICAgY29uc3QgQWxsb2NhdG9y
QXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQor
ICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KKyAgICAKKyAgICAvLyBUaGUg
cHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lhbGl6ZSB0aGUgc3dlZXAgZm9y
IHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKKyAgICAvLyBiZSBjYWxsZWQgZm9yIG5vLWRl
c3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJrZWRCbG9jazo6ZmluaXNoU3dlZXBL
bm93aW5nU3Vic3BhY2UuCisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmLCBGcmVlTGlzdCopOworICAgIAorICAgIC8vIFRoZXNlIGdldCBjYWxsZWQgZm9y
IGxhcmdlIG9iamVjdHMuCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsK
KyAgICAKKyAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgCisgICAgdm9pZCBk
aWRDcmVhdGVGaXJzdEFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX2Fs
bG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IGFsbG9jYXRvcjsgfQorICAgIAorICAgIC8vIEZp
bmRzIGFuIGVtcHR5IGJsb2NrIGZyb20gYW55IFN1YnNwYWNlIHRoYXQgYWdyZWVzIHRvIHRyYWRl
IGJsb2NrcyB3aXRoIHVzLgorICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRFbXB0eUJsb2Nr
VG9TdGVhbCgpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBm
b3JFYWNoQWxsb2NhdG9yKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE1hcmtlZEJsb2NrKGNvbnN0IEZ1bmMmKTsKKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE5vdEVtcHR5TWFy
a2VkQmxvY2soY29uc3QgRnVuYyYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CisgICAgdm9pZCBmb3JFYWNoTGFyZ2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaE1hcmtlZENlbGwoY29u
c3QgRnVuYyYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVh
Y2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CisgICAgCitwcml2YXRlOgorICAgIE1hcmtlZFNwYWNl
JiBtX3NwYWNlOworICAgIAorICAgIENTdHJpbmcgbV9uYW1lOworICAgIEFsbG9jYXRvckF0dHJp
YnV0ZXMgbV9hdHRyaWJ1dGVzOworICAgIAorICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIG1f
YWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKKyAgICAKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fZmly
c3RBbGxvY2F0b3IgeyBudWxscHRyIH07CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRv
ckZvckVtcHR5QWxsb2NhdGlvbiB7IG51bGxwdHIgfTsgLy8gVXNlcyB0aGUgTWFya2VkU3BhY2Ug
bGlua2VkIGxpc3Qgb2YgYmxvY2tzLgorICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMYXJnZUFsbG9j
YXRpb24sIEJhc2ljUmF3U2VudGluZWxOb2RlPExhcmdlQWxsb2NhdGlvbj4+IG1fbGFyZ2VBbGxv
Y2F0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326052</attachid>
            <date>2017-11-04 16:33:33 -0700</date>
            <delta_ts>2017-11-05 13:07:32 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38541</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYgKzU0MCwxMSBAQAogCQkwRkRCMkNDQTE3M0RB
NTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExW
YWx1ZUZyb21CbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTYxNzQ4MzBB
MjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi87IH07CiAJCTBGREIyQ0VBMTc0ODk2QzcwMDdC
M0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFOTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpT
TG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRENFMTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTFCMUZBRTYx
RjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTExRTFGQUU2QjY2MDA2RjM5MDEg
LyogU3Vic3BhY2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRDRTExRDFGQUU2QjY0MDA2RjM5MDEgLyogU3Vic3BhY2VCYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMjExRkFF
ODU4OTAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEyMDFGQUU4NTg3MDA2RjM5MDEgLyogSGVhcENl
bGxUeXBlLmNwcCAqLzsgfTsKKwkJMEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAxIC8qIEhlYXBDZWxs
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
Q0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTI0MUZBRTg1QUMwMDZGMzkw
MSAvKiBTdWJzcGFjZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEQ0UxMjMxRkFFODVBNzAwNkYzOTAxIC8qIFN1YnNwYWNlQmFzZS5jcHAg
Ki87IH07CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICov
OyB9OwogCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVk
dWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
RTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLzsg
fTsKIAkJMEZERjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIzS2luZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1
IC8qIEIzS2luZC5oICovOyB9OwpAQCAtMjY2Niw2ICsyNjcxLDExIEBACiAJCTBGREIyQ0U1MTc0
ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdXb3JrbGlzdC5jcHA7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIg
LyogREZHV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29y
a2xpc3QuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkRCMkNFOTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50SlNMb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTFEMUZBRTZCNjQwMDZGMzkw
MSAvKiBTdWJzcGFjZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Vic3BhY2VCYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTFGMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFw
Q2VsbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRENFMTIwMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjMxRkFFODVBNzAwNkYzOTAxIC8qIFN1YnNwYWNlQmFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdWJzcGFjZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFEdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMxNjY2RUVE
NTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2VsbENvbnRhaW5lci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDg3LDYgKzU0OTcsNyBAQAogCQkJCTBGRUMzQzUwMUYz
M0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRkVD
M0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJ
CTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKKwkJCQkw
RkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi8sCiAJ
CQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3BwICov
LAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmgg
Ki8sCiAJCQkJMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwICov
LApAQCAtNTU1MSw2ICs1NTYyLDggQEAKIAkJCQlEQzNEMkIwQjFEMzQzNzZFMDBCQTkxOEMgLyog
SGVhcENlbGwuY3BwICovLAogCQkJCURDM0QyQjA5MUQzNDMxNjEwMEJBOTE4QyAvKiBIZWFwQ2Vs
bC5oICovLAogCQkJCTBGMDcwQTQ0MUQ1NDNBODkwMDZFNzIzMiAvKiBIZWFwQ2VsbElubGluZXMu
aCAqLywKKwkJCQkwRkRDRTEyMDFGQUU4NTg3MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmNwcCAq
LywKKwkJCQkwRkRDRTExRjFGQUU4NTg3MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggKi8sCiAJ
CQkJMEYwQ0FFRkQxRUM0REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5jcHAg
Ki8sCiAJCQkJMEYwQ0FFRkUxRUM0REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFj
ay5oICovLAogCQkJCTBGMzJCRDBFMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5j
cHAgKi8sCkBAIC01NjE1LDYgKzU2MjgsOCBAQAogCQkJCTE0NTcyMjg1MTQzN0UxNDAwMDVGREUy
NiAvKiBTdHJvbmdJbmxpbmVzLmggKi8sCiAJCQkJMEY3REYxMzExRTI5NzBENTAwOTU5NTFCIC8q
IFN1YnNwYWNlLmNwcCAqLywKIAkJCQkwRjdERjEzMjFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vic3Bh
Y2UuaCAqLywKKwkJCQkwRkRDRTEyMzFGQUU4NUE3MDA2RjM5MDEgLyogU3Vic3BhY2VCYXNlLmNw
cCAqLywKKwkJCQkwRkRDRTExRDFGQUU2QjY0MDA2RjM5MDEgLyogU3Vic3BhY2VCYXNlLmggKi8s
CiAJCQkJMEY3REYxMzMxRTI5NzBENTAwOTU5NTFCIC8qIFN1YnNwYWNlSW5saW5lcy5oICovLAog
CQkJCTBGRDBFNUVEMUU0NjhBNTQwMDA2QUIwOCAvKiBTd2VlcGluZ1Njb3BlLmggKi8sCiAJCQkJ
MEZENzlBMkIxRUJCQkRCMjAwREE4OEQzIC8qIFN5bmNocm9ub3VzbmVzcy5jcHAgKi8sCkBAIC04
NzE5LDYgKzg3MzQsNyBAQAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21w
aWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxODdBMEQxQzAz
MEQ1QzAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZE
Q0UxMUUxRkFFNkI2NjAwNkYzOTAxIC8qIFN1YnNwYWNlQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwODIxNEJBNTcyRDAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjE0RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJ
VElubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODgzMCw2ICs4ODQ2LDcgQEAKIAkJCQlFM0Qy
MzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRDk3MjI3NTJEQzU0NDU5QjkxMjVCNTM5IC8qIEpTTW9kdWxlTG9hZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENFMTFDMUZBRTYyMDkwMDZGMzkw
MSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3
MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTMzRThEMUQxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDI0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhl
YWRlcnMgKi8sCkBAIC05MjI2LDYgKzkyNDMsNyBAQAogCQkJCTBGRkI2QzM5MUFGNDhEREMwMERC
MUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkM5NTJCNzE5QTI4OTg1
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERFQzE5
ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkRDRTEyMjFGQUU4NThDMDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyogVHlwZVNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtOTk4Myw2ICsxMDAwMSw3IEBACiAJCQkJNTM2QjMxNUQxRjcxQzU5OTAwMzdG
QzMzIC8qIFVuaWZpZWRTb3VyY2U3Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE0RTFG
NzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTc4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUzNkIzMTRGMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlNzkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZEQ0UxMjExRkFFODU4OTAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE0MDFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNv
dXJjZTgwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNkIzMTM5MUY3MUM1OTkwMDM3RkMzMyAv
KiBVbmlmaWVkU291cmNlODEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxMkUxRjcxQzU5
OTAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2U4Mi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMDQ4
LDYgKzEwMDY3LDcgQEAKIAkJCQk1MzBBNjZDMTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNv
dXJjZTE0Mi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzBBNjZDMjFGQTNFNzhCMDAyNkE1NDUg
LyogVW5pZmllZFNvdXJjZTE0My5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzBBNjZDMzFGQTNF
NzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTE0NC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkRDRTEyNDFGQUU4NUFDMDA2RjM5MDEgLyogU3Vic3BhY2VCYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUzMEE2NkM0MUZBM0U3OEIwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMTQ1LmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5oIgogCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisKIG5h
bWVzcGFjZSBKU0MgeyAKIAogQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6QWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpCkBAIC0zNiw2ICszOCw0MSBAQCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+QWxp
Z25lZE1lbW9yeUFsCiB7CiB9CiAKK3ZvaWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0
ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoIWFsbG9jYXRvci0+bmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigp
KTsKKyAgICAKKyAgICBpZiAoIW1fZmlyc3RBbGxvY2F0b3IpIHsKKyAgICAgICAgZm9yIChTdWJz
cGFjZUJhc2UqIHN1YnNwYWNlID0gbV9maXJzdFN1YnNwYWNlOyBzdWJzcGFjZTsgc3Vic3BhY2Ug
PSBzdWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpCisgICAg
ICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRlRmlyc3RBbGxvY2F0b3IoYWxsb2NhdG9yKTsKKyAg
ICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xhc3RBbGxvY2F0b3IpOworICAgICAg
ICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOworICAgICAgICBtX2xhc3RBbGxvY2F0b3Ig
PSBhbGxvY2F0b3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2xhc3RBbGxvY2F0
b3ItPnNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsK
KyAgICBtX2xhc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7Cit9CisKKy8vIEZJWE1FOiBXZSB1c2Ug
dGhpcyBpZGlvbSBhIGxvdC4gV2Ugc2hvdWxkIGNvbWUgdXAgd2l0aCBhIGNsZXZlciB0ZW1wbGF0
ZSBmb3IgdGhpcyBraW5kIG9mCisvLyBzaW5nbHktbGlua2VkIGxpc3QsIHdoZXJlIGVhY2ggZWxl
bWVudCBtYXkgYmUgb24gbXVsdGlwbGUgbGlzdHMuCit2b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OnJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2VCYXNlKiBzdWJzcGFjZSkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVCghc3Vic3BhY2UtPm5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cigpKTsKKyAgICAKKyAgICBpZiAoIW1fZmlyc3RTdWJzcGFjZSkgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV9sYXN0U3Vic3BhY2UpOworICAgICAgICBtX2ZpcnN0U3Vic3BhY2UgPSBzdWJz
cGFjZTsKKyAgICAgICAgbV9sYXN0U3Vic3BhY2UgPSBzdWJzcGFjZTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fbGFzdFN1YnNwYWNlLT5zZXROZXh0U3Vic3BhY2VJbkFsaWduZWRN
ZW1vcnlTdWJzcGFjZShzdWJzcGFjZSk7CisgICAgbV9sYXN0U3Vic3BhY2UgPSBzdWJzcGFjZTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI0NDU4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBNYXJrZWRBbGxvY2F0b3I7CisKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Igewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNDAsNiArNDIsMTcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKikgPSAwOwogICAgIAogICAgIHZpcnR1
YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCisgICAgdm9pZCByZWdpc3Rl
ckFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGZpcnN0
QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdEFsbG9jYXRvcjsgfQorCisgICAgdm9p
ZCByZWdpc3RlclN1YnNwYWNlKFN1YnNwYWNlQmFzZSopOworCitwcml2YXRlOgorICAgIE1hcmtl
ZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRvcjsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFz
dEFsbG9jYXRvcjsKKyAgICBTdWJzcGFjZUJhc2UqIG1fZmlyc3RTdWJzcGFjZTsKKyAgICBTdWJz
cGFjZUJhc2UqIG1fbGFzdFN1YnNwYWNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uRmFpbHVyZU1vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uRmFpbHVyZU1v
ZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0
aW9uRmFpbHVyZU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCitu
YW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgeworICAg
IEFzc2VydCwKKyAgICBSZXR1cm5OdWxsCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVhcENl
bGxUeXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxv
Y2tJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCisvLyBXcml0
aW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdCB3aGVuIHlvdSBwYXNzIHRoaXMgYXMgYSBmdW5j
dG9yLCB0aGUgY2FsbGVlIGlzIHNwZWNpYWxpemVkIGZvcgorLy8gdGhpcyBjYWxsYmFjay4gSWYg
eW91IHdyb3RlIHRoaXMgYXMgYSBub3JtYWwgZnVuY3Rpb24gdGhlbiB0aGUgY2FsbGVlIHdvdWxk
IGJlIHNwZWNpYWxpemVkIGZvcgorLy8gdGhlIGZ1bmN0aW9uJ3MgdHlwZSBhbmQgaXQgd291bGQg
aGF2ZSBpbmRpcmVjdCBjYWxscyB0byB0aGF0IGZ1bmN0aW9uLiBBbmQgdW5saWtlIGEgbGFtYmRh
LCBpdCdzCisvLyBwb3NzaWJsZSB0byBtYXJrIHRoaXMgQUxXQVlTX0lOTElORS4KK3N0cnVjdCBE
ZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mIHZtLCBK
U0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoY2VsbC0+c3RydWN0dXJl
SUQoKSk7CisgICAgICAgIEFTU0VSVChjZWxsLT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVy
ZUlzSW1tb3J0YWwpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVj
dHVyZSh2bSk7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJl
LT5jbGFzc0luZm8oKTsKKyAgICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBk
ZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0cm95
KGNlbGwpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitIZWFwQ2Vs
bFR5cGU6OkhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAg
OiBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKK3sKK30KKworSGVhcENlbGxUeXBlOjp+SGVhcENl
bGxUeXBlKCkKK3sKK30KKwordm9pZCBIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJs
b2NrOjpIYW5kbGUmIGJsb2NrLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgYmxvY2suZmlu
aXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2
b2lkIEhlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBE
ZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcENlbGxUeXBlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShIZWFwQ2VsbFR5cGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1
dGVzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5IZWFwQ2VsbFR5cGUoKTsKKwor
ICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZXM7IH0KKworICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhp
cyBpcyB0byBzcGVjaWFsaXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3
b24ndAorICAgIC8vIGJlIGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVz
dCBjYWxsIE1hcmtlZEJsb2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KKyAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisK
KyAgICAvLyBUaGVzZSBnZXQgY2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgorICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOSArMTM2LDExIEBAIHB1YmxpYzoKICAgICAK
ICAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25l
eHRBbGxvY2F0b3I7IH0KICAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3JJblN1YnNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZTsgfQorICAgIE1h
cmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOyB9
CiAgICAgCiAgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yKSB7IG1fbmV4dEFsbG9jYXRvciA9IGFsbG9jYXRvcjsgfQogICAgIHZvaWQgc2V0TmV4dEFs
bG9jYXRvckluU3Vic3BhY2UoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxs
b2NhdG9ySW5TdWJzcGFjZSA9IGFsbG9jYXRvcjsgfQorICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRv
ckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBt
X25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KICAg
ICAKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKTsKICAg
ICAKQEAgLTE5Niw2ICsxOTgsNyBAQCBwcml2YXRlOgogICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNl
OwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAg
IE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSB7IG51bGxwdHIgfTsK
KyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciB7IG51bGxwdHIgfTsKIH07CiAKIGlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9y
OjpvZmZzZXRPZkZyZWVMaXN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYyLDggKzU2Miw2IEBA
IE1hcmtlZEFsbG9jYXRvciogTWFya2VkU3BhY2U6OmFkZE1hcmtlZEEKICAgICBpZiAoIW1fZmly
c3RBbGxvY2F0b3IpIHsKICAgICAgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKICAg
ICAgICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwotICAgICAgICBmb3IgKFN1YnNwYWNl
KiBzdWJzcGFjZSA6IG1fc3Vic3BhY2VzKQotICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0
ZUZpcnN0QWxsb2NhdG9yKGFsbG9jYXRvcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9sYXN0
QWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9yKGFsbG9jYXRvcik7CiAgICAgICAgIG1fbGFzdEFs
bG9jYXRvciA9IGFsbG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuaAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDkgKzE3Myw2IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYWtTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIFN1YnNwYWNl
OwogICAgIAotICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhTdWJzcGFjZSYsIEdDRGVmZXJyYWxDb250
ZXh0Kiwgc2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZVNsb3coU3Vic3BhY2UmLCBHQ0Rl
ZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0KICAgICAvLyBVc2UgdGhpcyB2ZXJzaW9uIHdoZW4g
Y2FsbGluZyBmcm9tIHdpdGhpbiB0aGUgR0Mgd2hlcmUgd2Uga25vdyB0aGF0IHRoZSBhbGxvY2F0
b3JzCiAgICAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gc3RvcHBlZC4KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jdG9yJik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ0NTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgU3Vic3BhY2U6OlN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVh
cCYgaAogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykK
ICAgICAsIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQot
ICAgICwgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24obV9zcGFjZS5maXJzdEFsbG9jYXRv
cigpKQorICAgICwgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24obV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLT5maXJzdEFsbG9jYXRvcigpKQogewogICAgIC8vIEl0J3MgcmVtb3RlbHkgcG9z
c2libGUgdGhhdCB3ZSdyZSBHQ2luZyByaWdodCBub3cgZXZlbiBpZiB0aGUgY2xpZW50IGlzIGNh
cmVmdWwgdG8gb25seQogICAgIC8vIGNyZWF0ZSBzdWJzcGFjZXMgcmlnaHQgYWZ0ZXIgVk0gY3Jl
YXRpb24sIHNpbmNlIGNvbGxlY3RDb250aW51b3VzbHkgKGFuZCBwcm9iYWJseSBvdGhlcgpAQCAt
ODksNTAgKzg5LDEzIEBAIHZvaWQgU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGMK
ICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KIAotLy8gVGhlIHJlYXNvbiB3aHkgd2Ug
ZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbGxvY2F0ZSBhbmQgdHJ5QWxsb2NhdGUgaXMgdG8gbWluaW1p
emUgdGhlIG51bWJlciBvZgotLy8gY2hlY2tzIG9uIHRoZSBhbGxvY2F0aW9uIHBhdGggaW4gYm90
aCBjYXNlcy4gTGlrZXdpc2UsIHRoZSByZWFzb24gd2h5IHdlIGhhdmUgb3ZlcmxvYWRzIHdpdGgg
YW5kCi0vLyB3aXRob3V0IGRlZmVycmFsQ29udGV4dCBpcyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50
IG9mIGNvZGUgZm9yIGNhbGxpbmcgYWxsb2NhdGUgd2hlbiB5b3UgZG9uJ3QKLS8vIG5lZWQgdGhl
IGRlZmVycmFsQ29udGV4dC4KLXZvaWQqIFN1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSkK
LXsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3cobnVsbHB0
ciwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgc2l6ZV90IHNpemUpCit2b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNp
emUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICB2b2lkICpyZXN1bHQ7CiAgICAgaWYgKE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQogICAgICAgICByZXN1
bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7CiAgICAgZWxzZQotICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKLSAgICBk
aWRBbGxvY2F0ZShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNw
YWNlOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAg
aWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQot
ICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPnRyeUFsbG9jYXRlKCk7Ci0gICAgZWxzZQotICAg
ICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3cobnVsbHB0ciwgc2l6ZSk7Ci0gICAgZGlkQWxs
b2NhdGUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6
dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNp
emUpCi17Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9y
LT50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0
ID0gdHJ5QWxsb2NhdGVTbG93KGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7CisgICAgICAgIHJlc3Vs
dCA9IGFsbG9jYXRlU2xvdyhzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKICAg
ICBkaWRBbGxvY2F0ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNDQsMTYg
KzEwNywxMiBAQCB2b2lkIFN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCiAgICAgICAg
ICAgICBhbGxvY2F0b3IucHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICAgICAgfSk7CiAKLSAg
ICBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fc3BhY2UuZmlyc3RBbGxvY2F0b3Io
KTsKKyAgICBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxpZ25lZE1lbW9yeUFs
bG9jYXRvci0+Zmlyc3RBbGxvY2F0b3IoKTsKIH0KIAogTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vi
c3BhY2U6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpCiB7Ci0gICAgZm9yICg7IG1fYWxsb2NhdG9y
Rm9yRW1wdHlBbGxvY2F0aW9uOyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxs
b2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5uZXh0QWxsb2NhdG9yKCkpIHsKLSAgICAgICAgU3Vi
c3BhY2UqIG90aGVyU3Vic3BhY2UgPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+c3Vi
c3BhY2UoKTsKLSAgICAgICAgaWYgKG90aGVyU3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoKSAhPSBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgCisgICAgZm9yICg7IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uOyBtX2Fs
bG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9u
LT5uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpIHsKICAgICAgICAgaWYg
KE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRp
b24tPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKQogICAgICAgICAgICAgcmV0dXJuIGJsb2NrOwog
ICAgIH0KQEAgLTE5MywxOSArMTUyLDIxIEBAIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFs
bG9jYXRvckZvclMKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBhbGxvY2F0b3ItPnNl
dE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKG1fZmlyc3RBbGxvY2F0b3IpOworICAgIG1fYWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJBbGxvY2F0b3IoYWxsb2NhdG9yKTsKICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CiAg
ICAgcmV0dXJuIGFsbG9jYXRvcjsKIH0KIAotdm9pZCogU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKK3ZvaWQqIFN1
YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICB2
b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93
KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQordm9pZCog
U3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCkKIHsKICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFw
KCktPnZtKCkpOwogICAgIApAQCAtMjM1LDEzICsxOTYsNSBAQCB2b2lkKiBTdWJzcGFjZTo6dHJ5
QWxsb2NhdGVTbG93KEdDRGVmZXJyCiAgICAgcmV0dXJuIGFsbG9jYXRpb24tPmNlbGwoKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIFN1YnNwYWNlOjpkaWRBbGxvY2F0ZSh2b2lkKiBwdHIpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHB0cik7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9y
IGxvZ2dpbmcgYWxsb2NhdGlvbnMsIG9yIGRvaW5nIG90aGVyIGtpbmRzIG9mIGRlYnVnZ2luZyBo
YWNrcy4gSnVzdCBtYWtlCi0gICAgLy8gc3VyZSB5b3UgSlNDX2ZvcmNlR0NTbG93UGF0aHM9dHJ1
ZS4KLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CkBAIC02NSwxMSArNjYsNyBAQCBwdWJsaWM6CiAgICAgTWFya2VkQWxs
b2NhdG9yKiB0cnlBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvckZvcihzaXplX3QpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFs
bG9jYXRlKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoR0NE
ZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5
QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpOwogICAgIAogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAg
ICAKQEAgLTEwMCwxMiArOTcsMTUgQEAgcHVibGljOgogICAgIAogICAgIE1hcmtlZEFsbG9jYXRv
cioqIGFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0
ZXBbMF07IH0KIAorICAgIFN1YnNwYWNlKiBuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjsgfQorICAgIHZvaWQgc2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KFN1YnNwYWNlKiBzdWJzcGFjZSkgeyBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciA9IHN1YnNwYWNlOyB9CisKIHByaXZhdGU6CiAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3JGb3JTbG93KHNpemVfdCk7CiAgICAgCiAgICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBhcmUg
Y29uY2VybmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlvbnMgYW5kIGFsbG9jYXRvciBjcmVhdGlvbi4K
LSAgICB2b2lkKiBhbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAg
IHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CisgICAg
dm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhzaXplX3QsIEdDRGVmZXJy
YWxDb250ZXh0Kik7CiAgICAgCiAgICAgdm9pZCBkaWRBbGxvY2F0ZSh2b2lkKik7CiAgICAgCkBA
IC0xMjAsNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fZmlyc3RB
bGxvY2F0b3IgeyBudWxscHRyIH07CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvckZv
ckVtcHR5QWxsb2NhdGlvbiB7IG51bGxwdHIgfTsgLy8gVXNlcyB0aGUgTWFya2VkU3BhY2UgbGlu
a2VkIGxpc3Qgb2YgYmxvY2tzLgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMYXJnZUFsbG9jYXRp
b24sIEJhc2ljUmF3U2VudGluZWxOb2RlPExhcmdlQWxsb2NhdGlvbj4+IG1fbGFyZ2VBbGxvY2F0
aW9uczsKKyAgICBTdWJzcGFjZSogbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0
b3IgeyBudWxscHRyIH07CiB9OwogCiBBTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogU3Vi
c3BhY2U6OnRyeUFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VCYXNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdWJzcGFjZUJhc2UuaCIKKworI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgi
CisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiUHJldmVudENvbGxl
Y3Rpb25TY29wZS5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworU3Vic3BhY2VCYXNlOjpTdWJzcGFjZUJhc2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBo
ZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpCisgICAgOiBtX3NwYWNlKGhlYXAub2JqZWN0U3Bh
Y2UoKSkKKyAgICAsIG1fbmFtZShuYW1lKQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
CisgICAgLCBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3IoYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikK
KyAgICAsIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uKG1fYWxpZ25lZE1lbW9yeUFsbG9j
YXRvci0+Zmlyc3RBbGxvY2F0b3IoKSkKK3sKKyAgICAvLyBJdCdzIHJlbW90ZWx5IHBvc3NpYmxl
IHRoYXQgd2UncmUgR0NpbmcgcmlnaHQgbm93IGV2ZW4gaWYgdGhlIGNsaWVudCBpcyBjYXJlZnVs
IHRvIG9ubHkKKyAgICAvLyBjcmVhdGUgc3Vic3BhY2VzIHJpZ2h0IGFmdGVyIFZNIGNyZWF0aW9u
LCBzaW5jZSBjb2xsZWN0Q29udGludW91c2x5IChhbmQgcHJvYmFibHkgb3RoZXIKKyAgICAvLyB0
aGluZ3MpIGNvdWxkIGNhdXNlIGEgR0MgdG8gYmUgbGF1bmNoZWQgYXQgcHJldHR5IG11Y2ggYW55
IHRpbWUgYW5kIGl0J3Mgbm90IDEwMCUgb2J2aW91cworICAgIC8vIHRoYXQgYWxsIGNsaWVudHMg
d291bGQgYmUgYWJsZSB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgemVybyBzYWZlcG9pbnRzIGJl
dHdlZW4gd2hlbiB0aGV5CisgICAgLy8gY3JlYXRlIFZNIGFuZCB3aGVuIHRoZXkgZG8gdGhpcy4g
UHJldmVudGluZyBHQyB3aGlsZSB3ZSdyZSBjcmVhdGluZyB0aGUgU3Vic3BhY2UgZW5zdXJlcwor
ICAgIC8vIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB3aGV0aGVyIGl0J3MgT0sg
Zm9yIHRoZSBHQyB0byBldmVyIHNlZSBhIGJyYW5kIG5ldworICAgIC8vIHN1YnNwYWNlLgorICAg
IFByZXZlbnRDb2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25TY29wZShoZWFwKTsKKyAg
ICBoZWFwLm9iamVjdFNwYWNlKCkubV9zdWJzcGFjZXMuYXBwZW5kKHRoaXMpOworICAgIG1fYWxp
Z25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJTdWJzcGFjZSh0aGlzKTsKK30KKworU3Vic3Bh
Y2VCYXNlOjp+U3Vic3BhY2VCYXNlKCkKK3sKK30KKwordm9pZCogU3Vic3BhY2U6OmFsbG9jYXRl
KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgdm9pZCAqcmVzdWx0OworICAgIGlm
IChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKKyAg
ICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQpOworICAg
IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4
dCwgZmFpbHVyZU1vZGUpOworICAgIGRpZEFsbG9jYXRlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQoreworICAg
IGZvckVhY2hBbGxvY2F0b3IoCisgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0
b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAg
ICAgICB9KTsKKworICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLT5maXJzdEFsbG9jYXRvcigpOworfQorCitNYXJrZWRCbG9jazo6SGFu
ZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkKK3sKKyAgICBmb3IgKDsgbV9h
bGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb247IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9u
ID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPm5leHRBbGxvY2F0b3JJbkFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IoKSkgeworICAgICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxv
Y2sgPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFs
KCkpCisgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgfQorICAgIHJldHVybiBudWxscHRy
OworfQorCitNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVf
dCBzaXplKQoreworICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0lu
ZGV4KHNpemUpOworICAgIHNpemVfdCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFjZTo6c19zaXplQ2xh
c3NGb3JTaXplU3RlcFtpbmRleF07CisgICAgaWYgKCFzaXplQ2xhc3MpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIAorICAgIC8vIFRoaXMgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRo
YXQgaXQncyBPSyBmb3IgdGhlIEpJVCB0aHJlYWRzIHRvIGVuZCB1cCBoZXJlIGlmIHRoZXkgd2Fu
dAorICAgIC8vIHRvIGdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIHNvbWUgYWxsb2NhdG9yIHRoYXQg
aGFkbid0IGJlZW4gdXNlZCB5ZXQuIE5vdGUgdGhhdCBhIHBvc3NpYmx5LQorICAgIC8vIGp1c3Qt
YXMtZ29vZCBzb2x1dGlvbiB3b3VsZCBiZSB0byByZXR1cm4gbnVsbCBpZiB3ZSdyZSBpbiB0aGUg
SklUIHNpbmNlIHRoZSBKSVQgdHJlYXRzIG51bGwKKyAgICAvLyBhbGxvY2F0b3IgYXMgInBsZWFz
ZSBhbHdheXMgdGFrZSB0aGUgc2xvdyBwYXRoIi4gQnV0LCB0aGF0IGNvdWxkIGxlYWQgdG8gcGVy
Zm9ybWFuY2UKKyAgICAvLyBzdXJwcmlzZXMgYW5kIHRoZSBhbGdvcml0aG0gaGVyZSBpcyBwcmV0
dHkgZWFzeS4gT25seSB0aGlzIGNvZGUgaGFzIHRvIGhvbGQgdGhlIGxvY2ssIHRvCisgICAgLy8g
cHJldmVudCBzaW11bHRhbmVvdXNseSBNYXJrZWRBbGxvY2F0b3IgY3JlYXRpb25zIGZyb20gbXVs
dGlwbGUgdGhyZWFkcy4gVGhpcyBjb2RlIGVuc3VyZXMKKyAgICAvLyB0aGF0IGFueSAiZm9yRWFj
aEFsbG9jYXRvciIgdHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2NhdG9yIGFmdGVy
IGl0J3MgaW5pdGlhbGl6ZWQKKyAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKKyAgICBpZiAoTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkK
KyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKKworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0
YUxvZygiQ3JlYXRpbmcgbWFya2VkIGFsbG9jYXRvciBmb3IgIiwgbV9uYW1lLCAiLCAiLCBtX2F0
dHJpYnV0ZXMsICIsICIsIHNpemVDbGFzcywgIi5cbiIpOworICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gbV9zcGFjZS5hZGRNYXJrZWRBbGxvY2F0b3IobG9ja2VyLCB0aGlzLCBzaXpl
Q2xhc3MpOworICAgIGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZUNs
YXNzKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChNYXJrZWRTcGFjZTo6c19zaXplQ2xh
c3NGb3JTaXplU3RlcFtpbmRleF0gIT0gc2l6ZUNsYXNzKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0gPSBhbGxvY2F0b3I7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWluZGV4LS0pCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9ySW5TdWJzcGFjZShtX2ZpcnN0QWxsb2NhdG9y
KTsKKyAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVyQWxsb2NhdG9yKGFsbG9j
YXRvcik7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBtX2ZpcnN0QWxsb2NhdG9y
ID0gYWxsb2NhdG9yOworICAgIHJldHVybiBhbGxvY2F0b3I7Cit9CisKK3ZvaWQqIFN1YnNwYWNl
OjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICB2b2lkKiBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKKyAgICBpZiAo
ZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogU3Vi
c3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCkKK3sKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCkt
PnZtKCkpOworICAgIAorICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9j
YXRvckZvcihzaXplKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoZGVm
ZXJyYWxDb250ZXh0KTsKKyAgICAKKyAgICBpZiAoc2l6ZSA8PSBPcHRpb25zOjpsYXJnZUFsbG9j
YXRpb25DdXRvZmYoKQorICAgICAgICAmJiBzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9m
ZikgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogYXR0YW1wdGluZyB0byBhbGxvY2F0ZSBzbWFs
bCBvYmplY3QgdXNpbmcgbGFyZ2UgYWxsb2NhdGlvbi5cbiIpOworICAgICAgICBkYXRhTG9nKCJS
ZXF1ZXN0ZWQgYWxsb2NhdGlvbiBzaXplOiAiLCBzaXplLCAiXG4iKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgbV9zcGFjZS5oZWFwKCkt
PmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICAKKyAgICBz
aXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6
ZSk7CisgICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0
cnlDcmVhdGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBpZiAoIWFsbG9jYXRp
b24pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIG1fc3BhY2UubV9sYXJnZUFs
bG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKKyAgICBtX3NwYWNlLm1faGVhcC0+ZGlkQWxs
b2NhdGUoc2l6ZSk7CisgICAgbV9zcGFjZS5tX2NhcGFjaXR5ICs9IHNpemU7CisgICAgCisgICAg
bV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKKyAgICAgICAgCisgICAgcmV0
dXJuIGFsbG9jYXRpb24tPmNlbGwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlQmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlQmFzZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKKworLy8gVGhlIGlkZWEgb2Ygc3Vic3BhY2VzIGlz
IHRoYXQgeW91IGNhbiBwcm92aWRlIHNvbWUgY3VzdG9tIGJlaGF2aW9yIGZvciB5b3VyIG9iamVj
dHMgaWYgeW91CisvLyBhbGxvY2F0ZSB0aGVtIGZyb20gYSBjdXN0b20gU3Vic3BhY2UgaW4gd2hp
Y2ggeW91IG92ZXJyaWRlIHNvbWUgb2YgdGhlIHZpcnR1YWwgbWV0aG9kcy4gVGhpcworLy8gY2xh
c3MgaXMgdGhlIGJhc2VjbGFzcyBvZiBTdWJzcGFjZXMuIFVzdWFsbHkgeW91IHdpbGwgdXNlIGVp
dGhlciBTdWJzcGFjZSBvciBGaXhlZFNpemVTdWJzcGFjZS4KK2NsYXNzIFN1YnNwYWNlQmFzZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3Vic3BhY2VCYXNlKTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdWJzcGFjZUJh
c2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflN1YnNwYWNlQmFzZSgpOwor
ICAgIAorICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUuZGF0YSgp
OyB9CisgICAgTWFya2VkU3BhY2UmIHNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZTsgfQor
ICAgIAorICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1faGVhcENlbGxUeXBlOyB9CisgICAgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjsgfQorICAgIAorICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7Cisg
ICAgCisgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAgIAorICAgIHZvaWQgZGlk
Q3JlYXRlRmlyc3RBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9hbGxv
Y2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBhbGxvY2F0b3I7IH0KKyAgICAKKyAgICAvLyBGaW5k
cyBhbiBlbXB0eSBibG9jayBmcm9tIGFueSBTdWJzcGFjZSB0aGF0IGFncmVlcyB0byB0cmFkZSBi
bG9ja3Mgd2l0aCB1cy4KKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1Rv
U3RlYWwoKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9y
RWFjaEFsbG9jYXRvcihjb25zdCBGdW5jJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGZvckVhY2hNYXJrZWRCbG9jayhjb25zdCBGdW5jJik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hOb3RFbXB0eU1hcmtl
ZEJsb2NrKGNvbnN0IEZ1bmMmKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIHZvaWQgZm9yRWFjaExhcmdlQWxsb2NhdGlvbihjb25zdCBGdW5jJik7CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2hNYXJrZWRDZWxsKGNvbnN0
IEZ1bmMmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNo
TGl2ZUNlbGwoY29uc3QgRnVuYyYpOworICAgIAorcHJpdmF0ZToKKyAgICBNYXJrZWRTcGFjZSYg
bV9zcGFjZTsKKyAgICAKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICBBbGxvY2F0b3JBdHRyaWJ1
dGVzIG1fYXR0cmlidXRlczsKKworICAgIEhlYXBDZWxsVHlwZSogbV9oZWFwQ2VsbFR5cGU7Cisg
ICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworICAg
IAorICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRvciB7IG51bGxwdHIgfTsKKyAg
ICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uIHsgbnVsbHB0
ciB9OyAvLyBVc2VzIHRoZSBNYXJrZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9ja3MuCisgICAg
U2VudGluZWxMaW5rZWRMaXN0PExhcmdlQWxsb2NhdGlvbiwgQmFzaWNSYXdTZW50aW5lbE5vZGU8
TGFyZ2VBbGxvY2F0aW9uPj4gbV9sYXJnZUFsbG9jYXRpb25zOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326076</attachid>
            <date>2017-11-05 13:07:32 -0800</date>
            <delta_ts>2017-11-06 14:56:30 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64600</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYgKzU0MCwxMyBAQAogCQkwRkRCMkNDQTE3M0RB
NTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExW
YWx1ZUZyb21CbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTYxNzQ4MzBB
MjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi87IH07CiAJCTBGREIyQ0VBMTc0ODk2QzcwMDdC
M0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFOTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpT
TG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRENFMTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTFCMUZBRTYx
RjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTEyMTFGQUU4NTg5MDA2RjM5MDEg
LyogSGVhcENlbGxUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRENFMTIwMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuY3BwICov
OyB9OworCQkwRkRDRTEyMjFGQUU4NThDMDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTExRjFGQUU4NTg3
MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMjkxRkFGQTg1RjAwNkYzOTAxIC8qIENvbXBsZXRl
U3Vic3BhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEQ0UxMjcxRkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuY3BwICovOyB9
OworCQkwRkRDRTEyQTFGQUZBODVGMDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMjgxRkFGQTg1
OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTEyRDFGQUZCNEU1MDA2RjM5MDEgLyogSXNv
U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRENFMTJCMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTJFMUZBRkI0RUEwMDZG
MzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkRDRTEyQzFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuY3Bw
ICovOyB9OwogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAq
LzsgfTsKIAkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
REU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87
IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgy
NSAvKiBCM0tpbmQuaCAqLzsgfTsKQEAgLTI2NjYsNiArMjY3MywxMyBAQAogCQkwRkRCMkNFNTE3
NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHV29ya2xpc3QuY3BwOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTYxNzQ4MzBBMjAwN0IzQzFC
IC8qIERGR1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dv
cmtsaXN0Lmg7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudEpTTG9jay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxs
b2NhdGlvbkZhaWx1cmVNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG9jYXRpb25GYWlsdXJlTW9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTExRjFGQUU4NTg3MDA2RjM5
MDEgLyogSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBDZWxsVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyMDFGQUU4NTg3MDA2RjM5MDEgLyogSGVh
cENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBDZWxsVHlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTI3MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21w
bGV0ZVN1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBsZXRlU3Vic3BhY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyODFGQUZBODU5MDA2RjM5MDEg
LyogQ29tcGxldGVTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV0ZVN1YnNwYWNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTJCMUZBRkI0REUwMDZGMzkwMSAv
KiBJc29TdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29TdWJzcGFjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyQzFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3Bh
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXNvU3Vic3BhY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMxNjY2
RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0g
ZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2VsbENvbnRhaW5lci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDg0LDkgKzU0OTgsMTIgQEAKIAkJMTQyRTMxMkEx
MzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTBGRENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5j
cHAgKi8sCisJCQkJMEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8s
CiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEExREI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdT
Y29wZS5oICovLAorCQkJCTBGRENFMTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUuaCAqLywKIAkJCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9y
QXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9j
YXRvckF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2Vs
bENvbnRhaW5lci5jcHAgKi8sCkBAIC01NTAxLDYgKzU1MTgsOCBAQAogCQkJCTBGQTc2MjAxMURC
OTI0MjMwMEI3QTJGRCAvKiBDb2xsZWN0aW9uU2NvcGUuaCAqLywKIAkJCQkwRkQwRTVFNTFFNDNE
MzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuY3BwICovLAogCQkJCTBGRDBFNUU2MUU0M0Qz
NDcwMDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5oICovLAorCQkJCTBGRENFMTI3MUZBRkE4NTkw
MDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmNwcCAqLywKKwkJCQkwRkRDRTEyODFGQUZBODU5
MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIw
MDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5
RDAwODNCMTJCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCiAJCQkJMEY3REYxMkYxRTI5NzBE
NTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCkBAIC01NTUxLDYgKzU1NzAs
OCBAQAogCQkJCURDM0QyQjBCMUQzNDM3NkUwMEJBOTE4QyAvKiBIZWFwQ2VsbC5jcHAgKi8sCiAJ
CQkJREMzRDJCMDkxRDM0MzE2MTAwQkE5MThDIC8qIEhlYXBDZWxsLmggKi8sCiAJCQkJMEYwNzBB
NDQxRDU0M0E4OTAwNkU3MjMyIC8qIEhlYXBDZWxsSW5saW5lcy5oICovLAorCQkJCTBGRENFMTIw
MUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuY3BwICovLAorCQkJCTBGRENFMTFGMUZB
RTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQkwRjBDQUVGRDFFQzREQTg1
MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmNwcCAqLywKIAkJCQkwRjBDQUVGRTFF
QzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggKi8sCiAJCQkJMEYzMkJE
MEUxQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmNwcCAqLywKQEAgLTgwNTEsNiAr
ODA3Miw3IEBACiAJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVj
a1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyog
QjNDb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkwMSAv
KiBJc29TdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEMxQkYw
Mjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5MTlC
NzgwMUUwMzU1OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtODU5
Myw2ICs4NjE1LDcgQEAKIAkJCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk1MUMwMjRBMjgwMDI0ODFF
MiAvKiBHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MEI3OTE5NzFDMDI0QTI5MDAyNDgxRTIgLyogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1
YnNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5OTFDMDI0QTI5MDAyNDgxRTIgLyog
R2VuZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5RDFDMDI0QTU2
MDAyNDgxRTIgLyogR2VuZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFMDUwMTkxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtODgzMCw2ICs4ODUzLDcgQEAKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcg
LyogSlNNb2R1bGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDk3MjI3NTJEQzU0
NDU5QjkxMjVCNTM5IC8qIEpTTW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4
Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRENFMTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBK
U01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMUQxQjkwMTNDMzAwMzQ2
QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjI2LDYg
KzkyNTAsNyBAQAogCQkJCTBGRkI2QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2Zp
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERFQzE5ODMyREM0MDA3RDRCMTkgLyogVHlw
ZVByb2ZpbGVyTG9nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRDRTEyMjFGQUU4NThDMDA2RjM5
MDEgLyogSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERGMDE5ODMyREQ2
MDA3RDRCMTkgLyogVHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIxNThFQkU5
MTAwNENCOUZGIC8qIHVkaXM4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4
RDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTg5Myw2ICs5
OTE4LDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
IAkJCQk1MzZCMzE5RTFGNzM1RjE2MDAzN0ZDMzMgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkRDRTEyOTFGQUZBODVGMDA2RjM5MDEgLyogQ29tcGxldGVT
dWJzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0QTE1OEVCRTkxMDA0Q0I5RkYg
LyogdWRpczg2LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5RkYg
LyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NEQxNThFQkZFNjAw
NENCOUZGIC8qIHVkaXM4Nl9pdGFiX2hvbGRlci5jIGluIFNvdXJjZXMgKi8sCkBAIC05OTU2LDYg
Kzk5ODIsNyBAQAogCQkJCTUzNkIzMTREMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNl
NTAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNTAxRjcxQzU5OTAwMzdGQzMzIC8qIFVu
aWZpZWRTb3VyY2U1MS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE0NzFGNzFDNTk5MDAz
N0ZDMzMgLyogVW5pZmllZFNvdXJjZTUyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRENFMTJF
MUZBRkI0RUEwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MzZCMzE0NDFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTUzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUzNkIzMTMzMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlNTQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxMzIxRjcxQzU5OTAwMzdGQzMzIC8qIFVuaWZpZWRT
b3VyY2U1NS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk5ODMsNiArMTAwMTAsNyBAQAogCQkJCTUz
NkIzMTVEMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlNzcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTM2QjMxNEUxRjcxQzU5OTAwMzdGQzMzIC8qIFVuaWZpZWRTb3VyY2U3OC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzE0RjFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNv
dXJjZTc5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRENFMTIxMUZBRTg1ODkwMDZGMzkwMSAv
KiBIZWFwQ2VsbFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM2QjMxNDAxRjcxQzU5OTAw
MzdGQzMzIC8qIFVuaWZpZWRTb3VyY2U4MC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzZCMzEz
OTFGNzFDNTk5MDAzN0ZDMzMgLyogVW5pZmllZFNvdXJjZTgxLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUzNkIzMTJFMUY3MUM1OTkwMDM3RkMzMyAvKiBVbmlmaWVkU291cmNlODIuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNjQ2LDcgKzExNjQ2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8vIFRyeSB0byBkbyBzb21lIGNvbnN0YW50
LWZvbGRpbmcgaGVyZS4KICAgICAgICAgaWYgKHN1YnNwYWNlLT5oYXNJbnRQdHIoKSAmJiBzaXpl
LT5oYXNJbnRQdHIoKSkgewotICAgICAgICAgICAgU3Vic3BhY2UqIGFjdHVhbFN1YnNwYWNlID0g
Yml0d2lzZV9jYXN0PFN1YnNwYWNlKj4oc3Vic3BhY2UtPmFzSW50UHRyKCkpOworICAgICAgICAg
ICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxl
dGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBh
Y3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
TWFya2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+YWxsb2Nh
dG9yRm9yKGFjdHVhbFNpemUpOwpAQCAtMTE2ODMsNyArMTE2ODMsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHN1YnNwYWNlLCBtX291dC5zdWIoc2l6ZUNsYXNzSW5kZXgsIG1fb3V0Lmlu
dFB0ck9uZSkpKTsKICAgICB9CiAgICAgCi0gICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoU3Vi
c3BhY2UmIHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAg
TFZhbHVlIGFsbG9jYXRvckZvclNpemUoQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1
ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHJldHVybiBhbGxv
Y2F0b3JGb3JTaXplKG1fb3V0LmNvbnN0SW50UHRyKCZzdWJzcGFjZSksIHNpemUsIHNsb3dQYXRo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKwog
bmFtZXNwYWNlIEpTQyB7IAogCiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKCkKQEAgLTM2LDYgKzM4LDQxIEBAIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6On5B
bGlnbmVkTWVtb3J5QWwKIHsKIH0KIAordm9pZCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpyZWdp
c3RlckFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVCghYWxsb2NhdG9yLT5uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KCkpOworICAgIAorICAgIGlmICghbV9maXJzdEFsbG9jYXRvcikgeworICAgICAgICBmb3IgKFN1
YnNwYWNlQmFzZSogc3Vic3BhY2UgPSBtX2ZpcnN0U3Vic3BhY2U7IHN1YnNwYWNlOyBzdWJzcGFj
ZSA9IHN1YnNwYWNlLT5uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkKKyAg
ICAgICAgICAgIHN1YnNwYWNlLT5kaWRDcmVhdGVGaXJzdEFsbG9jYXRvcihhbGxvY2F0b3IpOwor
ICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFzdEFsbG9jYXRvcik7CisgICAg
ICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CisgICAgICAgIG1fbGFzdEFsbG9jYXRv
ciA9IGFsbG9jYXRvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbGFzdEFsbG9j
YXRvci0+c2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGxvY2F0b3Ip
OworICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKK30KKworLy8gRklYTUU6IFdlIHVz
ZSB0aGlzIGlkaW9tIGEgbG90LiBXZSBzaG91bGQgY29tZSB1cCB3aXRoIGEgY2xldmVyIHRlbXBs
YXRlIGZvciB0aGlzIGtpbmQgb2YKKy8vIHNpbmdseS1saW5rZWQgbGlzdCwgd2hlcmUgZWFjaCBl
bGVtZW50IG1heSBiZSBvbiBtdWx0aXBsZSBsaXN0cy4KK3ZvaWQgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjo6cmVnaXN0ZXJTdWJzcGFjZShTdWJzcGFjZUJhc2UqIHN1YnNwYWNlKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKCFzdWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKCkpOworICAgIAorICAgIGlmICghbV9maXJzdFN1YnNwYWNlKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2xhc3RTdWJzcGFjZSk7CisgICAgICAgIG1fZmlyc3RTdWJzcGFjZSA9IHN1
YnNwYWNlOworICAgICAgICBtX2xhc3RTdWJzcGFjZSA9IHN1YnNwYWNlOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9sYXN0U3Vic3BhY2UtPnNldE5leHRTdWJzcGFjZUluQWxpZ25l
ZE1lbW9yeVN1YnNwYWNlKHN1YnNwYWNlKTsKKyAgICBtX2xhc3RTdWJzcGFjZSA9IHN1YnNwYWNl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjQ0
NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIE1hcmtlZEFsbG9jYXRvcjsKKwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC00MCw2ICs0MiwxNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSA9IDA7CiAgICAgCiAgICAgdmly
dHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHJlZ2lz
dGVyQWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciopOworICAgIE1hcmtlZEFsbG9jYXRvciogZmly
c3RBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0QWxsb2NhdG9yOyB9CisKKyAgICB2
b2lkIHJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2VCYXNlKik7CisKK3ByaXZhdGU6CisgICAgTWFy
a2VkQWxsb2NhdG9yKiBtX2ZpcnN0QWxsb2NhdG9yOworICAgIE1hcmtlZEFsbG9jYXRvciogbV9s
YXN0QWxsb2NhdG9yOworICAgIFN1YnNwYWNlQmFzZSogbV9maXJzdFN1YnNwYWNlOworICAgIFN1
YnNwYWNlQmFzZSogbV9sYXN0U3Vic3BhY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJl
TW9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9j
YXRpb25GYWlsdXJlTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIEFsbG9jYXRpb25GYWlsdXJlTW9kZSB7Cisg
ICAgQXNzZXJ0LAorICAgIFJldHVybk51bGwKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1
YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRl
ICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgorI2luY2x1ZGUgIlN1YnNw
YWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ29tcGxldGVTdWJzcGFjZTo6Q29t
cGxldGVTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEhlYXBDZWxsVHlwZSogaGVh
cENlbGxUeXBlLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKK3sKKyAgICBpbml0aWFsaXplKGhlYXBDZWxs
VHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CisgICAgZm9yIChzaXplX3QgaSA9IE1hcmtl
ZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXpl
U3RlcFtpXSA9IG51bGxwdHI7Cit9CisKK0NvbXBsZXRlU3Vic3BhY2U6On5Db21wbGV0ZVN1YnNw
YWNlKCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0
b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sK
KyAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBmYWlsdXJlTW9kZSk7Cit9
CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzaXplLCBHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVy
ZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZlcnJhbENv
bnRleHQsIGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2Nh
dGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgdm9pZCAqcmVz
dWx0OworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZv
cihzaXplKSkKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENv
bnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRl
U2xvdyhzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZv
clNsb3coc2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNp
emVDbGFzc1RvSW5kZXgoc2l6ZSk7CisgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtlZFNwYWNl
OjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKKyAgICBpZiAoIXNpemVDbGFzcykKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgLy8gVGhpcyBpcyB3cml0dGVuIGluIHN1
Y2ggYSB3YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVhZHMgdG8gZW5kIHVwIGhlcmUg
aWYgdGhleSB3YW50CisgICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgc29tZSBhbGxv
Y2F0b3IgdGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0IGEgcG9zc2libHktCisg
ICAgLy8ganVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxsIGlmIHdl
J3JlIGluIHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAorICAgIC8vIGFsbG9jYXRv
ciBhcyAicGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQgY291bGQg
bGVhZCB0byBwZXJmb3JtYW5jZQorICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29yaXRobSBo
ZXJlIGlzIHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUgbG9jaywg
dG8KKyAgICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBjcmVhdGlv
bnMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcworICAgIC8vIHRoYXQg
YW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxv
Y2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAorICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZl
IAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2NrKCkpOwor
ICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0
ZXBbaW5kZXhdKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yOworCisgICAgaWYgKGZhbHNlKQor
ICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBtX25hbWUs
ICIsICIsIG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7CisgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtlZEFsbG9jYXRvcj4gdW5pcXVlQWxsb2NhdG9yID0KKyAgICAgICAgc3Rk
OjptYWtlX3VuaXF1ZTxNYXJrZWRBbGxvY2F0b3I+KG1fc3BhY2UuaGVhcCgpLCBzaXplQ2xhc3Mp
OworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdW5pcXVlQWxsb2NhdG9yLmdldCgp
OworICAgIG1fYWxsb2NhdG9ycy5hcHBlbmQoV1RGTW92ZSh1bmlxdWVBbGxvY2F0b3IpKTsKKyAg
ICBhbGxvY2F0b3ItPnNldFN1YnNwYWNlKHRoaXMpOworICAgIG1fc3BhY2UuYWRkTWFya2VkQWxs
b2NhdG9yKGxvY2tlciwgYWxsb2NhdG9yKTsKKyAgICBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXpl
Q2xhc3NUb0luZGV4KHNpemVDbGFzcyk7CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoTWFy
a2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFzcykKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhd
ID0gYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgaWYgKCFpbmRleC0tKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvckluU3Vic3Bh
Y2UobV9maXJzdEFsbG9jYXRvcik7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdp
c3RlckFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICByZXR1cm4gYWxsb2NhdG9yOwor
fQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdD
RGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBm
YWlsdXJlTW9kZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coZGVmZXJy
YWxDb250ZXh0LCBzaXplKTsKKyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpBc3NlcnQpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93
KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQoreworICAg
IHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7CisgICAgCisgICAgaWYg
KE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUpKQorICAgICAg
ICByZXR1cm4gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQpOworICAgIAor
ICAgIGlmIChzaXplIDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9mZigpCisgICAgICAg
ICYmIHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CisgICAgICAgIGRhdGFMb2co
IkZBVEFMOiBhdHRhbXB0aW5nIHRvIGFsbG9jYXRlIHNtYWxsIG9iamVjdCB1c2luZyBsYXJnZSBh
bGxvY2F0aW9uLlxuIik7CisgICAgICAgIGRhdGFMb2coIlJlcXVlc3RlZCBhbGxvY2F0aW9uIHNp
emU6ICIsIHNpemUsICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICAKKyAgICBtX3NwYWNlLmhlYXAoKS0+Y29sbGVjdElmTmVjZXNzYXJ5T3JE
ZWZlcihkZWZlcnJhbENvbnRleHQpOworICAgIAorICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8TWFya2VkU3BhY2U6OnNpemVTdGVwPihzaXplKTsKKyAgICBMYXJnZUFsbG9jYXRp
b24qIGFsbG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgqbV9zcGFjZS5tX2hl
YXAsIHNpemUsIHRoaXMpOworICAgIGlmICghYWxsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgCisgICAgbV9zcGFjZS5tX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9j
YXRpb24pOworICAgIG1fc3BhY2UubV9oZWFwLT5kaWRBbGxvY2F0ZShzaXplKTsKKyAgICBtX3Nw
YWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKKyAgICAKKyAgICBtX2xhcmdlQWxsb2NhdGlvbnMuYXBw
ZW5kKGFsbG9jYXRpb24pOworICAgICAgICAKKyAgICByZXR1cm4gYWxsb2NhdGlvbi0+Y2VsbCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTdWJzcGFjZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGxldGVTdWJzcGFjZShDU3RyaW5n
IG5hbWUsIEhlYXAmLCBIZWFwQ2VsbFR5cGUqLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBsZXRlU3Vic3BhY2UoKTsKKworICAgIC8vIEluIHNv
bWUgY29kZSBwYXRocywgd2UgbmVlZCBpdCB0byBiZSBhIGNvbXBpbGUgZXJyb3IgdG8gY2FsbCB0
aGUgdmlydHVhbCB2ZXJzaW9uIG9mIG9uZSBvZgorICAgIC8vIHRoZXNlIGZ1bmN0aW9ucy4gVGhh
dCdzIHdoeSB3ZSBkbyBmaW5hbCBtZXRob2RzIHRoZSBvbGQgc2Nob29sIHdheS4KKyAgICAKKyAg
ICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSkgb3ZlcnJpZGU7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemVfdCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICAKKyAgICB2b2lkKiBhbGxv
Y2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBv
dmVycmlkZTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwo
c2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAg
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN1YnNwYWNlLCBtX2FsbG9jYXRvckZvclNpemVTdGVwKTsg
fQorICAgIAorICAgIE1hcmtlZEFsbG9jYXRvcioqIGFsbG9jYXRvckZvclNpemVTdGVwKCkgeyBy
ZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0KKworcHJpdmF0ZToKKyAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsKKyAgICAKKyAgICAvLyBUaGVz
ZSBzbG93IHBhdGhzIGFyZSBjb25jZXJuZWQgd2l0aCBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgYWxs
b2NhdG9yIGNyZWF0aW9uLgorICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhzaXplX3QsIEdDRGVmZXJy
YWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0
ZVNsb3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCopOworICAgIAorICAgIHN0ZDo6YXJyYXk8
TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzPiBtX2FsbG9jYXRv
ckZvclNpemVTdGVwOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2VkQWxsb2NhdG9y
Pj4gbV9hbGxvY2F0b3JzOworfTsKKworQUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0b3IqIFN1
YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgaWYgKHNpemUgPD0gTWFya2VkU3BhY2U6Omxh
cmdlQ3V0b2ZmKSB7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogcmVzdWx0ID0gbV9hbGxvY2F0
b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV07CisgICAg
ICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwg
fHwgcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFs
bG9jYXRvckZvclNsb3coc2l6ZSk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwQ2VsbFR5cGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CituYW1lc3BhY2UgeworCisvLyBXcml0aW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdCB3aGVu
IHlvdSBwYXNzIHRoaXMgYXMgYSBmdW5jdG9yLCB0aGUgY2FsbGVlIGlzIHNwZWNpYWxpemVkIGZv
cgorLy8gdGhpcyBjYWxsYmFjay4gSWYgeW91IHdyb3RlIHRoaXMgYXMgYSBub3JtYWwgZnVuY3Rp
b24gdGhlbiB0aGUgY2FsbGVlIHdvdWxkIGJlIHNwZWNpYWxpemVkIGZvcgorLy8gdGhlIGZ1bmN0
aW9uJ3MgdHlwZSBhbmQgaXQgd291bGQgaGF2ZSBpbmRpcmVjdCBjYWxscyB0byB0aGF0IGZ1bmN0
aW9uLiBBbmQgdW5saWtlIGEgbGFtYmRhLCBpdCdzCisvLyBwb3NzaWJsZSB0byBtYXJrIHRoaXMg
QUxXQVlTX0lOTElORS4KK3N0cnVjdCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIG9wZXJhdG9yKCkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoY2VsbC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgIEFTU0VSVChjZWxsLT5pbmxp
bmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpOworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAgICAgICAgTWV0aG9kVGFi
bGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5k
ZXN0cm95OworICAgICAgICBkZXN0cm95KGNlbGwpOworICAgIH0KK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCitIZWFwQ2VsbFR5cGU6OkhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKK3sKK30K
KworSGVhcENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKCkKK3sKK30KKwordm9pZCBIZWFwQ2VsbFR5
cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBGcmVlTGlzdCogZnJl
ZUxpc3QpCit7CisgICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3Qs
IERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEhlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0s
IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBD
ZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBD
ZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcENlbGxU
eXBlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwQ2VsbFR5cGUpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIEhlYXBD
ZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0
dWFsIH5IZWFwQ2VsbFR5cGUoKTsKKworICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0
dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKworICAgIC8vIFRoZSBw
dXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBpcyB0byBzcGVjaWFsaXplIHRoZSBzd2VlcCBmb3Ig
eW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24ndAorICAgIC8vIGJlIGNhbGxlZCBmb3Igbm8tZGVz
dHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBjYWxsIE1hcmtlZEJsb2NrOjpmaW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisKKyAgICAvLyBUaGVzZSBnZXQgY2FsbGVkIGZvciBsYXJn
ZSBvYmplY3RzLgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CisKK3By
aXZhdGU6CisgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vi
c3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIklzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0lzb1N1YnNwYWNlQmFzZTo6SXNvU3Vi
c3BhY2VCYXNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgSGVhcENlbGxUeXBlKiBoZWFwQ2Vs
bFR5cGUsIHNpemVfdCBzaXplKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKKyAgICAsIG1f
YWxsb2NhdG9yKCZoZWFwLCBzaXplKQorICAgICwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KHN0ZDo6bWFrZV91bmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKK3sKKyAgICBp
bml0aWFsaXplKGhlYXBDZWxsVHlwZSwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmdldCgp
KTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2NrKCkp
OworICAgIG1fYWxsb2NhdG9yLnNldFN1YnNwYWNlKHRoaXMpOworICAgIG1fc3BhY2UuYWRkTWFy
a2VkQWxsb2NhdG9yKGxvY2tlciwgJm1fYWxsb2NhdG9yKTsKKyAgICBtX2FsaWduZWRNZW1vcnlB
bGxvY2F0b3ItPnJlZ2lzdGVyQWxsb2NhdG9yKCZtX2FsbG9jYXRvcik7CisgICAgbV9maXJzdEFs
bG9jYXRvciA9ICZtX2FsbG9jYXRvcjsKK30KKworSXNvU3Vic3BhY2VCYXNlOjp+SXNvU3Vic3Bh
Y2VCYXNlKCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZUJhc2U6OmFsbG9j
YXRvckZvcihzaXplX3Qgc2l6ZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMt
PnNpemUoKSk7CisgICAgcmV0dXJuICZtX2FsbG9jYXRvcjsKK30KKwordm9pZCogSXNvU3Vic3Bh
Y2VCYXNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKKyAgICByZXR1cm4gYWxsb2NhdGVJbXBs
KGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworfQorCit2b2lkKiBJc29TdWJzcGFjZUJh
c2U6OmFsbG9jYXRlSW1wbChHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIG1fYWxsb2NhdG9y
LmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtl
ZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworCitjbGFzcyBJc29TdWJzcGFjZUJh
c2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIElz
b1N1YnNwYWNlQmFzZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBIZWFwQ2VsbFR5cGUqLCBzaXplX3Qg
c2l6ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfklzb1N1YnNwYWNlQmFzZSgpOworCisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRvci5jZWxsU2l6ZSgpOyB9CisK
KyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRpb25GYWls
dXJlTW9kZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJy
YWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKKworcHJvdGVjdGVk
OgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlSW1wbChHQ0RlZmVycmFsQ29u
dGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgCitwcml2YXRlOgorICAgIE1hcmtl
ZEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgUGFzc2VkVHlwZT4KK2NsYXNzIElzb1N1YnNwYWNlIDogcHVibGljIElzb1N1
YnNwYWNlQmFzZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBQYXNzZWRUeXBlIFR5cGU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBrbm93blNpemUgPSBzaXplb2YoVHlwZSk7CisgICAg
CisgICAgSXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBIZWFwQ2VsbFR5cGUq
IGhlYXBDZWxsVHlwZSkKKyAgICAgICAgOiBJc29TdWJzcGFjZUJhc2UobmFtZSwgaGVhcCwgaGVh
cENlbGxUeXBlLCBrbm93blNpemUpCisgICAgeworICAgIH0KKworICAgIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSBrbm93blNpemUpOwor
ICAgICAgICByZXR1cm4gJm1fYWxsb2NhdG9yOworICAgIH0KKworICAgIHZvaWQqIGFsbG9jYXRl
Tm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQorICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2l6ZSA9PSBrbm93blNpemUpOworICAgICAgICByZXR1cm4gYWxsb2NhdGVJ
bXBsKHNpemUsIGRlZmVycmFsQ29udGV4dCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDE2IEBAIE1h
cmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGgKICAgICAsIG1fY3VycmVudEJs
b2NrKDApCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQogICAgICwgbV9jZWxsU2l6ZShzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQotICAgICwgbV9hdHRyaWJ1dGVzKHN1YnNwYWNl
LT5hdHRyaWJ1dGVzKCkpCiAgICAgLCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fc3Vic3BhY2Uoc3Vi
c3BhY2UpCiB7CiB9CiAKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpzZXRTdWJzcGFjZShTdWJzcGFj
ZSogc3Vic3BhY2UpCit7CisgICAgbV9hdHRyaWJ1dGVzID0gc3Vic3BhY2UtPmF0dHJpYnV0ZXMo
KTsKKyAgICBtX3N1YnNwYWNlID0gc3Vic3BhY2U7Cit9CisKIGJvb2wgTWFya2VkQWxsb2NhdG9y
Ojppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKIHsKICAgICB1bnNpZ25lZCBpdGVyc1NpbmNl
TGFzdFRpbWVDaGVjayA9IDA7CkBAIC0xNzUsMTkgKzE3OSw3IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGUKICAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKIH0K
IAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQpCi17Ci0gICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7
Ci0gICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGRlZmVycmFsQ29udGV4dCwgY3Jhc2hP
bkZhaWx1cmUpOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nh
c2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICBib29sIGNyYXNo
T25GYWlsdXJlID0gZmFsc2U7Ci0gICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGRlZmVy
cmFsQ29udGV4dCwgY3Jhc2hPbkZhaWx1cmUpOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6
OmFsbG9jYXRlU2xvd0Nhc2VJbXBsKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQs
IGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKICAgICBBU1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKQEAgLTIwNCwxMSArMTk2LDggQEAgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIAogICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0
aGUgR0MgY2FsbGVkIGEgY2FsbGJhY2sgYW5kIG5vdyB0aGlzIGFsbG9jYXRvciBoYXMgYSBjdXJy
ZW50QmxvY2suIFRoaXMgb25seQogICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0
ZXN0cywgd2hpY2ggaW5qZWN0IGEgY2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24u
Ci0gICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJsb2NrKSkgewotICAgICAgICBpZiAoY3Jhc2hP
bkZhaWx1cmUpCi0gICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsK
LSAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgfQorICAg
IGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZShk
ZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKICAgICAKICAgICB2b2lkKiByZXN1bHQgPSB0
cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CiAgICAgCkBAIC0yMTcsNyArMjA2LDcgQEAg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIAogICAgIE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIGlmICghYmxv
Y2spIHsKLSAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAgICBpZiAoZmFpbHVyZU1v
ZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTMgKzY3LDE3IEBAIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjIxMjEKIAogY2xhc3MgTWFya2VkQWxsb2NhdG9yIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShNYXJrZWRBbGxvY2F0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIAogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKIHB1
YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKIAotICAgIE1hcmtlZEFsbG9jYXRvcihI
ZWFwKiwgU3Vic3BhY2UqLCBzaXplX3QgY2VsbFNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvcihI
ZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNlKik7
CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIHZvaWQgcHJlcGFyZUZvckFs
bG9jYXRpb24oKTsKICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7CkBAIC05MCw4ICs5NCw3IEBA
IHB1YmxpYzoKICAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0
dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0
aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVj
dGlvbjsgfQogICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRl
eHQqID0gbnVsbHB0cik7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQq
ID0gbnVsbHB0cik7CisgICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0K
IAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0OwpA
QCAtMTM2LDkgKzEzOSwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFya2VkQWxsb2NhdG9yKiBu
ZXh0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9yOyB9CiAgICAgTWFy
a2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmV4dEFsbG9jYXRvckluU3Vic3BhY2U7IH0KKyAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxv
Y2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxv
Y2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsgfQogICAgIAogICAgIHZvaWQgc2V0TmV4
dEFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3Ig
PSBhbGxvY2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxv
Y2F0b3I7IH0KKyAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yID0gYWxsb2NhdG9yOyB9CiAgICAgCiAgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCk7CiAgICAgCkBAIC0xNTUsOSArMTYwLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29u
dGV4dCopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2Uo
R0NEZWZlcnJhbENvbnRleHQqKTsKLSAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0Rl
ZmVycmFsQ29udGV4dCosIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7
CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIHRyeUFsbG9jYXRlQmxvY2soKTsKQEAgLTE5MiwxMCArMTk1LDExIEBAIHBy
aXZhdGU6CiAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8gRklY
TUU6IEFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4Ci0gICAgSGVhcCog
bV9oZWFwOwotICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlOworICAgIEhlYXAqIG1faGVhcCB7IG51
bGxwdHIgfTsKKyAgICBTdWJzcGFjZSogbV9zdWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBNYXJr
ZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxv
Y2F0b3IqIG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgeyBudWxscHRyIH07CisgICAgTWFya2Vk
QWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxs
cHRyIH07CiB9OwogCiBpbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZG
cmVlTGlzdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDIxICszNSwxMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3Rl
CiAgICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4o
dGFyZ2V0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQorQUxXQVlTX0lOTElO
RSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICBy
ZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7
CiAgICAgICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVm
ZXJyYWxDb250ZXh0KSk7Ci0gICAgICAgIH0pOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCkKLXsKLSAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+
IEhlYXBDZWxsKiB7Ci0gICAgICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xv
d0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUp
KTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUxLDEwICs1NTEsOCBA
QCB2b2lkIE1hcmtlZFNwYWNlOjpkdW1wQml0cyhQcmludFN0cmVhbSYgCiAgICAgICAgIH0pOwog
fQogCi1NYXJrZWRBbGxvY2F0b3IqIE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoCi0g
ICAgY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTdWJzcGFjZSogc3Vic3BhY2UsIHNpemVfdCBzaXpl
Q2xhc3MpCit2b2lkIE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKLSAgICBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciA9IG1fYmFnT2ZBbGxvY2F0b3JzLmFkZChoZWFwKCksIHN1YnNwYWNl
LCBzaXplQ2xhc3MpOwogICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvcihudWxscHRyKTsK
ICAgICAKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwpAQCAtNTYyLDE0ICs1NjAsMTAgQEAg
TWFya2VkQWxsb2NhdG9yKiBNYXJrZWRTcGFjZTo6YWRkTWFya2VkQQogICAgIGlmICghbV9maXJz
dEFsbG9jYXRvcikgewogICAgICAgICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwogICAg
ICAgICBtX2xhc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7Ci0gICAgICAgIGZvciAoU3Vic3BhY2Uq
IHN1YnNwYWNlIDogbV9zdWJzcGFjZXMpCi0gICAgICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRl
Rmlyc3RBbGxvY2F0b3IoYWxsb2NhdG9yKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2xhc3RB
bGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3IoYWxsb2NhdG9yKTsKICAgICAgICAgbV9sYXN0QWxs
b2NhdG9yID0gYWxsb2NhdG9yOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gYWxsb2NhdG9yOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHB1
YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IqIGZpcnN0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9maXJzdEFsbG9jYXRvcjsgfQogICAgIAogICAgIExvY2smIGFsbG9jYXRvckxvY2soKSB7
IHJldHVybiBtX2FsbG9jYXRvckxvY2s7IH0KLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFkZE1hcmtl
ZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIFN1YnNwYWNlKiwgc2l6ZV90IGNlbGxT
aXplKTsKKyAgICB2b2lkIGFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYs
IE1hcmtlZEFsbG9jYXRvciopOwogICAgIAogICAgIC8vIFdoZW4gdGhpcyBpcyB0cnVlIGl0IG1l
YW5zIHRoYXQgd2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUgbWFyayBiaXRzIGhhdmVuJ3QgY29udmVy
Z2VkIHlldC4KICAgICBib29sIGlzTWFya2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJraW5n
OyB9CkBAIC0xNzMsOSArMTczLDYgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2Vha1Nl
dDsKICAgICBmcmllbmQgY2xhc3MgU3Vic3BhY2U7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGVT
bG93KFN1YnNwYWNlJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIHZvaWQqIHRy
eUFsbG9jYXRlU2xvdyhTdWJzcGFjZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLQog
ICAgIC8vIFVzZSB0aGlzIHZlcnNpb24gd2hlbiBjYWxsaW5nIGZyb20gd2l0aGluIHRoZSBHQyB3
aGVyZSB3ZSBrbm93IHRoYXQgdGhlIGFsbG9jYXRvcnMKICAgICAvLyBoYXZlIGFscmVhZHkgYmVl
biBzdG9wcGVkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExp
dmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTIxMCw3ICsyMDcsNiBAQCBwcml2YXRlOgogICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxXZWFrU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxXZWFrU2V0
Pj4gbV9uZXdBY3RpdmVXZWFrU2V0czsKIAogICAgIExvY2sgbV9hbGxvY2F0b3JMb2NrOwotICAg
IEJhZzxNYXJrZWRBbGxvY2F0b3I+IG1fYmFnT2ZBbGxvY2F0b3JzOwogICAgIE1hcmtlZEFsbG9j
YXRvciogbV9maXJzdEFsbG9jYXRvciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3Iq
IG1fbGFzdEFsbG9jYXRvciB7IG51bGxwdHIgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw0NSArMzQsMjMg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIFdyaXRpbmcgaXQgdGhp
cyB3YXkgZW5zdXJlcyB0aGF0IHdoZW4geW91IHBhc3MgdGhpcyBhcyBhIGZ1bmN0b3IsIHRoZSBj
YWxsZWUgaXMgc3BlY2lhbGl6ZWQgZm9yCi0vLyB0aGlzIGNhbGxiYWNrLiBJZiB5b3Ugd3JvdGUg
dGhpcyBhcyBhIG5vcm1hbCBmdW5jdGlvbiB0aGVuIHRoZSBjYWxsZWUgd291bGQgYmUgc3BlY2lh
bGl6ZWQgZm9yCi0vLyB0aGUgZnVuY3Rpb24ncyB0eXBlIGFuZCBpdCB3b3VsZCBoYXZlIGluZGly
ZWN0IGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24uIEFuZCB1bmxpa2UgYSBsYW1iZGEsIGl0J3MKLS8v
IHBvc3NpYmxlIHRvIG1hcmsgdGhpcyBBTFdBWVNfSU5MSU5FLgotc3RydWN0IERlc3Ryb3lGdW5j
IHsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYgdm0sIEpTQ2VsbCogY2Vs
bCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjZWxsLT5zdHJ1Y3R1cmVJRCgpKTsKLSAg
ICAgICAgQVNTRVJUKGNlbGwtPmlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRh
bCk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsK
LSAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpOwotICAgICAgICBNZXRob2RUYWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBj
bGFzc0luZm8tPm1ldGhvZFRhYmxlLmRlc3Ryb3k7Ci0gICAgICAgIGRlc3Ryb3koY2VsbCk7Ci0g
ICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLVN1YnNwYWNlOjpTdWJzcGFj
ZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRl
cywgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKK1N1YnNw
YWNlOjpTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXApCiAgICAgOiBtX3NwYWNlKGhl
YXAub2JqZWN0U3BhY2UoKSkKICAgICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9hdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpCi0gICAgLCBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3IoYWxpZ25lZE1lbW9y
eUFsbG9jYXRvcikKLSAgICAsIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uKG1fc3BhY2Uu
Zmlyc3RBbGxvY2F0b3IoKSkKLXsKLSAgICAvLyBJdCdzIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQg
d2UncmUgR0NpbmcgcmlnaHQgbm93IGV2ZW4gaWYgdGhlIGNsaWVudCBpcyBjYXJlZnVsIHRvIG9u
bHkKLSAgICAvLyBjcmVhdGUgc3Vic3BhY2VzIHJpZ2h0IGFmdGVyIFZNIGNyZWF0aW9uLCBzaW5j
ZSBjb2xsZWN0Q29udGludW91c2x5IChhbmQgcHJvYmFibHkgb3RoZXIKLSAgICAvLyB0aGluZ3Mp
IGNvdWxkIGNhdXNlIGEgR0MgdG8gYmUgbGF1bmNoZWQgYXQgcHJldHR5IG11Y2ggYW55IHRpbWUg
YW5kIGl0J3Mgbm90IDEwMCUgb2J2aW91cwotICAgIC8vIHRoYXQgYWxsIGNsaWVudHMgd291bGQg
YmUgYWJsZSB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgemVybyBzYWZlcG9pbnRzIGJldHdlZW4g
d2hlbiB0aGV5Ci0gICAgLy8gY3JlYXRlIFZNIGFuZCB3aGVuIHRoZXkgZG8gdGhpcy4gUHJldmVu
dGluZyBHQyB3aGlsZSB3ZSdyZSBjcmVhdGluZyB0aGUgU3Vic3BhY2UgZW5zdXJlcwotICAgIC8v
IHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB3aGV0aGVyIGl0J3MgT0sgZm9yIHRo
ZSBHQyB0byBldmVyIHNlZSBhIGJyYW5kIG5ldwotICAgIC8vIHN1YnNwYWNlLgoreworfQorCit2
b2lkIFN1YnNwYWNlOjppbml0aWFsaXplKEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBBbGln
bmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQoreworICAgIG1fYXR0
cmlidXRlcyA9IGhlYXBDZWxsVHlwZS0+YXR0cmlidXRlcygpOworICAgIG1faGVhcENlbGxUeXBl
ID0gaGVhcENlbGxUeXBlOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I7CisgICAgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2Fs
aWduZWRNZW1vcnlBbGxvY2F0b3ItPmZpcnN0QWxsb2NhdG9yKCk7CisKKyAgICBIZWFwJiBoZWFw
ID0gKm1fc3BhY2UuaGVhcCgpOwogICAgIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUgcHJldmVudENv
bGxlY3Rpb25TY29wZShoZWFwKTsKICAgICBoZWFwLm9iamVjdFNwYWNlKCkubV9zdWJzcGFjZXMu
YXBwZW5kKHRoaXMpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVt
U2l6ZUNsYXNzZXM7IGktLTspCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBu
dWxscHRyOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJTdWJzcGFjZSh0
aGlzKTsKIH0KIAogU3Vic3BhY2U6On5TdWJzcGFjZSgpCkBAIC04MSw2MCArNTksMTIgQEAgU3Vi
c3BhY2U6On5TdWJzcGFjZSgpCiAKIHZvaWQgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJs
b2NrOjpIYW5kbGUmIGJsb2NrLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgYmxvY2suZmlu
aXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIG1f
aGVhcENlbGxUeXBlLT5maW5pc2hTd2VlcChibG9jaywgZnJlZUxpc3QpOwogfQogCiB2b2lkIFN1
YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewotICAgIERlc3Ryb3lGdW5j
KCkodm0sIGNlbGwpOwotfQotCi0vLyBUaGUgcmVhc29uIHdoeSB3ZSBkaXN0aW5ndWlzaCBiZXR3
ZWVuIGFsbG9jYXRlIGFuZCB0cnlBbGxvY2F0ZSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9m
Ci0vLyBjaGVja3Mgb24gdGhlIGFsbG9jYXRpb24gcGF0aCBpbiBib3RoIGNhc2VzLiBMaWtld2lz
ZSwgdGhlIHJlYXNvbiB3aHkgd2UgaGF2ZSBvdmVybG9hZHMgd2l0aCBhbmQKLS8vIHdpdGhvdXQg
ZGVmZXJyYWxDb250ZXh0IGlzIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgY29kZSBmb3IgY2Fs
bGluZyBhbGxvY2F0ZSB3aGVuIHlvdSBkb24ndAotLy8gbmVlZCB0aGUgZGVmZXJyYWxDb250ZXh0
Lgotdm9pZCogU3Vic3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJl
c3VsdDsKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JG
b3Ioc2l6ZSkpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoKTsKLSAgICBl
bHNlCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlU2xvdyhudWxscHRyLCBzaXplKTsKLSAgICBk
aWRBbGxvY2F0ZShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNw
YWNlOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qg
c2l6ZSkKLXsKLSAgICB2b2lkICpyZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQg
PSBhbGxvY2F0ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShy
ZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxv
Y2F0ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1
bHQgPSBhbGxvY2F0b3ItPnRyeUFsbG9jYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQg
PSB0cnlBbGxvY2F0ZVNsb3cobnVsbHB0ciwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGUo
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAg
dm9pZCogcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFs
bG9jYXRvckZvcihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0
ZShkZWZlcnJhbENvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2Nh
dGVTbG93KGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIG1faGVhcENlbGxUeXBlLT5kZXN0cm95KHZtLCBjZWxs
KTsKIH0KIAogdm9pZCBTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQpAQCAtMTQ0LDEw
NCArNzQsMTcgQEAgdm9pZCBTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogICAgICAg
ICAgICAgYWxsb2NhdG9yLnByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgICAgIH0pOwogCi0g
ICAgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX3NwYWNlLmZpcnN0QWxsb2NhdG9y
KCk7CisgICAgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlB
bGxvY2F0b3ItPmZpcnN0QWxsb2NhdG9yKCk7CiB9CiAKIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1
YnNwYWNlOjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKQogewotICAgIGZvciAoOyBtX2FsbG9jYXRv
ckZvckVtcHR5QWxsb2NhdGlvbjsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2Fs
bG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+bmV4dEFsbG9jYXRvcigpKSB7Ci0gICAgICAgIFN1
YnNwYWNlKiBvdGhlclN1YnNwYWNlID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPnN1
YnNwYWNlKCk7Ci0gICAgICAgIGlmIChvdGhlclN1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKCkgIT0gYWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIAorICAgIGZvciAoOyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbjsgbV9h
bGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlv
bi0+bmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKSB7CiAgICAgICAgIGlm
IChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0
aW9uLT5maW5kRW1wdHlCbG9ja1RvU3RlYWwoKSkKICAgICAgICAgICAgIHJldHVybiBibG9jazsK
ICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogU3Vic3Bh
Y2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCi17Ci0gICAgc2l6ZV90IGluZGV4ID0g
TWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7Ci0gICAgc2l6ZV90IHNpemVDbGFz
cyA9IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKLSAgICBpZiAo
IXNpemVDbGFzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgLy8gVGhpcyBp
cyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVhZHMg
dG8gZW5kIHVwIGhlcmUgaWYgdGhleSB3YW50Ci0gICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0
IHVzZXMgc29tZSBhbGxvY2F0b3IgdGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0
IGEgcG9zc2libHktCi0gICAgLy8ganVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJl
dHVybiBudWxsIGlmIHdlJ3JlIGluIHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAot
ICAgIC8vIGFsbG9jYXRvciBhcyAicGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBC
dXQsIHRoYXQgY291bGQgbGVhZCB0byBwZXJmb3JtYW5jZQotICAgIC8vIHN1cnByaXNlcyBhbmQg
dGhlIGFsZ29yaXRobSBoZXJlIGlzIHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8g
aG9sZCB0aGUgbG9jaywgdG8KLSAgICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFs
bG9jYXRvciBjcmVhdGlvbnMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJl
cwotICAgIC8vIHRoYXQgYW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25s
eSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAotICAgIC8vIGVub3Vn
aDogaXQgd2lsbCBoYXZlIAotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxv
Y2F0b3JMb2NrKCkpOwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fYWxs
b2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdKQotICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwotCi0g
ICAgaWYgKGZhbHNlKQotICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9y
IGZvciAiLCBtX25hbWUsICIsICIsIG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxu
Iik7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX3NwYWNlLmFkZE1hcmtlZEFs
bG9jYXRvcihsb2NrZXIsIHRoaXMsIHNpemVDbGFzcyk7Ci0gICAgaW5kZXggPSBNYXJrZWRTcGFj
ZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplQ2xhc3MpOwotICAgIGZvciAoOzspIHsKLSAgICAgICAg
aWYgKE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xh
c3MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVw
W2luZGV4XSA9IGFsbG9jYXRvcjsKLSAgICAgICAgCi0gICAgICAgIGlmICghaW5kZXgtLSkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3JJ
blN1YnNwYWNlKG1fZmlyc3RBbGxvY2F0b3IpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
Ci0gICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICByZXR1cm4gYWxsb2NhdG9y
OwotfQotCi12b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFs
bG9jYXRlU2xvdyhkZWZlcnJhbENvbnRleHQsIHNpemUpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9j
YXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkK
LXsKLSAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOwotICAgIAot
ICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplKSkK
LSAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsK
LSAgICAKLSAgICBpZiAoc2l6ZSA8PSBPcHRpb25zOjpsYXJnZUFsbG9jYXRpb25DdXRvZmYoKQot
ICAgICAgICAmJiBzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewotICAgICAgICBk
YXRhTG9nKCJGQVRBTDogYXR0YW1wdGluZyB0byBhbGxvY2F0ZSBzbWFsbCBvYmplY3QgdXNpbmcg
bGFyZ2UgYWxsb2NhdGlvbi5cbiIpOwotICAgICAgICBkYXRhTG9nKCJSZXF1ZXN0ZWQgYWxsb2Nh
dGlvbiBzaXplOiAiLCBzaXplLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICBzaXplID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0gICAgTGFyZ2VB
bGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3Bh
Y2UubV9oZWFwLCBzaXplLCB0aGlzKTsKLSAgICBpZiAoIWFsbG9jYXRpb24pCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIAotICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVu
ZChhbGxvY2F0aW9uKTsKLSAgICBtX3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7Ci0g
ICAgbV9zcGFjZS5tX2NhcGFjaXR5ICs9IHNpemU7Ci0gICAgCi0gICAgbV9sYXJnZUFsbG9jYXRp
b25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIGFsbG9jYXRpb24t
PmNlbGwoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFN1YnNwYWNlOjpkaWRBbGxvY2F0ZSh2
b2lkKiBwdHIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHB0cik7Ci0gICAgCi0gICAgLy8gVGhpcyBp
cyB1c2VmdWwgZm9yIGxvZ2dpbmcgYWxsb2NhdGlvbnMsIG9yIGRvaW5nIG90aGVyIGtpbmRzIG9m
IGRlYnVnZ2luZyBoYWNrcy4gSnVzdCBtYWtlCi0gICAgLy8gc3VyZSB5b3UgSlNDX2ZvcmNlR0NT
bG93UGF0aHM9dHJ1ZS4KLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5o
IgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0zNSw0MSArMzYsMjggQEAgY2xhc3MgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjsKIAogLy8gVGhlIGlkZWEgb2Ygc3Vic3BhY2VzIGlzIHRoYXQg
eW91IGNhbiBwcm92aWRlIHNvbWUgY3VzdG9tIGJlaGF2aW9yIGZvciB5b3VyIG9iamVjdHMgaWYg
eW91CiAvLyBhbGxvY2F0ZSB0aGVtIGZyb20gYSBjdXN0b20gU3Vic3BhY2UgaW4gd2hpY2ggeW91
IG92ZXJyaWRlIHNvbWUgb2YgdGhlIHZpcnR1YWwgbWV0aG9kcy4gVGhpcwotLy8gY2xhc3MgaXMg
dGhlIGJhc2VjbGFzcyBvZiBTdWJzcGFjZXMgYW5kIGl0IHByb3ZpZGVzIGEgcmVhc29uYWJsZSBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uLCB3aGVyZQotLy8gc3dlZXBpbmcgYXNzdW1lcyBpbW1vcnRh
bCBzdHJ1Y3R1cmUuIFRoZSBjb21tb24gd2F5cyBvZiBvdmVycmlkaW5nIHRoaXMgYXJlOgotLy8K
LS8vIC0gUHJvdmlkZSBjdXN0b21pemVkIGRlc3RydWN0b3IgYmVoYXZpb3IuIFlvdSBjYW4gY2hh
bmdlIGhvdyB0aGUgZGVzdHJ1Y3RvciBpcyBjYWxsZWQuIFlvdSBjYW4KLS8vICAgYWxzbyBzcGVj
aWFsaXplIHRoZSBkZXN0cnVjdG9yIGNhbGwgaW4gdGhlIGxvb3AuCi0vLwotLy8gLSBVc2UgdGhl
IFN1YnNwYWNlIGFzIGEgcXVpY2sgd2F5IHRvIGl0ZXJhdGUgYWxsIG9mIHRoZSBvYmplY3RzIGlu
IHRoYXQgc3Vic3BhY2UuCisvLyBjbGFzcyBpcyB0aGUgYmFzZWNsYXNzIG9mIFN1YnNwYWNlcy4g
VXN1YWxseSB5b3Ugd2lsbCB1c2UgZWl0aGVyIFN1YnNwYWNlIG9yIEZpeGVkU2l6ZVN1YnNwYWNl
LgogY2xhc3MgU3Vic3BhY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1YnNwYWNlKTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGxvY2F0b3JBdHRyaWJ1dGVzLCBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Vic3BhY2Uo
Q1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+U3Vi
c3BhY2UoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUqLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKik7CiAgICAgCiAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbmFtZS5kYXRhKCk7IH0KICAgICBNYXJrZWRTcGFjZSYgc3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NwYWNlOyB9CiAgICAgCiAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0
cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorICAgIEhlYXBDZWxsVHlw
ZSogaGVhcENlbGxUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwQ2VsbFR5cGU7IH0KICAgICBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9CiAgICAgCi0gICAgLy8gVGhlIHB1cnBv
c2Ugb2Ygb3ZlcnJpZGluZyB0aGlzIGlzIHRvIHNwZWNpYWxpemUgdGhlIHN3ZWVwIGZvciB5b3Vy
IGRlc3RydWN0b3JzLiBUaGlzIHdvbid0Ci0gICAgLy8gYmUgY2FsbGVkIGZvciBuby1kZXN0cnVj
dG9yIGJsb2Nrcy4gVGhpcyBtdXN0IGNhbGwgTWFya2VkQmxvY2s6OmZpbmlzaFN3ZWVwS25vd2lu
Z1N1YnNwYWNlLgotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFu
ZGxlJiwgRnJlZUxpc3QqKTsKLSAgICAKLSAgICAvLyBUaGVzZSBnZXQgY2FsbGVkIGZvciBsYXJn
ZSBvYmplY3RzLgotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7Ci0gICAg
Ci0gICAgTWFya2VkQWxsb2NhdG9yKiB0cnlBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKLSAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogdHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworICAg
IHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisgICAg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CisKKyAgICB2aXJ0dWFsIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlKSA9IDA7CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlv
bigpOwogICAgIApAQCAtOTYsNDggKzg0LDI1IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKICAgICAK
LSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9
Ci0gICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJl
dHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQorICAgIFN1YnNwYWNlKiBuZXh0U3Vi
c3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRTdWJz
cGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgfQorICAgIHZvaWQgc2V0TmV4dFN1YnNwYWNl
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKFN1YnNwYWNlKiBzdWJzcGFjZSkgeyBtX25leHRTdWJz
cGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IHN1YnNwYWNlOyB9CiAKLXByaXZhdGU6Ci0g
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JTbG93KHNpemVfdCk7Ci0gICAgCi0gICAg
Ly8gVGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2VybmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlvbnMg
YW5kIGFsbG9jYXRvciBjcmVhdGlvbi4KLSAgICB2b2lkKiBhbGxvY2F0ZVNsb3coR0NEZWZlcnJh
bENvbnRleHQqLCBzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhHQ0RlZmVycmFs
Q29udGV4dCosIHNpemVfdCk7Ci0gICAgCi0gICAgdm9pZCBkaWRBbGxvY2F0ZSh2b2lkKik7Citw
cm90ZWN0ZWQ6CisgICAgdm9pZCBpbml0aWFsaXplKEhlYXBDZWxsVHlwZSosIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IqKTsKICAgICAKICAgICBNYXJrZWRTcGFjZSYgbV9zcGFjZTsKICAgICAKICAg
ICBDU3RyaW5nIG1fbmFtZTsKICAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsK
KworICAgIEhlYXBDZWxsVHlwZSogbV9oZWFwQ2VsbFR5cGUgeyBudWxscHRyIH07CisgICAgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvciogbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9
OwogICAgIAotICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjsKLSAgICAKLSAgICBzdGQ6OmFycmF5PE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNl
OjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JTaXplU3RlcDsKICAgICBNYXJrZWRBbGxv
Y2F0b3IqIG1fZmlyc3RBbGxvY2F0b3IgeyBudWxscHRyIH07CiAgICAgTWFya2VkQWxsb2NhdG9y
KiBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiB7IG51bGxwdHIgfTsgLy8gVXNlcyB0aGUg
TWFya2VkU3BhY2UgbGlua2VkIGxpc3Qgb2YgYmxvY2tzLgogICAgIFNlbnRpbmVsTGlua2VkTGlz
dDxMYXJnZUFsbG9jYXRpb24sIEJhc2ljUmF3U2VudGluZWxOb2RlPExhcmdlQWxsb2NhdGlvbj4+
IG1fbGFyZ2VBbGxvY2F0aW9uczsKKyAgICBTdWJzcGFjZSogbV9uZXh0U3Vic3BhY2VJbkFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CiB9OwogCi1BTFdBWVNfSU5MSU5FIE1hcmtl
ZEFsbG9jYXRvciogU3Vic3BhY2U6OnRyeUFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSkKLXsKLSAg
ICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpCi0gICAgICAgIHJldHVybiBt
X2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUp
XTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0
b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUg
PD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7Ci0gICAgICAgIGlmIChNYXJrZWRBbGxvY2F0
b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFz
c1RvSW5kZXgoc2l6ZSldKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgcmV0
dXJuIGFsbG9jYXRvckZvclNsb3coc2l6ZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQCBjbGFzcyBQ
cm9wZXJ0eURlc2NyaXB0b3I7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKIGNsYXNzIFN0cnVj
dHVyZTsKIAotZW51bSBjbGFzcyBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgewotICAgIFNob3VsZEFz
c2VydE9uRmFpbHVyZSwKLSAgICBTaG91bGROb3RBc3NlcnRPbkZhaWx1cmUKLX07Ci0KIGVudW0g
Y2xhc3MgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZSB7CiAgICAgSGFzQXJnLAogICAgIERv
ZXNOb3RIYXZlQXJnCkBAIC03OSw4ICs3NCw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQq
IHRyeUFsbG9jYXRlQ2UKIGNsYXNzIEpTQ2VsbCA6IHB1YmxpYyBIZWFwQ2VsbCB7CiAgICAgZnJp
ZW5kIGNsYXNzIEpTVmFsdWU7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSwgR0NEZWZlcnJhbENvbnRl
eHRBcmdQcmVzZW5zZT4KLSAgICBmcmllbmQgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhl
YXAmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBmcmllbmQgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmLCBzaXplX3Qs
IEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKIAogcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IDA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAy
MjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MiwyMyArMTQyLDE0IEBAIFN1YnNwYWNlKiBKU0NlbGw6OnN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICByZXR1cm4gJnZtLmNlbGxTcGFjZTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1vZGUsIEdDRGVmZXJyYWxDb250
ZXh0QXJnUHJlc2Vuc2UgZGVmZXJyYWxDb250ZXh0QXJnUHJlc2VuY2U+Ci1BTFdBWVNfSU5MSU5F
IHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcihIZWFwJiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4
dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitB
TFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcihIZWFwJiBoZWFwLCBzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIEFTU0VSVChkZWZlcnJhbENvbnRleHQgfHwg
IURpc2FsbG93R0M6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKHNp
emUgPj0gc2l6ZW9mKFQpKTsKLSAgICBKU0NlbGwqIHJlc3VsdDsKLSAgICBpZiAobW9kZSA9PSBB
bGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNob3VsZEFzc2VydE9uRmFpbHVyZSkgewotICAgICAgICBy
ZXN1bHQgPSAoZGVmZXJyYWxDb250ZXh0QXJnUHJlc2VuY2UgPT0gR0NEZWZlcnJhbENvbnRleHRB
cmdQcmVzZW5zZTo6SGFzQXJnKQotICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihz
dWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXpl
KSkKLSAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhl
YXAudm0oKSktPmFsbG9jYXRlKHNpemUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQg
PSAoZGVmZXJyYWxDb250ZXh0QXJnUHJlc2VuY2UgPT0gR0NEZWZlcnJhbENvbnRleHRBcmdQcmVz
ZW5zZTo6SGFzQXJnKQotICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFj
ZUZvcjxUPigqaGVhcC52bSgpKS0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXplKSkK
LSAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAu
dm0oKSktPnRyeUFsbG9jYXRlKHNpemUpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQp
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIEpTQ2VsbCogcmVzdWx0
ID0gc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBk
ZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsICYmICFyZXN1bHQpCisgICAgICAgIHJldHVy
biBudWxscHRyOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIEFTU0VSVCghaGVhcC52
bSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKICAgICBoZWFwLnZtKCktPnNldEluaXRpYWxp
emluZ09iamVjdENsYXNzKFQ6OmluZm8oKSk7CkBAIC0xNzAsMjUgKzE2MSwyNSBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
dm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplKQogewotICAgIHJldHVy
biB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRB
c3NlcnRPbkZhaWx1cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6OkRvZXNOb3RIYXZl
QXJnPihoZWFwLCBudWxscHRyLCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVs
cGVyPFQ+KGhlYXAsIHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbChIZWFw
JiBoZWFwLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVy
PFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkTm90QXNzZXJ0T25GYWlsdXJlLCBHQ0Rl
ZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpEb2VzTm90SGF2ZUFyZz4oaGVhcCwgbnVsbHB0ciwg
c2l6ZSk7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFwLCBzaXplLCBu
dWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlB
bGxvY2F0ZUNlbGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRBc3NlcnRP
bkZhaWx1cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZz4oaGVhcCwgZGVm
ZXJyYWxDb250ZXh0LCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+
KGhlYXAsIHNpemUsIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3Nl
cnQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCogdHJ5QWxsb2NhdGVDZWxsKEhl
YXAmIGhlYXAsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXpl
KQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpTaG91bGROb3RBc3NlcnRPbkZhaWx1cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJl
c2Vuc2U6Okhhc0FyZz4oaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKKyAgICByZXR1cm4g
dHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAsIHNpemUsIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKIH0KIAogaW5saW5lIGJvb2wgSlNDZWxs
Ojppc09iamVjdCgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326160</attachid>
            <date>2017-11-06 14:56:30 -0800</date>
            <delta_ts>2017-11-07 11:34:23 -0800</delta_ts>
            <desc>close to done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70450</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDcwLDYg
KzQ3MCw3IEBAIGhlYXAvQ2VsbENvbnRhaW5lci5jcHAKIGhlYXAvQ29kZUJsb2NrU2V0LmNwcAog
aGVhcC9Db2xsZWN0aW9uU2NvcGUuY3BwCiBoZWFwL0NvbGxlY3RvclBoYXNlLmNwcAoraGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmNwcAogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKIGhlYXAvRGVm
ZXJHQy5jcHAKIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcApAQCAtNDg2LDEyICs0ODcsMTUgQEAg
aGVhcC9IYW5kbGVTZXQuY3BwCiBoZWFwL0hhbmRsZVN0YWNrLmNwcAogaGVhcC9IZWFwLmNwcAog
aGVhcC9IZWFwQ2VsbC5jcHAKK2hlYXAvSGVhcENlbGxUeXBlLmNwcAogaGVhcC9IZWFwRmluYWxp
emVyQ2FsbGJhY2suY3BwCiBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAogaGVhcC9IZWFwUHJvZmls
ZXIuY3BwCiBoZWFwL0hlYXBTbmFwc2hvdC5jcHAKIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5j
cHAKIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAoraGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcAoraGVhcC9Jc29TdWJzcGFjZS5jcHAKIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQu
Y3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNDQ1OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNiArNTQwLDExIEBACiAJCTBGREIyQ0NBMTcz
REE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZU
TFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEQjJDRTgxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFNjE3NDgz
MEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZEQjJDRUExNzQ4OTZDNzAw
N0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50
SlNMb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMUIxRkFF
NjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTIyMUZBRTg1OEMwMDZGMzkw
MSAvKiBIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRENFMTFGMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTEyQTFG
QUZBODVGMDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMjgxRkFGQTg1OTAwNkYzOTAxIC8qIENv
bXBsZXRlU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkRDRTEyRDFGQUZCNEU1MDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTJCMUZBRkI0
REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTMyMUZCMTFEQTQwMDZGMzkwMSAvKiBJc29BbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZC
MzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyB9Owog
CQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RkIx
REZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJ
MEZERjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIzS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIz
S2luZC5oICovOyB9OwpAQCAtMjY2Niw2ICsyNjcxLDE1IEBACiAJCTBGREIyQ0U1MTc0ODMwQTIw
MDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdXb3JrbGlzdC5jcHA7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZH
V29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3Qu
aDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkRCMkNFOTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25jdXJyZW50SlNMb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTFGMUZBRTg1ODcwMDZGMzkwMSAvKiBI
ZWFwQ2VsbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTIwMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjcxRkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vi
c3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGxldGVTdWJzcGFjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTI4MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21w
bGV0ZVN1YnNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBsZXRlU3Vic3BhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1
YnNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzb1N1YnNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRENFMTJDMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJc29TdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRENFMTJGMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5
MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29BbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERC
RkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1
bXAuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRFODdGODFERkQwQzZE
MDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDZWxsQ29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTU0ODcsNiArNTUwMSw3IEBACiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5QjZDIC8qIEFs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0MTYwMEY1OUI2
QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEExREI5NTlGNjAw
QjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLAorCQkJCTBGRENFMTFCMUZBRTYxRjQwMDZG
MzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLywKIAkJCQkwRjk2MzAzNTFENDE5MkMz
MDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJMEY5NjMwMzYxRDQx
OTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuaCAqLywKIAkJCQkwRkRFODdGODFE
RkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5jcHAgKi8sCkBAIC01NTAxLDYgKzU1MTYs
OCBAQAogCQkJCTBGQTc2MjAxMURCOTI0MjMwMEI3QTJGRCAvKiBDb2xsZWN0aW9uU2NvcGUuaCAq
LywKIAkJCQkwRkQwRTVFNTFFNDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuY3BwICov
LAogCQkJCTBGRDBFNUU2MUU0M0QzNDcwMDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5oICovLAor
CQkJCTBGRENFMTI3MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmNwcCAqLywK
KwkJCQkwRkRDRTEyODFGQUZBODU5MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oICovLAog
CQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8s
CiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8s
CiAJCQkJMEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5Lmgg
Ki8sCkBAIC01NTUxLDYgKzU1NjgsOCBAQAogCQkJCURDM0QyQjBCMUQzNDM3NkUwMEJBOTE4QyAv
KiBIZWFwQ2VsbC5jcHAgKi8sCiAJCQkJREMzRDJCMDkxRDM0MzE2MTAwQkE5MThDIC8qIEhlYXBD
ZWxsLmggKi8sCiAJCQkJMEYwNzBBNDQxRDU0M0E4OTAwNkU3MjMyIC8qIEhlYXBDZWxsSW5saW5l
cy5oICovLAorCQkJCTBGRENFMTIwMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuY3Bw
ICovLAorCQkJCTBGRENFMTFGMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCAqLywK
IAkJCQkwRjBDQUVGRDFFQzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmNw
cCAqLywKIAkJCQkwRjBDQUVGRTFFQzREQTg1MDA5NzBEMTIgLyogSGVhcEZpbmFsaXplckNhbGxi
YWNrLmggKi8sCiAJCQkJMEYzMkJEMEUxQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29s
LmNwcCAqLywKQEAgLTU1NjcsNiArNTU4NiwxMCBAQAogCQkJCTBGQURFNjcyMUQ0RDIzQkMwMDc2
ODQ1NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUMyNUY4QkNCMTU3NTQ0QTkwMDI0NUI3MSAvKiBJ
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovLAogCQkJCUMyNUY4QkNDMTU3NTQ0QTkwMDI0NUI3MSAv
KiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCAqLywKKwkJCQkwRkRDRTEyRjFGQjExRDlEMDA2RjM5MDEg
LyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCisJCQkJMEZEQ0UxMzAxRkIxMUQ5
RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKKwkJCQkwRkRDRTEy
QzFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuY3BwICovLAorCQkJCTBGRENFMTJCMUZB
RkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5oICovLAogCQkJCTBGNzY2RDI5MTVBOENDMzQw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi8sCiAJCQkJMEY3NjZEMkExNUE4Q0Mz
NDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi8sCiAJCQkJMEYwNzBBNDUxRDU0M0E4
OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5jcHAgKi8sCkBAIC04MDAwLDYgKzgwMjMsNyBA
QAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9w
Y29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQ0UxMzIxRkIxMURBNDAwNkYzOTAxIC8qIElz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYz
OUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0E4QUYzNTE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkM5OUQ1MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmlu
Z1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODA1MSw2ICs4MDc1LDcgQEAKIAkJCQkw
RkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZEQ0UxMkQxRkFGQjRFNTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRh
dGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyog
QjNDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzkxOUI3ODAxRTAzNTU5QzAwNUJF
RUQ4IC8qIEIzQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTkzLDYgKzg2MTgsNyBAQAog
CQkJCUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzBCNzkxOTUxQzAyNEEyODAwMjQ4MUUyIC8qIEdlbmVyYXRvckZ1
bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk3MUMwMjRBMjkw
MDI0ODFFMiAvKiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZEQ0UxMkExRkFGQTg1RjAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwQjc5MTk5MUMwMjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTlEMUMwMjRBNTYwMDI0ODFFMiAvKiBHZW5l
cmF0b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTEx
MDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODMwLDYg
Kzg4NTYsNyBAQAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmly
b25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEOTcyMjc1MkRDNTQ0NTlCOTEyNUI1MzkgLyog
SlNNb2R1bGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMThDQkMxMUI4QUVGNTEwMEEy
OTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZE
Q0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTM5REE0QTcxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQxRDFCOTAxM0MzMDAzNDZCNTIgLyogSlNOYXRpdmVT
dGRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYw
IC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTkyMjYsNiArOTI1Myw3IEBACiAJCQkJ
MEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkQ0REVDMTk4MzJEQzQwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRENFMTIyMUZBRTg1OEMwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REYwMTk4MzJERDYwMDdENEIxOSAvKiBUeXBl
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRp
czg2LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRp
czg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNjQ2LDcgKzExNjQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8vIFRyeSB0
byBkbyBzb21lIGNvbnN0YW50LWZvbGRpbmcgaGVyZS4KICAgICAgICAgaWYgKHN1YnNwYWNlLT5o
YXNJbnRQdHIoKSAmJiBzaXplLT5oYXNJbnRQdHIoKSkgewotICAgICAgICAgICAgU3Vic3BhY2Uq
IGFjdHVhbFN1YnNwYWNlID0gYml0d2lzZV9jYXN0PFN1YnNwYWNlKj4oc3Vic3BhY2UtPmFzSW50
UHRyKCkpOworICAgICAgICAgICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBi
aXR3aXNlX2Nhc3Q8Q29tcGxldGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAg
ICAgICAgICAgIHNpemVfdCBhY3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1
YWxTdWJzcGFjZS0+YWxsb2NhdG9yRm9yKGFjdHVhbFNpemUpOwpAQCAtMTE2ODMsNyArMTE2ODMs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHN1YnNwYWNlLCBtX291dC5zdWIoc2l6ZUNs
YXNzSW5kZXgsIG1fb3V0LmludFB0ck9uZSkpKTsKICAgICB9CiAgICAgCi0gICAgTFZhbHVlIGFs
bG9jYXRvckZvclNpemUoU3Vic3BhY2UmIHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxv
Y2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoQ29tcGxldGVTdWJzcGFj
ZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JTaXplKG1fb3V0LmNvbnN0SW50UHRyKCZzdWJzcGFj
ZSksIHNpemUsIHNsb3dQYXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI0
NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAKKyNpbmNsdWRlICJNYXJr
ZWRBbGxvY2F0b3IuaCIKKwogbmFtZXNwYWNlIEpTQyB7IAogCiBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOjpBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKQEAgLTM2LDYgKzM4LDQxIEBAIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I6On5BbGlnbmVkTWVtb3J5QWwKIHsKIH0KIAordm9pZCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOjpyZWdpc3RlckFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
cikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLT5uZXh0QWxsb2NhdG9ySW5BbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgIAorICAgIGlmICghbV9maXJzdEFsbG9jYXRvcikg
eworICAgICAgICBmb3IgKFN1YnNwYWNlQmFzZSogc3Vic3BhY2UgPSBtX2ZpcnN0U3Vic3BhY2U7
IHN1YnNwYWNlOyBzdWJzcGFjZSA9IHN1YnNwYWNlLT5uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKSkKKyAgICAgICAgICAgIHN1YnNwYWNlLT5kaWRDcmVhdGVGaXJzdEFsbG9j
YXRvcihhbGxvY2F0b3IpOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFz
dEFsbG9jYXRvcik7CisgICAgICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CisgICAg
ICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fbGFzdEFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcihhbGxvY2F0b3IpOworICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKK30K
KworLy8gRklYTUU6IFdlIHVzZSB0aGlzIGlkaW9tIGEgbG90LiBXZSBzaG91bGQgY29tZSB1cCB3
aXRoIGEgY2xldmVyIHRlbXBsYXRlIGZvciB0aGlzIGtpbmQgb2YKKy8vIHNpbmdseS1saW5rZWQg
bGlzdCwgd2hlcmUgZWFjaCBlbGVtZW50IG1heSBiZSBvbiBtdWx0aXBsZSBsaXN0cy4KK3ZvaWQg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJTdWJzcGFjZShTdWJzcGFjZUJhc2UqIHN1
YnNwYWNlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFzdWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgIAorICAgIGlmICghbV9maXJzdFN1YnNwYWNl
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xhc3RTdWJzcGFjZSk7CisgICAgICAgIG1f
Zmlyc3RTdWJzcGFjZSA9IHN1YnNwYWNlOworICAgICAgICBtX2xhc3RTdWJzcGFjZSA9IHN1YnNw
YWNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9sYXN0U3Vic3BhY2UtPnNldE5l
eHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeVN1YnNwYWNlKHN1YnNwYWNlKTsKKyAgICBtX2xhc3RT
dWJzcGFjZSA9IHN1YnNwYWNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIE1hcmtlZEFsbG9jYXRvcjsKKwogY2xhc3MgQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC00MCw2ICs0Miwx
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSA9
IDA7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7
CisKKyAgICB2b2lkIHJlZ2lzdGVyQWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciopOworICAgIE1h
cmtlZEFsbG9jYXRvciogZmlyc3RBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0QWxs
b2NhdG9yOyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2VCYXNlKik7CisK
K3ByaXZhdGU6CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX2ZpcnN0QWxsb2NhdG9yOworICAgIE1h
cmtlZEFsbG9jYXRvciogbV9sYXN0QWxsb2NhdG9yOworICAgIFN1YnNwYWNlQmFzZSogbV9maXJz
dFN1YnNwYWNlOworICAgIFN1YnNwYWNlQmFzZSogbV9sYXN0U3Vic3BhY2U7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRp
b25GYWlsdXJlTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSB7CisgICAgQXNzZXJ0LAorICAgIFJldHVybk51bGwKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0
ZVN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAi
TWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5o
IgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ29t
cGxldGVTdWJzcGFjZTo6Q29tcGxldGVTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAs
IEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGln
bmVkTWVtb3J5QWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKK3sKKyAgICBp
bml0aWFsaXplKGhlYXBDZWxsVHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CisgICAgZm9y
IChzaXplX3QgaSA9IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKKyAgICAgICAg
bV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpXSA9IG51bGxwdHI7Cit9CisKK0NvbXBsZXRlU3Vic3Bh
Y2U6On5Db21wbGV0ZVN1YnNwYWNlKCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0
ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
LCBmYWlsdXJlTW9kZSk7Cit9CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlKHNp
emVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVh
bChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogQ29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUp
Cit7CisgICAgdm9pZCAqcmVzdWx0OworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5h
bGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICBlbHNlCisgICAgICAg
IHJlc3VsdCA9IGFsbG9jYXRlU2xvdyhzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2Rl
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vi
c3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IGluZGV4
ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CisgICAgc2l6ZV90IHNpemVD
bGFzcyA9IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKKyAgICBp
ZiAoIXNpemVDbGFzcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgLy8gVGhp
cyBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVh
ZHMgdG8gZW5kIHVwIGhlcmUgaWYgdGhleSB3YW50CisgICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0
aGF0IHVzZXMgc29tZSBhbGxvY2F0b3IgdGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0
aGF0IGEgcG9zc2libHktCisgICAgLy8ganVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRv
IHJldHVybiBudWxsIGlmIHdlJ3JlIGluIHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVs
bAorICAgIC8vIGFsbG9jYXRvciBhcyAicGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgi
LiBCdXQsIHRoYXQgY291bGQgbGVhZCB0byBwZXJmb3JtYW5jZQorICAgIC8vIHN1cnByaXNlcyBh
bmQgdGhlIGFsZ29yaXRobSBoZXJlIGlzIHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMg
dG8gaG9sZCB0aGUgbG9jaywgdG8KKyAgICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtl
ZEFsbG9jYXRvciBjcmVhdGlvbnMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5z
dXJlcworICAgIC8vIHRoYXQgYW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwg
b25seSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAorICAgIC8vIGVu
b3VnaDogaXQgd2lsbCBoYXZlIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5h
bGxvY2F0b3JMb2NrKCkpOworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1f
YWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwor
CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2Nh
dG9yIGZvciAiLCBtX25hbWUsICIsICIsIG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAi
LlxuIik7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFsbG9jYXRvcj4gdW5pcXVlQWxsb2Nh
dG9yID0KKyAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxNYXJrZWRBbGxvY2F0b3I+KG1fc3BhY2Uu
aGVhcCgpLCBzaXplQ2xhc3MpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdW5p
cXVlQWxsb2NhdG9yLmdldCgpOworICAgIG1fYWxsb2NhdG9ycy5hcHBlbmQoV1RGTW92ZSh1bmlx
dWVBbGxvY2F0b3IpKTsKKyAgICBhbGxvY2F0b3ItPnNldFN1YnNwYWNlKHRoaXMpOworICAgIG1f
c3BhY2UuYWRkTWFya2VkQWxsb2NhdG9yKGxvY2tlciwgYWxsb2NhdG9yKTsKKyAgICBpbmRleCA9
IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemVDbGFzcyk7CisgICAgZm9yICg7Oykg
eworICAgICAgICBpZiAoTWFya2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhd
ICE9IHNpemVDbGFzcykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fYWxsb2NhdG9y
Rm9yU2l6ZVN0ZXBbaW5kZXhdID0gYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgaWYgKCFp
bmRleC0tKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGFsbG9jYXRvci0+c2V0TmV4
dEFsbG9jYXRvckluU3Vic3BhY2UobV9maXJzdEFsbG9jYXRvcik7CisgICAgbV9hbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLT5yZWdpc3RlckFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yOworfQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNs
b3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlB
bGxvY2F0ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKKyAgICBpZiAoZmFpbHVyZU1vZGUg
PT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFj
ZTo6dHJ5QWxsb2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0KQoreworICAgIHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0o
KSk7CisgICAgCisgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9y
Rm9yKHNpemUpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZShkZWZlcnJh
bENvbnRleHQpOworICAgIAorICAgIGlmIChzaXplIDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlv
bkN1dG9mZigpCisgICAgICAgICYmIHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7
CisgICAgICAgIGRhdGFMb2coIkZBVEFMOiBhdHRhbXB0aW5nIHRvIGFsbG9jYXRlIHNtYWxsIG9i
amVjdCB1c2luZyBsYXJnZSBhbGxvY2F0aW9uLlxuIik7CisgICAgICAgIGRhdGFMb2coIlJlcXVl
c3RlZCBhbGxvY2F0aW9uIHNpemU6ICIsIHNpemUsICJcbiIpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX3NwYWNlLmhlYXAoKS0+Y29s
bGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOworICAgIAorICAgIHNpemUg
PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkU3BhY2U6OnNpemVTdGVwPihzaXplKTsK
KyAgICBMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNy
ZWF0ZSgqbV9zcGFjZS5tX2hlYXAsIHNpemUsIHRoaXMpOworICAgIGlmICghYWxsb2NhdGlvbikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgbV9zcGFjZS5tX2xhcmdlQWxsb2Nh
dGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOworICAgIG1fc3BhY2UubV9oZWFwLT5kaWRBbGxvY2F0
ZShzaXplKTsKKyAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKKyAgICAKKyAgICBtX2xh
cmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOworICAgICAgICAKKyAgICByZXR1cm4g
YWxsb2NhdGlvbi0+Y2VsbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlIDogcHVibGljIFN1
YnNwYWNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdWJzcGFjZSk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGxl
dGVTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBIZWFwQ2VsbFR5cGUqLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBsZXRlU3Vic3BhY2Uo
KTsKKworICAgIC8vIEluIHNvbWUgY29kZSBwYXRocywgd2UgbmVlZCBpdCB0byBiZSBhIGNvbXBp
bGUgZXJyb3IgdG8gY2FsbCB0aGUgdmlydHVhbCB2ZXJzaW9uIG9mIG9uZSBvZgorICAgIC8vIHRo
ZXNlIGZ1bmN0aW9ucy4gVGhhdCdzIHdoeSB3ZSBkbyBmaW5hbCBtZXRob2RzIHRoZSBvbGQgc2No
b29sIHdheS4KKyAgICAKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3Qs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAg
ICAKKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBh
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSk7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRv
ckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN1YnNwYWNlLCBtX2FsbG9j
YXRvckZvclNpemVTdGVwKTsgfQorICAgIAorICAgIE1hcmtlZEFsbG9jYXRvcioqIGFsbG9jYXRv
ckZvclNpemVTdGVwKCkgeyByZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0KKwor
cHJpdmF0ZToKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsK
KyAgICAKKyAgICAvLyBUaGVzZSBzbG93IHBhdGhzIGFyZSBjb25jZXJuZWQgd2l0aCBsYXJnZSBh
bGxvY2F0aW9ucyBhbmQgYWxsb2NhdG9yIGNyZWF0aW9uLgorICAgIHZvaWQqIGFsbG9jYXRlU2xv
dyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAg
ICB2b2lkKiB0cnlBbGxvY2F0ZVNsb3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCopOworICAg
IAorICAgIHN0ZDo6YXJyYXk8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkU3BhY2U6Om51bVNpemVD
bGFzc2VzPiBtX2FsbG9jYXRvckZvclNpemVTdGVwOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8TWFya2VkQWxsb2NhdG9yPj4gbV9hbGxvY2F0b3JzOworfTsKKworQUxXQVlTX0lOTElORSBN
YXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBz
aXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgaWYgKHNpemUg
PD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciog
cmVzdWx0ID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9J
bmRleChzaXplKV07CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OlJldHVybk51bGwgfHwgcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNsb3coc2l6ZSk7CisgICAgfQorICAgIHJldHVy
biBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCisKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCisvLyBXcml0aW5nIGl0IHRoaXMgd2F5
IGVuc3VyZXMgdGhhdCB3aGVuIHlvdSBwYXNzIHRoaXMgYXMgYSBmdW5jdG9yLCB0aGUgY2FsbGVl
IGlzIHNwZWNpYWxpemVkIGZvcgorLy8gdGhpcyBjYWxsYmFjay4gSWYgeW91IHdyb3RlIHRoaXMg
YXMgYSBub3JtYWwgZnVuY3Rpb24gdGhlbiB0aGUgY2FsbGVlIHdvdWxkIGJlIHNwZWNpYWxpemVk
IGZvcgorLy8gdGhlIGZ1bmN0aW9uJ3MgdHlwZSBhbmQgaXQgd291bGQgaGF2ZSBpbmRpcmVjdCBj
YWxscyB0byB0aGF0IGZ1bmN0aW9uLiBBbmQgdW5saWtlIGEgbGFtYmRhLCBpdCdzCisvLyBwb3Nz
aWJsZSB0byBtYXJrIHRoaXMgQUxXQVlTX0lOTElORS4KK3N0cnVjdCBEZXN0cm95RnVuYyB7Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoY2VsbC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAg
IEFTU0VSVChjZWxsLT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpOwor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAg
ICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsK
KyAgICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJ
bmZvLT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0cm95KGNlbGwpOworICAgIH0K
K307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitIZWFwQ2VsbFR5cGU6OkhlYXBDZWxs
VHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBtX2F0dHJpYnV0ZXMo
YXR0cmlidXRlcykKK3sKK30KKworSGVhcENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKCkKK3sKK30K
Kwordm9pZCBIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJs
b2NrLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5n
U3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEhlYXBDZWxsVHlw
ZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZt
LCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgSGVhcENlbGxUeXBlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwQ2Vs
bFR5cGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5IZWFwQ2VsbFR5cGUoKTsKKworICAgIGNvbnN0IEFsbG9j
YXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KKworICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBpcyB0byBzcGVjaWFs
aXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24ndAorICAgIC8vIGJl
IGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBjYWxsIE1hcmtlZEJs
b2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisKKyAgICAvLyBUaGVzZSBn
ZXQgY2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFZN
JiwgSlNDZWxsKik7CisKK3ByaXZhdGU6CisgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJp
YnV0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6SXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcigpCit7Cit9CisKK0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6On5Jc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKCkKK3sKK30KKwordm9pZCogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQor
eworICAgIC8vIFNpbmNlIHRoaXMgaXMgZGVzaWduZWQgc3BlY2lhbGx5IGZvciBJc29TdWJzcGFj
ZSwgd2Uga25vdyB0aGF0IHdlIHdpbGwgb25seSBiZSBhc2tlZCB0bworICAgIC8vIGFsbG9jYXRl
IE1hcmtlZEJsb2Nrcy4KKyAgICBSRUxFQVNFX0FTU0VSVChhbGlnbm1lbnQgPT0gTWFya2VkQmxv
Y2s6OmJsb2NrU2l6ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSBNYXJrZWRCbG9jazo6
YmxvY2tTaXplKTsKKyAgICAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgCisgICAgbV9maXJzdFVuY29tbWl0dGVkID0gbV9jb21taXR0ZWQuZmluZEJpdChtX2ZpcnN0
VW5jb21taXR0ZWQsIGZhbHNlKTsKKyAgICBpZiAobV9maXJzdFVuY29tbWl0dGVkIDwgbV9ibG9j
a3Muc2l6ZSgpKSB7CisgICAgICAgIG1fY29tbWl0dGVkW21fZmlyc3RVbmNvbW1pdHRlZF0gPSB0
cnVlOworICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2Jsb2Nrc1ttX2ZpcnN0VW5jb21taXR0ZWRd
OworICAgICAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KHJlc3VsdCwgTWFya2VkQmxvY2s6OmJsb2Nr
U2l6ZSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICB2b2lkKiByZXN1bHQgPSBmYXN0QWxpZ25lZE1hbGxvYyhNYXJrZWRCbG9jazo6YmxvY2tT
aXplLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1fYmxv
Y2tzLnNpemUoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQocmVzdWx0KTsKKyAgICBtX2Jsb2NrSW5k
aWNlcy5hZGQocmVzdWx0LCBpbmRleCk7CisgICAgaWYgKG1fYmxvY2tzLmNhcGFjaXR5KCkgIT0g
bV9jb21taXR0ZWQuc2l6ZSgpKQorICAgICAgICBtX2NvbW1pdHRlZC5yZXNpemUobV9ibG9ja3Mu
Y2FwYWNpdHkoKSk7CisgICAgbV9jb21taXR0ZWRbaW5kZXhdID0gdHJ1ZTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZyZWVBbGlnbmVk
TWVtb3J5KHZvaWQqIGJhc2VQdHIpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworICAgIAorICAgIGF1dG8gaXRlciA9IG1fYmxvY2tJbmRpY2VzLmZpbmQoYmFzZVB0cik7
CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtX2Jsb2NrSW5kaWNlcy5lbmQoKSk7CisgICAg
dW5zaWduZWQgaW5kZXggPSBpdGVyLT52YWx1ZTsKKyAgICBtX2NvbW1pdHRlZFtpbmRleF0gPSBm
YWxzZTsKKyAgICBtX2ZpcnN0VW5jb21taXR0ZWQgPSBzdGQ6Om1pbihpbmRleCwgbV9maXJzdFVu
Y29tbWl0dGVkKTsKKyAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXQoYmFzZVB0ciwgTWFya2VkQmxv
Y2s6OmJsb2NrU2l6ZSk7Cit9CisKK3ZvaWQgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiR0NJc29BbGxvY2F0
b3IiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJ
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIDogcHVibGljIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Ig
eworcHVibGljOgorICAgIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKKyAgICB+SXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpOworCisgICAgdm9pZCogdHJ5QWxsb2NhdGVBbGlnbmVkTWVt
b3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBvdmVycmlkZTsKKyAgICB2b2lkIGZy
ZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIExvY2sgbV9sb2NrOworICAg
IFZlY3Rvcjx2b2lkKj4gbV9ibG9ja3M7CisgICAgSGFzaE1hcDx2b2lkKiwgdW5zaWduZWQ+IG1f
YmxvY2tJbmRpY2VzOworICAgIEZhc3RCaXRWZWN0b3IgbV9jb21taXR0ZWQ7CisgICAgdW5zaWdu
ZWQgbV9maXJzdFVuY29tbWl0dGVkIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklzb1N1
YnNwYWNlLmgiCisKKyNpbmNsdWRlICJJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSXNv
U3Vic3BhY2U6Oklzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgSGVhcENlbGxU
eXBlKiBoZWFwQ2VsbFR5cGUsIHNpemVfdCBzaXplKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVh
cCkKKyAgICAsIG1fYWxsb2NhdG9yKCZoZWFwLCBzaXplKQorICAgICwgbV9pc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4o
KSkKK3sKKyAgICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgbV9pc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmdldCgpKTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxv
Y2F0b3JMb2NrKCkpOworICAgIG1fYWxsb2NhdG9yLnNldFN1YnNwYWNlKHRoaXMpOworICAgIG1f
c3BhY2UuYWRkTWFya2VkQWxsb2NhdG9yKGxvY2tlciwgJm1fYWxsb2NhdG9yKTsKKyAgICBtX2Fs
aWduZWRNZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVyQWxsb2NhdG9yKCZtX2FsbG9jYXRvcik7Cisg
ICAgbV9maXJzdEFsbG9jYXRvciA9ICZtX2FsbG9jYXRvcjsKK30KKworSXNvU3Vic3BhY2U6On5J
c29TdWJzcGFjZSgpCit7Cit9CisKK01hcmtlZEFsbG9jYXRvciogSXNvU3Vic3BhY2U6OmFsbG9j
YXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQor
eworICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIGZhaWx1cmVNb2RlKTsK
K30KKworTWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVh
bChzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKKyAgICByZXR1cm4gJm1fYWxsb2NhdG9yOworfQor
Cit2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkK
K3sKKyAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwg
ZmFpbHVyZU1vZGUpOworfQorCit2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFs
KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9
PSB0aGlzLT5zaXplKCkpOworICAgIHJldHVybiBtX2FsbG9jYXRvci5hbGxvY2F0ZShkZWZlcnJh
bENvbnRleHQsIGZhaWx1cmVNb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNp
bmNsdWRlICJTdWJzcGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjsKKworY2xhc3MgSXNvU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2Ug
eworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYsIEhlYXBDZWxsVHlwZSosIHNpemVfdCBzaXplKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB+SXNvU3Vic3BhY2UoKTsKKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9hbGxvY2F0b3IuY2VsbFNpemUoKTsgfQorCisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3JGb3Ioc2l6ZV90LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlKTsKKworICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KTsKKworcHJpdmF0ZToKKworICAgIE1hcmtlZEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI0
NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDE2IEBAIE1hcmtlZEFsbG9jYXRvcjo6TWFya2Vk
QWxsb2NhdG9yKEhlYXAqIGgKICAgICAsIG1fY3VycmVudEJsb2NrKDApCiAgICAgLCBtX2xhc3RB
Y3RpdmVCbG9jaygwKQogICAgICwgbV9jZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2Vs
bFNpemUpKQotICAgICwgbV9hdHRyaWJ1dGVzKHN1YnNwYWNlLT5hdHRyaWJ1dGVzKCkpCiAgICAg
LCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fc3Vic3BhY2Uoc3Vic3BhY2UpCiB7CiB9CiAKK3ZvaWQg
TWFya2VkQWxsb2NhdG9yOjpzZXRTdWJzcGFjZShTdWJzcGFjZSogc3Vic3BhY2UpCit7CisgICAg
bV9hdHRyaWJ1dGVzID0gc3Vic3BhY2UtPmF0dHJpYnV0ZXMoKTsKKyAgICBtX3N1YnNwYWNlID0g
c3Vic3BhY2U7Cit9CisKIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSBk
ZWFkbGluZSkKIHsKICAgICB1bnNpZ25lZCBpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA9IDA7CkBA
IC0xNzUsMTkgKzE3OSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRv
VGUKICAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKIH0KIAotdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQp
Ci17Ci0gICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7Ci0gICAgcmV0dXJuIGFsbG9jYXRl
U2xvd0Nhc2VJbXBsKGRlZmVycmFsQ29udGV4dCwgY3Jhc2hPbkZhaWx1cmUpOwotfQotCi12b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7Ci0g
ICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGRlZmVycmFsQ29udGV4dCwgY3Jhc2hPbkZh
aWx1cmUpOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBs
KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIGJvb2wgY3Jhc2hPbkZhaWx1cmUp
Cit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQog
ewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBB
U1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKQEAg
LTIwNCwxMSArMTk2LDggQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNl
SQogICAgIAogICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2FsbGJh
Y2sgYW5kIG5vdyB0aGlzIGFsbG9jYXRvciBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25seQog
ICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0IGEg
Y2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24uCi0gICAgaWYgKFVOTElLRUxZKG1f
Y3VycmVudEJsb2NrKSkgewotICAgICAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCi0gICAgICAgICAg
ICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAgICAgcmV0dXJuIHRyeUFs
bG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWShtX2N1cnJl
bnRCbG9jaykpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1
cmVNb2RlKTsKICAgICAKICAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xs
ZWN0aW5nKCk7CiAgICAgCkBAIC0yMTcsNyArMjA2LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2Nr
ID0gdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgaWYgKGNy
YXNoT25GYWlsdXJlKQorICAgICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpBc3NlcnQpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjQ0
NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNjcsMTMgKzY3LDE3IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIxMjEKIAog
Y2xhc3MgTWFya2VkQWxsb2NhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRB
bGxvY2F0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
Q2VsbFNpemUoKTsKIAotICAgIE1hcmtlZEFsbG9jYXRvcihIZWFwKiwgU3Vic3BhY2UqLCBzaXpl
X3QgY2VsbFNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvcihIZWFwKiwgc2l6ZV90IGNlbGxTaXpl
KTsKKyAgICB2b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpOwogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICB2b2lk
IHN0b3BBbGxvY2F0aW5nKCk7CkBAIC05MCw4ICs5NCw3IEBAIHB1YmxpYzoKICAgICBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24g
PT0gTmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxs
OjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9
Ci0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7Ci0gICAg
dm9pZCogdHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9p
ZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwog
ICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KIAogICAgIGJvb2wgaXNGcmVlTGlz
dGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0OwpAQCAtMTM2LDkgKzEzOSwxMSBAQCBw
dWJsaWM6CiAgICAgCiAgICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9uZXh0QWxsb2NhdG9yOyB9CiAgICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0QWxs
b2NhdG9ySW5TdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluU3Vic3Bh
Y2U7IH0KKyAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKTsgfQogICAgIAogICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvcihNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KICAgICB2
b2lkIHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
KSB7IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxvY2F0b3I7IH0KKyAgICB2b2lkIHNl
dE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yID0gYWxs
b2NhdG9yOyB9CiAgICAgCiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEVtcHR5QmxvY2tU
b1N0ZWFsKCk7CiAgICAgCkBAIC0xNTUsOSArMTYwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCopOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqKTsK
LSAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0RlZmVycmFsQ29udGV4dCosIGJvb2wg
Y3Jhc2hPbkZhaWx1cmUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgdm9pZCogdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUFsbG9j
YXRlQmxvY2soKTsKQEAgLTE5MiwxMCArMTk1LDExIEBAIHByaXZhdGU6CiAgICAgQWxsb2NhdG9y
QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBzaG91
bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4Ci0gICAgSGVhcCogbV9oZWFwOwotICAgIFN1YnNwYWNl
KiBtX3N1YnNwYWNlOworICAgIEhlYXAqIG1faGVhcCB7IG51bGxwdHIgfTsKKyAgICBTdWJzcGFj
ZSogbV9zdWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFs
bG9jYXRvciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRv
ckluU3Vic3BhY2UgeyBudWxscHRyIH07CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxv
Y2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CiB9OwogCiBpbmxpbmUg
cHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5o
CShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIxICszNSwxMiBAQCBpbmxp
bmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlCiAgICAgcmV0dXJuIG1fZnJlZUxp
c3QuY29udGFpbnMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0KQorQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxv
Y2F0ZSgKICAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CiAgICAgICAgICAgICBzYW5pdGl6
ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIZWFwQ2VsbCo+KHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7Ci0gICAg
ICAgIH0pOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICByZXR1cm4gbV9m
cmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7Ci0gICAgICAg
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0
KSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNs
b3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKICAgICAgICAgfSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlz
aW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUxLDEwICs1NTEsOCBAQCB2b2lkIE1hcmtlZFNwYWNlOjpk
dW1wQml0cyhQcmludFN0cmVhbSYgCiAgICAgICAgIH0pOwogfQogCi1NYXJrZWRBbGxvY2F0b3Iq
IE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoCi0gICAgY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBTdWJzcGFjZSogc3Vic3BhY2UsIHNpemVfdCBzaXplQ2xhc3MpCit2b2lkIE1hcmtlZFNw
YWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvcikKIHsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1f
YmFnT2ZBbGxvY2F0b3JzLmFkZChoZWFwKCksIHN1YnNwYWNlLCBzaXplQ2xhc3MpOwogICAgIGFs
bG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvcihudWxscHRyKTsKICAgICAKICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwpAQCAtNTYyLDE0ICs1NjAsMTAgQEAgTWFya2VkQWxsb2NhdG9yKiBNYXJr
ZWRTcGFjZTo6YWRkTWFya2VkQQogICAgIGlmICghbV9maXJzdEFsbG9jYXRvcikgewogICAgICAg
ICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwogICAgICAgICBtX2xhc3RBbGxvY2F0b3Ig
PSBhbGxvY2F0b3I7Ci0gICAgICAgIGZvciAoU3Vic3BhY2UqIHN1YnNwYWNlIDogbV9zdWJzcGFj
ZXMpCi0gICAgICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRlRmlyc3RBbGxvY2F0b3IoYWxsb2Nh
dG9yKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2xhc3RBbGxvY2F0b3ItPnNldE5leHRBbGxv
Y2F0b3IoYWxsb2NhdG9yKTsKICAgICAgICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwog
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gYWxsb2NhdG9yOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxv
Y2F0b3IqIGZpcnN0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdEFsbG9jYXRvcjsg
fQogICAgIAogICAgIExvY2smIGFsbG9jYXRvckxvY2soKSB7IHJldHVybiBtX2FsbG9jYXRvckxv
Y2s7IH0KLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0
cmFjdExvY2tlciYsIFN1YnNwYWNlKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2b2lkIGFkZE1h
cmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIE1hcmtlZEFsbG9jYXRvciopOwog
ICAgIAogICAgIC8vIFdoZW4gdGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlw
cGVkIGJ1dCB0aGUgbWFyayBiaXRzIGhhdmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlz
TWFya2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJraW5nOyB9CkBAIC0xNzMsOSArMTczLDYg
QEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2Vha1NldDsKICAgICBmcmllbmQgY2xhc3Mg
U3Vic3BhY2U7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KFN1YnNwYWNlJiwgR0NEZWZl
cnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhTdWJzcGFj
ZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLQogICAgIC8vIFVzZSB0aGlzIHZlcnNp
b24gd2hlbiBjYWxsaW5nIGZyb20gd2l0aGluIHRoZSBHQyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhl
IGFsbG9jYXRvcnMKICAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkLgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3Im
KTsKQEAgLTIxMCw3ICsyMDcsNiBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxX
ZWFrU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxXZWFrU2V0Pj4gbV9uZXdBY3RpdmVXZWFrU2V0
czsKIAogICAgIExvY2sgbV9hbGxvY2F0b3JMb2NrOwotICAgIEJhZzxNYXJrZWRBbGxvY2F0b3I+
IG1fYmFnT2ZBbGxvY2F0b3JzOwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRv
ciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFzdEFsbG9jYXRvciB7IG51
bGxwdHIgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAko
cmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw0NSArMzQsMjMgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIFdyaXRpbmcgaXQgdGhpcyB3YXkgZW5zdXJlcyB0aGF0IHdo
ZW4geW91IHBhc3MgdGhpcyBhcyBhIGZ1bmN0b3IsIHRoZSBjYWxsZWUgaXMgc3BlY2lhbGl6ZWQg
Zm9yCi0vLyB0aGlzIGNhbGxiYWNrLiBJZiB5b3Ugd3JvdGUgdGhpcyBhcyBhIG5vcm1hbCBmdW5j
dGlvbiB0aGVuIHRoZSBjYWxsZWUgd291bGQgYmUgc3BlY2lhbGl6ZWQgZm9yCi0vLyB0aGUgZnVu
Y3Rpb24ncyB0eXBlIGFuZCBpdCB3b3VsZCBoYXZlIGluZGlyZWN0IGNhbGxzIHRvIHRoYXQgZnVu
Y3Rpb24uIEFuZCB1bmxpa2UgYSBsYW1iZGEsIGl0J3MKLS8vIHBvc3NpYmxlIHRvIG1hcmsgdGhp
cyBBTFdBWVNfSU5MSU5FLgotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgb3BlcmF0b3IoKShWTSYgdm0sIEpTQ2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChjZWxsLT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgQVNTRVJUKGNlbGwtPmlu
bGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCk7Ci0gICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOwotICAgICAgICBNZXRob2RU
YWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8tPm1ldGhvZFRhYmxl
LmRlc3Ryb3k7Ci0gICAgICAgIGRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCi0KLVN1YnNwYWNlOjpTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
IGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRlcywgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKK1N1YnNwYWNlOjpTdWJzcGFjZShDU3RyaW5n
IG5hbWUsIEhlYXAmIGhlYXApCiAgICAgOiBtX3NwYWNlKGhlYXAub2JqZWN0U3BhY2UoKSkKICAg
ICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgLCBt
X2FsaWduZWRNZW1vcnlBbGxvY2F0b3IoYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKLSAgICAsIG1f
YWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uKG1fc3BhY2UuZmlyc3RBbGxvY2F0b3IoKSkKLXsK
LSAgICAvLyBJdCdzIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQgd2UncmUgR0NpbmcgcmlnaHQgbm93
IGV2ZW4gaWYgdGhlIGNsaWVudCBpcyBjYXJlZnVsIHRvIG9ubHkKLSAgICAvLyBjcmVhdGUgc3Vi
c3BhY2VzIHJpZ2h0IGFmdGVyIFZNIGNyZWF0aW9uLCBzaW5jZSBjb2xsZWN0Q29udGludW91c2x5
IChhbmQgcHJvYmFibHkgb3RoZXIKLSAgICAvLyB0aGluZ3MpIGNvdWxkIGNhdXNlIGEgR0MgdG8g
YmUgbGF1bmNoZWQgYXQgcHJldHR5IG11Y2ggYW55IHRpbWUgYW5kIGl0J3Mgbm90IDEwMCUgb2J2
aW91cwotICAgIC8vIHRoYXQgYWxsIGNsaWVudHMgd291bGQgYmUgYWJsZSB0byBlbnN1cmUgdGhh
dCB0aGVyZSBhcmUgemVybyBzYWZlcG9pbnRzIGJldHdlZW4gd2hlbiB0aGV5Ci0gICAgLy8gY3Jl
YXRlIFZNIGFuZCB3aGVuIHRoZXkgZG8gdGhpcy4gUHJldmVudGluZyBHQyB3aGlsZSB3ZSdyZSBj
cmVhdGluZyB0aGUgU3Vic3BhY2UgZW5zdXJlcwotICAgIC8vIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0
byB3b3JyeSBhYm91dCB3aGV0aGVyIGl0J3MgT0sgZm9yIHRoZSBHQyB0byBldmVyIHNlZSBhIGJy
YW5kIG5ldwotICAgIC8vIHN1YnNwYWNlLgoreworfQorCit2b2lkIFN1YnNwYWNlOjppbml0aWFs
aXplKEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBh
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKQoreworICAgIG1fYXR0cmlidXRlcyA9IGhlYXBDZWxsVHlw
ZS0+YXR0cmlidXRlcygpOworICAgIG1faGVhcENlbGxUeXBlID0gaGVhcENlbGxUeXBlOworICAg
IG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CisgICAg
bV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3It
PmZpcnN0QWxsb2NhdG9yKCk7CisKKyAgICBIZWFwJiBoZWFwID0gKm1fc3BhY2UuaGVhcCgpOwog
ICAgIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25TY29wZShoZWFwKTsK
ICAgICBoZWFwLm9iamVjdFNwYWNlKCkubV9zdWJzcGFjZXMuYXBwZW5kKHRoaXMpOwotICAgIAot
ICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM7IGktLTspCi0g
ICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOworICAgIG1fYWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJTdWJzcGFjZSh0aGlzKTsKIH0KIAogU3Vic3BhY2U6
On5TdWJzcGFjZSgpCkBAIC04MSw2MCArNTksMTIgQEAgU3Vic3BhY2U6On5TdWJzcGFjZSgpCiAK
IHZvaWQgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBG
cmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5nU3Vic3Bh
Y2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIG1faGVhcENlbGxUeXBlLT5maW5pc2hT
d2VlcChibG9jaywgZnJlZUxpc3QpOwogfQogCiB2b2lkIFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2
bSwgSlNDZWxsKiBjZWxsKQogewotICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOwotfQotCi0v
LyBUaGUgcmVhc29uIHdoeSB3ZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFsbG9jYXRlIGFuZCB0cnlB
bGxvY2F0ZSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mCi0vLyBjaGVja3Mgb24gdGhlIGFs
bG9jYXRpb24gcGF0aCBpbiBib3RoIGNhc2VzLiBMaWtld2lzZSwgdGhlIHJlYXNvbiB3aHkgd2Ug
aGF2ZSBvdmVybG9hZHMgd2l0aCBhbmQKLS8vIHdpdGhvdXQgZGVmZXJyYWxDb250ZXh0IGlzIHRv
IG1pbmltaXplIHRoZSBhbW91bnQgb2YgY29kZSBmb3IgY2FsbGluZyBhbGxvY2F0ZSB3aGVuIHlv
dSBkb24ndAotLy8gbmVlZCB0aGUgZGVmZXJyYWxDb250ZXh0Lgotdm9pZCogU3Vic3BhY2U6OmFs
bG9jYXRlKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9
IGFsbG9jYXRlU2xvdyhudWxscHRyLCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjphbGxvY2F0ZShHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkICpy
ZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9y
Rm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFs
Q29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3coZGVmZXJy
YWxDb250ZXh0LCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZSkKLXsK
LSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
dHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPnRyeUFs
bG9jYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3cobnVs
bHB0ciwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlm
IChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKLSAg
ICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQpOwot
ICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KGRlZmVycmFsQ29udGV4
dCwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIG1faGVhcENlbGxUeXBlLT5kZXN0cm95KHZtLCBjZWxsKTsKIH0KIAogdm9pZCBTdWJzcGFj
ZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQpAQCAtMTQ0LDEwNCArNzQsMTcgQEAgdm9pZCBTdWJz
cGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogICAgICAgICAgICAgYWxsb2NhdG9yLnByZXBh
cmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgICAgIH0pOwogCi0gICAgbV9hbGxvY2F0b3JGb3JFbXB0
eUFsbG9jYXRpb24gPSBtX3NwYWNlLmZpcnN0QWxsb2NhdG9yKCk7CisgICAgbV9hbGxvY2F0b3JG
b3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPmZpcnN0QWxsb2Nh
dG9yKCk7CiB9CiAKIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHlCbG9j
a1RvU3RlYWwoKQogewotICAgIGZvciAoOyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbjsg
bV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2Nh
dGlvbi0+bmV4dEFsbG9jYXRvcigpKSB7Ci0gICAgICAgIFN1YnNwYWNlKiBvdGhlclN1YnNwYWNl
ID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPnN1YnNwYWNlKCk7Ci0gICAgICAgIGlm
IChvdGhlclN1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgIT0gYWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAorICAgIGZvciAo
OyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbjsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9j
YXRpb24gPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+bmV4dEFsbG9jYXRvckluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpKSB7CiAgICAgICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jayA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5maW5kRW1wdHlCbG9ja1Rv
U3RlYWwoKSkKICAgICAgICAgICAgIHJldHVybiBibG9jazsKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3co
c2l6ZV90IHNpemUpCi17Ci0gICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFz
c1RvSW5kZXgoc2l6ZSk7Ci0gICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtlZFNwYWNlOjpzX3Np
emVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKLSAgICBpZiAoIXNpemVDbGFzcykKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB3cml0dGVuIGluIHN1Y2ggYSB3
YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVhZHMgdG8gZW5kIHVwIGhlcmUgaWYgdGhl
eSB3YW50Ci0gICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgc29tZSBhbGxvY2F0b3Ig
dGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0IGEgcG9zc2libHktCi0gICAgLy8g
anVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxsIGlmIHdlJ3JlIGlu
IHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAotICAgIC8vIGFsbG9jYXRvciBhcyAi
cGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQgY291bGQgbGVhZCB0
byBwZXJmb3JtYW5jZQotICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29yaXRobSBoZXJlIGlz
IHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUgbG9jaywgdG8KLSAg
ICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBjcmVhdGlvbnMgZnJv
bSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcwotICAgIC8vIHRoYXQgYW55ICJm
b3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3Ig
YWZ0ZXIgaXQncyBpbml0aWFsaXplZAotICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2NrKCkpOwotICAgIGlm
IChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5k
ZXhdKQotICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwotCi0gICAgaWYgKGZhbHNlKQotICAgICAg
ICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBtX25hbWUsICIsICIs
IG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7Ci0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBtX3NwYWNlLmFkZE1hcmtlZEFsbG9jYXRvcihsb2NrZXIsIHRoaXMs
IHNpemVDbGFzcyk7Ci0gICAgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChz
aXplQ2xhc3MpOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKE1hcmtlZFNwYWNlOjpzX3Np
emVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xhc3MpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9IGFsbG9jYXRvcjsK
LSAgICAgICAgCi0gICAgICAgIGlmICghaW5kZXgtLSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKG1fZmlyc3RBbGxv
Y2F0b3IpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgbV9maXJzdEFsbG9jYXRv
ciA9IGFsbG9jYXRvcjsKLSAgICByZXR1cm4gYWxsb2NhdG9yOwotfQotCi12b2lkKiBTdWJzcGFj
ZTo6YWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVf
dCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhkZWZlcnJhbENv
bnRleHQsIHNpemUpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBzYW5pdGl6ZVN0YWNr
Rm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOwotICAgIAotICAgIGlmIChNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplKSkKLSAgICAgICAgcmV0dXJuIGFsbG9j
YXRvci0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICBpZiAoc2l6ZSA8
PSBPcHRpb25zOjpsYXJnZUFsbG9jYXRpb25DdXRvZmYoKQotICAgICAgICAmJiBzaXplIDw9IE1h
cmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewotICAgICAgICBkYXRhTG9nKCJGQVRBTDogYXR0YW1w
dGluZyB0byBhbGxvY2F0ZSBzbWFsbCBvYmplY3QgdXNpbmcgbGFyZ2UgYWxsb2NhdGlvbi5cbiIp
OwotICAgICAgICBkYXRhTG9nKCJSZXF1ZXN0ZWQgYWxsb2NhdGlvbiBzaXplOiAiLCBzaXplLCAi
XG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAg
Ci0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxD
b250ZXh0KTsKLSAgICAKLSAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtl
ZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0gICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9u
ID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlz
KTsKLSAgICBpZiAoIWFsbG9jYXRpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAot
ICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBt
X3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7Ci0gICAgbV9zcGFjZS5tX2NhcGFjaXR5
ICs9IHNpemU7Ci0gICAgCi0gICAgbV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9u
KTsKLSAgICAgICAgCi0gICAgcmV0dXJuIGFsbG9jYXRpb24tPmNlbGwoKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIFN1YnNwYWNlOjpkaWRBbGxvY2F0ZSh2b2lkKiBwdHIpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHB0cik7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGxvZ2dpbmcg
YWxsb2NhdGlvbnMsIG9yIGRvaW5nIG90aGVyIGtpbmRzIG9mIGRlYnVnZ2luZyBoYWNrcy4gSnVz
dCBtYWtlCi0gICAgLy8gc3VyZSB5b3UgSlNDX2ZvcmNlR0NTbG93UGF0aHM9dHJ1ZS4KLX0KLQog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2UuaAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1ZGUgIk1hcmtlZEJs
b2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CkBAIC0zNSw0MSArMzYsMjggQEAgY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsK
IAogLy8gVGhlIGlkZWEgb2Ygc3Vic3BhY2VzIGlzIHRoYXQgeW91IGNhbiBwcm92aWRlIHNvbWUg
Y3VzdG9tIGJlaGF2aW9yIGZvciB5b3VyIG9iamVjdHMgaWYgeW91CiAvLyBhbGxvY2F0ZSB0aGVt
IGZyb20gYSBjdXN0b20gU3Vic3BhY2UgaW4gd2hpY2ggeW91IG92ZXJyaWRlIHNvbWUgb2YgdGhl
IHZpcnR1YWwgbWV0aG9kcy4gVGhpcwotLy8gY2xhc3MgaXMgdGhlIGJhc2VjbGFzcyBvZiBTdWJz
cGFjZXMgYW5kIGl0IHByb3ZpZGVzIGEgcmVhc29uYWJsZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u
LCB3aGVyZQotLy8gc3dlZXBpbmcgYXNzdW1lcyBpbW1vcnRhbCBzdHJ1Y3R1cmUuIFRoZSBjb21t
b24gd2F5cyBvZiBvdmVycmlkaW5nIHRoaXMgYXJlOgotLy8KLS8vIC0gUHJvdmlkZSBjdXN0b21p
emVkIGRlc3RydWN0b3IgYmVoYXZpb3IuIFlvdSBjYW4gY2hhbmdlIGhvdyB0aGUgZGVzdHJ1Y3Rv
ciBpcyBjYWxsZWQuIFlvdSBjYW4KLS8vICAgYWxzbyBzcGVjaWFsaXplIHRoZSBkZXN0cnVjdG9y
IGNhbGwgaW4gdGhlIGxvb3AuCi0vLwotLy8gLSBVc2UgdGhlIFN1YnNwYWNlIGFzIGEgcXVpY2sg
d2F5IHRvIGl0ZXJhdGUgYWxsIG9mIHRoZSBvYmplY3RzIGluIHRoYXQgc3Vic3BhY2UuCisvLyBj
bGFzcyBpcyB0aGUgYmFzZWNsYXNzIG9mIFN1YnNwYWNlcy4gVXN1YWxseSB5b3Ugd2lsbCB1c2Ug
ZWl0aGVyIFN1YnNwYWNlIG9yIEZpeGVkU2l6ZVN1YnNwYWNlLgogY2xhc3MgU3Vic3BhY2Ugewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1YnNwYWNlKTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdWJzcGFjZShDU3RyaW5n
IG5hbWUsIEhlYXAmLCBBbGxvY2F0b3JBdHRyaWJ1dGVzLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+U3Vic3BhY2UoKTsKKworICAgIHZvaWQg
aW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUqLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CiAgICAg
CiAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kYXRhKCk7IH0K
ICAgICBNYXJrZWRTcGFjZSYgc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlOyB9CiAgICAg
CiAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlczsgfQorICAgIEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9oZWFwQ2VsbFR5cGU7IH0KICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOyB9CiAgICAgCi0gICAgLy8gVGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyB0aGlz
IGlzIHRvIHNwZWNpYWxpemUgdGhlIHN3ZWVwIGZvciB5b3VyIGRlc3RydWN0b3JzLiBUaGlzIHdv
bid0Ci0gICAgLy8gYmUgY2FsbGVkIGZvciBuby1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhpcyBtdXN0
IGNhbGwgTWFya2VkQmxvY2s6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlLgotICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKLSAg
ICAKLSAgICAvLyBUaGVzZSBnZXQgY2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgotICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7Ci0gICAgCi0gICAgTWFya2VkQWxsb2NhdG9y
KiB0cnlBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ckZvcihzaXplX3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRl
KHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJh
bENvbnRleHQqLCBzaXplX3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRy
eUFsbG9jYXRlKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2Nh
dGUoR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworICAgIHZvaWQgZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlND
ZWxsKik7CisKKyAgICB2aXJ0dWFsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0
ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7
CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApAQCAtOTYsNDgg
Kzg0LDI1IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
U3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9Ci0gICAgCi0gICAgTWFya2VkQWxs
b2NhdG9yKiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JT
aXplU3RlcFswXTsgfQorICAgIFN1YnNwYWNlKiBuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjsgfQorICAgIHZvaWQgc2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKFN1YnNwYWNlKiBzdWJzcGFjZSkgeyBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciA9IHN1YnNwYWNlOyB9CiAKLXByaXZhdGU6Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3JGb3JTbG93KHNpemVfdCk7Ci0gICAgCi0gICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBh
cmUgY29uY2VybmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlvbnMgYW5kIGFsbG9jYXRvciBjcmVhdGlv
bi4KLSAgICB2b2lkKiBhbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwot
ICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0g
ICAgCi0gICAgdm9pZCBkaWRBbGxvY2F0ZSh2b2lkKik7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBp
bml0aWFsaXplKEhlYXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKICAgICAK
ICAgICBNYXJrZWRTcGFjZSYgbV9zcGFjZTsKICAgICAKICAgICBDU3RyaW5nIG1fbmFtZTsKICAg
ICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKworICAgIEhlYXBDZWxsVHlwZSog
bV9oZWFwQ2VsbFR5cGUgeyBudWxscHRyIH07CisgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciog
bV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIAotICAgIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKLSAgICAKLSAgICBzdGQ6
OmFycmF5PE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9h
bGxvY2F0b3JGb3JTaXplU3RlcDsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fZmlyc3RBbGxvY2F0
b3IgeyBudWxscHRyIH07CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvckZvckVtcHR5
QWxsb2NhdGlvbiB7IG51bGxwdHIgfTsgLy8gVXNlcyB0aGUgTWFya2VkU3BhY2UgbGlua2VkIGxp
c3Qgb2YgYmxvY2tzLgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMYXJnZUFsbG9jYXRpb24sIEJh
c2ljUmF3U2VudGluZWxOb2RlPExhcmdlQWxsb2NhdGlvbj4+IG1fbGFyZ2VBbGxvY2F0aW9uczsK
KyAgICBTdWJzcGFjZSogbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBu
dWxscHRyIH07CiB9OwogCi1BTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6
OnRyeUFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAoc2l6ZSA8PSBNYXJrZWRT
cGFjZTo6bGFyZ2VDdXRvZmYpCi0gICAgICAgIHJldHVybiBtX2FsbG9jYXRvckZvclNpemVTdGVw
W01hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpXTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotQUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0
b3JGb3Ioc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPD0gTWFya2VkU3BhY2U6Omxhcmdl
Q3V0b2ZmKSB7Ci0gICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2Nh
dG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldKQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNsb3co
c2l6ZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9u
IDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQCBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7CiBj
bGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKIGNsYXNzIFN0cnVjdHVyZTsKIAotZW51bSBjbGFzcyBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgewotICAgIFNob3VsZEFzc2VydE9uRmFpbHVyZSwKLSAgICBT
aG91bGROb3RBc3NlcnRPbkZhaWx1cmUKLX07Ci0KIGVudW0gY2xhc3MgR0NEZWZlcnJhbENvbnRl
eHRBcmdQcmVzZW5zZSB7CiAgICAgSGFzQXJnLAogICAgIERvZXNOb3RIYXZlQXJnCkBAIC03OSw4
ICs3NCw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIHRyeUFsbG9jYXRlQ2UKIGNsYXNz
IEpTQ2VsbCA6IHB1YmxpYyBIZWFwQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpTVmFsdWU7CiAg
ICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZT4KLSAgICBm
cmllbmQgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmLCBHQ0RlZmVycmFsQ29udGV4
dCosIHNpemVfdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBmcmllbmQgdm9pZCog
dHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKIAogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
MiwyMyArMTQyLDE0IEBAIFN1YnNwYWNlKiBKU0NlbGw6OnN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICByZXR1cm4gJnZtLmNlbGxTcGFjZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlIG1vZGUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2UgZGVmZXJy
YWxDb250ZXh0QXJnUHJlc2VuY2U+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRlQ2Vs
bEhlbHBlcihIZWFwJiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBz
aXplX3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIHRy
eUFsbG9jYXRlQ2VsbEhlbHBlcihIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KQogewogICAgIEFTU0VSVChkZWZlcnJhbENvbnRleHQgfHwgIURpc2FsbG93R0M6OmlzSW5FZmZl
Y3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAg
ICBKU0NlbGwqIHJlc3VsdDsKLSAgICBpZiAobW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlNob3VsZEFzc2VydE9uRmFpbHVyZSkgewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250
ZXh0QXJnUHJlc2VuY2UgPT0gR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQot
ICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52
bSgpKS0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3Rh
dGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlKHNp
emUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250ZXh0QXJn
UHJlc2VuY2UgPT0gR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQotICAgICAg
ICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+
dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3RhdGlj
X2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPnRyeUFsbG9jYXRlKHNp
emUpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQorICAgIEpTQ2VsbCogcmVzdWx0ID0gc3Vic3BhY2VGb3I8VD4oKmhl
YXAudm0oKSktPmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1
cmVNb2RlKTsKKyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpS
ZXR1cm5OdWxsICYmICFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogI2lmIEVOQUJM
RShHQ19WQUxJREFUSU9OKQogICAgIEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09i
amVjdCgpKTsKICAgICBoZWFwLnZtKCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKFQ6Omlu
Zm8oKSk7CkBAIC0xNzAsMjUgKzE2MSwyNSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9j
YXRlQ2VsbEhlbHBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCogYWxsb2NhdGVDZWxsKEhl
YXAmIGhlYXAsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxw
ZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRBc3NlcnRPbkZhaWx1cmUsIEdDRGVm
ZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6OkRvZXNOb3RIYXZlQXJnPihoZWFwLCBudWxscHRyLCBz
aXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAsIHNpemUsIG51
bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSkK
IHsKLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6U2hvdWxkTm90QXNzZXJ0T25GYWlsdXJlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNl
bnNlOjpEb2VzTm90SGF2ZUFyZz4oaGVhcCwgbnVsbHB0ciwgc2l6ZSk7CisgICAgcmV0dXJuIHRy
eUFsbG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFwLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCog
YWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VCwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRBc3NlcnRPbkZhaWx1cmUsIEdDRGVmZXJyYWxD
b250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZz4oaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBzaXplKTsK
KyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAsIHNpemUsIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogdm9pZCogdHJ5QWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlB
bGxvY2F0ZUNlbGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGROb3RBc3Nl
cnRPbkZhaWx1cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZz4oaGVhcCwg
ZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVy
PFQ+KGhlYXAsIHNpemUsIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpS
ZXR1cm5OdWxsKTsKIH0KIAogaW5saW5lIGJvb2wgSlNDZWxsOjppc09iamVjdCgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326228</attachid>
            <date>2017-11-07 11:34:23 -0800</date>
            <delta_ts>2017-11-07 13:37:35 -0800</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>144405</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDcwLDYg
KzQ3MCw3IEBAIGhlYXAvQ2VsbENvbnRhaW5lci5jcHAKIGhlYXAvQ29kZUJsb2NrU2V0LmNwcAog
aGVhcC9Db2xsZWN0aW9uU2NvcGUuY3BwCiBoZWFwL0NvbGxlY3RvclBoYXNlLmNwcAoraGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmNwcAogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKIGhlYXAvRGVm
ZXJHQy5jcHAKIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcApAQCAtNDg2LDEyICs0ODcsMTUgQEAg
aGVhcC9IYW5kbGVTZXQuY3BwCiBoZWFwL0hhbmRsZVN0YWNrLmNwcAogaGVhcC9IZWFwLmNwcAog
aGVhcC9IZWFwQ2VsbC5jcHAKK2hlYXAvSGVhcENlbGxUeXBlLmNwcAogaGVhcC9IZWFwRmluYWxp
emVyQ2FsbGJhY2suY3BwCiBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAogaGVhcC9IZWFwUHJvZmls
ZXIuY3BwCiBoZWFwL0hlYXBTbmFwc2hvdC5jcHAKIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5j
cHAKIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAoraGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcAoraGVhcC9Jc29TdWJzcGFjZS5jcHAKIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQu
Y3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNDQ1OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAKIAkJMEY0QzkxNjYxQzI5
RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2lu
RHVtcC5oICovOyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91
c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLzsgfTsK
IAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0
aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKLQkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEY4MjhDMUUzMUI5NzYwMDc1MTg0QyAv
KiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyOEExRTMxQjk3MTAwNzUxODRDIC8q
IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CiAJCTBGNTBBRjND
MTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTBBRjNCMTkzRThCMzkwMDY3
NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLzsgfTsKIAkJMEY1NTEzQTYxRDVB
NjgyQzAwQzMyQkQ4IC8qIEZyZWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjU1MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJlZUxpc3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDAwLDgg
KzQwMCw4IEBACiAJCTBGN0RGMTM1MUUyOTcwREMwMDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RG
MTMwMUUyOTcwRDUwMDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdERjEzNzFFMjk3MEUxMDA5
NTk1MUIgLyogU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0RGMTM4MUUyOTcw
RTQwMDk1OTUxQiAvKiBTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTMzMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFj
ZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjdERjEz
RjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8q
IEpTU3RyaW5nU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYx
M0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3REYxNDYxRTJCRUY2QTAw
OTU5NTFCIC8qIE1hcmtlZEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUxQiAvKiBNYXJr
ZWRBbGxvY2F0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmll
ckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0
ZXJpbmdQaGFzZS5oICovOyB9OwogCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgw
MjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU0MCw2ICs1NDAsMTEgQEAKIAkJMEZEQjJD
Q0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFFMDA3QjNDMUIg
LyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U2
MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyB9OwogCQkwRkRCMkNFQTE3NDg5
NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1
cnJlbnRKU0xvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkRDRTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEx
QjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMjIxRkFFODU4QzAw
NkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENF
MTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEyODFGQUZBODU5MDA2RjM5MDEg
LyogQ29tcGxldGVTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMkIx
RkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMzIxRkIxMURBNDAwNkYzOTAxIC8qIElz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87
IH07CiAJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9
OwogCQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUg
LyogQjNLaW5kLmggKi87IH07CkBAIC0xMDk4LDcgKzExMDMsNyBAQAogCQk3OURBRTI3QTFFMDND
ODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNt
RXhjZXB0aW9uVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5REZDQkRCMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURGQ0JE
QTFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RUUwQzAwMUI0QUZCODUwMDAz
ODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVF
bnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxs
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlF
RkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUY4RkMxRjFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFE
MUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovOyB9
OwogCQk3OUZDOEEwODFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlGQzhBMDcx
RTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkM1NDdEMzFCNjk1OUExMDA5
NTlCNTggLyogV2FzbUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjI3MCw4ICsy
Mjc1LDggQEAKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBw
YXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0
aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyOEExRTMxQjk3MTAwNzUxODRDIC8qIFN0b2No
YXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
U3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDEzLDEwICsyNDE4LDEwIEBA
CiAJCTBGN0RGMTMxMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjdERjEzMzFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YnNwYWNlSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyog
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ1N1YnNwYWNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8q
IEpTU3RyaW5nU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNT
dHJpbmdTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdERjEzOTFF
Mjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdERjEzQTFF
Mjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3REYxM0QxRTJBRkM0QjAw
OTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENl
bGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSGVhcENl
bGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTQ1MUUyQkVGNjgw
MDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hcmtlZEFsbG9jYXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNs
dXN0ZXJpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
N0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3Rl
cmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjY2LDYgKzI2NzEsMTUgQEAKIAkJMEZE
QjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3Jr
bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U2MTc0ODMwQTIw
MDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdXb3JrbGlzdC5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNM
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRKU0xvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAx
IC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMUYxRkFFODU4
NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwQ2VsbFR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjAxRkFFODU4NzAwNkYzOTAx
IC8qIEhlYXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwQ2VsbFR5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyNzFGQUZBODU5MDA2RjM5MDEg
LyogQ29tcGxldGVTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21wbGV0ZVN1YnNw
YWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjgxRkFGQTg1OTAw
NkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGxldGVTdWJz
cGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyQjFGQUZCNERFMDA2
RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXNvU3Vic3BhY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElz
b1N1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElzb1N1YnNwYWNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTMw
MUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1
NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
REU4N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENlbGxDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzU4MCw4ICszNTk0LDggQEAKIAkJNzlERkNCREExRDg4QzU5NjAw
NTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGFzT3duUHJvcGVydHlDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4
NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3OUVGRDQ4MjFFQkMw
NDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5o
OyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTc5RUZENDgxMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwOyBwYXRoID0g
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01heGltYWxG
bHVzaEluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RjhGQzFEMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdSZWdpc3RlcmVk
U3RydWN0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmUuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDg3LDYgKzU1MDEsNyBAQAogCQkJCTBGRUMzQzUw
MUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkw
RkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAog
CQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKKwkJ
CQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi8s
CiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3Bw
ICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVz
LmggKi8sCiAJCQkJMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3Bw
ICovLApAQCAtNTUwMSw2ICs1NTE2LDggQEAKIAkJCQkwRkE3NjIwMTFEQjkyNDIzMDBCN0EyRkQg
LyogQ29sbGVjdGlvblNjb3BlLmggKi8sCiAJCQkJMEZEMEU1RTUxRTQzRDM0NzAwMDZBQjA4IC8q
IENvbGxlY3RvclBoYXNlLmNwcCAqLywKIAkJCQkwRkQwRTVFNjFFNDNEMzQ3MDAwNkFCMDggLyog
Q29sbGVjdG9yUGhhc2UuaCAqLywKKwkJCQkwRkRDRTEyNzFGQUZBODU5MDA2RjM5MDEgLyogQ29t
cGxldGVTdWJzcGFjZS5jcHAgKi8sCisJCQkJMEZEQ0UxMjgxRkFGQTg1OTAwNkYzOTAxIC8qIENv
bXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29u
c2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAvKiBD
b25zdHJhaW50Vm9sYXRpbGl0eS5oICovLApAQCAtNTU1MSw2ICs1NTY4LDggQEAKIAkJCQlEQzNE
MkIwQjFEMzQzNzZFMDBCQTkxOEMgLyogSGVhcENlbGwuY3BwICovLAogCQkJCURDM0QyQjA5MUQz
NDMxNjEwMEJBOTE4QyAvKiBIZWFwQ2VsbC5oICovLAogCQkJCTBGMDcwQTQ0MUQ1NDNBODkwMDZF
NzIzMiAvKiBIZWFwQ2VsbElubGluZXMuaCAqLywKKwkJCQkwRkRDRTEyMDFGQUU4NTg3MDA2RjM5
MDEgLyogSGVhcENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRkRDRTExRjFGQUU4NTg3MDA2RjM5MDEg
LyogSGVhcENlbGxUeXBlLmggKi8sCiAJCQkJMEYwQ0FFRkQxRUM0REE4NTAwOTcwRDEyIC8qIEhl
YXBGaW5hbGl6ZXJDYWxsYmFjay5jcHAgKi8sCiAJCQkJMEYwQ0FFRkUxRUM0REE4NTAwOTcwRDEy
IC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovLAogCQkJCTBGMzJCRDBFMUJCMzRGMTkwMDkz
QTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgKi8sCkBAIC01NTY3LDYgKzU1ODYsMTAgQEAKIAkJ
CQkwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJCQlDMjVGOEJD
QjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCAqLywKIAkJCQlDMjVG
OEJDQzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCisJCQkJMEZE
Q0UxMkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICov
LAorCQkJCTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmggKi8sCisJCQkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNw
cCAqLywKKwkJCQkwRkRDRTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywK
IAkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICov
LAogCQkJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oICov
LAogCQkJCTBGMDcwQTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uY3BwICov
LApAQCAtNjUwNyw4ICs2NTMwLDggQEAKIAkJCQk5Nzg4RkMyMjE0NzFBRDBDMDA2OENFMkQgLyog
SlNEYXRlTWF0aC5jcHAgKi8sCiAJCQkJOTc4OEZDMjMxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0
ZU1hdGguaCAqLywKIAkJCQlDMkE3RjY4NzE2MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGli
bGVPYmplY3QuaCAqLywKLQkJCQkwRjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8sCi0JCQkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFC
IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLywKKwkJCQkwRjdERjEzOTFFMjk3
MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICovLAor
CQkJCTBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oICovLAogCQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1h
Y3Jvcy5oICovLAogCQkJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXku
Y3BwICovLAogCQkJCTc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuaCAq
LywKQEAgLTY1OTMsOCArNjYxNiw4IEBACiAJCQkJRTM4RDA2MEIxRjhFODE0MTAwNjQ5Q0YyIC8q
IEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmggKi8sCiAJCQkJMEY5MTlEMEUxNTdGMzMyNzAwNEE0
RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovLAogCQkJCTBGOTE5RDBGMTU3
RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi8sCi0JCQkJMEY0
RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZS5jcHAgKi8sCi0JCQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5oICovLAorCQkJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAv
KiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRjRG
ODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oICovLAogCQkJCUE3Mjk5RDlCMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1NldC5jcHAgKi8s
CiAJCQkJQTcyOTlEOUMxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0LmggKi8sCiAJCQkJQTc5MERE
NjkxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuY3BwICovLApAQCAtNjYwOSw4ICs2
NjMyLDggQEAKIAkJCQk3MEVDMEVCRDFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRv
ci5oICovLAogCQkJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5j
cHAgKi8sCiAJCQkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmgg
Ki8sCi0JCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuY3Bw
ICovLAotCQkJCTBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmgg
Ki8sCisJCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBl
LmNwcCAqLywKKwkJCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFwQ2Vs
bFR5cGUuaCAqLywKIAkJCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAgKi8sCiAJCQkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9s
VGFibGVPYmplY3QuaCAqLywKIAkJCQk3MEVDQTYwMDFBRkRCRUEyMDA0NDk3MzkgLyogSlNUZW1w
bGF0ZVJlZ2lzdHJ5S2V5LmNwcCAqLywKQEAgLTc3ODgsOCArNzgxMSw4IEBACiAJCQkJQUREMDlB
RjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1MzgzQUEyRjFF
NjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJCQkJQUQ5
RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKLQkJ
CQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmNwcCAqLywKLQkJCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlLmggKi8sCisJCQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8q
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwICovLAorCQkJCTc5RUZENDgy
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgg
Ki8sCiAJCQkJQUQyRkNCQTYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3IuY3BwICovLAogCQkJCUFEMkZDQkE3MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yLmggKi8sCiAJCQkJNzk2RkI0MzkxREZGOEMzRjAwMzlDOTVEIC8qIEpT
V2ViQXNzZW1ibHlIZWxwZXJzLmggKi8sCkBAIC04MDAwLDYgKzgwMjMsNyBAQAogCQkJCTg2RDNC
MkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZEQ0UxMzIxRkIxMURBNDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYz
NTE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RkM5OUQ1MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtODA1MSw2ICs4MDc1LDcgQEAKIAkJCQkwRkVDODUwNjFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZEQ0UxMkQxRkFGQjRFNTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzkxOUI3ODAxRTAzNTU5QzAwNUJFRUQ4IC8qIEIzQ29t
cGlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTkzLDYgKzg2MTgsNyBAQAogCQkJCUM0NzAzQ0Q1
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJNzBCNzkxOTUxQzAyNEEyODAwMjQ4MUUyIC8qIEdlbmVyYXRvckZ1bmN0aW9uQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk3MUMwMjRBMjkwMDI0ODFFMiAvKiBH
ZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQ0UxMkEx
RkFGQTg1RjAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwQjc5MTk5MUMwMjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwQjc5MTlEMUMwMjRBNTYwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5
cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBEMzNCMzMgLyog
R2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04Nzc2LDcgKzg4MDIsNyBAQAog
CQkJCTk5NkI3MzFDMUJEQTA4REQwMDMzMUI4NCAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1h
dGguaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rl
c3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3REYxM0MxRTI5NzExMzAw
OTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTYxQUREQjdBRDAwNTVERTJDIC8q
IEpTRG9sbGFyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4MUFEREI3QUQwMDU1REUy
QyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtODgzMCw2ICs4
ODU2LDcgQEAKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9u
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDk3MjI3NTJEQzU0NDU5QjkxMjVCNTM5IC8qIEpT
TW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjky
OUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENF
MTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMUQxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3Rk
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODU0LDcgKzg4ODEsNyBAQAogCQkJCUUz
MjAxQzFEMUY4RTgyMzYwMDc2QTAzMiAvKiBKU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNEY4Mjg4MUUy
RkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OUQ5RTE3
RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OTBERDcwMTgy
RjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCREZD
QjJCQkU5MEY0MTM0OUUxQjBCRUQgLyogSlNTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKQEAg
LTg4NjYsNyArODg5Myw3IEBACiAJCQkJQkMxOEM0MjgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3Ry
aW5nUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyOTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNTdHJpbmdSZWZDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyOEQ0QTgxNzdCNzFDODAwMDdG
QTNDIC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3REYxM0Yx
RTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA2MUFGREJFQTIwMDQ0OTczOSAvKiBK
U1RlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkVBMUY3NUFE
NkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODk0LDcgKzg5MjEs
NyBAQAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNE
RkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFw
Q2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTZGQjQz
QTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aCBpbiBIZWFkZXJzICovLApAQCAtOTIyNiw2ICs5MjUzLDcgQEAKIAkJCQkwRkZCNkMzOTFBRjQ4
RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDOTUyQjcx
OUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RDRERUMxOTgzMkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyRDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5cGVTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2NDYsNyArMTE2
NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgLy8gVHJ5IHRvIGRvIHNvbWUgY29u
c3RhbnQtZm9sZGluZyBoZXJlLgogICAgICAgICBpZiAoc3Vic3BhY2UtPmhhc0ludFB0cigpICYm
IHNpemUtPmhhc0ludFB0cigpKSB7Ci0gICAgICAgICAgICBTdWJzcGFjZSogYWN0dWFsU3Vic3Bh
Y2UgPSBiaXR3aXNlX2Nhc3Q8U3Vic3BhY2UqPihzdWJzcGFjZS0+YXNJbnRQdHIoKSk7CisgICAg
ICAgICAgICBDb21wbGV0ZVN1YnNwYWNlKiBhY3R1YWxTdWJzcGFjZSA9IGJpdHdpc2VfY2FzdDxD
b21wbGV0ZVN1YnNwYWNlKj4oc3Vic3BhY2UtPmFzSW50UHRyKCkpOwogICAgICAgICAgICAgc2l6
ZV90IGFjdHVhbFNpemUgPSBzaXplLT5hc0ludFB0cigpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5h
bGxvY2F0b3JGb3IoYWN0dWFsU2l6ZSk7CkBAIC0xMTY4Myw3ICsxMTY4Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1YihzaXplQ2xhc3NJbmRleCwgbV9v
dXQuaW50UHRyT25lKSkpOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6
ZShTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkK
KyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShDb21wbGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSwg
TFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFsbG9jYXRvckZvclNpemUobV9vdXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xv
d1BhdGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKIAorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5o
IgorCiBuYW1lc3BhY2UgSlNDIHsgCiAKIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OkFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IoKQpAQCAtMzYsNiArMzgsNDEgQEAgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cjo6fkFsaWduZWRNZW1vcnlBbAogewogfQogCit2b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6
OnJlZ2lzdGVyQWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKCFhbGxvY2F0b3ItPm5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IoKSk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0QWxsb2NhdG9yKSB7CisgICAgICAgIGZv
ciAoU3Vic3BhY2VCYXNlKiBzdWJzcGFjZSA9IG1fZmlyc3RTdWJzcGFjZTsgc3Vic3BhY2U7IHN1
YnNwYWNlID0gc3Vic3BhY2UtPm5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigp
KQorICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0ZUZpcnN0QWxsb2NhdG9yKGFsbG9jYXRv
cik7CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9sYXN0QWxsb2NhdG9yKTsK
KyAgICAgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICAgICAgbV9sYXN0QWxs
b2NhdG9yID0gYWxsb2NhdG9yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9sYXN0
QWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKGFsbG9j
YXRvcik7CisgICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOworfQorCisvLyBGSVhNRTog
V2UgdXNlIHRoaXMgaWRpb20gYSBsb3QuIFdlIHNob3VsZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIg
dGVtcGxhdGUgZm9yIHRoaXMga2luZCBvZgorLy8gc2luZ2x5LWxpbmtlZCBsaXN0LCB3aGVyZSBl
YWNoIGVsZW1lbnQgbWF5IGJlIG9uIG11bHRpcGxlIGxpc3RzLgordm9pZCBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOjpyZWdpc3RlclN1YnNwYWNlKFN1YnNwYWNlQmFzZSogc3Vic3BhY2UpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIXN1YnNwYWNlLT5uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKSk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0U3Vic3BhY2UpIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fbGFzdFN1YnNwYWNlKTsKKyAgICAgICAgbV9maXJzdFN1YnNwYWNl
ID0gc3Vic3BhY2U7CisgICAgICAgIG1fbGFzdFN1YnNwYWNlID0gc3Vic3BhY2U7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX2xhc3RTdWJzcGFjZS0+c2V0TmV4dFN1YnNwYWNlSW5B
bGlnbmVkTWVtb3J5U3Vic3BhY2Uoc3Vic3BhY2UpOworICAgIG1fbGFzdFN1YnNwYWNlID0gc3Vi
c3BhY2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHJldmlzaW9u
IDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgTWFya2VkQWxsb2NhdG9yOworCiBjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTQwLDYgKzQyLDE3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZnJlZUFsaWduZWRNZW1vcnkodm9pZCopID0gMDsKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIHZvaWQg
cmVnaXN0ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKik7CisgICAgTWFya2VkQWxsb2NhdG9y
KiBmaXJzdEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RBbGxvY2F0b3I7IH0KKwor
ICAgIHZvaWQgcmVnaXN0ZXJTdWJzcGFjZShTdWJzcGFjZUJhc2UqKTsKKworcHJpdmF0ZToKKyAg
ICBNYXJrZWRBbGxvY2F0b3IqIG1fZmlyc3RBbGxvY2F0b3I7CisgICAgTWFya2VkQWxsb2NhdG9y
KiBtX2xhc3RBbGxvY2F0b3I7CisgICAgU3Vic3BhY2VCYXNlKiBtX2ZpcnN0U3Vic3BhY2U7Cisg
ICAgU3Vic3BhY2VCYXNlKiBtX2xhc3RTdWJzcGFjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvbkZh
aWx1cmVNb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
IHsKKyAgICBBc3NlcnQsCisgICAgUmV0dXJuTnVsbAorfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3Bh
Y2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBs
ZXRlU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lu
bGluZXMuaCIKKyNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgiCisjaW5jbHVkZSAi
U3Vic3BhY2VJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitDb21wbGV0ZVN1YnNwYWNl
OjpDb21wbGV0ZVN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgSGVhcENlbGxUeXBl
KiBoZWFwQ2VsbFR5cGUsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwKQoreworICAgIGluaXRpYWxpemUoaGVh
cENlbGxUeXBlLCBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
TWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzOyBpLS07KQorICAgICAgICBtX2FsbG9jYXRvckZv
clNpemVTdGVwW2ldID0gbnVsbHB0cjsKK30KKworQ29tcGxldGVTdWJzcGFjZTo6fkNvbXBsZXRl
U3Vic3BhY2UoKQoreworfQorCitNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFs
bG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KQoreworICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIGZhaWx1cmVNb2Rl
KTsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIEdD
RGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBm
YWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworfQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICB2b2lk
ICpyZXN1bHQ7CisgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2Nh
dG9yRm9yKHNpemUpKQorICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gYWxs
b2NhdGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK01hcmtlZEFsbG9jYXRvciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yU2xvdyhzaXplX3Qgc2l6ZSkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBNYXJrZWRTcGFj
ZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKTsKKyAgICBzaXplX3Qgc2l6ZUNsYXNzID0gTWFya2Vk
U3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdOworICAgIGlmICghc2l6ZUNsYXNz
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHdyaXR0ZW4g
aW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sgZm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAg
aGVyZSBpZiB0aGV5IHdhbnQKKyAgICAvLyB0byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21l
IGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVuIHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJs
eS0KKyAgICAvLyBqdXN0LWFzLWdvb2Qgc29sdXRpb24gd291bGQgYmUgdG8gcmV0dXJuIG51bGwg
aWYgd2UncmUgaW4gdGhlIEpJVCBzaW5jZSB0aGUgSklUIHRyZWF0cyBudWxsCisgICAgLy8gYWxs
b2NhdG9yIGFzICJwbGVhc2UgYWx3YXlzIHRha2UgdGhlIHNsb3cgcGF0aCIuIEJ1dCwgdGhhdCBj
b3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlCisgICAgLy8gc3VycHJpc2VzIGFuZCB0aGUgYWxnb3Jp
dGhtIGhlcmUgaXMgcHJldHR5IGVhc3kuIE9ubHkgdGhpcyBjb2RlIGhhcyB0byBob2xkIHRoZSBs
b2NrLCB0bworICAgIC8vIHByZXZlbnQgc2ltdWx0YW5lb3VzbHkgTWFya2VkQWxsb2NhdG9yIGNy
ZWF0aW9ucyBmcm9tIG11bHRpcGxlIHRocmVhZHMuIFRoaXMgY29kZSBlbnN1cmVzCisgICAgLy8g
dGhhdCBhbnkgImZvckVhY2hBbGxvY2F0b3IiIHRyYXZlcnNhbHMgd2lsbCBvbmx5IHNlZSB0aGlz
IGFsbG9jYXRvciBhZnRlciBpdCdzIGluaXRpYWxpemVkCisgICAgLy8gZW5vdWdoOiBpdCB3aWxs
IGhhdmUgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmFsbG9jYXRvckxvY2so
KSk7CisgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JT
aXplU3RlcFtpbmRleF0pCisgICAgICAgIHJldHVybiBhbGxvY2F0b3I7CisKKyAgICBpZiAoZmFs
c2UpCisgICAgICAgIGRhdGFMb2coIkNyZWF0aW5nIG1hcmtlZCBhbGxvY2F0b3IgZm9yICIsIG1f
bmFtZSwgIiwgIiwgbV9hdHRyaWJ1dGVzLCAiLCAiLCBzaXplQ2xhc3MsICIuXG4iKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWFya2VkQWxsb2NhdG9yPiB1bmlxdWVBbGxvY2F0b3IgPQorICAgICAg
ICBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtlZEFsbG9jYXRvcj4obV9zcGFjZS5oZWFwKCksIHNpemVD
bGFzcyk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB1bmlxdWVBbGxvY2F0b3Iu
Z2V0KCk7CisgICAgbV9hbGxvY2F0b3JzLmFwcGVuZChXVEZNb3ZlKHVuaXF1ZUFsbG9jYXRvcikp
OworICAgIGFsbG9jYXRvci0+c2V0U3Vic3BhY2UodGhpcyk7CisgICAgbV9zcGFjZS5hZGRNYXJr
ZWRBbGxvY2F0b3IobG9ja2VyLCBhbGxvY2F0b3IpOworICAgIGluZGV4ID0gTWFya2VkU3BhY2U6
OnNpemVDbGFzc1RvSW5kZXgoc2l6ZUNsYXNzKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlm
IChNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF0gIT0gc2l6ZUNsYXNz
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtp
bmRleF0gPSBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAgICBpZiAoIWluZGV4LS0pCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9ySW5T
dWJzcGFjZShtX2ZpcnN0QWxsb2NhdG9yKTsKKyAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3It
PnJlZ2lzdGVyQWxsb2NhdG9yKGFsbG9jYXRvcik7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKKyAgICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOworICAgIHJldHVybiBhbGxvY2F0
b3I7Cit9CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhzaXplX3Qgc2l6
ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlIGZhaWx1cmVNb2RlKQoreworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhk
ZWZlcnJhbENvbnRleHQsIHNpemUpOworICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0
ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7
CisgICAgc2FuaXRpemVTdGFja0ZvclZNKG1fc3BhY2UuaGVhcCgpLT52bSgpKTsKKyAgICAKKyAg
ICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSkpCisg
ICAgICAgIHJldHVybiBhbGxvY2F0b3ItPnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Cisg
ICAgCisgICAgaWYgKHNpemUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKKyAg
ICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKKyAgICAgICAgZGF0
YUxvZygiRkFUQUw6IGF0dGFtcHRpbmcgdG8gYWxsb2NhdGUgc21hbGwgb2JqZWN0IHVzaW5nIGxh
cmdlIGFsbG9jYXRpb24uXG4iKTsKKyAgICAgICAgZGF0YUxvZygiUmVxdWVzdGVkIGFsbG9jYXRp
b24gc2l6ZTogIiwgc2l6ZSwgIlxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIAorICAgIG1fc3BhY2UuaGVhcCgpLT5jb2xsZWN0SWZOZWNlc3Nh
cnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgc2l6ZSA9IFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxNYXJrZWRTcGFjZTo6c2l6ZVN0ZXA+KHNpemUpOworICAgIExhcmdlQWxs
b2NhdGlvbiogYWxsb2NhdGlvbiA9IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCptX3NwYWNl
Lm1faGVhcCwgc2l6ZSwgdGhpcyk7CisgICAgaWYgKCFhbGxvY2F0aW9uKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAKKyAgICBtX3NwYWNlLm1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQo
YWxsb2NhdGlvbik7CisgICAgbV9zcGFjZS5tX2hlYXAtPmRpZEFsbG9jYXRlKHNpemUpOworICAg
IG1fc3BhY2UubV9jYXBhY2l0eSArPSBzaXplOworICAgIAorICAgIG1fbGFyZ2VBbGxvY2F0aW9u
cy5hcHBlbmQoYWxsb2NhdGlvbik7CisgICAgICAgIAorICAgIHJldHVybiBhbGxvY2F0aW9uLT5j
ZWxsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIENvbXBsZXRlU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFN1YnNwYWNlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb21wbGV0ZVN1YnNwYWNlKENT
dHJpbmcgbmFtZSwgSGVhcCYsIEhlYXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Iq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29tcGxldGVTdWJzcGFjZSgpOworCisgICAgLy8g
SW4gc29tZSBjb2RlIHBhdGhzLCB3ZSBuZWVkIGl0IHRvIGJlIGEgY29tcGlsZSBlcnJvciB0byBj
YWxsIHRoZSB2aXJ0dWFsIHZlcnNpb24gb2Ygb25lIG9mCisgICAgLy8gdGhlc2UgZnVuY3Rpb25z
LiBUaGF0J3Mgd2h5IHdlIGRvIGZpbmFsIG1ldGhvZHMgdGhlIG9sZCBzY2hvb2wgd2F5LgorICAg
IAorICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIAorICAgIHZvaWQq
IGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmly
dHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsK
KyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0
ZXApOyB9CisgICAgCisgICAgTWFya2VkQWxsb2NhdG9yKiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAo
KSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQorCitwcml2YXRlOgorICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOworICAgIAorICAgIC8v
IFRoZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFu
ZCBhbGxvY2F0b3IgY3JlYXRpb24uCisgICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIHRyeUFs
bG9jYXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgCisgICAgc3RkOjph
cnJheTxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxs
b2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRBbGxv
Y2F0b3I+PiBtX2FsbG9jYXRvcnM7Cit9OworCitBTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRv
ciogU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFj
ZTo6bGFyZ2VDdXRvZmYpIHsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiByZXN1bHQgPSBtX2Fs
bG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpXTsK
KyAgICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJu
TnVsbCB8fCByZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gYWxsb2NhdG9yRm9yU2xvdyhzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBDZWxsVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK25hbWVzcGFjZSB7CisKKy8vIFdyaXRpbmcgaXQgdGhpcyB3YXkgZW5zdXJlcyB0aGF0
IHdoZW4geW91IHBhc3MgdGhpcyBhcyBhIGZ1bmN0b3IsIHRoZSBjYWxsZWUgaXMgc3BlY2lhbGl6
ZWQgZm9yCisvLyB0aGlzIGNhbGxiYWNrLiBJZiB5b3Ugd3JvdGUgdGhpcyBhcyBhIG5vcm1hbCBm
dW5jdGlvbiB0aGVuIHRoZSBjYWxsZWUgd291bGQgYmUgc3BlY2lhbGl6ZWQgZm9yCisvLyB0aGUg
ZnVuY3Rpb24ncyB0eXBlIGFuZCBpdCB3b3VsZCBoYXZlIGluZGlyZWN0IGNhbGxzIHRvIHRoYXQg
ZnVuY3Rpb24uIEFuZCB1bmxpa2UgYSBsYW1iZGEsIGl0J3MKKy8vIHBvc3NpYmxlIHRvIG1hcmsg
dGhpcyBBTFdBWVNfSU5MSU5FLgorc3RydWN0IERlc3Ryb3lGdW5jIHsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgb3BlcmF0b3IoKShWTSYgdm0sIEpTQ2VsbCogY2VsbCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChjZWxsLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgQVNTRVJUKGNlbGwt
PmlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCk7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOworICAgICAgICBNZXRo
b2RUYWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8tPm1ldGhvZFRh
YmxlLmRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3koY2VsbCk7CisgICAgfQorfTsKKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK0hlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBlKEFsbG9jYXRv
ckF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQor
eworfQorCitIZWFwQ2VsbFR5cGU6On5IZWFwQ2VsbFR5cGUoKQoreworfQorCit2b2lkIEhlYXBD
ZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxvY2ssIEZyZWVMaXN0
KiBmcmVlTGlzdCkKK3sKKyAgICBibG9jay5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVl
TGlzdCwgRGVzdHJveUZ1bmMoKSk7Cit9CisKK3ZvaWQgSGVhcENlbGxUeXBlOjpkZXN0cm95KFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcENlbGxUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFw
Q2VsbFR5cGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXBDZWxsVHlwZSk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgfkhlYXBDZWxsVHlwZSgpOworCisgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRl
cyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorCisgICAgLy8g
VGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyB0aGlzIGlzIHRvIHNwZWNpYWxpemUgdGhlIHN3ZWVw
IGZvciB5b3VyIGRlc3RydWN0b3JzLiBUaGlzIHdvbid0CisgICAgLy8gYmUgY2FsbGVkIGZvciBu
by1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhpcyBtdXN0IGNhbGwgTWFya2VkQmxvY2s6OmZpbmlzaFN3
ZWVwS25vd2luZ1N1YnNwYWNlLgorICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKKworICAgIC8vIFRoZXNlIGdldCBjYWxsZWQgZm9y
IGxhcmdlIG9iamVjdHMuCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsK
KworcHJpdmF0ZToKKyAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKK3sKK30K
KworSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Io
KQoreworfQorCit2b2lkKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUFs
aWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgLy8gU2lu
Y2UgdGhpcyBpcyBkZXNpZ25lZCBzcGVjaWFsbHkgZm9yIElzb1N1YnNwYWNlLCB3ZSBrbm93IHRo
YXQgd2Ugd2lsbCBvbmx5IGJlIGFza2VkIHRvCisgICAgLy8gYWxsb2NhdGUgTWFya2VkQmxvY2tz
LgorICAgIFJFTEVBU0VfQVNTRVJUKGFsaWdubWVudCA9PSBNYXJrZWRCbG9jazo6YmxvY2tTaXpl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOwor
ICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAKKyAgICBtX2Zp
cnN0VW5jb21taXR0ZWQgPSBtX2NvbW1pdHRlZC5maW5kQml0KG1fZmlyc3RVbmNvbW1pdHRlZCwg
ZmFsc2UpOworICAgIGlmIChtX2ZpcnN0VW5jb21taXR0ZWQgPCBtX2Jsb2Nrcy5zaXplKCkpIHsK
KyAgICAgICAgbV9jb21taXR0ZWRbbV9maXJzdFVuY29tbWl0dGVkXSA9IHRydWU7CisgICAgICAg
IHZvaWQqIHJlc3VsdCA9IG1fYmxvY2tzW21fZmlyc3RVbmNvbW1pdHRlZF07CisgICAgICAgIE9T
QWxsb2NhdG9yOjpjb21taXQocmVzdWx0LCBNYXJrZWRCbG9jazo6YmxvY2tTaXplLCB0cnVlLCBm
YWxzZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQqIHJl
c3VsdCA9IGZhc3RBbGlnbmVkTWFsbG9jKE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIE1hcmtlZEJs
b2NrOjpibG9ja1NpemUpOworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOwor
ICAgIG1fYmxvY2tzLmFwcGVuZChyZXN1bHQpOworICAgIG1fYmxvY2tJbmRpY2VzLmFkZChyZXN1
bHQsIGluZGV4KTsKKyAgICBpZiAobV9ibG9ja3MuY2FwYWNpdHkoKSAhPSBtX2NvbW1pdHRlZC5z
aXplKCkpCisgICAgICAgIG1fY29tbWl0dGVkLnJlc2l6ZShtX2Jsb2Nrcy5jYXBhY2l0eSgpKTsK
KyAgICBtX2NvbW1pdHRlZFtpbmRleF0gPSB0cnVlOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZnJlZUFsaWduZWRNZW1vcnkodm9pZCog
YmFzZVB0cikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgCisg
ICAgYXV0byBpdGVyID0gbV9ibG9ja0luZGljZXMuZmluZChiYXNlUHRyKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChpdGVyICE9IG1fYmxvY2tJbmRpY2VzLmVuZCgpKTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGl0ZXItPnZhbHVlOworICAgIG1fY29tbWl0dGVkW2luZGV4XSA9IGZhbHNlOworICAgIG1f
Zmlyc3RVbmNvbW1pdHRlZCA9IHN0ZDo6bWluKGluZGV4LCBtX2ZpcnN0VW5jb21taXR0ZWQpOwor
ICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdChiYXNlUHRyLCBNYXJrZWRCbG9jazo6YmxvY2tTaXpl
KTsKK30KKwordm9pZCBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJJc28oIiwgUmF3UG9pbnRlcih0aGlzKSwg
IikiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJ
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIDogcHVibGljIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Ig
eworcHVibGljOgorICAgIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKKyAgICB+SXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpOworCisgICAgdm9pZCogdHJ5QWxsb2NhdGVBbGlnbmVkTWVt
b3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBvdmVycmlkZTsKKyAgICB2b2lkIGZy
ZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIExvY2sgbV9sb2NrOworICAg
IFZlY3Rvcjx2b2lkKj4gbV9ibG9ja3M7CisgICAgSGFzaE1hcDx2b2lkKiwgdW5zaWduZWQ+IG1f
YmxvY2tJbmRpY2VzOworICAgIEZhc3RCaXRWZWN0b3IgbV9jb21taXR0ZWQ7CisgICAgdW5zaWdu
ZWQgbV9maXJzdFVuY29tbWl0dGVkIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklzb1N1
YnNwYWNlLmgiCisKKyNpbmNsdWRlICJJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSXNv
U3Vic3BhY2U6Oklzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgSGVhcENlbGxU
eXBlKiBoZWFwQ2VsbFR5cGUsIHNpemVfdCBzaXplKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVh
cCkKKyAgICAsIG1fYWxsb2NhdG9yKCZoZWFwLCBzaXplKQorICAgICwgbV9pc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4o
KSkKK3sKKyAgICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgbV9pc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmdldCgpKTsKKworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxv
Y2F0b3JMb2NrKCkpOworICAgIG1fYWxsb2NhdG9yLnNldFN1YnNwYWNlKHRoaXMpOworICAgIG1f
c3BhY2UuYWRkTWFya2VkQWxsb2NhdG9yKGxvY2tlciwgJm1fYWxsb2NhdG9yKTsKKyAgICBtX2Fs
aWduZWRNZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVyQWxsb2NhdG9yKCZtX2FsbG9jYXRvcik7Cisg
ICAgbV9maXJzdEFsbG9jYXRvciA9ICZtX2FsbG9jYXRvcjsKK30KKworSXNvU3Vic3BhY2U6On5J
c29TdWJzcGFjZSgpCit7Cit9CisKK01hcmtlZEFsbG9jYXRvciogSXNvU3Vic3BhY2U6OmFsbG9j
YXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQor
eworICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIGZhaWx1cmVNb2RlKTsK
K30KKworTWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVh
bChzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKKyAgICByZXR1cm4gJm1fYWxsb2NhdG9yOworfQor
Cit2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkK
K3sKKyAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwg
ZmFpbHVyZU1vZGUpOworfQorCit2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFs
KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9
PSB0aGlzLT5zaXplKCkpOworICAgIHJldHVybiBtX2FsbG9jYXRvci5hbGxvY2F0ZShkZWZlcnJh
bENvbnRleHQsIGZhaWx1cmVNb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNp
bmNsdWRlICJTdWJzcGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjsKKworY2xhc3MgSXNvU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2Ug
eworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYsIEhlYXBDZWxsVHlwZSosIHNpemVfdCBzaXplKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB+SXNvU3Vic3BhY2UoKTsKKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9hbGxvY2F0b3IuY2VsbFNpemUoKTsgfQorCisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3JGb3Ioc2l6ZV90LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlKTsKKworICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENv
bnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KTsKKworcHJpdmF0ZToKKworICAgIE1hcmtlZEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI0
NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2LDE2IEBAIE1hcmtlZEFsbG9jYXRvcjo6TWFya2Vk
QWxsb2NhdG9yKEhlYXAqIGgKICAgICAsIG1fY3VycmVudEJsb2NrKDApCiAgICAgLCBtX2xhc3RB
Y3RpdmVCbG9jaygwKQogICAgICwgbV9jZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2Vs
bFNpemUpKQotICAgICwgbV9hdHRyaWJ1dGVzKHN1YnNwYWNlLT5hdHRyaWJ1dGVzKCkpCiAgICAg
LCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fc3Vic3BhY2Uoc3Vic3BhY2UpCiB7CiB9CiAKK3ZvaWQg
TWFya2VkQWxsb2NhdG9yOjpzZXRTdWJzcGFjZShTdWJzcGFjZSogc3Vic3BhY2UpCit7CisgICAg
bV9hdHRyaWJ1dGVzID0gc3Vic3BhY2UtPmF0dHJpYnV0ZXMoKTsKKyAgICBtX3N1YnNwYWNlID0g
c3Vic3BhY2U7Cit9CisKIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSBk
ZWFkbGluZSkKIHsKICAgICB1bnNpZ25lZCBpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA9IDA7CkBA
IC0xNzUsMTkgKzE3OSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRv
VGUKICAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKIH0KIAotdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQp
Ci17Ci0gICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7Ci0gICAgcmV0dXJuIGFsbG9jYXRl
U2xvd0Nhc2VJbXBsKGRlZmVycmFsQ29udGV4dCwgY3Jhc2hPbkZhaWx1cmUpOwotfQotCi12b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7Ci0g
ICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGRlZmVycmFsQ29udGV4dCwgY3Jhc2hPbkZh
aWx1cmUpOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBs
KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIGJvb2wgY3Jhc2hPbkZhaWx1cmUp
Cit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQog
ewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBB
U1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKQEAg
LTIwNCwxMSArMTk2LDggQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNl
SQogICAgIAogICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2FsbGJh
Y2sgYW5kIG5vdyB0aGlzIGFsbG9jYXRvciBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25seQog
ICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0IGEg
Y2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24uCi0gICAgaWYgKFVOTElLRUxZKG1f
Y3VycmVudEJsb2NrKSkgewotICAgICAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCi0gICAgICAgICAg
ICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAgICAgcmV0dXJuIHRyeUFs
bG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWShtX2N1cnJl
bnRCbG9jaykpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1
cmVNb2RlKTsKICAgICAKICAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xs
ZWN0aW5nKCk7CiAgICAgCkBAIC0yMTcsNyArMjA2LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2Nr
ID0gdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgaWYgKGNy
YXNoT25GYWlsdXJlKQorICAgICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpBc3NlcnQpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjQ0
NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNjcsMTMgKzY3LDE3IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIxMjEKIAog
Y2xhc3MgTWFya2VkQWxsb2NhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRB
bGxvY2F0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
Q2VsbFNpemUoKTsKIAotICAgIE1hcmtlZEFsbG9jYXRvcihIZWFwKiwgU3Vic3BhY2UqLCBzaXpl
X3QgY2VsbFNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvcihIZWFwKiwgc2l6ZV90IGNlbGxTaXpl
KTsKKyAgICB2b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpOwogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICB2b2lk
IHN0b3BBbGxvY2F0aW5nKCk7CkBAIC05MCw4ICs5NCw3IEBAIHB1YmxpYzoKICAgICBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24g
PT0gTmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxs
OjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9
Ci0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7Ci0gICAg
dm9pZCogdHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9p
ZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwog
ICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KIAogICAgIGJvb2wgaXNGcmVlTGlz
dGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0OwpAQCAtMTM2LDkgKzEzOSwxMSBAQCBw
dWJsaWM6CiAgICAgCiAgICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9uZXh0QWxsb2NhdG9yOyB9CiAgICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0QWxs
b2NhdG9ySW5TdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluU3Vic3Bh
Y2U7IH0KKyAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKTsgfQogICAgIAogICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvcihNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KICAgICB2
b2lkIHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
KSB7IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxvY2F0b3I7IH0KKyAgICB2b2lkIHNl
dE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yID0gYWxs
b2NhdG9yOyB9CiAgICAgCiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEVtcHR5QmxvY2tU
b1N0ZWFsKCk7CiAgICAgCkBAIC0xNTUsOSArMTYwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCopOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqKTsK
LSAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0RlZmVycmFsQ29udGV4dCosIGJvb2wg
Y3Jhc2hPbkZhaWx1cmUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgdm9pZCogdHJ5QWxsb2Nh
dGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUFsbG9j
YXRlQmxvY2soKTsKQEAgLTE5MiwxMCArMTk1LDExIEBAIHByaXZhdGU6CiAgICAgQWxsb2NhdG9y
QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBzaG91
bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4Ci0gICAgSGVhcCogbV9oZWFwOwotICAgIFN1YnNwYWNl
KiBtX3N1YnNwYWNlOworICAgIEhlYXAqIG1faGVhcCB7IG51bGxwdHIgfTsKKyAgICBTdWJzcGFj
ZSogbV9zdWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFs
bG9jYXRvciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRv
ckluU3Vic3BhY2UgeyBudWxscHRyIH07CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxv
Y2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CiB9OwogCiBpbmxpbmUg
cHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5o
CShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIxICszNSwxMiBAQCBpbmxp
bmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlCiAgICAgcmV0dXJuIG1fZnJlZUxp
c3QuY29udGFpbnMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0KQorQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxv
Y2F0ZSgKICAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CiAgICAgICAgICAgICBzYW5pdGl6
ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIZWFwQ2VsbCo+KHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7Ci0gICAg
ICAgIH0pOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICByZXR1cm4gbV9m
cmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7Ci0gICAgICAg
ICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0
KSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNs
b3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKICAgICAgICAgfSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlz
aW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUxLDEwICs1NTEsOCBAQCB2b2lkIE1hcmtlZFNwYWNlOjpk
dW1wQml0cyhQcmludFN0cmVhbSYgCiAgICAgICAgIH0pOwogfQogCi1NYXJrZWRBbGxvY2F0b3Iq
IE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoCi0gICAgY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBTdWJzcGFjZSogc3Vic3BhY2UsIHNpemVfdCBzaXplQ2xhc3MpCit2b2lkIE1hcmtlZFNw
YWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvcikKIHsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1f
YmFnT2ZBbGxvY2F0b3JzLmFkZChoZWFwKCksIHN1YnNwYWNlLCBzaXplQ2xhc3MpOwogICAgIGFs
bG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvcihudWxscHRyKTsKICAgICAKICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwpAQCAtNTYyLDE0ICs1NjAsMTAgQEAgTWFya2VkQWxsb2NhdG9yKiBNYXJr
ZWRTcGFjZTo6YWRkTWFya2VkQQogICAgIGlmICghbV9maXJzdEFsbG9jYXRvcikgewogICAgICAg
ICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwogICAgICAgICBtX2xhc3RBbGxvY2F0b3Ig
PSBhbGxvY2F0b3I7Ci0gICAgICAgIGZvciAoU3Vic3BhY2UqIHN1YnNwYWNlIDogbV9zdWJzcGFj
ZXMpCi0gICAgICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRlRmlyc3RBbGxvY2F0b3IoYWxsb2Nh
dG9yKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2xhc3RBbGxvY2F0b3ItPnNldE5leHRBbGxv
Y2F0b3IoYWxsb2NhdG9yKTsKICAgICAgICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwog
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gYWxsb2NhdG9yOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNp
b24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxv
Y2F0b3IqIGZpcnN0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdEFsbG9jYXRvcjsg
fQogICAgIAogICAgIExvY2smIGFsbG9jYXRvckxvY2soKSB7IHJldHVybiBtX2FsbG9jYXRvckxv
Y2s7IH0KLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0
cmFjdExvY2tlciYsIFN1YnNwYWNlKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2b2lkIGFkZE1h
cmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIE1hcmtlZEFsbG9jYXRvciopOwog
ICAgIAogICAgIC8vIFdoZW4gdGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlw
cGVkIGJ1dCB0aGUgbWFyayBiaXRzIGhhdmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlz
TWFya2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNNYXJraW5nOyB9CkBAIC0xNzMsOSArMTczLDYg
QEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2Vha1NldDsKICAgICBmcmllbmQgY2xhc3Mg
U3Vic3BhY2U7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KFN1YnNwYWNlJiwgR0NEZWZl
cnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhTdWJzcGFj
ZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLQogICAgIC8vIFVzZSB0aGlzIHZlcnNp
b24gd2hlbiBjYWxsaW5nIGZyb20gd2l0aGluIHRoZSBHQyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhl
IGFsbG9jYXRvcnMKICAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkLgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3Im
KTsKQEAgLTIxMCw3ICsyMDcsNiBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxX
ZWFrU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxXZWFrU2V0Pj4gbV9uZXdBY3RpdmVXZWFrU2V0
czsKIAogICAgIExvY2sgbV9hbGxvY2F0b3JMb2NrOwotICAgIEJhZzxNYXJrZWRBbGxvY2F0b3I+
IG1fYmFnT2ZBbGxvY2F0b3JzOwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRv
ciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFzdEFsbG9jYXRvciB7IG51
bGxwdHIgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAko
cmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw0NSArMzQsMjMgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIFdyaXRpbmcgaXQgdGhpcyB3YXkgZW5zdXJlcyB0aGF0IHdo
ZW4geW91IHBhc3MgdGhpcyBhcyBhIGZ1bmN0b3IsIHRoZSBjYWxsZWUgaXMgc3BlY2lhbGl6ZWQg
Zm9yCi0vLyB0aGlzIGNhbGxiYWNrLiBJZiB5b3Ugd3JvdGUgdGhpcyBhcyBhIG5vcm1hbCBmdW5j
dGlvbiB0aGVuIHRoZSBjYWxsZWUgd291bGQgYmUgc3BlY2lhbGl6ZWQgZm9yCi0vLyB0aGUgZnVu
Y3Rpb24ncyB0eXBlIGFuZCBpdCB3b3VsZCBoYXZlIGluZGlyZWN0IGNhbGxzIHRvIHRoYXQgZnVu
Y3Rpb24uIEFuZCB1bmxpa2UgYSBsYW1iZGEsIGl0J3MKLS8vIHBvc3NpYmxlIHRvIG1hcmsgdGhp
cyBBTFdBWVNfSU5MSU5FLgotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgb3BlcmF0b3IoKShWTSYgdm0sIEpTQ2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChjZWxsLT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgQVNTRVJUKGNlbGwtPmlu
bGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCk7Ci0gICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOwotICAgICAgICBNZXRob2RU
YWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8tPm1ldGhvZFRhYmxl
LmRlc3Ryb3k7Ci0gICAgICAgIGRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCi0KLVN1YnNwYWNlOjpTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
IGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRlcywgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKK1N1YnNwYWNlOjpTdWJzcGFjZShDU3RyaW5n
IG5hbWUsIEhlYXAmIGhlYXApCiAgICAgOiBtX3NwYWNlKGhlYXAub2JqZWN0U3BhY2UoKSkKICAg
ICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgLCBt
X2FsaWduZWRNZW1vcnlBbGxvY2F0b3IoYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKLSAgICAsIG1f
YWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uKG1fc3BhY2UuZmlyc3RBbGxvY2F0b3IoKSkKLXsK
LSAgICAvLyBJdCdzIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQgd2UncmUgR0NpbmcgcmlnaHQgbm93
IGV2ZW4gaWYgdGhlIGNsaWVudCBpcyBjYXJlZnVsIHRvIG9ubHkKLSAgICAvLyBjcmVhdGUgc3Vi
c3BhY2VzIHJpZ2h0IGFmdGVyIFZNIGNyZWF0aW9uLCBzaW5jZSBjb2xsZWN0Q29udGludW91c2x5
IChhbmQgcHJvYmFibHkgb3RoZXIKLSAgICAvLyB0aGluZ3MpIGNvdWxkIGNhdXNlIGEgR0MgdG8g
YmUgbGF1bmNoZWQgYXQgcHJldHR5IG11Y2ggYW55IHRpbWUgYW5kIGl0J3Mgbm90IDEwMCUgb2J2
aW91cwotICAgIC8vIHRoYXQgYWxsIGNsaWVudHMgd291bGQgYmUgYWJsZSB0byBlbnN1cmUgdGhh
dCB0aGVyZSBhcmUgemVybyBzYWZlcG9pbnRzIGJldHdlZW4gd2hlbiB0aGV5Ci0gICAgLy8gY3Jl
YXRlIFZNIGFuZCB3aGVuIHRoZXkgZG8gdGhpcy4gUHJldmVudGluZyBHQyB3aGlsZSB3ZSdyZSBj
cmVhdGluZyB0aGUgU3Vic3BhY2UgZW5zdXJlcwotICAgIC8vIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0
byB3b3JyeSBhYm91dCB3aGV0aGVyIGl0J3MgT0sgZm9yIHRoZSBHQyB0byBldmVyIHNlZSBhIGJy
YW5kIG5ldwotICAgIC8vIHN1YnNwYWNlLgoreworfQorCit2b2lkIFN1YnNwYWNlOjppbml0aWFs
aXplKEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBh
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKQoreworICAgIG1fYXR0cmlidXRlcyA9IGhlYXBDZWxsVHlw
ZS0+YXR0cmlidXRlcygpOworICAgIG1faGVhcENlbGxUeXBlID0gaGVhcENlbGxUeXBlOworICAg
IG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CisgICAg
bV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3It
PmZpcnN0QWxsb2NhdG9yKCk7CisKKyAgICBIZWFwJiBoZWFwID0gKm1fc3BhY2UuaGVhcCgpOwog
ICAgIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25TY29wZShoZWFwKTsK
ICAgICBoZWFwLm9iamVjdFNwYWNlKCkubV9zdWJzcGFjZXMuYXBwZW5kKHRoaXMpOwotICAgIAot
ICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM7IGktLTspCi0g
ICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOworICAgIG1fYWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJTdWJzcGFjZSh0aGlzKTsKIH0KIAogU3Vic3BhY2U6
On5TdWJzcGFjZSgpCkBAIC04MSw2MCArNTksMTIgQEAgU3Vic3BhY2U6On5TdWJzcGFjZSgpCiAK
IHZvaWQgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBG
cmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5nU3Vic3Bh
Y2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIG1faGVhcENlbGxUeXBlLT5maW5pc2hT
d2VlcChibG9jaywgZnJlZUxpc3QpOwogfQogCiB2b2lkIFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2
bSwgSlNDZWxsKiBjZWxsKQogewotICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOwotfQotCi0v
LyBUaGUgcmVhc29uIHdoeSB3ZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFsbG9jYXRlIGFuZCB0cnlB
bGxvY2F0ZSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mCi0vLyBjaGVja3Mgb24gdGhlIGFs
bG9jYXRpb24gcGF0aCBpbiBib3RoIGNhc2VzLiBMaWtld2lzZSwgdGhlIHJlYXNvbiB3aHkgd2Ug
aGF2ZSBvdmVybG9hZHMgd2l0aCBhbmQKLS8vIHdpdGhvdXQgZGVmZXJyYWxDb250ZXh0IGlzIHRv
IG1pbmltaXplIHRoZSBhbW91bnQgb2YgY29kZSBmb3IgY2FsbGluZyBhbGxvY2F0ZSB3aGVuIHlv
dSBkb24ndAotLy8gbmVlZCB0aGUgZGVmZXJyYWxDb250ZXh0Lgotdm9pZCogU3Vic3BhY2U6OmFs
bG9jYXRlKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9
IGFsbG9jYXRlU2xvdyhudWxscHRyLCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjphbGxvY2F0ZShHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkICpy
ZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9y
Rm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFs
Q29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3coZGVmZXJy
YWxDb250ZXh0LCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZSkKLXsK
LSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
dHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPnRyeUFs
bG9jYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3cobnVs
bHB0ciwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlm
IChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKLSAg
ICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQpOwot
ICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KGRlZmVycmFsQ29udGV4
dCwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIG1faGVhcENlbGxUeXBlLT5kZXN0cm95KHZtLCBjZWxsKTsKIH0KIAogdm9pZCBTdWJzcGFj
ZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQpAQCAtMTQ0LDEwNCArNzQsMTcgQEAgdm9pZCBTdWJz
cGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogICAgICAgICAgICAgYWxsb2NhdG9yLnByZXBh
cmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgICAgIH0pOwogCi0gICAgbV9hbGxvY2F0b3JGb3JFbXB0
eUFsbG9jYXRpb24gPSBtX3NwYWNlLmZpcnN0QWxsb2NhdG9yKCk7CisgICAgbV9hbGxvY2F0b3JG
b3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPmZpcnN0QWxsb2Nh
dG9yKCk7CiB9CiAKIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpmaW5kRW1wdHlCbG9j
a1RvU3RlYWwoKQogewotICAgIGZvciAoOyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbjsg
bV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2Nh
dGlvbi0+bmV4dEFsbG9jYXRvcigpKSB7Ci0gICAgICAgIFN1YnNwYWNlKiBvdGhlclN1YnNwYWNl
ID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPnN1YnNwYWNlKCk7Ci0gICAgICAgIGlm
IChvdGhlclN1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgIT0gYWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAorICAgIGZvciAo
OyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbjsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9j
YXRpb24gPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+bmV4dEFsbG9jYXRvckluQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpKSB7CiAgICAgICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jayA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5maW5kRW1wdHlCbG9ja1Rv
U3RlYWwoKSkKICAgICAgICAgICAgIHJldHVybiBibG9jazsKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3co
c2l6ZV90IHNpemUpCi17Ci0gICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFz
c1RvSW5kZXgoc2l6ZSk7Ci0gICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtlZFNwYWNlOjpzX3Np
emVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKLSAgICBpZiAoIXNpemVDbGFzcykKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB3cml0dGVuIGluIHN1Y2ggYSB3
YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVhZHMgdG8gZW5kIHVwIGhlcmUgaWYgdGhl
eSB3YW50Ci0gICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgc29tZSBhbGxvY2F0b3Ig
dGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0IGEgcG9zc2libHktCi0gICAgLy8g
anVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxsIGlmIHdlJ3JlIGlu
IHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAotICAgIC8vIGFsbG9jYXRvciBhcyAi
cGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQgY291bGQgbGVhZCB0
byBwZXJmb3JtYW5jZQotICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29yaXRobSBoZXJlIGlz
IHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUgbG9jaywgdG8KLSAg
ICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBjcmVhdGlvbnMgZnJv
bSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcwotICAgIC8vIHRoYXQgYW55ICJm
b3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3Ig
YWZ0ZXIgaXQncyBpbml0aWFsaXplZAotICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2NrKCkpOwotICAgIGlm
IChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5k
ZXhdKQotICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwotCi0gICAgaWYgKGZhbHNlKQotICAgICAg
ICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBtX25hbWUsICIsICIs
IG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7Ci0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBtX3NwYWNlLmFkZE1hcmtlZEFsbG9jYXRvcihsb2NrZXIsIHRoaXMs
IHNpemVDbGFzcyk7Ci0gICAgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChz
aXplQ2xhc3MpOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKE1hcmtlZFNwYWNlOjpzX3Np
emVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xhc3MpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9IGFsbG9jYXRvcjsK
LSAgICAgICAgCi0gICAgICAgIGlmICghaW5kZXgtLSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKG1fZmlyc3RBbGxv
Y2F0b3IpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgbV9maXJzdEFsbG9jYXRv
ciA9IGFsbG9jYXRvcjsKLSAgICByZXR1cm4gYWxsb2NhdG9yOwotfQotCi12b2lkKiBTdWJzcGFj
ZTo6YWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVf
dCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhkZWZlcnJhbENv
bnRleHQsIHNpemUpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBzYW5pdGl6ZVN0YWNr
Rm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOwotICAgIAotICAgIGlmIChNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplKSkKLSAgICAgICAgcmV0dXJuIGFsbG9j
YXRvci0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICBpZiAoc2l6ZSA8
PSBPcHRpb25zOjpsYXJnZUFsbG9jYXRpb25DdXRvZmYoKQotICAgICAgICAmJiBzaXplIDw9IE1h
cmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewotICAgICAgICBkYXRhTG9nKCJGQVRBTDogYXR0YW1w
dGluZyB0byBhbGxvY2F0ZSBzbWFsbCBvYmplY3QgdXNpbmcgbGFyZ2UgYWxsb2NhdGlvbi5cbiIp
OwotICAgICAgICBkYXRhTG9nKCJSZXF1ZXN0ZWQgYWxsb2NhdGlvbiBzaXplOiAiLCBzaXplLCAi
XG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAg
Ci0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxD
b250ZXh0KTsKLSAgICAKLSAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtl
ZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0gICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9u
ID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlz
KTsKLSAgICBpZiAoIWFsbG9jYXRpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAot
ICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKLSAgICBt
X3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7Ci0gICAgbV9zcGFjZS5tX2NhcGFjaXR5
ICs9IHNpemU7Ci0gICAgCi0gICAgbV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9u
KTsKLSAgICAgICAgCi0gICAgcmV0dXJuIGFsbG9jYXRpb24tPmNlbGwoKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIFN1YnNwYWNlOjpkaWRBbGxvY2F0ZSh2b2lkKiBwdHIpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKHB0cik7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGxvZ2dpbmcg
YWxsb2NhdGlvbnMsIG9yIGRvaW5nIG90aGVyIGtpbmRzIG9mIGRlYnVnZ2luZyBoYWNrcy4gSnVz
dCBtYWtlCi0gICAgLy8gc3VyZSB5b3UgSlNDX2ZvcmNlR0NTbG93UGF0aHM9dHJ1ZS4KLX0KLQog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2UuaAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1ZGUgIk1hcmtlZEJs
b2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CkBAIC0zNSw0MSArMzYsMjggQEAgY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsK
IAogLy8gVGhlIGlkZWEgb2Ygc3Vic3BhY2VzIGlzIHRoYXQgeW91IGNhbiBwcm92aWRlIHNvbWUg
Y3VzdG9tIGJlaGF2aW9yIGZvciB5b3VyIG9iamVjdHMgaWYgeW91CiAvLyBhbGxvY2F0ZSB0aGVt
IGZyb20gYSBjdXN0b20gU3Vic3BhY2UgaW4gd2hpY2ggeW91IG92ZXJyaWRlIHNvbWUgb2YgdGhl
IHZpcnR1YWwgbWV0aG9kcy4gVGhpcwotLy8gY2xhc3MgaXMgdGhlIGJhc2VjbGFzcyBvZiBTdWJz
cGFjZXMgYW5kIGl0IHByb3ZpZGVzIGEgcmVhc29uYWJsZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u
LCB3aGVyZQotLy8gc3dlZXBpbmcgYXNzdW1lcyBpbW1vcnRhbCBzdHJ1Y3R1cmUuIFRoZSBjb21t
b24gd2F5cyBvZiBvdmVycmlkaW5nIHRoaXMgYXJlOgotLy8KLS8vIC0gUHJvdmlkZSBjdXN0b21p
emVkIGRlc3RydWN0b3IgYmVoYXZpb3IuIFlvdSBjYW4gY2hhbmdlIGhvdyB0aGUgZGVzdHJ1Y3Rv
ciBpcyBjYWxsZWQuIFlvdSBjYW4KLS8vICAgYWxzbyBzcGVjaWFsaXplIHRoZSBkZXN0cnVjdG9y
IGNhbGwgaW4gdGhlIGxvb3AuCi0vLwotLy8gLSBVc2UgdGhlIFN1YnNwYWNlIGFzIGEgcXVpY2sg
d2F5IHRvIGl0ZXJhdGUgYWxsIG9mIHRoZSBvYmplY3RzIGluIHRoYXQgc3Vic3BhY2UuCisvLyBj
bGFzcyBpcyB0aGUgYmFzZWNsYXNzIG9mIFN1YnNwYWNlcy4gVXN1YWxseSB5b3Ugd2lsbCB1c2Ug
ZWl0aGVyIFN1YnNwYWNlIG9yIEZpeGVkU2l6ZVN1YnNwYWNlLgogY2xhc3MgU3Vic3BhY2Ugewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1YnNwYWNlKTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdWJzcGFjZShDU3RyaW5n
IG5hbWUsIEhlYXAmLCBBbGxvY2F0b3JBdHRyaWJ1dGVzLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+U3Vic3BhY2UoKTsKKworICAgIHZvaWQg
aW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUqLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CiAgICAg
CiAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kYXRhKCk7IH0K
ICAgICBNYXJrZWRTcGFjZSYgc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlOyB9CiAgICAg
CiAgICAgY29uc3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlczsgfQorICAgIEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9oZWFwQ2VsbFR5cGU7IH0KICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOyB9CiAgICAgCi0gICAgLy8gVGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyB0aGlz
IGlzIHRvIHNwZWNpYWxpemUgdGhlIHN3ZWVwIGZvciB5b3VyIGRlc3RydWN0b3JzLiBUaGlzIHdv
bid0Ci0gICAgLy8gYmUgY2FsbGVkIGZvciBuby1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhpcyBtdXN0
IGNhbGwgTWFya2VkQmxvY2s6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlLgotICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKLSAg
ICAKLSAgICAvLyBUaGVzZSBnZXQgY2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgotICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7Ci0gICAgCi0gICAgTWFya2VkQWxsb2NhdG9y
KiB0cnlBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ckZvcihzaXplX3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRl
KHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJh
bENvbnRleHQqLCBzaXplX3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRy
eUFsbG9jYXRlKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2Nh
dGUoR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworICAgIHZvaWQgZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlND
ZWxsKik7CisKKyAgICB2aXJ0dWFsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVf
dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0
ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7
CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApAQCAtOTYsNDgg
Kzg0LDI1IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
U3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9Ci0gICAgCi0gICAgTWFya2VkQWxs
b2NhdG9yKiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JT
aXplU3RlcFswXTsgfQorICAgIFN1YnNwYWNlKiBuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjsgfQorICAgIHZvaWQgc2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKFN1YnNwYWNlKiBzdWJzcGFjZSkgeyBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciA9IHN1YnNwYWNlOyB9CiAKLXByaXZhdGU6Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3JGb3JTbG93KHNpemVfdCk7Ci0gICAgCi0gICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBh
cmUgY29uY2VybmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlvbnMgYW5kIGFsbG9jYXRvciBjcmVhdGlv
bi4KLSAgICB2b2lkKiBhbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwot
ICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0g
ICAgCi0gICAgdm9pZCBkaWRBbGxvY2F0ZSh2b2lkKik7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBp
bml0aWFsaXplKEhlYXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKICAgICAK
ICAgICBNYXJrZWRTcGFjZSYgbV9zcGFjZTsKICAgICAKICAgICBDU3RyaW5nIG1fbmFtZTsKICAg
ICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKworICAgIEhlYXBDZWxsVHlwZSog
bV9oZWFwQ2VsbFR5cGUgeyBudWxscHRyIH07CisgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciog
bV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIAotICAgIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKLSAgICAKLSAgICBzdGQ6
OmFycmF5PE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9h
bGxvY2F0b3JGb3JTaXplU3RlcDsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fZmlyc3RBbGxvY2F0
b3IgeyBudWxscHRyIH07CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvckZvckVtcHR5
QWxsb2NhdGlvbiB7IG51bGxwdHIgfTsgLy8gVXNlcyB0aGUgTWFya2VkU3BhY2UgbGlua2VkIGxp
c3Qgb2YgYmxvY2tzLgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMYXJnZUFsbG9jYXRpb24sIEJh
c2ljUmF3U2VudGluZWxOb2RlPExhcmdlQWxsb2NhdGlvbj4+IG1fbGFyZ2VBbGxvY2F0aW9uczsK
KyAgICBTdWJzcGFjZSogbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBu
dWxscHRyIH07CiB9OwogCi1BTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6
OnRyeUFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAoc2l6ZSA8PSBNYXJrZWRT
cGFjZTo6bGFyZ2VDdXRvZmYpCi0gICAgICAgIHJldHVybiBtX2FsbG9jYXRvckZvclNpemVTdGVw
W01hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpXTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotQUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0
b3JGb3Ioc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPD0gTWFya2VkU3BhY2U6Omxhcmdl
Q3V0b2ZmKSB7Ci0gICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2Nh
dG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldKQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNsb3co
c2l6ZSk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9u
IDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSwxMSArNDksNiBAQCBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7CiBj
bGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKIGNsYXNzIFN0cnVjdHVyZTsKIAotZW51bSBjbGFzcyBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgewotICAgIFNob3VsZEFzc2VydE9uRmFpbHVyZSwKLSAgICBT
aG91bGROb3RBc3NlcnRPbkZhaWx1cmUKLX07Ci0KIGVudW0gY2xhc3MgR0NEZWZlcnJhbENvbnRl
eHRBcmdQcmVzZW5zZSB7CiAgICAgSGFzQXJnLAogICAgIERvZXNOb3RIYXZlQXJnCkBAIC03OSw4
ICs3NCw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIHRyeUFsbG9jYXRlQ2UKIGNsYXNz
IEpTQ2VsbCA6IHB1YmxpYyBIZWFwQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpTVmFsdWU7CiAg
ICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZT4KLSAgICBm
cmllbmQgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmLCBHQ0RlZmVycmFsQ29udGV4
dCosIHNpemVfdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBmcmllbmQgdm9pZCog
dHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKIAogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
MiwyMyArMTQyLDE0IEBAIFN1YnNwYWNlKiBKU0NlbGw6OnN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICByZXR1cm4gJnZtLmNlbGxTcGFjZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlIG1vZGUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2UgZGVmZXJy
YWxDb250ZXh0QXJnUHJlc2VuY2U+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRlQ2Vs
bEhlbHBlcihIZWFwJiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBz
aXplX3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIHRy
eUFsbG9jYXRlQ2VsbEhlbHBlcihIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KQogewogICAgIEFTU0VSVChkZWZlcnJhbENvbnRleHQgfHwgIURpc2FsbG93R0M6OmlzSW5FZmZl
Y3RPbkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAg
ICBKU0NlbGwqIHJlc3VsdDsKLSAgICBpZiAobW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlNob3VsZEFzc2VydE9uRmFpbHVyZSkgewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250
ZXh0QXJnUHJlc2VuY2UgPT0gR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQot
ICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52
bSgpKS0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3Rh
dGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlKHNp
emUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250ZXh0QXJn
UHJlc2VuY2UgPT0gR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQotICAgICAg
ICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+
dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3RhdGlj
X2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPnRyeUFsbG9jYXRlKHNp
emUpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQorICAgIEpTQ2VsbCogcmVzdWx0ID0gc3Vic3BhY2VGb3I8VD4oKmhl
YXAudm0oKSktPmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1
cmVNb2RlKTsKKyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpS
ZXR1cm5OdWxsICYmICFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogI2lmIEVOQUJM
RShHQ19WQUxJREFUSU9OKQogICAgIEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxpemluZ09i
amVjdCgpKTsKICAgICBoZWFwLnZtKCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKFQ6Omlu
Zm8oKSk7CkBAIC0xNzAsMjUgKzE2MSwyNSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9j
YXRlQ2VsbEhlbHBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCogYWxsb2NhdGVDZWxsKEhl
YXAmIGhlYXAsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxw
ZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRBc3NlcnRPbkZhaWx1cmUsIEdDRGVm
ZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6OkRvZXNOb3RIYXZlQXJnPihoZWFwLCBudWxscHRyLCBz
aXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAsIHNpemUsIG51
bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSkK
IHsKLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6U2hvdWxkTm90QXNzZXJ0T25GYWlsdXJlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNl
bnNlOjpEb2VzTm90SGF2ZUFyZz4oaGVhcCwgbnVsbHB0ciwgc2l6ZSk7CisgICAgcmV0dXJuIHRy
eUFsbG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFwLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCog
YWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VCwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRBc3NlcnRPbkZhaWx1cmUsIEdDRGVmZXJyYWxD
b250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZz4oaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBzaXplKTsK
KyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAsIHNpemUsIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogdm9pZCogdHJ5QWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlB
bGxvY2F0ZUNlbGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGROb3RBc3Nl
cnRPbkZhaWx1cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZz4oaGVhcCwg
ZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVy
PFQ+KGhlYXAsIHNpemUsIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpS
ZXR1cm5OdWxsKTsKIH0KIAogaW5saW5lIGJvb2wgSlNDZWxsOjppc09iamVjdCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ0NTgp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UuY3BwOjIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlLmgiCisKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8SlNEZXN0cnVjdGlibGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCkt
Pm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCisKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JB
dHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3Ip
Cit7Cit9CisKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlKCkKK3sKK30KKwordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNl
OjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVl
TGlzdCkKK3sKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3Qs
IERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6
OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMoKSh2bSwg
Y2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDExICsyNCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFzcENlbGxUeXBlLmgiCiAKICNpbmNsdWRlICJNYXJrZWRCbG9j
a0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJ
bmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MywyMSArNDIsMjEgQEAgc3RydWN0
IERlc3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBu
YW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAg
OiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rp
b24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZTo6SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVh
cENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6
OkpTQ2VsbCkpCiB7CiB9CiAKLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlKCkKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
Ojp+SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
IGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVl
TGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNl
KGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5n
SGVhcENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQordm9p
ZCBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0NDU4KQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmg6MjI0
NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpT
X0VYUE9SVF9QUklWQVRFIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKKyAgICAKKyAgICB2b2lk
IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkocmV2aXNp
b24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFw
Q2VsbFR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xhc3MgSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsKIHB1YmxpYzoKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwg
SGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
aXJ0dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOwogICAg
IAogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rl
c3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0Rl
c3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVz
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1
bmMgewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxs
KSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNEZXN0cnVjdGlibGVPYmplY3Qq
PihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7Ci0gICAgfQot
fTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBo
ZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShu
YW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxs
OjpKU0NlbGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2U6On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCkKLXsKLX0KLQotdm9pZCBKU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBo
YW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93
aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0g
ICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
ZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2Ug
OiBwdWJsaWMgU3Vic3BhY2UgewotcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2UoKTsKLSAgICAKLSAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJs
b2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveShWTSYs
IEpTQ2VsbCopIG92ZXJyaWRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFw
Q2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ0
NTgpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5jcHA6MjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMg
eworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dCo+KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9
Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBu
YW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAg
OiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rp
b24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgp
Cit7Cit9CisKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hT
d2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sK
KyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lG
dW5jKCkpOworfQorCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVz
dHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxs
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5o
IgorI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCIKIAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIK
LSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQz
LDIxICs0MiwyMSBAQCBzdHJ1Y3QgRGVzdHJveUZ1bmMgewogCiB9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKIAotSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxv
Y2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxv
Y2F0b3IpCitKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0
b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQog
Ci1KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UoKQorSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6
fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit2b2lkIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
IGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlz
aFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAK
LXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwg
SlNDZWxsKiBjZWxsKQordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
OjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAgIERlc3Ryb3lGdW5jKCkodm0s
IGNlbGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aAkocmV2aXNpb24gMjI0NDU4KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaDoyMjQ0NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNw
YWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhl
YXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7CisgICAgCisgICAgdm9p
ZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDE0ICsyNSwxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlN1YnNwYWNlLmgi
CisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xh
c3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSA6IHB1YmxpYyBIZWFwQ2Vs
bFR5cGUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdFN1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lk
IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwog
ICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Uu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3Bh
Y2VJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3Qg
RGVzdHJveUZ1bmMgewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlND
ZWxsKiBjZWxsKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdCo+KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShj
ZWxsKTsKLSAgICB9Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3Bh
Y2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxv
Y2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5l
ZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RTdWJzcGFjZSgpCi17Ci19Ci0KLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBm
cmVlTGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxp
c3QsIERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVu
YygpKHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpOwotICAgIAotICAgIHZvaWQgZmlu
aXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFw
Q2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NDU4KQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcDoyMjQ0NTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTdHJp
bmdTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IERlc3Ryb3lGdW5jIHsKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKKyAgICB7
CisgICAgICAgIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbCktPkpTU3RyaW5nOjp+SlNTdHJp
bmcoKTsKKyAgICB9Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNTdHJpbmdT
dWJzcGFjZTo6SlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAs
IEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCks
IGFsbG9jYXRvcikKK3sKK30KKworSlNTdHJpbmdTdWJzcGFjZTo6fkpTU3RyaW5nU3Vic3BhY2Uo
KQoreworfQorCit2b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAgIGhhbmRsZS5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Cit9CisKK3Zv
aWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hl
YXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
MTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTU3Ry
aW5nU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU1N0cmluZ0hlYXBDZWxsVHlwZS5oIgogCiAjaW5j
bHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDMsMjEg
KzQyLDIxIEBAIHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQogCi1KU1N0cmluZ1N1YnNwYWNlOjpKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVh
cCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3Bh
Y2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFw
Q2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQorSlNTdHJpbmdIZWFwQ2VsbFR5cGU6OkpTU3RyaW5n
SGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKE5l
ZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCi1KU1N0cmluZ1N1YnNw
YWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCitKU1N0cmluZ0hlYXBDZWxsVHlwZTo6fkpTU3RyaW5n
SGVhcENlbGxUeXBlKCkKIHsKIH0KIAotdm9pZCBKU1N0cmluZ1N1YnNwYWNlOjpmaW5pc2hTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3ZvaWQg
SlNTdHJpbmdIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhh
bmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dp
bmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3
ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKLXZv
aWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3ZvaWQg
SlNTdHJpbmdIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgJKHJldmlzaW9uIDIy
NDQ1OCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFj
ZS5oOjIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVh
cENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1N0cmluZ1N1YnNw
YWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7
CisgICAgCisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxp
c3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgJKHJldmlzaW9uIDIyNDQ1
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIlN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCi1jbGFzcyBKU1N0cmluZ1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsK
K2NsYXNzIEpTU3RyaW5nSGVhcENlbGxUeXBlIDogcHVibGljIEhlYXBDZWxsVHlwZSB7CiBwdWJs
aWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUs
IEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCB+SlNTdHJpbmdTdWJzcGFjZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU3Ry
aW5nSGVhcENlbGxUeXBlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTdHJp
bmdIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpT
Q2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCShub25leGlzdGVudCkK
QEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNTdHJpbmdTdWJzcGFjZS5o
IgotCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
bmFtZXNwYWNlIHsKLQotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0
YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbCktPkpTU3RyaW5nOjp+SlNTdHJpbmcoKTsKLSAgICB9
Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNTdHJpbmdTdWJzcGFjZTo6SlNT
dHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0
dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikK
LXsKLX0KLQotSlNTdHJpbmdTdWJzcGFjZTo6fkpTU3RyaW5nU3Vic3BhY2UoKQotewotfQotCi12
b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhh
bmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQotewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dp
bmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Ci19Ci0KLXZvaWQgSlNTdHJpbmdT
dWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVu
YygpKHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJKHJldmlzaW9u
IDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3Bh
Y2UuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTdWJz
cGFjZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNTdHJpbmdTdWJzcGFjZSA6IHB1
YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdT
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTdHJpbmdTdWJzcGFjZSgpOwotICAgIAot
ICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsMTEgKzE3MSwxNyBAQCBWTTo6Vk0oVk1UeXBlIHZt
VHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBmYXN0TWFsbG9jQWxsb2NhdG9yKHN0ZDo6
bWFrZV91bmlxdWU8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCiAgICAgLCBw
cmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OlByaW1pdGl2ZSkpCiAgICAgLCBqc1ZhbHVlR2ln
YWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I+KEdpZ2FjYWdlOjpKU1ZhbHVlKSkKLSAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBBbGxvY2F0b3JB
dHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpLCBw
cmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAsIGpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIEFsbG9jYXRv
ckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSks
IGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAsIGNlbGxTcGFjZSgiSlNDZWxs
IiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFw
Q2VsbDo6SlNDZWxsKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIGpzVmFsdWVH
aWdhY2FnZUNlbGxTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBKU0NlbGwiLCBoZWFwLCBBbGxvY2F0
b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBq
c1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBkZXN0cnVjdGlibGVDZWxsU3Bh
Y2UoIkRlc3RydWN0aWJsZSBKU0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRz
RGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgp
KQorICAgICwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxU
eXBlPihBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxs
OjpBdXhpbGlhcnkpKSkKKyAgICAsIGNlbGxIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxI
ZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwg
SGVhcENlbGw6OkpTQ2VsbCkpKQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZShz
dGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxsVHlwZT4oQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rl
c3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkpCisgICAgLCBkZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZT4oKSkKKyAgICAsIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0ZDo6
bWFrZV91bmlxdWU8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZT4oKSkKKyAg
ICAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZT4oKSkKKyAgICAsIHByaW1pdGl2ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBh
dXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0KCksIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdl
dCgpKQorICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNh
Z2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBqc1ZhbHVl
R2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBjZWxsU3BhY2UoIkpTQ2VsbCIsIGhlYXAs
IGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAg
LCBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgSlNDZWxsIiwgaGVh
cCwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgp
KQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlNDZWxsIiwgaGVh
cCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRv
ci5nZXQoKSkKICAgICAsIHN0cmluZ1NwYWNlKCJKU1N0cmluZyIsIGhlYXAsIGZhc3RNYWxsb2NB
bGxvY2F0b3IuZ2V0KCkpCiAgICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiSlNEZXN0cnVj
dGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogICAgICwgZWFn
ZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVhZ2VybHkgU3dlcHQgSlNEZXN0cnVj
dGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCisjaW5jbHVkZSAiQ29tcGxl
dGVTdWJzcGFjZS5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJD
b250cm9sRmxvd1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKQEAg
LTQwLDE4ICs0MSwxMyBAQAogI2luY2x1ZGUgIkludHJpbnNpYy5oIgogI2luY2x1ZGUgIkpJVFRo
dW5rcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJs
ZU9iamVjdFN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCi0jaW5jbHVkZSAiSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCi0jaW5jbHVkZSAiSlNTdHJpbmdTdWJzcGFj
ZS5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgogI2lu
Y2x1ZGUgIk51bWVyaWNTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5j
bHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKLSNpbmNsdWRlICJT
dWJzcGFjZS5oIgogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1
ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCkBAIC0yODksOSArMjg1
LDE2IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3I+IGZhc3RNYWxsb2NBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdp
Z2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3I7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4ganNW
YWx1ZUdpZ2FjYWdlQWxsb2NhdG9yOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBDZWxsVHlw
ZT4gYXV4aWxpYXJ5SGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwQ2VsbFR5
cGU+IGNlbGxIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBDZWxsVHlwZT4g
ZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU+IGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxs
VHlwZT4gc2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5Q29k
ZUJsb2NrSGVhcENlbGxUeXBlOwogICAgIAotICAgIFN1YnNwYWNlIHByaW1pdGl2ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2U7IC8vIFR5cGVkIGFycmF5cywgc3RyaW5ncywgYml0dmVjdG9ycywgZXRj
IGdvIGhlcmUuCi0gICAgU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8v
IEJ1dHRlcmZsaWVzLCBhcnJheXMgb2YgSlNWYWx1ZXMsIGV0YyBnbyBoZXJlLgorICAgIENvbXBs
ZXRlU3Vic3BhY2UgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gVHlwZWQgYXJy
YXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVyZS4KKyAgICBDb21wbGV0ZVN1YnNw
YWNlIGpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBCdXR0ZXJmbGllcywgYXJyYXlz
IG9mIEpTVmFsdWVzLCBldGMgZ28gaGVyZS4KIAogICAgIC8vIFdlIG1ha2UgY3Jvc3MtY3V0dGlu
ZyBhc3N1bXB0aW9ucyBhYm91dCB0eXBlZCBhcnJheXMgYmVpbmcgaW4gdGhlIHByaW1pdGl2ZSBH
aWdhY2FnZSBhbmQgYnV0dGVyZmxpZXMKICAgICAvLyBiZWluZyBpbiB0aGUgSlNWYWx1ZSBnaWdh
Y2FnZS4gRm9yIHNvbWUgdHlwZXMsIGl0J3Mgc3VwZXIgb2J2aW91cyB3aGVyZSB0aGV5IHNob3Vs
ZCBnbywgYW5kIHNvIHdlCkBAIC0yOTksNyArMzAyLDcgQEAgcHVibGljOgogICAgIC8vIGNvbnN0
YW50IHNvbWV3aGVyZS4KICAgICAvLyBGSVhNRTogTWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIGlm
IGV2ZXJ5b25lIGFic3RyYWN0ZWQgdGhpcz8KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjQ4Ci0gICAgQUxXQVlTX0lOTElORSBTdWJzcGFjZSYgZ2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZShHaWdhY2FnZTo6S2luZCBraW5kKQorICAgIEFMV0FZU19JTkxJ
TkUgQ29tcGxldGVTdWJzcGFjZSYgZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShHaWdhY2FnZTo6S2lu
ZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgR2ln
YWNhZ2U6OlByaW1pdGl2ZToKQEAgLTMxNCwxNSArMzE3LDE1IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgCiAgICAgLy8gV2hlbmV2ZXIgcG9zc2libGUsIHVzZSBzdWJzcGFjZUZvcjxDZWxsVHlwZT4o
dm0pIHRvIGdldCBvbmUgb2YgdGhlc2Ugc3Vic3BhY2VzLgotICAgIFN1YnNwYWNlIGNlbGxTcGFj
ZTsKLSAgICBTdWJzcGFjZSBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7Ci0gICAgU3Vic3BhY2Ug
ZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlOwotICAgIEpTU3RyaW5nU3Vic3BhY2Ugc3RyaW5nU3BhY2U7
Ci0gICAgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSBkZXN0cnVjdGlibGVPYmplY3RTcGFj
ZTsKLSAgICBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIGVhZ2VybHlTd2VwdERlc3RydWN0
aWJsZU9iamVjdFNwYWNlOwotICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSBz
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2UgY2VsbFNw
YWNlOworICAgIENvbXBsZXRlU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlOworICAg
IENvbXBsZXRlU3Vic3BhY2UgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlOworICAgIENvbXBsZXRlU3Vi
c3BhY2Ugc3RyaW5nU3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSBkZXN0cnVjdGlibGVPYmpl
Y3RTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9i
amVjdFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2Ugc2VnbWVudGVkVmFyaWFibGVPYmplY3RT
cGFjZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFj
ZSB3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlOwogI2VuZGlmCiAKICAgICBWTVR5cGUgdm1UeXBl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9ja0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9u
IDIyNDQ1OCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlLmNwcDoyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1
bmMgeworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxs
KSBjb25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2s+Ojp2YWx1ZSwgIk90aGVyd2lzZSwgdGhpcyBjb2RlIHdvdWxkIG5v
dCBiZSBjb3JyZWN0LiIpOworICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbmZvKCkt
Pm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2Nh
dG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2Nh
dG9yKQoreworfQorCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UoKQoreworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVl
TGlzdCogZnJlZUxpc3QpCit7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNl
KGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJv
eUZ1bmMoKSh2bSwgY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxs
VHlwZS5jcHAJKHJldmlzaW9uIDIyNDQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxNCArMjQsMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFj
ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ3LDIxICs0NiwyMSBAQCBzdHJ1
Y3QgRGVzdHJveUZ1bmMgewogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0
cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3Ip
Ci0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVz
dHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrSGVhcENlbGxUeXBlOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCkK
KyAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2U6On5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKQorSlNXZWJBc3NlbWJseUNvZGVC
bG9ja0hlYXBDZWxsVHlwZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoKQog
ewogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit2b2lkIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRsZS5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFu
ZGxlLmZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMo
KSk7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxU
eXBlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAgIERlc3Ryb3lGdW5jKCko
dm0sIGNlbGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaAko
cmV2aXNpb24gMjI0NDU4KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaDoyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgor
ICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgdmlydHVhbCB+SlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlKCk7CisgICAgCisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6
SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0Nl
bGwqKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUu
aAkocmV2aXNpb24gMjI0NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
NCArMjcsMTQgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlN1YnNw
YWNlLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1j
bGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2Ugewor
Y2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSA6IHB1YmxpYyBIZWFwQ2Vs
bFR5cGUgewogcHVibGljOgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3Ry
aW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgdmlydHVhbCB+
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCk7CisgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9ja0hlYXBDZWxsVHlwZSgpOworICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpI
YW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2Vs
bCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCShyZXZp
c2lvbiAyMjQ0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCShub25leGlzdGVudCkKQEAgLTEsNzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgiCi0K
LSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotbmFtZXNwYWNlIHsKLQotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19maW5hbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPjo6dmFs
dWUsICJPdGhlcndpc2UsIHRoaXMgY29kZSB3b3VsZCBub3QgYmUgY29ycmVjdC4iKTsKLSAgICAg
ICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KGNl
bGwpOwotICAgIH0KLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2U6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3Ry
aW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikK
LSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0
cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKLXsKLX0KLQotSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCkK
LXsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQotewotICAg
IGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMo
KSk7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQotewotICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ0NTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2Uu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xh
c3MgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKLXB1
YmxpYzoKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBI
ZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwotICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZN
JiwgSlNDZWxsKikgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326254</attachid>
            <date>2017-11-07 13:37:35 -0800</date>
            <delta_ts>2017-11-07 14:21:36 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>161607</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNDUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDcwLDYg
KzQ3MCw3IEBAIGhlYXAvQ2VsbENvbnRhaW5lci5jcHAKIGhlYXAvQ29kZUJsb2NrU2V0LmNwcAog
aGVhcC9Db2xsZWN0aW9uU2NvcGUuY3BwCiBoZWFwL0NvbGxlY3RvclBoYXNlLmNwcAoraGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmNwcAogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKIGhlYXAvRGVm
ZXJHQy5jcHAKIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcApAQCAtNDg2LDEyICs0ODcsMTUgQEAg
aGVhcC9IYW5kbGVTZXQuY3BwCiBoZWFwL0hhbmRsZVN0YWNrLmNwcAogaGVhcC9IZWFwLmNwcAog
aGVhcC9IZWFwQ2VsbC5jcHAKK2hlYXAvSGVhcENlbGxUeXBlLmNwcAogaGVhcC9IZWFwRmluYWxp
emVyQ2FsbGJhY2suY3BwCiBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAogaGVhcC9IZWFwUHJvZmls
ZXIuY3BwCiBoZWFwL0hlYXBTbmFwc2hvdC5jcHAKIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5j
cHAKIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAoraGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcAoraGVhcC9Jc29TdWJzcGFjZS5jcHAKIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQu
Y3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNDUzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAKIAkJMEY0QzkxNjYxQzI5
RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2lu
RHVtcC5oICovOyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91
c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCAqLzsgfTsK
IAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0
aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKLQkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEY4MjhDMUUzMUI5NzYwMDc1MTg0QyAv
KiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyOEExRTMxQjk3MTAwNzUxODRDIC8q
IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CiAJCTBGNTBBRjND
MTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTBBRjNCMTkzRThCMzkwMDY3
NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLzsgfTsKIAkJMEY1NTEzQTYxRDVB
NjgyQzAwQzMyQkQ4IC8qIEZyZWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjU1MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJlZUxpc3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDAwLDgg
KzQwMCw4IEBACiAJCTBGN0RGMTM1MUUyOTcwREMwMDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RG
MTMwMUUyOTcwRDUwMDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdERjEzNzFFMjk3MEUxMDA5
NTk1MUIgLyogU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0RGMTM4MUUyOTcw
RTQwMDk1OTUxQiAvKiBTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTMzMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFj
ZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjdERjEz
RjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8q
IEpTU3RyaW5nU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYx
M0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3REYxNDYxRTJCRUY2QTAw
OTU5NTFCIC8qIE1hcmtlZEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUxQiAvKiBNYXJr
ZWRBbGxvY2F0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmll
ckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0
ZXJpbmdQaGFzZS5oICovOyB9OwogCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgw
MjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU0MCw2ICs1NDAsMTEgQEAKIAkJMEZEQjJD
Q0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFFMDA3QjNDMUIg
LyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U2
MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyB9OwogCQkwRkRCMkNFQTE3NDg5
NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1
cnJlbnRKU0xvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkRDRTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEx
QjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMjIxRkFFODU4QzAw
NkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENF
MTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEyODFGQUZBODU5MDA2RjM5MDEg
LyogQ29tcGxldGVTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMkIx
RkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMzIxRkIxMURBNDAwNkYzOTAxIC8qIElz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87
IH07CiAJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRF
ODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovOyB9
OwogCQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdEMTFEOUM2MDg2MDAxQjk4MjUg
LyogQjNLaW5kLmggKi87IH07CkBAIC0xMDk4LDcgKzExMDMsNyBAQAogCQk3OURBRTI3QTFFMDND
ODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNt
RXhjZXB0aW9uVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5REZDQkRCMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURGQ0JE
QTFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RUUwQzAwMUI0QUZCODUwMDAz
ODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVF
bnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxs
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlF
RkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUY4RkMxRjFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFE
MUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovOyB9
OwogCQk3OUZDOEEwODFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlGQzhBMDcx
RTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkM1NDdEMzFCNjk1OUExMDA5
NTlCNTggLyogV2FzbUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjI3MCw4ICsy
Mjc1LDggQEAKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2luRHVtcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1bXAuY3BwOyBw
YXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0
aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25D
b3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNT
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyOEExRTMxQjk3MTAwNzUxODRDIC8qIFN0b2No
YXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
U3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDEzLDEwICsyNDE4LDEwIEBA
CiAJCTBGN0RGMTMxMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjdERjEzMzFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YnNwYWNlSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyog
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ1N1YnNwYWNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8q
IEpTU3RyaW5nU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNT
dHJpbmdTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdERjEzOTFF
Mjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdERjEzQTFF
Mjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3REYxM0QxRTJBRkM0QjAw
OTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENl
bGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSGVhcENl
bGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTQ1MUUyQkVGNjgw
MDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hcmtlZEFsbG9jYXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNs
dXN0ZXJpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
N0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3Rl
cmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjY2LDYgKzI2NzEsMTUgQEAKIAkJMEZE
QjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3Jr
bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U2MTc0ODMwQTIw
MDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdXb3JrbGlzdC5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNM
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJlbnRKU0xvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAx
IC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMUYxRkFFODU4
NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwQ2VsbFR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjAxRkFFODU4NzAwNkYzOTAx
IC8qIEhlYXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwQ2VsbFR5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyNzFGQUZBODU5MDA2RjM5MDEg
LyogQ29tcGxldGVTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21wbGV0ZVN1YnNw
YWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjgxRkFGQTg1OTAw
NkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGxldGVTdWJz
cGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyQjFGQUZCNERFMDA2
RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXNvU3Vic3BhY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElz
b1N1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElzb1N1YnNwYWNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTMw
MUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1
NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
REU4N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENlbGxDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzU4MCw4ICszNTk0LDggQEAKIAkJNzlERkNCREExRDg4QzU5NjAw
NTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGFzT3duUHJvcGVydHlDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4
NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3OUVGRDQ4MjFFQkMw
NDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5o
OyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTc5RUZENDgxMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwOyBwYXRoID0g
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsgcGF0aCA9IGpzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01heGltYWxG
bHVzaEluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RjhGQzFEMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdSZWdpc3RlcmVk
U3RydWN0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmUuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDg3LDYgKzU1MDEsNyBAQAogCQkJCTBGRUMzQzUw
MUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkw
RkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAog
CQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKKwkJ
CQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi8s
CiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0ZXMuY3Bw
ICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVz
LmggKi8sCiAJCQkJMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3Bw
ICovLApAQCAtNTUwMSw2ICs1NTE2LDggQEAKIAkJCQkwRkE3NjIwMTFEQjkyNDIzMDBCN0EyRkQg
LyogQ29sbGVjdGlvblNjb3BlLmggKi8sCiAJCQkJMEZEMEU1RTUxRTQzRDM0NzAwMDZBQjA4IC8q
IENvbGxlY3RvclBoYXNlLmNwcCAqLywKIAkJCQkwRkQwRTVFNjFFNDNEMzQ3MDAwNkFCMDggLyog
Q29sbGVjdG9yUGhhc2UuaCAqLywKKwkJCQkwRkRDRTEyNzFGQUZBODU5MDA2RjM5MDEgLyogQ29t
cGxldGVTdWJzcGFjZS5jcHAgKi8sCisJCQkJMEZEQ0UxMjgxRkFGQTg1OTAwNkYzOTAxIC8qIENv
bXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29u
c2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1OTUxQiAvKiBD
b25zdHJhaW50Vm9sYXRpbGl0eS5oICovLApAQCAtNTU1MSw2ICs1NTY4LDggQEAKIAkJCQlEQzNE
MkIwQjFEMzQzNzZFMDBCQTkxOEMgLyogSGVhcENlbGwuY3BwICovLAogCQkJCURDM0QyQjA5MUQz
NDMxNjEwMEJBOTE4QyAvKiBIZWFwQ2VsbC5oICovLAogCQkJCTBGMDcwQTQ0MUQ1NDNBODkwMDZF
NzIzMiAvKiBIZWFwQ2VsbElubGluZXMuaCAqLywKKwkJCQkwRkRDRTEyMDFGQUU4NTg3MDA2RjM5
MDEgLyogSGVhcENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRkRDRTExRjFGQUU4NTg3MDA2RjM5MDEg
LyogSGVhcENlbGxUeXBlLmggKi8sCiAJCQkJMEYwQ0FFRkQxRUM0REE4NTAwOTcwRDEyIC8qIEhl
YXBGaW5hbGl6ZXJDYWxsYmFjay5jcHAgKi8sCiAJCQkJMEYwQ0FFRkUxRUM0REE4NTAwOTcwRDEy
IC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovLAogCQkJCTBGMzJCRDBFMUJCMzRGMTkwMDkz
QTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgKi8sCkBAIC01NTY3LDYgKzU1ODYsMTAgQEAKIAkJ
CQkwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJCQlDMjVGOEJD
QjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCAqLywKIAkJCQlDMjVG
OEJDQzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCisJCQkJMEZE
Q0UxMkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICov
LAorCQkJCTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmggKi8sCisJCQkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNw
cCAqLywKKwkJCQkwRkRDRTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLywK
IAkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICov
LAogCQkJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oICov
LAogCQkJCTBGMDcwQTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uY3BwICov
LApAQCAtNjUwNyw4ICs2NTMwLDggQEAKIAkJCQk5Nzg4RkMyMjE0NzFBRDBDMDA2OENFMkQgLyog
SlNEYXRlTWF0aC5jcHAgKi8sCiAJCQkJOTc4OEZDMjMxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0
ZU1hdGguaCAqLywKIAkJCQlDMkE3RjY4NzE2MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGli
bGVPYmplY3QuaCAqLywKLQkJCQkwRjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8sCi0JCQkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFC
IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLywKKwkJCQkwRjdERjEzOTFFMjk3
MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICovLAor
CQkJCTBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oICovLAogCQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1h
Y3Jvcy5oICovLAogCQkJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXku
Y3BwICovLAogCQkJCTc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuaCAq
LywKQEAgLTY1OTMsOCArNjYxNiw4IEBACiAJCQkJRTM4RDA2MEIxRjhFODE0MTAwNjQ5Q0YyIC8q
IEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmggKi8sCiAJCQkJMEY5MTlEMEUxNTdGMzMyNzAwNEE0
RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovLAogCQkJCTBGOTE5RDBGMTU3
RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi8sCi0JCQkJMEY0
RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZS5jcHAgKi8sCi0JCQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5oICovLAorCQkJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAv
KiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRjRG
ODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oICovLAogCQkJCUE3Mjk5RDlCMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1NldC5jcHAgKi8s
CiAJCQkJQTcyOTlEOUMxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0LmggKi8sCiAJCQkJQTc5MERE
NjkxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuY3BwICovLApAQCAtNjYwOSw4ICs2
NjMyLDggQEAKIAkJCQk3MEVDMEVCRDFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRv
ci5oICovLAogCQkJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5j
cHAgKi8sCiAJCQkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmgg
Ki8sCi0JCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuY3Bw
ICovLAotCQkJCTBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmgg
Ki8sCisJCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBl
LmNwcCAqLywKKwkJCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFwQ2Vs
bFR5cGUuaCAqLywKIAkJCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAgKi8sCiAJCQkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9s
VGFibGVPYmplY3QuaCAqLywKIAkJCQk3MEVDQTYwMDFBRkRCRUEyMDA0NDk3MzkgLyogSlNUZW1w
bGF0ZVJlZ2lzdHJ5S2V5LmNwcCAqLywKQEAgLTc3ODgsOCArNzgxMSw4IEBACiAJCQkJQUREMDlB
RjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1MzgzQUEyRjFF
NjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8sCiAJCQkJQUQ5
RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCAqLywKLQkJ
CQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmNwcCAqLywKLQkJCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlLmggKi8sCisJCQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8q
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwICovLAorCQkJCTc5RUZENDgy
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgg
Ki8sCiAJCQkJQUQyRkNCQTYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3IuY3BwICovLAogCQkJCUFEMkZDQkE3MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2Vt
Ymx5Q29tcGlsZUVycm9yLmggKi8sCiAJCQkJNzk2RkI0MzkxREZGOEMzRjAwMzlDOTVEIC8qIEpT
V2ViQXNzZW1ibHlIZWxwZXJzLmggKi8sCkBAIC04MDAwLDYgKzgwMjMsNyBAQAogCQkJCTg2RDNC
MkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZEQ0UxMzIxRkIxMURBNDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYz
NTE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RkM5OUQ1MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtODA1MSw2ICs4MDc1LDcgQEAKIAkJCQkwRkVDODUwNjFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4
NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZEQ0UxMkQxRkFGQjRFNTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzkxOUI3ODAxRTAzNTU5QzAwNUJFRUQ4IC8qIEIzQ29t
cGlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTkzLDYgKzg2MTgsNyBAQAogCQkJCUM0NzAzQ0Q1
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJNzBCNzkxOTUxQzAyNEEyODAwMjQ4MUUyIC8qIEdlbmVyYXRvckZ1bmN0aW9uQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk3MUMwMjRBMjkwMDI0ODFFMiAvKiBH
ZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQ0UxMkEx
RkFGQTg1RjAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwQjc5MTk5MUMwMjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwQjc5MTlEMUMwMjRBNTYwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5
cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBEMzNCMzMgLyog
R2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04Nzc2LDcgKzg4MDIsNyBAQAog
CQkJCTk5NkI3MzFDMUJEQTA4REQwMDMzMUI4NCAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1h
dGguaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rl
c3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3REYxM0MxRTI5NzExMzAw
OTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTYxQUREQjdBRDAwNTVERTJDIC8q
IEpTRG9sbGFyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4MUFEREI3QUQwMDU1REUy
QyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtODgzMCw2ICs4
ODU2LDcgQEAKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9u
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDk3MjI3NTJEQzU0NDU5QjkxMjVCNTM5IC8qIEpT
TW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjky
OUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENF
MTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMUQxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3Rk
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODU0LDcgKzg4ODEsNyBAQAogCQkJCUUz
MjAxQzFEMUY4RTgyMzYwMDc2QTAzMiAvKiBKU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNEY4Mjg4MUUy
RkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OUQ5RTE3
RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OTBERDcwMTgy
RjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCREZD
QjJCQkU5MEY0MTM0OUUxQjBCRUQgLyogSlNTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKQEAg
LTg4NjYsNyArODg5Myw3IEBACiAJCQkJQkMxOEM0MjgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3Ry
aW5nUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyOTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNTdHJpbmdSZWZDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyOEQ0QTgxNzdCNzFDODAwMDdG
QTNDIC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3REYxM0Yx
RTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA2MUFGREJFQTIwMDQ0OTczOSAvKiBK
U1RlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkVBMUY3NUFE
NkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODk0LDcgKzg5MjEs
NyBAQAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNE
RkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFw
Q2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTZGQjQz
QTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
aCBpbiBIZWFkZXJzICovLApAQCAtOTIyNiw2ICs5MjUzLDcgQEAKIAkJCQkwRkZCNkMzOTFBRjQ4
RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDOTUyQjcx
OUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RDRERUMxOTgzMkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyRDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5cGVTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU2LDcgKzk1Niw3
IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAg
IHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0g
ICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CisgICAgICAgICAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3Nl
cnQpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2shCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Q
cm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDcgKzk5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Q
cm9maQogICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxp
bmVDYXBhY2l0eSgpKTsKIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmpl
Y3Q6OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOwor
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uY2VsbFNwYWNlLmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0
KTsKIAogICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIGV4dHJhIGlubGluZSBjYXBhY2l0eSBhdmFp
bGFibGUgaW4gdGhlIHNpemUgY2xhc3MuCiAgICAgaWYgKGFsbG9jYXRvcikgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTY0Niw3ICsxMTY0Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
IAogICAgICAgICAvLyBUcnkgdG8gZG8gc29tZSBjb25zdGFudC1mb2xkaW5nIGhlcmUuCiAgICAg
ICAgIGlmIChzdWJzcGFjZS0+aGFzSW50UHRyKCkgJiYgc2l6ZS0+aGFzSW50UHRyKCkpIHsKLSAg
ICAgICAgICAgIFN1YnNwYWNlKiBhY3R1YWxTdWJzcGFjZSA9IGJpdHdpc2VfY2FzdDxTdWJzcGFj
ZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKKyAgICAgICAgICAgIENvbXBsZXRlU3Vic3BhY2Uq
IGFjdHVhbFN1YnNwYWNlID0gYml0d2lzZV9jYXN0PENvbXBsZXRlU3Vic3BhY2UqPihzdWJzcGFj
ZS0+YXNJbnRQdHIoKSk7CiAgICAgICAgICAgICBzaXplX3QgYWN0dWFsU2l6ZSA9IHNpemUtPmFz
SW50UHRyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWN0
dWFsQWxsb2NhdG9yID0gYWN0dWFsU3Vic3BhY2UtPmFsbG9jYXRvckZvcihhY3R1YWxTaXplKTsK
QEAgLTExNjgzLDcgKzExNjgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzdWJzcGFj
ZSwgbV9vdXQuc3ViKHNpemVDbGFzc0luZGV4LCBtX291dC5pbnRQdHJPbmUpKSk7CiAgICAgfQog
ICAgIAotICAgIExWYWx1ZSBhbGxvY2F0b3JGb3JTaXplKFN1YnNwYWNlJiBzdWJzcGFjZSwgTFZh
bHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1ZSBhbGxvY2F0b3JGb3JT
aXplKENvbXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sg
c2xvd1BhdGgpCiAgICAgewogICAgICAgICByZXR1cm4gYWxsb2NhdG9yRm9yU2l6ZShtX291dC5j
b25zdEludFB0cigmc3Vic3BhY2UpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
IgogCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisKIG5hbWVzcGFjZSBKU0MgeyAKIAog
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCkBAIC0zNiw2
ICszOCw0MSBAQCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+QWxpZ25lZE1lbW9yeUFsCiB7CiB9
CiAKK3ZvaWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3IoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci0+
bmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICAKKyAgICBpZiAo
IW1fZmlyc3RBbGxvY2F0b3IpIHsKKyAgICAgICAgZm9yIChTdWJzcGFjZUJhc2UqIHN1YnNwYWNl
ID0gbV9maXJzdFN1YnNwYWNlOyBzdWJzcGFjZTsgc3Vic3BhY2UgPSBzdWJzcGFjZS0+bmV4dFN1
YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpCisgICAgICAgICAgICBzdWJzcGFjZS0+
ZGlkQ3JlYXRlRmlyc3RBbGxvY2F0b3IoYWxsb2NhdG9yKTsKKyAgICAgICAgCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2xhc3RBbGxvY2F0b3IpOworICAgICAgICBtX2ZpcnN0QWxsb2NhdG9y
ID0gYWxsb2NhdG9yOworICAgICAgICBtX2xhc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2xhc3RBbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0
b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsKKyAgICBtX2xhc3RBbGxvY2F0
b3IgPSBhbGxvY2F0b3I7Cit9CisKKy8vIEZJWE1FOiBXZSB1c2UgdGhpcyBpZGlvbSBhIGxvdC4g
V2Ugc2hvdWxkIGNvbWUgdXAgd2l0aCBhIGNsZXZlciB0ZW1wbGF0ZSBmb3IgdGhpcyBraW5kIG9m
CisvLyBzaW5nbHktbGlua2VkIGxpc3QsIHdoZXJlIGVhY2ggZWxlbWVudCBtYXkgYmUgb24gbXVs
dGlwbGUgbGlzdHMuCit2b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyU3Vic3Bh
Y2UoU3Vic3BhY2VCYXNlKiBzdWJzcGFjZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghc3Vic3Bh
Y2UtPm5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICAKKyAgICBp
ZiAoIW1fZmlyc3RTdWJzcGFjZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9sYXN0U3Vi
c3BhY2UpOworICAgICAgICBtX2ZpcnN0U3Vic3BhY2UgPSBzdWJzcGFjZTsKKyAgICAgICAgbV9s
YXN0U3Vic3BhY2UgPSBzdWJzcGFjZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
bGFzdFN1YnNwYWNlLT5zZXROZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlTdWJzcGFjZShzdWJz
cGFjZSk7CisgICAgbV9sYXN0U3Vic3BhY2UgPSBzdWJzcGFjZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBNYXJrZWRBbGxvY2F0
b3I7CisKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtNDAsNiArNDIsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBmcmVlQWxp
Z25lZE1lbW9yeSh2b2lkKikgPSAwOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3QgPSAwOworCisgICAgdm9pZCByZWdpc3RlckFsbG9jYXRvcihNYXJrZWRB
bGxvY2F0b3IqKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGZpcnN0QWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdEFsbG9jYXRvcjsgfQorCisgICAgdm9pZCByZWdpc3RlclN1YnNwYWNl
KFN1YnNwYWNlQmFzZSopOworCitwcml2YXRlOgorICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJz
dEFsbG9jYXRvcjsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFzdEFsbG9jYXRvcjsKKyAgICBT
dWJzcGFjZUJhc2UqIG1fZmlyc3RTdWJzcGFjZTsKKyAgICBTdWJzcGFjZUJhc2UqIG1fbGFzdFN1
YnNwYWNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BbGxvY2F0aW9uRmFpbHVyZU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uRmFpbHVyZU1vZGUuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9uRmFpbHVyZU1vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBjbGFzcyBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgeworICAgIEFzc2VydCwKKyAgICBSZXR1
cm5OdWxsCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlLmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5s
aW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIlByZXZl
bnRDb2xsZWN0aW9uU2NvcGUuaCIKKyNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK0NvbXBsZXRlU3Vic3BhY2U6OkNvbXBsZXRlU3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJiBoZWFwLCBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKKyAgICA6IFN1YnNwYWNlKG5h
bWUsIGhlYXApCit7CisgICAgaW5pdGlhbGl6ZShoZWFwQ2VsbFR5cGUsIGFsaWduZWRNZW1vcnlB
bGxvY2F0b3IpOworICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNz
ZXM7IGktLTspCisgICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOwor
fQorCitDb21wbGV0ZVN1YnNwYWNlOjp+Q29tcGxldGVTdWJzcGFjZSgpCit7Cit9CisKK01hcmtl
ZEFsbG9jYXRvciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRv
ckZvck5vblZpcnR1YWwoc2l6ZSwgZmFpbHVyZU1vZGUpOworfQorCit2b2lkKiBDb21wbGV0ZVN1
YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVy
biBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7
Cit9CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qg
c2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIHZvaWQgKnJlc3VsdDsKKyAgICBpZiAoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCisgICAgICAgIHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7
CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxD
b250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTWFya2VkQWxs
b2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQor
eworICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUp
OworICAgIHNpemVfdCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXpl
U3RlcFtpbmRleF07CisgICAgaWYgKCFzaXplQ2xhc3MpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIC8vIFRoaXMgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgaXQncyBP
SyBmb3IgdGhlIEpJVCB0aHJlYWRzIHRvIGVuZCB1cCBoZXJlIGlmIHRoZXkgd2FudAorICAgIC8v
IHRvIGdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIHNvbWUgYWxsb2NhdG9yIHRoYXQgaGFkbid0IGJl
ZW4gdXNlZCB5ZXQuIE5vdGUgdGhhdCBhIHBvc3NpYmx5LQorICAgIC8vIGp1c3QtYXMtZ29vZCBz
b2x1dGlvbiB3b3VsZCBiZSB0byByZXR1cm4gbnVsbCBpZiB3ZSdyZSBpbiB0aGUgSklUIHNpbmNl
IHRoZSBKSVQgdHJlYXRzIG51bGwKKyAgICAvLyBhbGxvY2F0b3IgYXMgInBsZWFzZSBhbHdheXMg
dGFrZSB0aGUgc2xvdyBwYXRoIi4gQnV0LCB0aGF0IGNvdWxkIGxlYWQgdG8gcGVyZm9ybWFuY2UK
KyAgICAvLyBzdXJwcmlzZXMgYW5kIHRoZSBhbGdvcml0aG0gaGVyZSBpcyBwcmV0dHkgZWFzeS4g
T25seSB0aGlzIGNvZGUgaGFzIHRvIGhvbGQgdGhlIGxvY2ssIHRvCisgICAgLy8gcHJldmVudCBz
aW11bHRhbmVvdXNseSBNYXJrZWRBbGxvY2F0b3IgY3JlYXRpb25zIGZyb20gbXVsdGlwbGUgdGhy
ZWFkcy4gVGhpcyBjb2RlIGVuc3VyZXMKKyAgICAvLyB0aGF0IGFueSAiZm9yRWFjaEFsbG9jYXRv
ciIgdHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2NhdG9yIGFmdGVyIGl0J3MgaW5p
dGlhbGl6ZWQKKyAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKKyAgICBpZiAoTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkKKyAgICAgICAg
cmV0dXJuIGFsbG9jYXRvcjsKKworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiQ3Jl
YXRpbmcgbWFya2VkIGFsbG9jYXRvciBmb3IgIiwgbV9uYW1lLCAiLCAiLCBtX2F0dHJpYnV0ZXMs
ICIsICIsIHNpemVDbGFzcywgIi5cbiIpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRBbGxv
Y2F0b3I+IHVuaXF1ZUFsbG9jYXRvciA9CisgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8TWFya2Vk
QWxsb2NhdG9yPihtX3NwYWNlLmhlYXAoKSwgc2l6ZUNsYXNzKTsKKyAgICBNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9IHVuaXF1ZUFsbG9jYXRvci5nZXQoKTsKKyAgICBtX2FsbG9jYXRvcnMu
YXBwZW5kKFdURk1vdmUodW5pcXVlQWxsb2NhdG9yKSk7CisgICAgYWxsb2NhdG9yLT5zZXRTdWJz
cGFjZSh0aGlzKTsKKyAgICBtX3NwYWNlLmFkZE1hcmtlZEFsbG9jYXRvcihsb2NrZXIsIGFsbG9j
YXRvcik7CisgICAgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplQ2xh
c3MpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKE1hcmtlZFNwYWNlOjpzX3NpemVDbGFz
c0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xhc3MpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9IGFsbG9jYXRvcjsKKyAgICAg
ICAgCisgICAgICAgIGlmICghaW5kZXgtLSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKG1fZmlyc3RBbGxvY2F0b3Ip
OworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJBbGxvY2F0b3IoYWxsb2Nh
dG9yKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIG1fZmlyc3RBbGxvY2F0b3Ig
PSBhbGxvY2F0b3I7CisgICAgcmV0dXJuIGFsbG9jYXRvcjsKK30KKwordm9pZCogQ29tcGxldGVT
dWJzcGFjZTo6YWxsb2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAg
dm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7Cisg
ICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KQorICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQqIENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhzaXplX3Qgc2l6ZSwgR0NEZWZl
cnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3sKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0o
bV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAgIAorICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+
dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKKyAgICAKKyAgICBpZiAoc2l6ZSA8PSBPcHRp
b25zOjpsYXJnZUFsbG9jYXRpb25DdXRvZmYoKQorICAgICAgICAmJiBzaXplIDw9IE1hcmtlZFNw
YWNlOjpsYXJnZUN1dG9mZikgeworICAgICAgICBkYXRhTG9nKCJGQVRBTDogYXR0YW1wdGluZyB0
byBhbGxvY2F0ZSBzbWFsbCBvYmplY3QgdXNpbmcgbGFyZ2UgYWxsb2NhdGlvbi5cbiIpOworICAg
ICAgICBkYXRhTG9nKCJSZXF1ZXN0ZWQgYWxsb2NhdGlvbiBzaXplOiAiLCBzaXplLCAiXG4iKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAg
bV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0
KTsKKyAgICAKKyAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNl
OjpzaXplU3RlcD4oc2l6ZSk7CisgICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFy
Z2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3BhY2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAg
ICBpZiAoIWFsbG9jYXRpb24pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIG1f
c3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKKyAgICBtX3NwYWNl
Lm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7CisgICAgbV9zcGFjZS5tX2NhcGFjaXR5ICs9IHNp
emU7CisgICAgCisgICAgbV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0aW9uKTsKKyAg
ICAgICAgCisgICAgcmV0dXJuIGFsbG9jYXRpb24tPmNlbGwoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3Bh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1
YnNwYWNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29t
cGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJTdWJzcGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29tcGxldGVT
dWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgQ29tcGxldGVTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBIZWFwQ2VsbFR5cGUqLCBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBsZXRl
U3Vic3BhY2UoKTsKKworICAgIC8vIEluIHNvbWUgY29kZSBwYXRocywgd2UgbmVlZCBpdCB0byBi
ZSBhIGNvbXBpbGUgZXJyb3IgdG8gY2FsbCB0aGUgdmlydHVhbCB2ZXJzaW9uIG9mIG9uZSBvZgor
ICAgIC8vIHRoZXNlIGZ1bmN0aW9ucy4gVGhhdCdzIHdoeSB3ZSBkbyBmaW5hbCBtZXRob2RzIHRo
ZSBvbGQgc2Nob29sIHdheS4KKyAgICAKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZv
cihzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlKTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvbXBsZXRl
U3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9CisgICAgCisgICAgTWFya2VkQWxs
b2NhdG9yKiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JT
aXplU3RlcFswXTsgfQorCitwcml2YXRlOgorICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
Rm9yU2xvdyhzaXplX3QpOworICAgIAorICAgIC8vIFRoZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNl
cm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBhbGxvY2F0b3IgY3JlYXRpb24uCisgICAg
dm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhzaXplX3QsIEdDRGVmZXJy
YWxDb250ZXh0Kik7CisgICAgCisgICAgc3RkOjphcnJheTxNYXJrZWRBbGxvY2F0b3IqLCBNYXJr
ZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRBbGxvY2F0b3I+PiBtX2FsbG9jYXRvcnM7Cit9Owor
CitBTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1
cmVNb2RlKQoreworICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewor
ICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBb
TWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOworICAgICAgICBpZiAoZmFpbHVy
ZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsIHx8IHJlc3VsdCkKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JTbG93
KHNpemUpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkhlYXBDZWxsVHlwZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsK
KworLy8gV3JpdGluZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRoYXQgd2hlbiB5b3UgcGFzcyB0aGlz
IGFzIGEgZnVuY3RvciwgdGhlIGNhbGxlZSBpcyBzcGVjaWFsaXplZCBmb3IKKy8vIHRoaXMgY2Fs
bGJhY2suIElmIHlvdSB3cm90ZSB0aGlzIGFzIGEgbm9ybWFsIGZ1bmN0aW9uIHRoZW4gdGhlIGNh
bGxlZSB3b3VsZCBiZSBzcGVjaWFsaXplZCBmb3IKKy8vIHRoZSBmdW5jdGlvbidzIHR5cGUgYW5k
IGl0IHdvdWxkIGhhdmUgaW5kaXJlY3QgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbi4gQW5kIHVubGlr
ZSBhIGxhbWJkYSwgaXQncworLy8gcG9zc2libGUgdG8gbWFyayB0aGlzIEFMV0FZU19JTkxJTkUu
CitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigp
KFZNJiB2bSwgSlNDZWxsKiBjZWxsKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGNlbGwt
PnN0cnVjdHVyZUlEKCkpOworICAgICAgICBBU1NFUlQoY2VsbC0+aW5saW5lVHlwZUZsYWdzKCkg
JiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBj
ZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCk7CisgICAgICAgIE1ldGhvZFRhYmxlOjpEZXN0cm95RnVu
Y3Rpb25QdHIgZGVzdHJveSA9IGNsYXNzSW5mby0+bWV0aG9kVGFibGUuZGVzdHJveTsKKyAgICAg
ICAgZGVzdHJveShjZWxsKTsKKyAgICB9Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
KworSGVhcENlbGxUeXBlOjpIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRlcyBhdHRyaWJ1
dGVzKQorICAgIDogbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCit7Cit9CisKK0hlYXBDZWxsVHlw
ZTo6fkhlYXBDZWxsVHlwZSgpCit7Cit9CisKK3ZvaWQgSGVhcENlbGxUeXBlOjpmaW5pc2hTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9jaywgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAg
IGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygp
KTsKK30KKwordm9pZCBIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwp
Cit7CisgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2VkQmxv
Y2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXBDZWxsVHlwZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSGVhcENlbGxUeXBlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBIZWFwQ2VsbFR5cGUoQWxsb2Nh
dG9yQXR0cmlidXRlcyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SGVhcENlbGxU
eXBlKCk7CisKKyAgICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisKKyAgICAvLyBUaGUgcHVycG9zZSBvZiBvdmVy
cmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lhbGl6ZSB0aGUgc3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3Rv
cnMuIFRoaXMgd29uJ3QKKyAgICAvLyBiZSBjYWxsZWQgZm9yIG5vLWRlc3RydWN0b3IgYmxvY2tz
LiBUaGlzIG11c3QgY2FsbCBNYXJrZWRCbG9jazo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uu
CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVl
TGlzdCopOworCisgICAgLy8gVGhlc2UgZ2V0IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOworCitwcml2YXRlOgorICAgIEFs
bG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQoreworfQorCitJc29BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOjp+SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQqIElz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICAvLyBTaW5jZSB0aGlzIGlzIGRlc2lnbmVk
IHNwZWNpYWxseSBmb3IgSXNvU3Vic3BhY2UsIHdlIGtub3cgdGhhdCB3ZSB3aWxsIG9ubHkgYmUg
YXNrZWQgdG8KKyAgICAvLyBhbGxvY2F0ZSBNYXJrZWRCbG9ja3MuCisgICAgUkVMRUFTRV9BU1NF
UlQoYWxpZ25tZW50ID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOworICAgIFJFTEVBU0VfQVNT
RVJUKHNpemUgPT0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgCisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIAorICAgIG1fZmlyc3RVbmNvbW1pdHRlZCA9IG1f
Y29tbWl0dGVkLmZpbmRCaXQobV9maXJzdFVuY29tbWl0dGVkLCBmYWxzZSk7CisgICAgaWYgKG1f
Zmlyc3RVbmNvbW1pdHRlZCA8IG1fYmxvY2tzLnNpemUoKSkgeworICAgICAgICBtX2NvbW1pdHRl
ZFttX2ZpcnN0VW5jb21taXR0ZWRdID0gdHJ1ZTsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gbV9i
bG9ja3NbbV9maXJzdFVuY29tbWl0dGVkXTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmNvbW1pdChy
ZXN1bHQsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gZmFzdEFsaWduZWRN
YWxsb2MoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7CisgICAgbV9ibG9ja3MuYXBwZW5k
KHJlc3VsdCk7CisgICAgbV9ibG9ja0luZGljZXMuYWRkKHJlc3VsdCwgaW5kZXgpOworICAgIGlm
IChtX2Jsb2Nrcy5jYXBhY2l0eSgpICE9IG1fY29tbWl0dGVkLnNpemUoKSkKKyAgICAgICAgbV9j
b21taXR0ZWQucmVzaXplKG1fYmxvY2tzLmNhcGFjaXR5KCkpOworICAgIG1fY29tbWl0dGVkW2lu
ZGV4XSA9IHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOjpmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKiBiYXNlUHRyKQoreworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAKKyAgICBhdXRvIGl0ZXIgPSBtX2Js
b2NrSW5kaWNlcy5maW5kKGJhc2VQdHIpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9i
bG9ja0luZGljZXMuZW5kKCkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gaXRlci0+dmFsdWU7Cisg
ICAgbV9jb21taXR0ZWRbaW5kZXhdID0gZmFsc2U7CisgICAgbV9maXJzdFVuY29tbWl0dGVkID0g
c3RkOjptaW4oaW5kZXgsIG1fZmlyc3RVbmNvbW1pdHRlZCk7CisgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0KGJhc2VQdHIsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOworfQorCit2b2lkIElzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoIklzbygiLCBSYXdQb2ludGVyKHRoaXMpLCAiKSIpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3IgOiBwdWJsaWMgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgSXNv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOworICAgIH5Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KCk7CisKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOworICAgIHZvaWQgZnJlZUFsaWduZWRNZW1vcnkodm9p
ZCopIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7CisgICAgVmVjdG9yPHZvaWQqPiBtX2Js
b2NrczsKKyAgICBIYXNoTWFwPHZvaWQqLCB1bnNpZ25lZD4gbV9ibG9ja0luZGljZXM7CisgICAg
RmFzdEJpdFZlY3RvciBtX2NvbW1pdHRlZDsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0VW5jb21taXR0
ZWQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKKworI2luY2x1
ZGUgIklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0
b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitJc29TdWJzcGFjZTo6SXNvU3Vic3Bh
Y2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwg
c2l6ZV90IHNpemUpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwKQorICAgICwgbV9hbGxvY2F0
b3IoJmhlYXAsIHNpemUpCisgICAgLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ioc3RkOjpt
YWtlX3VuaXF1ZTxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQoreworICAgIGluaXRpYWxp
emUoaGVhcENlbGxUeXBlLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuZ2V0KCkpOworCisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmFsbG9jYXRvckxvY2soKSk7CisgICAg
bV9hbGxvY2F0b3Iuc2V0U3Vic3BhY2UodGhpcyk7CisgICAgbV9zcGFjZS5hZGRNYXJrZWRBbGxv
Y2F0b3IobG9ja2VyLCAmbV9hbGxvY2F0b3IpOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci0+cmVnaXN0ZXJBbGxvY2F0b3IoJm1fYWxsb2NhdG9yKTsKKyAgICBtX2ZpcnN0QWxsb2NhdG9y
ID0gJm1fYWxsb2NhdG9yOworfQorCitJc29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkKK3sKK30K
KworTWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXpl
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9j
YXRvckZvck5vblZpcnR1YWwoc2l6ZSwgZmFpbHVyZU1vZGUpOworfQorCitNYXJrZWRBbGxvY2F0
b3IqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSB0aGlzLT5z
aXplKCkpOworICAgIHJldHVybiAmbV9hbGxvY2F0b3I7Cit9CisKK3ZvaWQqIElzb1N1YnNwYWNl
OjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBhbGxv
Y2F0ZU5vblZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cit9CisK
K3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWls
dXJlTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Cisg
ICAgcmV0dXJuIG1fYWxsb2NhdG9yLmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1v
ZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Jc29TdWJzcGFjZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN1YnNwYWNlLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwor
CitjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgSGVhcENlbGxU
eXBlKiwgc2l6ZV90IHNpemUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Jc29TdWJzcGFjZSgp
OworCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRvci5jZWxsU2l6
ZSgpOyB9CisKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworCisg
ICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2Nh
dGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOworCitwcml2YXRlOgorCisg
ICAgTWFya2VkQWxsb2NhdG9yIG1fYWxsb2NhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxMiArNDYsMTYgQEAgTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaAog
ICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDApCiAgICAg
LCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCi0gICAgLCBtX2F0
dHJpYnV0ZXMoc3Vic3BhY2UtPmF0dHJpYnV0ZXMoKSkKICAgICAsIG1faGVhcChoZWFwKQotICAg
ICwgbV9zdWJzcGFjZShzdWJzcGFjZSkKIHsKIH0KIAordm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNl
dFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKK3sKKyAgICBtX2F0dHJpYnV0ZXMgPSBzdWJz
cGFjZS0+YXR0cmlidXRlcygpOworICAgIG1fc3Vic3BhY2UgPSBzdWJzcGFjZTsKK30KKwogYm9v
bCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQogewogICAgIHVu
c2lnbmVkIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKQEAgLTE3NSwxOSArMTc5LDcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZQogICAgICAgICBhbGxvY2F0
aW9uQ291bnQgPSAwOwogfQogCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nh
c2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICBib29sIGNyYXNo
T25GYWlsdXJlID0gdHJ1ZTsKLSAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoZGVmZXJy
YWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7Ci19Ci0KLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQot
ewotICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBmYWxzZTsKLSAgICByZXR1cm4gYWxsb2NhdGVT
bG93Q2FzZUltcGwoZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7Ci19Ci0KLXZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3ZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIEFTU0VSVChtX2hlYXAtPnZtKCkt
PmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwpAQCAtMjA0LDExICsxOTYsOCBAQCB2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJCiAgICAgCiAgICAgLy8gR29v
ZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMgYWxs
b2NhdG9yIGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CiAgICAgLy8gaGFwcGVucyB3aGVu
IHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRoZSBH
QydzIGZpbmFsaXphdGlvbi4KLSAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKSB7Ci0g
ICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKLSAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZShk
ZWZlcnJhbENvbnRleHQpOwotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250
ZXh0KTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJsb2NrKSkKKyAgICAgICAg
cmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIAogICAg
IHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKICAgICAKQEAg
LTIxNyw3ICsyMDYsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJ
CiAgICAgCiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlBbGxvY2F0ZUJsb2Nr
KCk7CiAgICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisgICAg
ICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVN
b2RlLmgiCiAjaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkZyZWVM
aXN0LmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKQEAgLTY3LDEzICs2OCwxNyBAQCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyMTIxCiAKIGNsYXNzIE1hcmtlZEFsbG9jYXRvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTWFya2VkQWxsb2NhdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiBw
dWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CiAKLSAgICBNYXJrZWRBbGxvY2F0b3Io
SGVhcCosIFN1YnNwYWNlKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3Io
SGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAgdm9pZCBzZXRTdWJzcGFjZShTdWJzcGFjZSop
OwogICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICB2b2lkIHByZXBhcmVGb3JB
bGxvY2F0aW9uKCk7CiAgICAgdm9pZCBzdG9wQWxsb2NhdGluZygpOwpAQCAtOTAsOCArOTUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb247IH0KICAgICBEZXN0cnVj
dGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1
Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlcy5jZWxsS2luZDsgfQotICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250
ZXh0KiA9IG51bGxwdHIpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0
KiA9IG51bGxwdHIpOworICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9
CiAKICAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsK
QEAgLTEzNiw5ICsxNDAsMTEgQEAgcHVibGljOgogICAgIAogICAgIE1hcmtlZEFsbG9jYXRvciog
bmV4dEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvcjsgfQogICAgIE1h
cmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X25leHRBbGxvY2F0b3JJblN1YnNwYWNlOyB9CisgICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0QWxs
b2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxs
b2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9CiAgICAgCiAgICAgdm9pZCBzZXROZXh0
QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvciA9
IGFsbG9jYXRvcjsgfQogICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluU3Vic3BhY2UoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSA9IGFsbG9j
YXRvcjsgfQorICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KICAgICAKICAgICBNYXJrZWRCbG9jazo6SGFu
ZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKTsKICAgICAKQEAgLTE1NSw5ICsxNjEsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250
ZXh0Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZShH
Q0RlZmVycmFsQ29udGV4dCopOwotICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKEdDRGVm
ZXJyYWxDb250ZXh0KiwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsK
ICAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CiAgICAgTWFya2VkQmxv
Y2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwpAQCAtMTkyLDEwICsxOTYsMTEgQEAgcHJp
dmF0ZToKICAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBGSVhN
RTogQWxsIG9mIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSByZWZlcmVuY2VzLgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5ODgKLSAgICBIZWFwKiBt
X2hlYXA7Ci0gICAgU3Vic3BhY2UqIG1fc3Vic3BhY2U7CisgICAgSGVhcCogbV9oZWFwIHsgbnVs
bHB0ciB9OworICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlIHsgbnVsbHB0ciB9OwogICAgIE1hcmtl
ZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIE1hcmtlZEFsbG9j
YXRvciogbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKKyAgICBNYXJrZWRB
bGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51bGxw
dHIgfTsKIH07CiAKIGlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMjEgKzM1LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGUK
ICAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0
YXJnZXQpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCitBTFdBWVNfSU5MSU5F
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVy
cmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIHJl
dHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAogICAgICAgICBbJl0gKCkgLT4gSGVhcENlbGwqIHsK
ICAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4odHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZl
cnJhbENvbnRleHQpKTsKLSAgICAgICAgfSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCogTWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
KQotewotICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbJl0gKCkgLT4g
SGVhcENlbGwqIHsKLSAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkp
OwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93
Q2FzZShkZWZlcnJhbENvbnRleHQpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
ZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkp
OwogICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTEsMTAgKzU1MSw4IEBA
IHZvaWQgTWFya2VkU3BhY2U6OmR1bXBCaXRzKFByaW50U3RyZWFtJiAKICAgICAgICAgfSk7CiB9
CiAKLU1hcmtlZEFsbG9jYXRvciogTWFya2VkU3BhY2U6OmFkZE1hcmtlZEFsbG9jYXRvcigKLSAg
ICBjb25zdCBBYnN0cmFjdExvY2tlciYsIFN1YnNwYWNlKiBzdWJzcGFjZSwgc2l6ZV90IHNpemVD
bGFzcykKK3ZvaWQgTWFya2VkU3BhY2U6OmFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFj
dExvY2tlciYsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQogewotICAgIE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yID0gbV9iYWdPZkFsbG9jYXRvcnMuYWRkKGhlYXAoKSwgc3Vic3BhY2Us
IHNpemVDbGFzcyk7CiAgICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9yKG51bGxwdHIpOwog
ICAgIAogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC01NjIsMTQgKzU2MCwxMCBAQCBN
YXJrZWRBbGxvY2F0b3IqIE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBCiAgICAgaWYgKCFtX2ZpcnN0
QWxsb2NhdG9yKSB7CiAgICAgICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CiAgICAg
ICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICAgICAgZm9yIChTdWJzcGFjZSog
c3Vic3BhY2UgOiBtX3N1YnNwYWNlcykKLSAgICAgICAgICAgIHN1YnNwYWNlLT5kaWRDcmVhdGVG
aXJzdEFsbG9jYXRvcihhbGxvY2F0b3IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbGFzdEFs
bG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvcihhbGxvY2F0b3IpOwogICAgICAgICBtX2xhc3RBbGxv
Y2F0b3IgPSBhbGxvY2F0b3I7CiAgICAgfQotICAgIAotICAgIHJldHVybiBhbGxvY2F0b3I7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgcHVi
bGljOgogICAgIE1hcmtlZEFsbG9jYXRvciogZmlyc3RBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBtX2ZpcnN0QWxsb2NhdG9yOyB9CiAgICAgCiAgICAgTG9jayYgYWxsb2NhdG9yTG9jaygpIHsg
cmV0dXJuIG1fYWxsb2NhdG9yTG9jazsgfQotICAgIE1hcmtlZEFsbG9jYXRvciogYWRkTWFya2Vk
QWxsb2NhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU3Vic3BhY2UqLCBzaXplX3QgY2VsbFNp
emUpOworICAgIHZvaWQgYWRkTWFya2VkQWxsb2NhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwg
TWFya2VkQWxsb2NhdG9yKik7CiAgICAgCiAgICAgLy8gV2hlbiB0aGlzIGlzIHRydWUgaXQgbWVh
bnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQgYnV0IHRoZSBtYXJrIGJpdHMgaGF2ZW4ndCBjb252ZXJn
ZWQgeWV0LgogICAgIGJvb2wgaXNNYXJraW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc01hcmtpbmc7
IH0KQEAgLTE3Myw5ICsxNzMsNiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWFrU2V0
OwogICAgIGZyaWVuZCBjbGFzcyBTdWJzcGFjZTsKICAgICAKLSAgICB2b2lkKiBhbGxvY2F0ZVNs
b3coU3Vic3BhY2UmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5
QWxsb2NhdGVTbG93KFN1YnNwYWNlJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotCiAg
ICAgLy8gVXNlIHRoaXMgdmVyc2lvbiB3aGVuIGNhbGxpbmcgZnJvbSB3aXRoaW4gdGhlIEdDIHdo
ZXJlIHdlIGtub3cgdGhhdCB0aGUgYWxsb2NhdG9ycwogICAgIC8vIGhhdmUgYWxyZWFkeSBiZWVu
IHN0b3BwZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2
ZUNlbGwoY29uc3QgRnVuY3RvciYpOwpAQCAtMjEwLDcgKzIwNyw2IEBAIHByaXZhdGU6CiAgICAg
U2VudGluZWxMaW5rZWRMaXN0PFdlYWtTZXQsIEJhc2ljUmF3U2VudGluZWxOb2RlPFdlYWtTZXQ+
PiBtX25ld0FjdGl2ZVdlYWtTZXRzOwogCiAgICAgTG9jayBtX2FsbG9jYXRvckxvY2s7Ci0gICAg
QmFnPE1hcmtlZEFsbG9jYXRvcj4gbV9iYWdPZkFsbG9jYXRvcnM7CiAgICAgTWFya2VkQWxsb2Nh
dG9yKiBtX2ZpcnN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIE1hcmtlZEFsbG9jYXRvciog
bV9sYXN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDQ1ICszNCwyMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotbmFtZXNwYWNlIHsKLQotLy8gV3JpdGluZyBpdCB0aGlz
IHdheSBlbnN1cmVzIHRoYXQgd2hlbiB5b3UgcGFzcyB0aGlzIGFzIGEgZnVuY3RvciwgdGhlIGNh
bGxlZSBpcyBzcGVjaWFsaXplZCBmb3IKLS8vIHRoaXMgY2FsbGJhY2suIElmIHlvdSB3cm90ZSB0
aGlzIGFzIGEgbm9ybWFsIGZ1bmN0aW9uIHRoZW4gdGhlIGNhbGxlZSB3b3VsZCBiZSBzcGVjaWFs
aXplZCBmb3IKLS8vIHRoZSBmdW5jdGlvbidzIHR5cGUgYW5kIGl0IHdvdWxkIGhhdmUgaW5kaXJl
Y3QgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbi4gQW5kIHVubGlrZSBhIGxhbWJkYSwgaXQncwotLy8g
cG9zc2libGUgdG8gbWFyayB0aGlzIEFMV0FZU19JTkxJTkUuCi1zdHJ1Y3QgRGVzdHJveUZ1bmMg
ewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiB2bSwgSlNDZWxsKiBjZWxs
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGNlbGwtPnN0cnVjdHVyZUlEKCkpOwotICAg
ICAgICBBU1NFUlQoY2VsbC0+aW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFs
KTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwot
ICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCk7Ci0gICAgICAgIE1ldGhvZFRhYmxlOjpEZXN0cm95RnVuY3Rpb25QdHIgZGVzdHJveSA9IGNs
YXNzSW5mby0+bWV0aG9kVGFibGUuZGVzdHJveTsKLSAgICAgICAgZGVzdHJveShjZWxsKTsKLSAg
ICB9Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotU3Vic3BhY2U6OlN1YnNwYWNl
KENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyBhdHRyaWJ1dGVz
LCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQorU3Vic3Bh
Y2U6OlN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCkKICAgICA6IG1fc3BhY2UoaGVh
cC5vYmplY3RTcGFjZSgpKQogICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2F0dHJpYnV0ZXMo
YXR0cmlidXRlcykKLSAgICAsIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKQotICAgICwgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24obV9zcGFjZS5m
aXJzdEFsbG9jYXRvcigpKQotewotICAgIC8vIEl0J3MgcmVtb3RlbHkgcG9zc2libGUgdGhhdCB3
ZSdyZSBHQ2luZyByaWdodCBub3cgZXZlbiBpZiB0aGUgY2xpZW50IGlzIGNhcmVmdWwgdG8gb25s
eQotICAgIC8vIGNyZWF0ZSBzdWJzcGFjZXMgcmlnaHQgYWZ0ZXIgVk0gY3JlYXRpb24sIHNpbmNl
IGNvbGxlY3RDb250aW51b3VzbHkgKGFuZCBwcm9iYWJseSBvdGhlcgotICAgIC8vIHRoaW5ncykg
Y291bGQgY2F1c2UgYSBHQyB0byBiZSBsYXVuY2hlZCBhdCBwcmV0dHkgbXVjaCBhbnkgdGltZSBh
bmQgaXQncyBub3QgMTAwJSBvYnZpb3VzCi0gICAgLy8gdGhhdCBhbGwgY2xpZW50cyB3b3VsZCBi
ZSBhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSB6ZXJvIHNhZmVwb2ludHMgYmV0d2VlbiB3
aGVuIHRoZXkKLSAgICAvLyBjcmVhdGUgVk0gYW5kIHdoZW4gdGhleSBkbyB0aGlzLiBQcmV2ZW50
aW5nIEdDIHdoaWxlIHdlJ3JlIGNyZWF0aW5nIHRoZSBTdWJzcGFjZSBlbnN1cmVzCi0gICAgLy8g
dGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHdoZXRoZXIgaXQncyBPSyBmb3IgdGhl
IEdDIHRvIGV2ZXIgc2VlIGEgYnJhbmQgbmV3Ci0gICAgLy8gc3Vic3BhY2UuCit7Cit9CisKK3Zv
aWQgU3Vic3BhY2U6OmluaXRpYWxpemUoSGVhcENlbGxUeXBlKiBoZWFwQ2VsbFR5cGUsIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpCit7CisgICAgbV9hdHRy
aWJ1dGVzID0gaGVhcENlbGxUeXBlLT5hdHRyaWJ1dGVzKCk7CisgICAgbV9oZWFwQ2VsbFR5cGUg
PSBoZWFwQ2VsbFR5cGU7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yID0gYWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjsKKyAgICBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxp
Z25lZE1lbW9yeUFsbG9jYXRvci0+Zmlyc3RBbGxvY2F0b3IoKTsKKworICAgIEhlYXAmIGhlYXAg
PSAqbV9zcGFjZS5oZWFwKCk7CiAgICAgUHJldmVudENvbGxlY3Rpb25TY29wZSBwcmV2ZW50Q29s
bGVjdGlvblNjb3BlKGhlYXApOwogICAgIGhlYXAub2JqZWN0U3BhY2UoKS5tX3N1YnNwYWNlcy5h
cHBlbmQodGhpcyk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IE1hcmtlZFNwYWNlOjpudW1T
aXplQ2xhc3NlczsgaS0tOykKLSAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpXSA9IG51
bGxwdHI7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlclN1YnNwYWNlKHRo
aXMpOwogfQogCiBTdWJzcGFjZTo6flN1YnNwYWNlKCkKQEAgLTgxLDYwICs1OSwxMiBAQCBTdWJz
cGFjZTo6flN1YnNwYWNlKCkKIAogdm9pZCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYgYmxvY2ssIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICBibG9jay5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgbV9o
ZWFwQ2VsbFR5cGUtPmZpbmlzaFN3ZWVwKGJsb2NrLCBmcmVlTGlzdCk7CiB9CiAKIHZvaWQgU3Vi
c3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgRGVzdHJveUZ1bmMo
KSh2bSwgY2VsbCk7Ci19Ci0KLS8vIFRoZSByZWFzb24gd2h5IHdlIGRpc3Rpbmd1aXNoIGJldHdl
ZW4gYWxsb2NhdGUgYW5kIHRyeUFsbG9jYXRlIGlzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YK
LS8vIGNoZWNrcyBvbiB0aGUgYWxsb2NhdGlvbiBwYXRoIGluIGJvdGggY2FzZXMuIExpa2V3aXNl
LCB0aGUgcmVhc29uIHdoeSB3ZSBoYXZlIG92ZXJsb2FkcyB3aXRoIGFuZAotLy8gd2l0aG91dCBk
ZWZlcnJhbENvbnRleHQgaXMgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBjb2RlIGZvciBjYWxs
aW5nIGFsbG9jYXRlIHdoZW4geW91IGRvbid0Ci0vLyBuZWVkIHRoZSBkZWZlcnJhbENvbnRleHQu
Ci12b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcmVz
dWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZv
cihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZSgpOwotICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KG51bGxwdHIsIHNpemUpOwotICAgIGRp
ZEFsbG9jYXRlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3Bh
Y2U6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBz
aXplKQotewotICAgIHZvaWQgKnJlc3VsdDsKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRv
ci0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9
IGFsbG9jYXRlU2xvdyhkZWZlcnJhbENvbnRleHQsIHNpemUpOwotICAgIGRpZEFsbG9jYXRlKHJl
c3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9j
YXRlKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJlc3Vs
dCA9IGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9
IHRyeUFsbG9jYXRlU2xvdyhudWxscHRyLCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZShH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2
b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxs
b2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPnRyeUFsbG9jYXRl
KGRlZmVycmFsQ29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0
ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9oZWFwQ2VsbFR5cGUtPmRlc3Ryb3kodm0sIGNlbGwp
OwogfQogCiB2b2lkIFN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCkBAIC0xNDQsMTA0
ICs3NCwxNyBAQCB2b2lkIFN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCiAgICAgICAg
ICAgICBhbGxvY2F0b3IucHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICAgICAgfSk7CiAKLSAg
ICBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fc3BhY2UuZmlyc3RBbGxvY2F0b3Io
KTsKKyAgICBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxpZ25lZE1lbW9yeUFs
bG9jYXRvci0+Zmlyc3RBbGxvY2F0b3IoKTsKIH0KIAogTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vi
c3BhY2U6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpCiB7Ci0gICAgZm9yICg7IG1fYWxsb2NhdG9y
Rm9yRW1wdHlBbGxvY2F0aW9uOyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxs
b2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5uZXh0QWxsb2NhdG9yKCkpIHsKLSAgICAgICAgU3Vi
c3BhY2UqIG90aGVyU3Vic3BhY2UgPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+c3Vi
c3BhY2UoKTsKLSAgICAgICAgaWYgKG90aGVyU3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoKSAhPSBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgCisgICAgZm9yICg7IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uOyBtX2Fs
bG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9u
LT5uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpIHsKICAgICAgICAgaWYg
KE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRp
b24tPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKQogICAgICAgICAgICAgcmV0dXJuIGJsb2NrOwog
ICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yU2xvdyhzaXplX3Qgc2l6ZSkKLXsKLSAgICBzaXplX3QgaW5kZXggPSBN
YXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKTsKLSAgICBzaXplX3Qgc2l6ZUNsYXNz
ID0gTWFya2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdOwotICAgIGlmICgh
c2l6ZUNsYXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICAvLyBUaGlzIGlz
IHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sgZm9yIHRoZSBKSVQgdGhyZWFkcyB0
byBlbmQgdXAgaGVyZSBpZiB0aGV5IHdhbnQKLSAgICAvLyB0byBnZW5lcmF0ZSBjb2RlIHRoYXQg
dXNlcyBzb21lIGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVuIHVzZWQgeWV0LiBOb3RlIHRoYXQg
YSBwb3NzaWJseS0KLSAgICAvLyBqdXN0LWFzLWdvb2Qgc29sdXRpb24gd291bGQgYmUgdG8gcmV0
dXJuIG51bGwgaWYgd2UncmUgaW4gdGhlIEpJVCBzaW5jZSB0aGUgSklUIHRyZWF0cyBudWxsCi0g
ICAgLy8gYWxsb2NhdG9yIGFzICJwbGVhc2UgYWx3YXlzIHRha2UgdGhlIHNsb3cgcGF0aCIuIEJ1
dCwgdGhhdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlCi0gICAgLy8gc3VycHJpc2VzIGFuZCB0
aGUgYWxnb3JpdGhtIGhlcmUgaXMgcHJldHR5IGVhc3kuIE9ubHkgdGhpcyBjb2RlIGhhcyB0byBo
b2xkIHRoZSBsb2NrLCB0bwotICAgIC8vIHByZXZlbnQgc2ltdWx0YW5lb3VzbHkgTWFya2VkQWxs
b2NhdG9yIGNyZWF0aW9ucyBmcm9tIG11bHRpcGxlIHRocmVhZHMuIFRoaXMgY29kZSBlbnN1cmVz
Ci0gICAgLy8gdGhhdCBhbnkgImZvckVhY2hBbGxvY2F0b3IiIHRyYXZlcnNhbHMgd2lsbCBvbmx5
IHNlZSB0aGlzIGFsbG9jYXRvciBhZnRlciBpdCdzIGluaXRpYWxpemVkCi0gICAgLy8gZW5vdWdo
OiBpdCB3aWxsIGhhdmUgCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmFsbG9j
YXRvckxvY2soKSk7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9hbGxv
Y2F0b3JGb3JTaXplU3RlcFtpbmRleF0pCi0gICAgICAgIHJldHVybiBhbGxvY2F0b3I7Ci0KLSAg
ICBpZiAoZmFsc2UpCi0gICAgICAgIGRhdGFMb2coIkNyZWF0aW5nIG1hcmtlZCBhbGxvY2F0b3Ig
Zm9yICIsIG1fbmFtZSwgIiwgIiwgbV9hdHRyaWJ1dGVzLCAiLCAiLCBzaXplQ2xhc3MsICIuXG4i
KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fc3BhY2UuYWRkTWFya2VkQWxs
b2NhdG9yKGxvY2tlciwgdGhpcywgc2l6ZUNsYXNzKTsKLSAgICBpbmRleCA9IE1hcmtlZFNwYWNl
OjpzaXplQ2xhc3NUb0luZGV4KHNpemVDbGFzcyk7Ci0gICAgZm9yICg7OykgewotICAgICAgICBp
ZiAoTWFya2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFz
cykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBb
aW5kZXhdID0gYWxsb2NhdG9yOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpbmRleC0tKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvcklu
U3Vic3BhY2UobV9maXJzdEFsbG9jYXRvcik7Ci0gICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
LSAgICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwotICAgIHJldHVybiBhbGxvY2F0b3I7
Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjphbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxs
b2NhdGVTbG93KGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2Nh
dGVTbG93KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQot
ewotICAgIHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7Ci0gICAgCi0g
ICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUpKQot
ICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQpOwot
ICAgIAotICAgIGlmIChzaXplIDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9mZigpCi0g
ICAgICAgICYmIHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7Ci0gICAgICAgIGRh
dGFMb2coIkZBVEFMOiBhdHRhbXB0aW5nIHRvIGFsbG9jYXRlIHNtYWxsIG9iamVjdCB1c2luZyBs
YXJnZSBhbGxvY2F0aW9uLlxuIik7Ci0gICAgICAgIGRhdGFMb2coIlJlcXVlc3RlZCBhbGxvY2F0
aW9uIHNpemU6ICIsIHNpemUsICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBtX3NwYWNlLmhlYXAoKS0+Y29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOwotICAgIAotICAgIHNpemUgPSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8TWFya2VkU3BhY2U6OnNpemVTdGVwPihzaXplKTsKLSAgICBMYXJnZUFs
bG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgqbV9zcGFj
ZS5tX2hlYXAsIHNpemUsIHRoaXMpOwotICAgIGlmICghYWxsb2NhdGlvbikKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgbV9zcGFjZS5tX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5k
KGFsbG9jYXRpb24pOwotICAgIG1fc3BhY2UubV9oZWFwLT5kaWRBbGxvY2F0ZShzaXplKTsKLSAg
ICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKLSAgICAKLSAgICBtX2xhcmdlQWxsb2NhdGlv
bnMuYXBwZW5kKGFsbG9jYXRpb24pOwotICAgICAgICAKLSAgICByZXR1cm4gYWxsb2NhdGlvbi0+
Y2VsbCgpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgU3Vic3BhY2U6OmRpZEFsbG9jYXRlKHZv
aWQqIHB0cikKLXsKLSAgICBVTlVTRURfUEFSQU0ocHRyKTsKLSAgICAKLSAgICAvLyBUaGlzIGlz
IHVzZWZ1bCBmb3IgbG9nZ2luZyBhbGxvY2F0aW9ucywgb3IgZG9pbmcgb3RoZXIga2luZHMgb2Yg
ZGVidWdnaW5nIGhhY2tzLiBKdXN0IG1ha2UKLSAgICAvLyBzdXJlIHlvdSBKU0NfZm9yY2VHQ1Ns
b3dQYXRocz10cnVlLgotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgi
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTMyLDQ0ICszMywzMCBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CitjbGFzcyBIZWFwQ2VsbFR5
cGU7CiAKIC8vIFRoZSBpZGVhIG9mIHN1YnNwYWNlcyBpcyB0aGF0IHlvdSBjYW4gcHJvdmlkZSBz
b21lIGN1c3RvbSBiZWhhdmlvciBmb3IgeW91ciBvYmplY3RzIGlmIHlvdQogLy8gYWxsb2NhdGUg
dGhlbSBmcm9tIGEgY3VzdG9tIFN1YnNwYWNlIGluIHdoaWNoIHlvdSBvdmVycmlkZSBzb21lIG9m
IHRoZSB2aXJ0dWFsIG1ldGhvZHMuIFRoaXMKLS8vIGNsYXNzIGlzIHRoZSBiYXNlY2xhc3Mgb2Yg
U3Vic3BhY2VzIGFuZCBpdCBwcm92aWRlcyBhIHJlYXNvbmFibGUgZGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiwgd2hlcmUKLS8vIHN3ZWVwaW5nIGFzc3VtZXMgaW1tb3J0YWwgc3RydWN0dXJlLiBUaGUg
Y29tbW9uIHdheXMgb2Ygb3ZlcnJpZGluZyB0aGlzIGFyZToKLS8vCi0vLyAtIFByb3ZpZGUgY3Vz
dG9taXplZCBkZXN0cnVjdG9yIGJlaGF2aW9yLiBZb3UgY2FuIGNoYW5nZSBob3cgdGhlIGRlc3Ry
dWN0b3IgaXMgY2FsbGVkLiBZb3UgY2FuCi0vLyAgIGFsc28gc3BlY2lhbGl6ZSB0aGUgZGVzdHJ1
Y3RvciBjYWxsIGluIHRoZSBsb29wLgotLy8KLS8vIC0gVXNlIHRoZSBTdWJzcGFjZSBhcyBhIHF1
aWNrIHdheSB0byBpdGVyYXRlIGFsbCBvZiB0aGUgb2JqZWN0cyBpbiB0aGF0IHN1YnNwYWNlLgor
Ly8gY2xhc3MgaXMgdGhlIGJhc2VjbGFzcyBvZiBTdWJzcGFjZXMuIFVzdWFsbHkgeW91IHdpbGwg
dXNlIGVpdGhlciBTdWJzcGFjZSBvciBGaXhlZFNpemVTdWJzcGFjZS4KIGNsYXNzIFN1YnNwYWNl
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdWJzcGFjZSk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Vic3BhY2UoQ1N0
cmluZyBuYW1lLCBIZWFwJiwgQWxsb2NhdG9yQXR0cmlidXRlcywgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVh
cCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflN1YnNwYWNlKCk7Ci0gICAgCisK
ICAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lLmRhdGEoKTsgfQog
ICAgIE1hcmtlZFNwYWNlJiBzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2U7IH0KICAgICAK
ICAgICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1
cm4gbV9hdHRyaWJ1dGVzOyB9CisgICAgSGVhcENlbGxUeXBlKiBoZWFwQ2VsbFR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2hlYXBDZWxsVHlwZTsgfQogICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Iq
IGFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX2FsaWduZWRNZW1vcnlB
bGxvY2F0b3I7IH0KICAgICAKLSAgICAvLyBUaGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMg
aXMgdG8gc3BlY2lhbGl6ZSB0aGUgc3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29u
J3QKLSAgICAvLyBiZSBjYWxsZWQgZm9yIG5vLWRlc3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3Qg
Y2FsbCBNYXJrZWRCbG9jazo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UuCi0gICAgdmlydHVh
bCB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopOwotICAg
IAotICAgIC8vIFRoZXNlIGdldCBjYWxsZWQgZm9yIGxhcmdlIG9iamVjdHMuCi0gICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsKLSAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3Iq
IHRyeUFsbG9jYXRvckZvcihzaXplX3QpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
Rm9yKHNpemVfdCk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUo
c2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFs
Q29udGV4dCosIHNpemVfdCk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5
QWxsb2NhdGUoc2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0
ZShHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKKyAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0Nl
bGwqKTsKKworICAgIHZpcnR1YWwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRl
KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsK
ICAgICAKICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCkBAIC05Niw0OCAr
ODMsMjUgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBm
b3JFYWNoTGl2ZUNlbGwoY29uc3QgRnVuYyYpOwogICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dWJzcGFjZSwgbV9hbGxvY2F0b3JGb3JTaXplU3RlcCk7IH0KLSAgICAKLSAgICBNYXJrZWRBbGxv
Y2F0b3IqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNp
emVTdGVwWzBdOyB9CisgICAgU3Vic3BhY2UqIG5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOyB9CisgICAgdm9pZCBzZXROZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoU3Vic3BhY2UqIHN1YnNwYWNlKSB7IG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yID0gc3Vic3BhY2U7IH0KIAotcHJpdmF0ZToKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvckZvclNsb3coc2l6ZV90KTsKLSAgICAKLSAgICAvLyBUaGVzZSBzbG93IHBhdGhzIGFy
ZSBjb25jZXJuZWQgd2l0aCBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgYWxsb2NhdG9yIGNyZWF0aW9u
LgotICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0g
ICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLSAg
ICAKLSAgICB2b2lkIGRpZEFsbG9jYXRlKHZvaWQqKTsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGlu
aXRpYWxpemUoSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwogICAgIAog
ICAgIE1hcmtlZFNwYWNlJiBtX3NwYWNlOwogICAgIAogICAgIENTdHJpbmcgbV9uYW1lOwogICAg
IEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworCisgICAgSGVhcENlbGxUeXBlKiBt
X2hlYXBDZWxsVHlwZSB7IG51bGxwdHIgfTsKKyAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBt
X2FsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CiAgICAgCi0gICAgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciogbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwotICAgIAotICAgIHN0ZDo6
YXJyYXk8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzPiBtX2Fs
bG9jYXRvckZvclNpemVTdGVwOwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRv
ciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yRm9yRW1wdHlB
bGxvY2F0aW9uIHsgbnVsbHB0ciB9OyAvLyBVc2VzIHRoZSBNYXJrZWRTcGFjZSBsaW5rZWQgbGlz
dCBvZiBibG9ja3MuCiAgICAgU2VudGluZWxMaW5rZWRMaXN0PExhcmdlQWxsb2NhdGlvbiwgQmFz
aWNSYXdTZW50aW5lbE5vZGU8TGFyZ2VBbGxvY2F0aW9uPj4gbV9sYXJnZUFsbG9jYXRpb25zOwor
ICAgIFN1YnNwYWNlKiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51
bGxwdHIgfTsKIH07CiAKLUFMV0FZU19JTkxJTkUgTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFjZTo6
dHJ5QWxsb2NhdG9yRm9yKHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplIDw9IE1hcmtlZFNw
YWNlOjpsYXJnZUN1dG9mZikKLSAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBb
TWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOwotICAgIHJldHVybiBudWxscHRy
OwotfQotCi1BTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFsbG9jYXRv
ckZvcihzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VD
dXRvZmYpIHsKLSAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogcmVzdWx0ID0gbV9hbGxvY2F0
b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV0pCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICByZXR1cm4gYWxsb2NhdG9yRm9yU2xvdyhz
aXplKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1ODksNyArMTU4OSw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICAvLyBhbGxvY2F0aW9uU2l6ZSBjYW4gYmUgYWxpYXNlZCB3aXRoIGFueSBvZiB0aGUg
b3RoZXIgaW5wdXQgR1BScy4gSWYgaXQncyBub3QgYWxpYXNlZCB0aGVuIGl0CiAgICAgLy8gd29u
J3QgYmUgY2xvYmJlcmVkLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJS
ZWcgcmVzdWx0R1BSLCBTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwg
R1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0
aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwg
Q29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVn
IHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAg
ICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFy
a2VkU3BhY2U6OnNpemVTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUg
YSBwb3dlciBvZiB0d28uIik7CiAgICAgICAgIApAQCAtMTYwNyw3ICsxNjA3LDcgQEAgcHVibGlj
OgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlw
ZT4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKFZNJiB2bSwgR1BSUmVn
IHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBhbGxvY2F0aW9uU2l6
ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93
UGF0aCkKICAgICB7Ci0gICAgICAgIFN1YnNwYWNlJiBzdWJzcGFjZSA9ICpzdWJzcGFjZUZvcjxD
bGFzc1R5cGU+KHZtKTsKKyAgICAgICAgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UgPSAqc3Vi
c3BhY2VGb3I8Q2xhc3NUeXBlPih2bSk7CiAgICAgICAgIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6
ZWQocmVzdWx0R1BSLCBzdWJzcGFjZSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3Jh
dGNoR1BSMiwgc2xvd1BhdGgpOwogICAgICAgICBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUlu
Zm8oc3RydWN0dXJlLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIyKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZp
c2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgQUxXQVlTX0lOTElORSB1
bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGltYQogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXpl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZShzaXplKTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxw
dHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICBCdXR0ZXJmbHkqIHJlc3Vs
dCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pCiBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnRyeUNyZWF0
ZShWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIHNp
emVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJ
bmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIGJh
c2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShzaXplKTsK
KyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJu
TnVsbCk7CiAgICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5KTsKQEAgLTE0OCw3ICsxNDgsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdy
b3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7
CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFk
SW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXpl
X3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOworICAgIHZvaWQqIG5l
d0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1
YWwobmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsK
ICAgICBpZiAoIW5ld0Jhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIC8vIEZJWE1F
OiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSBhIG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjQ1
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRz
RGVzdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFj
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAko
cmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1h
cEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2Fw
YWNpdHkpOwotICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOworICAgICAgICB2b2lkKiBkYXRhID0g
dm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKGFsbG9j
YXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwog
ICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjM3
LDcgKzIzNyw5IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGUoVk0mIHYKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCB2
ZWN0b3JMZW5ndGhIaW50KTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLAorICAgICAgICAgICAgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwg
MCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBDb3B5VmlzaXRvcjsKIGNs
YXNzIEdDRGVmZXJyYWxDb250ZXh0OwogY2xhc3MgRXhlY1N0YXRlOwpAQCAtNDksMTEgKzUwLDYg
QEAgY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yOwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiBj
bGFzcyBTdHJ1Y3R1cmU7CiAKLWVudW0gY2xhc3MgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIHsKLSAg
ICBTaG91bGRBc3NlcnRPbkZhaWx1cmUsCi0gICAgU2hvdWxkTm90QXNzZXJ0T25GYWlsdXJlCi19
OwotCiBlbnVtIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2UgewogICAgIEhhc0Fy
ZywKICAgICBEb2VzTm90SGF2ZUFyZwpAQCAtNzksOCArNzUsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkKiB0cnlBbGxvY2F0ZUNlCiBjbGFzcyBKU0NlbGwgOiBwdWJsaWMgSGVhcENlbGwg
ewogICAgIGZyaWVuZCBjbGFzcyBKU1ZhbHVlOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9j
azsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUsIEdDRGVm
ZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U+Ci0gICAgZnJpZW5kIHZvaWQqIHRyeUFsbG9jYXRlQ2Vs
bEhlbHBlcihIZWFwJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgZnJpZW5kIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcihIZWFw
Jiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAK
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAwOwpA
QCAtOTEsNyArODcsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFJlZmVyIHRvIFN1YnNwYWNl
IGJ5IHJlZmVyZW5jZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY2OTg4CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGlj
IFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYpOworICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYpOwogCiAgICAgc3RhdGljIEpTQ2VsbCogc2Vlbk11bHRpcGxlQ2Fs
bGVlT2JqZWN0cygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KDEpKTsgfQogCkBAIC0zMTEsNyArMzA3LDcgQEAgaW5saW5lIFRvIGpzRHluYW1p
Y0Nhc3QoVk0mIHZtLCBKU1ZhbHVlIAogLy8gRklYTUU6IFJlZmVyIHRvIFN1YnNwYWNlIGJ5IHJl
ZmVyZW5jZS4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5
ODgKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1pbmxpbmUgU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKK2lubGluZSBhdXRvIHN1YnNwYWNlRm9yKFZNJiB2bSkKIHsKICAgICByZXR1cm4g
VHlwZTo6dGVtcGxhdGUgc3Vic3BhY2VGb3I8VHlwZT4odm0pOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjI0NTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzUsMzAgKzEzNSwyMSBAQCBBTFdBWVNfSU5MSU5FIFZNJiBFeGVjU3Rh
dGU6OnZtKCkgY29uc3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci1TdWJzcGFj
ZSogSlNDZWxsOjpzdWJzcGFjZUZvcihWTSYgdm0pCitDb21wbGV0ZVN1YnNwYWNlKiBKU0NlbGw6
OnN1YnNwYWNlRm9yKFZNJiB2bSkKIHsKICAgICBpZiAoQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rp
b24pCiAgICAgICAgIHJldHVybiAmdm0uZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlOwogICAgIHJldHVy
biAmdm0uY2VsbFNwYWNlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgbW9kZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZSBkZWZlcnJhbENvbnRl
eHRBcmdQcmVzZW5jZT4KLUFMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVy
KEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBz
aXplKQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2Nh
dGVDZWxsSGVscGVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCog
ZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAg
ICAgQVNTRVJUKGRlZmVycmFsQ29udGV4dCB8fCAhRGlzYWxsb3dHQzo6aXNJbkVmZmVjdE9uQ3Vy
cmVudFRocmVhZCgpKTsKICAgICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOwotICAgIEpTQ2Vs
bCogcmVzdWx0OwotICAgIGlmIChtb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxk
QXNzZXJ0T25GYWlsdXJlKSB7Ci0gICAgICAgIHJlc3VsdCA9IChkZWZlcnJhbENvbnRleHRBcmdQ
cmVzZW5jZSA9PSBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpIYXNBcmcpCi0gICAgICAg
ICAgICA/IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5h
bGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIHNpemUpKQotICAgICAgICAgICAgOiBzdGF0aWNfY2Fz
dDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+YWxsb2NhdGUoc2l6ZSkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IChkZWZlcnJhbENvbnRleHRBcmdQcmVzZW5j
ZSA9PSBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpIYXNBcmcpCi0gICAgICAgICAgICA/
IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT50cnlBbGxv
Y2F0ZShkZWZlcnJhbENvbnRleHQsIHNpemUpKQotICAgICAgICAgICAgOiBzdGF0aWNfY2FzdDxK
U0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+dHJ5QWxsb2NhdGUoc2l6ZSkpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9CisgICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJz
cGFjZUZvcjxUPigqaGVhcC52bSgpKS0+YWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFs
Q29udGV4dCwgZmFpbHVyZU1vZGUpKTsKKyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsICYmICFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIEFTU0VSVCghaGVhcC52bSgpLT5p
c0luaXRpYWxpemluZ09iamVjdCgpKTsKICAgICBoZWFwLnZtKCktPnNldEluaXRpYWxpemluZ09i
amVjdENsYXNzKFQ6OmluZm8oKSk7CkBAIC0xNzAsMjUgKzE2MSwyNSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCog
YWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlB
bGxvY2F0ZUNlbGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRBc3NlcnRP
bkZhaWx1cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6OkRvZXNOb3RIYXZlQXJnPiho
ZWFwLCBudWxscHRyLCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+
KGhlYXAsIHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbChIZWFwJiBoZWFw
LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkTm90QXNzZXJ0T25GYWlsdXJlLCBHQ0RlZmVycmFs
Q29udGV4dEFyZ1ByZXNlbnNlOjpEb2VzTm90SGF2ZUFyZz4oaGVhcCwgbnVsbHB0ciwgc2l6ZSk7
CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFwLCBzaXplLCBudWxscHRy
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0
ZUNlbGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRBc3NlcnRPbkZhaWx1
cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZz4oaGVhcCwgZGVmZXJyYWxD
b250ZXh0LCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAs
IHNpemUsIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCogdHJ5QWxsb2NhdGVDZWxsKEhlYXAmIGhl
YXAsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQogewot
ICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpTaG91bGROb3RBc3NlcnRPbkZhaWx1cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6
Okhhc0FyZz4oaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxs
b2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAsIHNpemUsIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKIH0KIAogaW5saW5lIGJvb2wgSlNDZWxsOjppc09i
amVjdCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
PgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBD
b21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1
cm4gJnZtLmRlc3RydWN0aWJsZU9iamVjdFNwYWNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHA6MjI0
NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCIKKworI2luY2x1
ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlICJTdWJzcGFjZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7
CisKK3N0cnVjdCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9y
KCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxK
U0Rlc3RydWN0aWJsZU9iamVjdCo+KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVz
dHJveShjZWxsKTsKKyAgICB9Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNE
ZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShD
U3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRv
cikKKyAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNE
ZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK3sKK30KKworSlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKQor
eworfQorCit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAgIGhh
bmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7
Cit9CisKK3ZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0s
IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5j
cHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
MTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXNwQ2VsbFR5cGUuaCIKIAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDIxICs0MiwyMSBAQCBzdHJ1Y3QgRGVzdHJveUZ1bmMgewog
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFj
ZTo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAs
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUs
IGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpT
Q2VsbCksIGFsbG9jYXRvcikKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5cGUoQWxsb2Nh
dG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsKIH0K
IAotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2UoKQorSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6On5KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlz
dCogZnJlZUxpc3QpCit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5p
c2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkK
IHsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ry
b3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoZnJl
ZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit2b2lkIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAg
IERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaDoyMjQ1MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdWJzcGFj
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZSgpOworICAgIAorICAgIHZvaWQgZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXN0cm95
KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSA6IHB1
YmxpYyBTdWJzcGFjZSB7CitjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSA6
IHB1YmxpYyBIZWFwQ2VsbFR5cGUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCk7CiAgICAgCiAgICAgdm9pZCBmaW5p
c2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2
b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UuaCIKLQotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBEZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlT
X0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAgewot
ICAgICAgICBzdGF0aWNfY2FzdDxKU0Rlc3RydWN0aWJsZU9iamVjdCo+KGNlbGwpLT5jbGFzc0lu
Zm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKLSAgICB9Ci19OwotCi19IC8vIGFub255
bW91cyBuYW1lc3BhY2UKLQotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9j
YXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9j
YXRvcikKLXsKLX0KLQotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3Qq
IGZyZWVMaXN0KQotewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVl
TGlzdCwgRGVzdHJveUZ1bmMoKSk7Ci19Ci0KLXZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVuYygp
KHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFj
ZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZy
ZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJp
ZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAy
MjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9u
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEpTTGV4aWNhbEVu
dmlyb25tZW50IDogcHVibGljIEpTU3kKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0
YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm4gJnZtLmpzVmFs
dWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
Q29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuICZ2bS5zZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RTdWJzcGFjZS5jcHA6MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgewor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+
KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9Cit9
OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpCit7
Cit9CisKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAg
ICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5j
KCkpOworfQorCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJv
eShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIgor
I2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCIKIAogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNp
bmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDIx
ICs0MiwyMSBAQCBzdHJ1Y3QgRGVzdHJveUZ1bmMgewogCiB9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKIAotSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0
b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0
b3IpCitKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0b3JB
dHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCi1K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UoKQorSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6fkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6Okhh
bmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit2b2lkIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhh
bmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dp
bmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3
ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKLXZv
aWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlND
ZWxsKiBjZWxsKQordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpk
ZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAgIERlc3Ryb3lGdW5jKCkodm0sIGNl
bGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAko
cmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNl
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
LCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7CisgICAgCisgICAgdm9pZCBm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
CShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDE0ICsyNSwxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisj
aW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xhc3Mg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSA6IHB1YmxpYyBIZWFwQ2VsbFR5
cGUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lkIGZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAg
IHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJ
bmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVz
dHJveUZ1bmMgewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxs
KiBjZWxsKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdCo+KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxs
KTsKLSAgICB9Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Uo
Q1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0
b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRz
RGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZSgpCi17Ci19Ci0KLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
OjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVl
TGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3Qs
IERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVuYygp
KHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlIDogcHVibGljIFN1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZp
c2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAvLyBXZSBzcGVj
aWFsaXplIHRoZSBzdHJpbmcgc3Vic3BhY2UgdG8gZ2V0IHRoZSBmYXN0ZXN0IHBvc3NpYmxlIHN3
ZWVwLiBUaGlzIHdvdWxkbid0IGJlCiAgICAgLy8gbmVjZXNzYXJ5IGlmIEpTU3RyaW5nIGRpZG4n
dCBoYXZlIGEgZGVzdHJ1Y3Rvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KLSAgICBzdGF0aWMg
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdT
cGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwOjIyNDUzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U1N0cmluZ1N1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsKS0+SlNTdHJpbmc6On5K
U1N0cmluZygpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitKU1N0
cmluZ1N1YnNwYWNlOjpKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwg
aGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlND
ZWxsKSwgYWxsb2NhdG9yKQoreworfQorCitKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJz
cGFjZSgpCit7Cit9CisKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgaGFuZGxl
LmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKK30K
Kwordm9pZCBKU1N0cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQor
eworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SlNTdHJpbmdTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkpTU3RyaW5nSGVhcENlbGxUeXBlLmgiCiAK
ICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00
MywyMSArNDIsMjEgQEAgc3RydWN0IERlc3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCiAKLUpTU3RyaW5nU3Vic3BhY2U6OkpTU3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU1N0cmluZ0hlYXBDZWxsVHlwZTo6SlNT
dHJpbmdIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0
ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKLUpTU3RyaW5n
U3Vic3BhY2U6On5KU1N0cmluZ1N1YnNwYWNlKCkKK0pTU3RyaW5nSGVhcENlbGxUeXBlOjp+SlNT
dHJpbmdIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQor
dm9pZCBKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVw
S25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmlu
aXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0K
IAotdm9pZCBKU1N0cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQor
dm9pZCBKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkK
IHsKICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAkocmV2aXNp
b24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1
YnNwYWNlLmg6MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTU3RyaW5n
U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTU3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU3RyaW5nU3Vic3Bh
Y2UoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBG
cmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJy
aWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24g
MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2Vs
bFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTU3RyaW5nU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3Bh
Y2UgeworY2xhc3MgSlNTdHJpbmdIZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsK
IHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcg
bmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNTdHJpbmdIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5K
U1N0cmluZ0hlYXBDZWxsVHlwZSgpOwogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZN
JiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1N0cmluZ1N1YnNw
YWNlLmgiCi0KLSNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAotICAgIHsKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsKS0+SlNTdHJpbmc6On5KU1N0cmluZygpOwot
ICAgIH0KLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1KU1N0cmluZ1N1YnNwYWNl
OjpKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2Nh
dG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2Nh
dG9yKQotewotfQotCi1KU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCi17Ci19
Ci0KLXZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVw
S25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1N0
cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQotewotICAgIERlc3Ry
b3lGdW5jKCkodm0sIGNlbGwpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkocmV2
aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdT
dWJzcGFjZS5oCShub25leGlzdGVudCkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlN1YnNwYWNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU1N0cmluZ1N1YnNwYWNl
IDogcHVibGljIFN1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0
cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Iq
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7Ci0g
ICAgCi0gICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3Qq
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwogICAg
ICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDE3ICsxNzEs
MjQgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgZmFz
dE1hbGxvY0FsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yPigpKQogICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtl
X3VuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpQcmltaXRp
dmUpKQogICAgICwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8R2ln
YWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6SlNWYWx1ZSkpCi0gICAgLCBw
cmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJQcmltaXRpdmUgR2lnYWNhZ2UgQXV4aWxp
YXJ5IiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBI
ZWFwQ2VsbDo6QXV4aWxpYXJ5KSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCi0g
ICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBBdXhp
bGlhcnkiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpBdXhpbGlhcnkpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCi0g
ICAgLCBjZWxsU3BhY2UoIkpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05v
dE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxsb2NBbGxvY2F0b3Iu
Z2V0KCkpCi0gICAgLCBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2Ug
SlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9u
LCBIZWFwQ2VsbDo6SlNDZWxsKSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQotICAg
ICwgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlNDZWxsIiwgaGVhcCwgQWxs
b2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgZmFz
dE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIHN0cmluZ1NwYWNlKCJKU1N0cmluZyIsIGhl
YXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBkZXN0cnVjdGlibGVPYmplY3RT
cGFjZSgiSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdl
dCgpKQotICAgICwgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVhZ2VybHkg
U3dlcHQgSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdl
dCgpKQotICAgICwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSgiSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFNwYWNlIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAs
IGF1eGlsaWFyeUhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxsVHlwZT4oQWxs
b2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxp
YXJ5KSkpCisgICAgLCBjZWxsSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxU
eXBlPihBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxs
OjpKU0NlbGwpKSkKKyAgICAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUoc3RkOjptYWtl
X3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlv
biwgSGVhcENlbGw6OkpTQ2VsbCkpKQorICAgICwgc3RyaW5nSGVhcENlbGxUeXBlKHN0ZDo6bWFr
ZV91bmlxdWU8SlNTdHJpbmdIZWFwQ2VsbFR5cGU+KCkpCisgICAgLCBkZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZT4oKSkKKyAgICAsIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0
ZDo6bWFrZV91bmlxdWU8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZT4oKSkK
KyAgICAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8
SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZT4oKSkKKyAgICAsIHByaW1pdGl2ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFw
LCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0KCksIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9y
LmdldCgpKQorICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2ln
YWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBqc1Zh
bHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBjZWxsU3BhY2UoIkpTQ2VsbCIsIGhl
YXAsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisg
ICAgLCBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgSlNDZWxsIiwg
aGVhcCwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdl
dCgpKQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlNDZWxsIiwg
aGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9j
YXRvci5nZXQoKSkKKyAgICAsIHN0cmluZ1NwYWNlKCJKU1N0cmluZyIsIGhlYXAsIHN0cmluZ0hl
YXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIGRlc3Ry
dWN0aWJsZU9iamVjdFNwYWNlKCJKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGRlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkK
KyAgICAsIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJFYWdlcmx5IFN3ZXB0
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgc2VnbWVudGVkVmFy
aWFibGVPYmplY3RTcGFjZSgiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlIiwgaGVhcCwg
c2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxv
Y2F0b3IuZ2V0KCkpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgICwgd2ViQXNzZW1ibHlD
b2RlQmxvY2tTcGFjZSgiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlIiwgaGVhcCwgZmFzdE1h
bGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UoIkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogI2VuZGlmCiAgICAg
LCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKKyNp
bmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5o
IgogI2luY2x1ZGUgIkNvbnRyb2xGbG93UHJvZmlsZXIuaCIKICNpbmNsdWRlICJEYXRlSW5zdGFu
Y2VDYWNoZS5oIgpAQCAtNDEsMTggKzQyLDEzIEBACiAjaW5jbHVkZSAiSW50cmluc2ljLmgiCiAj
aW5jbHVkZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUg
IkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKLSNp
bmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCIKLSNpbmNsdWRlICJK
U1N0cmluZ1N1YnNwYWNlLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiTWlj
cm90YXNrLmgiCiAjaW5jbHVkZSAiTnVtZXJpY1N0cmluZ3MuaCIKICNpbmNsdWRlICJTbWFsbFN0
cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5o
IgotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRh
YmxlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUgIlZNVHJhcHMuaCIK
QEAgLTEwOCw5ICsxMDQsMTMgQEAgY2xhc3MgSGVhcFByb2ZpbGVyOwogY2xhc3MgSWRlbnRpZmll
cjsKIGNsYXNzIEludGVycHJldGVyOwogY2xhc3MgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bjsKK2NsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOwogY2xhc3MgSlNHbG9i
YWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTUnVuTG9vcFRpbWVyOworY2xhc3Mg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTsKK2NsYXNzIEpTU3RyaW5nSGVh
cENlbGxUeXBlOworY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKIGNs
YXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
IGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CkBAIC0yOTAsOSArMjkwLDE3IEBAIHB1YmxpYzoKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IGZhc3RN
YWxsb2NBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcj4gcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4ganNWYWx1ZUdpZ2FjYWdlQWxsb2Nh
dG9yOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBDZWxsVHlwZT4gYXV4aWxpYXJ5SGVhcENl
bGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwQ2VsbFR5cGU+IGNlbGxIZWFwQ2VsbFR5
cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBDZWxsVHlwZT4gZGVzdHJ1Y3RpYmxlQ2VsbEhl
YXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNTdHJpbmdIZWFwQ2VsbFR5cGU+IHN0
cmluZ0hlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGU+IGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZT4gc2VnbWVu
dGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlOwogICAgIAotICAgIFN1YnNwYWNlIHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2U7IC8vIFR5cGVkIGFycmF5cywgc3RyaW5ncywgYml0dmVjdG9ycywgZXRjIGdvIGhlcmUuCi0g
ICAgU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIEJ1dHRlcmZsaWVz
LCBhcnJheXMgb2YgSlNWYWx1ZXMsIGV0YyBnbyBoZXJlLgorICAgIENvbXBsZXRlU3Vic3BhY2Ug
cHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gVHlwZWQgYXJyYXlzLCBzdHJpbmdz
LCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVyZS4KKyAgICBDb21wbGV0ZVN1YnNwYWNlIGpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBCdXR0ZXJmbGllcywgYXJyYXlzIG9mIEpTVmFsdWVz
LCBldGMgZ28gaGVyZS4KIAogICAgIC8vIFdlIG1ha2UgY3Jvc3MtY3V0dGluZyBhc3N1bXB0aW9u
cyBhYm91dCB0eXBlZCBhcnJheXMgYmVpbmcgaW4gdGhlIHByaW1pdGl2ZSBHaWdhY2FnZSBhbmQg
YnV0dGVyZmxpZXMKICAgICAvLyBiZWluZyBpbiB0aGUgSlNWYWx1ZSBnaWdhY2FnZS4gRm9yIHNv
bWUgdHlwZXMsIGl0J3Mgc3VwZXIgb2J2aW91cyB3aGVyZSB0aGV5IHNob3VsZCBnbywgYW5kIHNv
IHdlCkBAIC0zMDAsNyArMzA4LDcgQEAgcHVibGljOgogICAgIC8vIGNvbnN0YW50IHNvbWV3aGVy
ZS4KICAgICAvLyBGSVhNRTogTWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIGlmIGV2ZXJ5b25lIGFi
c3RyYWN0ZWQgdGhpcz8KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1MjQ4Ci0gICAgQUxXQVlTX0lOTElORSBTdWJzcGFjZSYgZ2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZShHaWdhY2FnZTo6S2luZCBraW5kKQorICAgIEFMV0FZU19JTkxJTkUgQ29tcGxldGVT
dWJzcGFjZSYgZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShHaWdhY2FnZTo6S2luZCBraW5kKQogICAg
IHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgR2lnYWNhZ2U6OlByaW1p
dGl2ZToKQEAgLTMxNSwxNSArMzIzLDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgLy8g
V2hlbmV2ZXIgcG9zc2libGUsIHVzZSBzdWJzcGFjZUZvcjxDZWxsVHlwZT4odm0pIHRvIGdldCBv
bmUgb2YgdGhlc2Ugc3Vic3BhY2VzLgotICAgIFN1YnNwYWNlIGNlbGxTcGFjZTsKLSAgICBTdWJz
cGFjZSBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7Ci0gICAgU3Vic3BhY2UgZGVzdHJ1Y3RpYmxl
Q2VsbFNwYWNlOwotICAgIEpTU3RyaW5nU3Vic3BhY2Ugc3RyaW5nU3BhY2U7Ci0gICAgSlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZSBkZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKLSAgICBKU0Rl
c3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNw
YWNlOwotICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSBzZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2UgY2VsbFNwYWNlOworICAgIENv
bXBsZXRlU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlOworICAgIENvbXBsZXRlU3Vi
c3BhY2UgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2Ugc3RyaW5n
U3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSBkZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKKyAg
ICBDb21wbGV0ZVN1YnNwYWNlIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlOwor
ICAgIENvbXBsZXRlU3Vic3BhY2Ugc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZTsKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlIHdl
YkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSB3ZWJBc3NlbWJs
eUNvZGVCbG9ja1NwYWNlOwogI2VuZGlmCiAKICAgICBWTVR5cGUgdm1UeXBlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAg
ICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxl
dGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2
bS53ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA6
MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgiCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIHsKKworc3RydWN0IERlc3Ryb3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKKyAgICB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19maW5hbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPjo6dmFs
dWUsICJPdGhlcndpc2UsIHRoaXMgY29kZSB3b3VsZCBub3QgYmUgY29ycmVjdC4iKTsKKyAgICAg
ICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KGNl
bGwpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2U6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3Ry
aW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikK
KyAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0
cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK3sKK30KKworSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCkK
K3sKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAg
IGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMo
KSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQgKzI0LDEzIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGUuaCIKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC00NywyMSArNDYsMjEgQEAgc3RydWN0IERlc3Ryb3lGdW5jIHsKIAogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwg
aGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlND
ZWxsKSwgYWxsb2NhdG9yKQorSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6SlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5cGUoQWxs
b2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsK
IH0KIAotSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlKCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6On5KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCkKIHsKIH0KIAotdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhh
bmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVM
aXN0KiBmcmVlTGlzdCkKIHsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uo
ZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdI
ZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCi12b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3Zv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKIHsKICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2Vs
bFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHJldmlzaW9uIDIyNDUzNikJKGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmg6MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJTdWJzcGFjZS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciop
OworICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpOworICAgIAor
ICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFw
Q2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHJldmlzaW9uIDIyNDUzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFw
Q2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDE0IEBACiAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkhlYXBD
ZWxsVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK2NsYXNzIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsKIHB1YmxpYzoKLSAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciopOwotICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZSgpOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoKTsKKyAg
ICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCk7CiAgICAgCiAg
ICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQotCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaCIKLSNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJz
cGFjZUlubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVj
dCBEZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBK
U0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
ZmluYWw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz46OnZhbHVlLCAiT3RoZXJ3aXNlLCB0aGlzIGNv
ZGUgd291bGQgbm90IGJlIGNvcnJlY3QuIik7Ci0gICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmluZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKLSAgICB9Ci19OwotCi19IC8v
IGFub255bW91cyBuYW1lc3BhY2UKLQotSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBo
ZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0Nl
bGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6
fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCi17Ci19Ci0KLXZvaWQgSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBo
YW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93
aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsK
LSAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vi
c3BhY2UuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiU3Vi
c3BhY2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IqKTsKLSAgICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKTsK
LSAgICAKLSAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlz
dCopIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1lbW9yeS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICAvLyBXZSBob2xkIG9udG8gYSBsb3Qgb2YgbWVtb3J5
LCBzbyBpdCBtYWtlcyBhIGxvdCBvZiBzZW5zZSB0byBiZSBzd2VwdCBlYWdlcmx5LgogICAgICAg
ICByZXR1cm4gJnZtLmVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5j
cHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVKU0NsaWVudERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQog
ICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQogICAgICwgbV9idWlsdGluTmFtZXMoJnZtKQot
ICAgICwgbV9vdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRwdXQg
Q29uc3RyYWludCIsIHZtLmhlYXAsIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0gICAg
LCBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2Jq
ZWN0IHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uZmFzdE1hbGxvY0FsbG9jYXRv
ci5nZXQoKSkKKyAgICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIg
dy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBtX2ds
b2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcv
IE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uc2VnbWVudGVkVmFyaWFibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBwdWJs
aWM6CiAgICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyYgYnVpbHRpbk5hbWVzKCkgeyByZXR1cm4gbV9i
dWlsdGluTmFtZXM7IH0KICAgICBKU0J1aWx0aW5GdW5jdGlvbnMmIGJ1aWx0aW5GdW5jdGlvbnMo
KSB7IHJldHVybiBtX2J1aWx0aW5GdW5jdGlvbnM7IH0KICAgICAKLSAgICBKU0M6OlN1YnNwYWNl
JiBvdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBtX291dHB1dENvbnN0cmFpbnRTcGFj
ZTsgfQotICAgIEpTQzo6U3Vic3BhY2UmIGdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFj
ZSgpIHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlOyB9CisgICAg
SlNDOjpDb21wbGV0ZVN1YnNwYWNlJiBvdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBt
X291dHB1dENvbnN0cmFpbnRTcGFjZTsgfQorICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSYgZ2xv
YmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlKCkgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RP
dXRwdXRDb25zdHJhaW50U3BhY2U7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZShjb25zdCBGdW5jJiBmdW5j
KQpAQCAtNzYsOCArNzYsOCBAQCBwcml2YXRlOgogICAgIEpTQnVpbHRpbkZ1bmN0aW9ucyBtX2J1
aWx0aW5GdW5jdGlvbnM7CiAgICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyBtX2J1aWx0aW5OYW1lczsK
ICAgICAKLSAgICBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UgbV9vdXRwdXRDb25z
dHJhaW50U3BhY2U7Ci0gICAgSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Ug
bV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2U7CisgICAgSlNDOjpDb21wbGV0ZVN1
YnNwYWNlIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlOworICAgIEpTQzo6Q29tcGxldGVTdWJzcGFj
ZSBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
MjczNSw3ICsyNzM1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRoaXMg
anVzdCBjYWxscyB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2
ZSB0byB3b3JyeSBhYm91dCB0aGlzLgogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKTtcbiIpOwogICAgICAgICAgICAgbXkgJHN1YnNwYWNlRnVuYyA9IElzRE9NR2xv
YmFsT2JqZWN0KCRpbnRlcmZhY2UpID8gImdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTdWJz
cGFjZUZvciIgOiAib3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yIjsKLSAgICAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0YXRpYyBKU0M6OlN1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkgeyByZXR1cm4gJHN1YnNwYWNlRnVuYyh2
bSk7IH1cbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RhdGljIEpTQzo6Q29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pIHsgcmV0dXJuICRzdWJzcGFjZUZ1bmModm0pOyB9XG4iKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326260</attachid>
            <date>2017-11-07 14:21:36 -0800</date>
            <delta_ts>2017-11-07 14:38:35 -0800</delta_ts>
            <desc>jsc is compiling maybe</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>182050</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNDUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDcwLDYg
KzQ3MCw3IEBAIGhlYXAvQ2VsbENvbnRhaW5lci5jcHAKIGhlYXAvQ29kZUJsb2NrU2V0LmNwcAog
aGVhcC9Db2xsZWN0aW9uU2NvcGUuY3BwCiBoZWFwL0NvbGxlY3RvclBoYXNlLmNwcAoraGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmNwcAogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKIGhlYXAvRGVm
ZXJHQy5jcHAKIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcApAQCAtNDg2LDEyICs0ODcsMTUgQEAg
aGVhcC9IYW5kbGVTZXQuY3BwCiBoZWFwL0hhbmRsZVN0YWNrLmNwcAogaGVhcC9IZWFwLmNwcAog
aGVhcC9IZWFwQ2VsbC5jcHAKK2hlYXAvSGVhcENlbGxUeXBlLmNwcAogaGVhcC9IZWFwRmluYWxp
emVyQ2FsbGJhY2suY3BwCiBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAogaGVhcC9IZWFwUHJvZmls
ZXIuY3BwCiBoZWFwL0hlYXBTbmFwc2hvdC5jcHAKIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5j
cHAKIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAoraGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcAoraGVhcC9Jc29TdWJzcGFjZS5jcHAKIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQu
Y3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNw
cApAQCAtNzcyLDcgKzc3Niw3IEBAIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bi5jcHAKIHJ1bnRpbWUvSlNEYXRhVmlldy5jcHAKIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlw
ZS5jcHAKIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHAKLXJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZS5jcHAKK3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwCiBydW50aW1lL0pTRml4ZWRBcnJheS5jcHAKIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHAKIHJ1
bnRpbWUvSlNHZW5lcmF0b3JGdW5jdGlvbi5jcHAKQEAgLTgwNywxNCArODExLDE0IEBAIHJ1bnRp
bWUvSlNTY29wZS5jcHAKIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcAogcnVudGltZS9KU1Nj
cmlwdEZldGNoUGFyYW1ldGVycy5jcHAKIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5jcHAKLXJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAorcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAogcnVudGltZS9K
U1NldC5jcHAKIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKIHJ1bnRpbWUvSlNTb3VyY2VDb2Rl
LmNwcAogcnVudGltZS9KU1N0cmluZy5jcHAKIHJ1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAK
IHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCi1ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3Bw
CitydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAogcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAogcnVudGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCiBydW50aW1lL0pT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKQEAgLTk3Miw3ICs5NzYsNyBAQCB3YXNtL2pzL0pT
VG9XYXNtLmNwcAogd2FzbS9qcy9KU1RvV2FzbS5oCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3Bw
CiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCi13YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAKK3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hl
YXBDZWxsVHlwZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAKIHdh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TGlu
a0Vycm9yLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAKIAkJMEY0
QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8q
IEIzT3JpZ2luRHVtcC5oICovOyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWly
Rml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMu
aCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKLQkJMEY0RjgyODgxRTJGRkRFMDAwNzUx
ODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRD
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0
QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4
NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEY4MjhDMUUzMUI5NzYw
MDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyOEExRTMxQjk3MTAw
NzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CiAJ
CTBGNTBBRjNDMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTBBRjNCMTkz
RThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLzsgfTsKIAkJMEY1
NTEzQTYxRDVBNjgyQzAwQzMyQkQ4IC8qIEZyZWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJl
ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNDAwLDggKzQwMCw4IEBACiAJCTBGN0RGMTM1MUUyOTcwREMwMDk1OTUxQiAvKiBNYXJrZWRT
cGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGN0RGMTMwMUUyOTcwRDUwMDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdERjEzNzFF
Mjk3MEUxMDA5NTk1MUIgLyogU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0RG
MTM4MUUyOTcwRTQwMDk1OTUxQiAvKiBTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTMzMUUyOTcwRDUwMDk1OTUxQiAv
KiBTdWJzcGFjZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVP
YmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYxM0UxRTJBRkM0QjAw
OTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hl
YXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3REYxNDYx
RTJCRUY2QTAwOTU5NTFCIC8qIE1hcmtlZEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUx
QiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8qIERGR1N0
b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5oICovOyB9OwogCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUg
LyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU0MCw2ICs1NDAsMTEgQEAK
IAkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFF
MDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZH
V29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyB9OwogCQkwRkRC
MkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFC
IC8qIENvbmN1cnJlbnRKU0xvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkRDRTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZh
aWx1cmVNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMjIx
RkFFODU4QzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBD
ZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEyODFGQUZBODU5
MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkwMSAvKiBJc29T
dWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMzIxRkIxMURBNDAwNkYz
OTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmggKi87IH07CiAJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5oICovOyB9OwogCQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdEMTFEOUM2MDg2
MDAxQjk4MjUgLyogQjNLaW5kLmggKi87IH07CkBAIC0xMDk4LDcgKzExMDMsNyBAQAogCQk3OURB
RTI3QTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZB
QSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5REZDQkRCMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9w
ZXJ0eUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OURGQ0JEQTFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RUUwQzAwMUI0
QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyog
VmFyaWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
a0hlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OUY4RkMxRjFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5RjhGQzFEMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFz
ZS5oICovOyB9OwogCQk3OUZDOEEwODFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0
cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlGQzhBMDcxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkM1NDdEMzFC
Njk1OUExMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3Jt
YXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjI3MCw4ICsyMjc1LDggQEAKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2lu
RHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1
bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNv
dW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0
b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyOEExRTMxQjk3MTAwNzUxODRD
IC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAv
KiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJl
Q2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDEzLDEwICsy
NDE4LDEwIEBACiAJCTBGN0RGMTMxMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdWJzcGFjZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWJzcGFjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdERjEzMzFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vic3Bh
Y2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YnNwYWNlSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjdERjEzOTFFMjk3MTBFMDA5
NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8q
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ1N1YnNw
YWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0UxRTJBRkM0QjAw
OTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTdHJpbmdTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3REYxM0Qx
RTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSGVhcENlbGxUeXBlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3Ry
aW5nSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3Ry
aW5nSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTQ1
MUUyQkVGNjgwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZEFsbG9jYXRvcklubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3Jl
QmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
Z1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjY2LDYgKzI2NzEsMTUg
QEAKIAkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRm
Zy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U2
MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdXb3JrbGlzdC5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25j
dXJyZW50SlNMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJl
bnRKU0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMUIxRkFFNjFG
NDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0Ux
MUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFw
Q2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjAxRkFFODU4
NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwQ2Vs
bFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyNzFGQUZBODU5
MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21w
bGV0ZVN1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjgx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29t
cGxldGVTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyQjFG
QUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXNvU3Vic3Bh
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkMxRkFGQjRERTAwNkYz
OTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElzb1N1YnNwYWNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkYxRkIxMUQ5RDAwNkYzOTAx
IC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXNv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIzMTY2
NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9
IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENlbGxDb250YWluZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU4MCw4ICszNTk0LDggQEAKIAkJNzlERkNCREEx
RDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGFzT3duUHJvcGVydHlDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9u
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUVu
dmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkUxQjRB
RkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3OUVG
RDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5RUZENDgxMUVCQzA0NUMwMEYzREZFQSAvKiBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3Bw
OyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsgcGF0aCA9IGpz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaElu
c2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1
c2hJbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RjhG
QzFEMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25Q
aGFzZS5oOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdS
ZWdpc3RlcmVkU3RydWN0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDg3LDYgKzU1MDEsNyBAQAogCQkJ
CTBGRUMzQzUwMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAq
LywKIAkJCQkwRkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5oICovLAogCQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUu
aCAqLywKKwkJCQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVN
b2RlLmggKi8sCiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJp
YnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JB
dHRyaWJ1dGVzLmggKi8sCiAJCQkJMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxDb250
YWluZXIuY3BwICovLApAQCAtNTUwMSw2ICs1NTE2LDggQEAKIAkJCQkwRkE3NjIwMTFEQjkyNDIz
MDBCN0EyRkQgLyogQ29sbGVjdGlvblNjb3BlLmggKi8sCiAJCQkJMEZEMEU1RTUxRTQzRDM0NzAw
MDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmNwcCAqLywKIAkJCQkwRkQwRTVFNjFFNDNEMzQ3MDAw
NkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAqLywKKwkJCQkwRkRDRTEyNzFGQUZBODU5MDA2RjM5
MDEgLyogQ29tcGxldGVTdWJzcGFjZS5jcHAgKi8sCisJCQkJMEZEQ0UxMjgxRkFGQTg1OTAwNkYz
OTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVD
MUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgz
QjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1
OTUxQiAvKiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLApAQCAtNTU1MSw2ICs1NTY4LDggQEAK
IAkJCQlEQzNEMkIwQjFEMzQzNzZFMDBCQTkxOEMgLyogSGVhcENlbGwuY3BwICovLAogCQkJCURD
M0QyQjA5MUQzNDMxNjEwMEJBOTE4QyAvKiBIZWFwQ2VsbC5oICovLAogCQkJCTBGMDcwQTQ0MUQ1
NDNBODkwMDZFNzIzMiAvKiBIZWFwQ2VsbElubGluZXMuaCAqLywKKwkJCQkwRkRDRTEyMDFGQUU4
NTg3MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRkRDRTExRjFGQUU4NTg3
MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggKi8sCiAJCQkJMEYwQ0FFRkQxRUM0REE4NTAwOTcw
RDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5jcHAgKi8sCiAJCQkJMEYwQ0FFRkUxRUM0REE4
NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovLAogCQkJCTBGMzJCRDBFMUJC
MzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgKi8sCkBAIC01NTY3LDYgKzU1ODYs
MTAgQEAKIAkJCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJ
CQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCAqLywK
IAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8s
CisJCQkJMEZEQ0UxMkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IuY3BwICovLAorCQkJCTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmggKi8sCisJCQkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1
YnNwYWNlLmNwcCAqLywKKwkJCQkwRkRDRTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3Bh
Y2UuaCAqLywKIAkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuY3BwICovLAogCQkJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGlu
ZVNldC5oICovLAogCQkJCTBGMDcwQTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRp
b24uY3BwICovLApAQCAtNjUwNyw4ICs2NTMwLDggQEAKIAkJCQk5Nzg4RkMyMjE0NzFBRDBDMDA2
OENFMkQgLyogSlNEYXRlTWF0aC5jcHAgKi8sCiAJCQkJOTc4OEZDMjMxNDcxQUQwQzAwNjhDRTJE
IC8qIEpTRGF0ZU1hdGguaCAqLywKIAkJCQlDMkE3RjY4NzE2MDQzMkQ0MDBGNzZCOTggLyogSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCAqLywKLQkJCQkwRjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyog
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8sCi0JCQkJMEY3REYxM0ExRTI5NzEw
RTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLywKKwkJCQkwRjdE
RjEzOTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwICovLAorCQkJCTBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oICovLAogCQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBK
U0V4cG9ydE1hY3Jvcy5oICovLAogCQkJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0Zp
eGVkQXJyYXkuY3BwICovLAogCQkJCTc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVk
QXJyYXkuaCAqLywKQEAgLTY1OTMsOCArNjYxNiw4IEBACiAJCQkJRTM4RDA2MEIxRjhFODE0MTAw
NjQ5Q0YyIC8qIEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmggKi8sCiAJCQkJMEY5MTlEMEUxNTdG
MzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovLAogCQkJCTBG
OTE5RDBGMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi8s
Ci0JCQkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RTdWJzcGFjZS5jcHAgKi8sCi0JCQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovLAorCQkJCTBGNEY4Mjg1MUUyRkZEREIw
MDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcCAqLywK
KwkJCQkwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oICovLAogCQkJCUE3Mjk5RDlCMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1Nl
dC5jcHAgKi8sCiAJCQkJQTcyOTlEOUMxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0LmggKi8sCiAJ
CQkJQTc5MERENjkxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuY3BwICovLApAQCAt
NjYwOSw4ICs2NjMyLDggQEAKIAkJCQk3MEVDMEVCRDFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJp
bmdJdGVyYXRvci5oICovLAogCQkJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmlu
Z0pvaW5lci5jcHAgKi8sCiAJCQkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmggKi8sCi0JCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vi
c3BhY2UuY3BwICovLAotCQkJCTBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1
YnNwYWNlLmggKi8sCisJCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVh
cENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8q
IEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLywKIAkJCQk3MEVDQTYwMDFBRkRCRUEyMDA0NDk3Mzkg
LyogSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCAqLywKQEAgLTc3ODgsOCArNzgxMSw4IEBACiAJ
CQkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1
MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8s
CiAJCQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCAqLywKLQkJCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlLmNwcCAqLywKLQkJCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi8sCisJCQkJNzlFRkQ0ODExRUJDMDQ1QzAw
RjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwICovLAorCQkJ
CTc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlLmggKi8sCiAJCQkJQUQyRkNCQTYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuY3BwICovLAogCQkJCUFEMkZDQkE3MURCNThEQTQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggKi8sCiAJCQkJNzk2RkI0MzkxREZGOEMzRjAwMzlD
OTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi8sCkBAIC04MDAwLDYgKzgwMjMsNyBAQAog
CQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29k
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQ0UxMzIxRkIxMURBNDAwNkYzOTAxIC8qIElzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMx
RUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0E4QUYzNTE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRkM5OUQ1MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODA1MSw2ICs4MDc1LDcgQEAKIAkJCQkwRkVD
ODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZEQ0UxMkQxRkFGQjRFNTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjND
b21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzkxOUI3ODAxRTAzNTU5QzAwNUJFRUQ4
IC8qIEIzQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTkzLDYgKzg2MTgsNyBAQAogCQkJ
CUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJNzBCNzkxOTUxQzAyNEEyODAwMjQ4MUUyIC8qIEdlbmVyYXRvckZ1bmN0
aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk3MUMwMjRBMjkwMDI0
ODFFMiAvKiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZEQ0UxMkExRkFGQTg1RjAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcwQjc5MTk5MUMwMjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTlEMUMwMjRBNTYwMDI0ODFFMiAvKiBHZW5lcmF0
b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04Nzc2LDcgKzg4
MDIsNyBAQAogCQkJCTk5NkI3MzFDMUJEQTA4REQwMDMzMUI4NCAvKiBKU0RhdGFWaWV3UHJvdG90
eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8q
IEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5
OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3REYxM0Mx
RTI5NzExMzAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTYxQUREQjdBRDAw
NTVERTJDIC8qIEpTRG9sbGFyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4MUFEREI3
QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAt
ODgzMCw2ICs4ODU2LDcgQEAKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1
bGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDk3MjI3NTJEQzU0NDU5QjkxMjVC
NTM5IC8qIEpTTW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFF
RjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRENFMTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJl
Y29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMUQxQjkwMTNDMzAwMzQ2QjUyIC8qIEpT
TmF0aXZlU3RkRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODU0LDcgKzg4ODEsNyBA
QAogCQkJCUUzMjAxQzFEMUY4RTgyMzYwMDc2QTAzMiAvKiBKU1NjcmlwdEZldGNoUGFyYW1ldGVy
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2Ny
aXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0
RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
NEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzI5OUQ5RTE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCREZDQjJCQkU5MEY0MTM0OUUxQjBCRUQgLyogSlNTb3VyY2VDb2RlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg4NjYsNyArODg5Myw3IEBACiAJCQkJQkMxOEM0MjgwRTE2RjVDRDAwQjM0NDYw
IC8qIEpTU3RyaW5nUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyOTBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNTdHJpbmdSZWZDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyOEQ0QTgxNzdC
NzFDODAwMDdGQTNDIC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEY3REYxM0YxRTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3lt
Ym9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA2MUFGREJFQTIwMDQ0
OTczOSAvKiBKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMz
NkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODk0
LDcgKzg5MjEsNyBAQAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFz
c2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyog
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzlFRkQ0ODQxRUJD
MDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQw
MEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTIyNiw2ICs5MjUzLDcgQEAKIAkJCQkwRkZC
NkMzOTFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyRDRERUMxOTgzMkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5cGVTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZf
ZGVjb2RlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU2
LDcgKzk1Niw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5s
aW5lKSB7Ci0gICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CisgICAg
ICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpBc3NlcnQpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2shCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFs
bG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFs
bG9jYXRpb25Qcm9maQogICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0
OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpT
RmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3IoYWxsb2NhdGlv
blNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uY2VsbFNwYWNlLmFs
bG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6QXNzZXJ0KTsKIAogICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIGV4dHJhIGlubGluZSBjYXBh
Y2l0eSBhdmFpbGFibGUgaW4gdGhlIHNpemUgY2xhc3MuCiAgICAgaWYgKGFsbG9jYXRvcikgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzMwLDcgKzQzMzAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9j
YXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFz
c2VydCk7CiAKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciks
IGFsbG9jYXRvckdQUik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwg
YWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1
c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyNDUz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlUmF3T2JqZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFn
ZUdQUik7CiAgICAgCiAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdG9yRm9yKHNpemUpKSB7CisgICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRv
ckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpKSB7CiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9y
LCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgIApAQCAt
MTI0LDcgKzEyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUK
ICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRv
ckZvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIg
PSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsK
ICAgICBpZiAoYWxsb2NhdG9yUHRyKSB7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3JQdHIpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CkBAIC00MjQ4LDcg
KzQyNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9kCiAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAogICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1hcmtlZEFsbG9jYXRv
ciA9IHN1YnNwYWNlRm9yPEpTU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvcihzaXpl
b2YoSlNSb3BlU3RyaW5nKSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBtYXJrZWRBbGxvY2F0b3Ig
PSBzdWJzcGFjZUZvcjxKU1N0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQobWFya2VkQWxsb2NhdG9yKTsKICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobWFya2VkQWxsb2NhdG9yKSwgYWxsb2NhdG9yR1BSKTsKICAgICBlbWl0QWxs
b2NhdGVKU0NlbGwocmVzdWx0R1BSLCBtYXJrZWRBbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgVHJ1
c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkBAIC04NDMwLDcg
Kzg0MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAg
CiAgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNW
YWx1ZSk7CiAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpz
VmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihzaXplKTsKKyAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpBc3NlcnQpOwogCiAgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigp
LT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTg0NzUsNyArODQ3
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiAgICAgQVNTRVJU
KG5ld1NpemUgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpKTsKICAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZv
cihuZXdTaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCkt
PmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3
U2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogCiAgICAgaWYgKCFhbGxvY2F0
b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFk
ZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI0LDEyICsxMjQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
CiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAogICAgIG1h
Y3JvKEFycmF5U3RvcmFnZV92ZWN0b3IsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCksIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBcCisgICAgbWFjcm8oQ29tcGxldGVTdWJzcGFj
ZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgQ29tcGxldGVTdWJzcGFjZTo6b2Zmc2V0T2ZBbGxvY2F0
b3JGb3JTaXplU3RlcCgpLCBzaXplb2YoTWFya2VkQWxsb2NhdG9yKikpIFwKICAgICBtYWNybyhE
aXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCks
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU0xleGljYWxFbnZpcm9ubWVu
dF92YXJpYWJsZXMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpLCBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250ZW50cywgMCwgc2l6ZW9mKFdyaXRlQmFy
cmllcjxKU1N0cmluZz4pKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZpYmVycywgSlNSb3Bl
U3RyaW5nOjpvZmZzZXRPZkZpYmVycygpLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikp
IFwKICAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3ZlcmZsb3dTdG9yYWdlLCBTY29wZWRBcmd1
bWVudHM6Om92ZXJmbG93U3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBc
Ci0gICAgbWFjcm8oU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIFN1YnNwYWNlOjpvZmZz
ZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihNYXJrZWRBbGxvY2F0b3IqKSkgXAog
ICAgIG1hY3JvKFdyaXRlQmFycmllckJ1ZmZlcl9idWZmZXJDb250ZW50cywgMCwgc2l6ZW9mKEpT
Q2VsbCopKSBcCiAgICAgbWFjcm8oY2hhcmFjdGVyczgsIDAsIHNpemVvZihMQ2hhcikpIFwKICAg
ICBtYWNybyhjaGFyYWN0ZXJzMTYsIDAsIHNpemVvZihVQ2hhcikpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyNDUz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTY2OSw3ICs1NjY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNs
b3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
c3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yKHNpemVvZihKU1Jv
cGVTdHJpbmcpKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFj
ZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihK
U1JvcGVTdHJpbmcpLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBhbGxvY2F0b3IpOwogICAgICAgICAKICAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKQEAgLTk0ODksNyArOTQ4OSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgfHwgaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpIHsKICAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2Jq
ZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAg
ICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogY2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpT
RmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOworICAgICAg
ICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogY2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpT
RmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIGNlbGxBbGxvY2F0b3IpOwogCiAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpOwpAQCAtMTA0ODUsNyArMTA0ODUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93
UGF0aCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVzICogc2l6
ZW9mKEpTVmFsdWUpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtKCku
anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZUluQnl0ZXMsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzbG93UGF0
aCk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
CiAgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKQEAgLTExNjI5LDcgKzEx
NjI5LDcgQEAgcHJpdmF0ZToKICAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoCiAgICAgICAgIHNp
emVfdCBzaXplLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJh
c2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvcihzaXplKTsK
KyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5
cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6QXNzZXJ0KTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0
SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CiAgICAg
fQogICAgIApAQCAtMTE2NDYsMTAgKzExNjQ2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICAvLyBUcnkgdG8gZG8gc29tZSBjb25zdGFudC1mb2xkaW5nIGhlcmUuCiAgICAgICAgIGlm
IChzdWJzcGFjZS0+aGFzSW50UHRyKCkgJiYgc2l6ZS0+aGFzSW50UHRyKCkpIHsKLSAgICAgICAg
ICAgIFN1YnNwYWNlKiBhY3R1YWxTdWJzcGFjZSA9IGJpdHdpc2VfY2FzdDxTdWJzcGFjZSo+KHN1
YnNwYWNlLT5hc0ludFB0cigpKTsKKyAgICAgICAgICAgIENvbXBsZXRlU3Vic3BhY2UqIGFjdHVh
bFN1YnNwYWNlID0gYml0d2lzZV9jYXN0PENvbXBsZXRlU3Vic3BhY2UqPihzdWJzcGFjZS0+YXNJ
bnRQdHIoKSk7CiAgICAgICAgICAgICBzaXplX3QgYWN0dWFsU2l6ZSA9IHNpemUtPmFzSW50UHRy
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWN0dWFsQWxs
b2NhdG9yID0gYWN0dWFsU3Vic3BhY2UtPmFsbG9jYXRvckZvcihhY3R1YWxTaXplKTsKKyAgICAg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWN0dWFsQWxsb2NhdG9yID0gYWN0dWFsU3Vic3BhY2Ut
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWN0dWFsU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpBc3NlcnQpOwogICAgICAgICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKICAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tz
QmVmb3JlKGNvbnRpbnVhdGlvbik7CkBAIC0xMTY3OSwxMSArMTE2NzksMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKAogICAgICAgICAgICAgbV9v
dXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuU3Vic3BhY2VfYWxsb2NhdG9y
Rm9yU2l6ZVN0ZXAsCisgICAgICAgICAgICAgICAgbV9oZWFwcy5Db21wbGV0ZVN1YnNwYWNlX2Fs
bG9jYXRvckZvclNpemVTdGVwLAogICAgICAgICAgICAgICAgIHN1YnNwYWNlLCBtX291dC5zdWIo
c2l6ZUNsYXNzSW5kZXgsIG1fb3V0LmludFB0ck9uZSkpKTsKICAgICB9CiAgICAgCi0gICAgTFZh
bHVlIGFsbG9jYXRvckZvclNpemUoU3Vic3BhY2UmIHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJh
c2ljQmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoQ29tcGxldGVT
dWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JTaXplKG1fb3V0LmNvbnN0SW50UHRyKCZz
dWJzcGFjZSksIHNpemUsIHNsb3dQYXRoKTsKICAgICB9CkBAIC0xMTcwOSw3ICsxMTcwOSw3IEBA
IHByaXZhdGU6CiAgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3RydWN0dXJlKQogICAgIHsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5h
bE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmdldCgpLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0Zp
bmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2
bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IElmIHRoZSBh
bGxvY2F0b3IgaXMgbnVsbCwgd2UgY291bGQgc2ltcGx5IGVtaXQgYSBub3JtYWwgQyBjYWxsIHRv
IHRoZSBhbGxvY2F0b3IKICAgICAgICAgLy8gaW5zdGVhZCBvZiBwdXR0aW5nIGl0IG9uIHRoZSBz
bG93IHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNp
bmNsdWRlICJTdWJzcGFjZS5oIgorCiBuYW1lc3BhY2UgSlNDIHsgCiAKIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3I6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQpAQCAtMzYsNiArMzksNDEgQEAgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6fkFsaWduZWRNZW1vcnlBbAogewogfQogCit2b2lkIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyQWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFhbGxvY2F0b3ItPm5leHRBbGxvY2F0b3JJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0QWxsb2Nh
dG9yKSB7CisgICAgICAgIGZvciAoU3Vic3BhY2UqIHN1YnNwYWNlID0gbV9maXJzdFN1YnNwYWNl
OyBzdWJzcGFjZTsgc3Vic3BhY2UgPSBzdWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKCkpCisgICAgICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRlRmlyc3RBbGxv
Y2F0b3IoYWxsb2NhdG9yKTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xh
c3RBbGxvY2F0b3IpOworICAgICAgICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOworICAg
ICAgICBtX2xhc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX2xhc3RBbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoYWxsb2NhdG9yKTsKKyAgICBtX2xhc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7Cit9
CisKKy8vIEZJWE1FOiBXZSB1c2UgdGhpcyBpZGlvbSBhIGxvdC4gV2Ugc2hvdWxkIGNvbWUgdXAg
d2l0aCBhIGNsZXZlciB0ZW1wbGF0ZSBmb3IgdGhpcyBraW5kIG9mCisvLyBzaW5nbHktbGlua2Vk
IGxpc3QsIHdoZXJlIGVhY2ggZWxlbWVudCBtYXkgYmUgb24gbXVsdGlwbGUgbGlzdHMuCit2b2lk
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNw
YWNlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFzdWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5BbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgIAorICAgIGlmICghbV9maXJzdFN1YnNwYWNlKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xhc3RTdWJzcGFjZSk7CisgICAgICAgIG1fZmly
c3RTdWJzcGFjZSA9IHN1YnNwYWNlOworICAgICAgICBtX2xhc3RTdWJzcGFjZSA9IHN1YnNwYWNl
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9sYXN0U3Vic3BhY2UtPnNldE5leHRT
dWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihzdWJzcGFjZSk7CisgICAgbV9sYXN0U3Vi
c3BhY2UgPSBzdWJzcGFjZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CitjbGFzcyBTdWJzcGFjZTsK
KwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC00MCw2ICs0MywxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZyZWVBbGlnbmVk
TWVtb3J5KHZvaWQqKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHJlZ2lzdGVyQWxsb2NhdG9yKE1hcmtlZEFsbG9j
YXRvciopOworICAgIE1hcmtlZEFsbG9jYXRvciogZmlyc3RBbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2ZpcnN0QWxsb2NhdG9yOyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyU3Vic3BhY2UoU3Vi
c3BhY2UqKTsKKworcHJpdmF0ZToKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fZmlyc3RBbGxvY2F0
b3I7CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX2xhc3RBbGxvY2F0b3I7CisgICAgU3Vic3BhY2Uq
IG1fZmlyc3RTdWJzcGFjZTsKKyAgICBTdWJzcGFjZSogbV9sYXN0U3Vic3BhY2U7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9j
YXRpb25GYWlsdXJlTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSB7CisgICAgQXNzZXJ0LAorICAgIFJldHVybk51bGwKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21w
bGV0ZVN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29w
ZS5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Q29tcGxldGVTdWJzcGFjZTo6Q29tcGxldGVTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhl
YXAsIEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBh
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKK3sKKyAg
ICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CisgICAg
Zm9yIChzaXplX3QgaSA9IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKKyAgICAg
ICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpXSA9IG51bGxwdHI7Cit9CisKK0NvbXBsZXRlU3Vi
c3BhY2U6On5Db21wbGV0ZVN1YnNwYWNlKCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBDb21w
bGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChz
aXplLCBmYWlsdXJlTW9kZSk7Cit9CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRl
KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmly
dHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogQ29t
cGxldGVTdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpCit7CisgICAgdm9pZCAqcmVzdWx0OworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsKSkKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZl
cnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGFs
bG9jYXRlU2xvdyhzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CisgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKKyAgICBpZiAoIXNpemVDbGFz
cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgLy8gVGhpcyBpcyB3cml0dGVu
IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVhZHMgdG8gZW5kIHVw
IGhlcmUgaWYgdGhleSB3YW50CisgICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgc29t
ZSBhbGxvY2F0b3IgdGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0IGEgcG9zc2li
bHktCisgICAgLy8ganVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxs
IGlmIHdlJ3JlIGluIHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAorICAgIC8vIGFs
bG9jYXRvciBhcyAicGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQg
Y291bGQgbGVhZCB0byBwZXJmb3JtYW5jZQorICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29y
aXRobSBoZXJlIGlzIHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUg
bG9jaywgdG8KKyAgICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBj
cmVhdGlvbnMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcworICAgIC8v
IHRoYXQgYW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhp
cyBhbGxvY2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAorICAgIC8vIGVub3VnaDogaXQgd2ls
bCBoYXZlIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2Nr
KCkpOworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9y
U2l6ZVN0ZXBbaW5kZXhdKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yOworCisgICAgaWYgKGZh
bHNlKQorICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBt
X25hbWUsICIsICIsIG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7CisgICAg
c3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFsbG9jYXRvcj4gdW5pcXVlQWxsb2NhdG9yID0KKyAgICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxNYXJrZWRBbGxvY2F0b3I+KG1fc3BhY2UuaGVhcCgpLCBzaXpl
Q2xhc3MpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdW5pcXVlQWxsb2NhdG9y
LmdldCgpOworICAgIG1fYWxsb2NhdG9ycy5hcHBlbmQoV1RGTW92ZSh1bmlxdWVBbGxvY2F0b3Ip
KTsKKyAgICBhbGxvY2F0b3ItPnNldFN1YnNwYWNlKHRoaXMpOworICAgIG1fc3BhY2UuYWRkTWFy
a2VkQWxsb2NhdG9yKGxvY2tlciwgYWxsb2NhdG9yKTsKKyAgICBpbmRleCA9IE1hcmtlZFNwYWNl
OjpzaXplQ2xhc3NUb0luZGV4KHNpemVDbGFzcyk7CisgICAgZm9yICg7OykgeworICAgICAgICBp
ZiAoTWFya2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFz
cykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBb
aW5kZXhdID0gYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgaWYgKCFpbmRleC0tKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvcklu
U3Vic3BhY2UobV9maXJzdEFsbG9jYXRvcik7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LT5yZWdpc3RlckFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICByZXR1cm4gYWxsb2Nh
dG9yOworfQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNp
emUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3co
c2l6ZSwgZGVmZXJyYWxDb250ZXh0KTsKKyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpBc3NlcnQpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2Nh
dGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQor
eworICAgIHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7CisgICAgCisg
ICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+
YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51
bGwpOworICAgIAorICAgIGlmIChzaXplIDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9m
ZigpCisgICAgICAgICYmIHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CisgICAg
ICAgIGRhdGFMb2coIkZBVEFMOiBhdHRhbXB0aW5nIHRvIGFsbG9jYXRlIHNtYWxsIG9iamVjdCB1
c2luZyBsYXJnZSBhbGxvY2F0aW9uLlxuIik7CisgICAgICAgIGRhdGFMb2coIlJlcXVlc3RlZCBh
bGxvY2F0aW9uIHNpemU6ICIsIHNpemUsICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX3NwYWNlLmhlYXAoKS0+Y29sbGVjdElm
TmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOworICAgIAorICAgIHNpemUgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkU3BhY2U6OnNpemVTdGVwPihzaXplKTsKKyAgICBM
YXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgq
bV9zcGFjZS5tX2hlYXAsIHNpemUsIHRoaXMpOworICAgIGlmICghYWxsb2NhdGlvbikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgbV9zcGFjZS5tX2xhcmdlQWxsb2NhdGlvbnMu
YXBwZW5kKGFsbG9jYXRpb24pOworICAgIG1fc3BhY2UubV9oZWFwLT5kaWRBbGxvY2F0ZShzaXpl
KTsKKyAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKKyAgICAKKyAgICBtX2xhcmdlQWxs
b2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOworICAgICAgICAKKyAgICByZXR1cm4gYWxsb2Nh
dGlvbi0+Y2VsbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNl
IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb21wbGV0ZVN1YnNwYWNlKENTdHJp
bmcgbmFtZSwgSGVhcCYsIEhlYXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29tcGxldGVTdWJzcGFjZSgpOworCisgICAgLy8gSW4g
c29tZSBjb2RlIHBhdGhzLCB3ZSBuZWVkIGl0IHRvIGJlIGEgY29tcGlsZSBlcnJvciB0byBjYWxs
IHRoZSB2aXJ0dWFsIHZlcnNpb24gb2Ygb25lIG9mCisgICAgLy8gdGhlc2UgZnVuY3Rpb25zLiBU
aGF0J3Mgd2h5IHdlIGRvIGZpbmFsIG1ldGhvZHMgdGhlIG9sZCBzY2hvb2wgd2F5LgorICAgIAor
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlKSBvdmVycmlkZTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvck5vblZp
cnR1YWwoc2l6ZV90LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIAorICAgIHZvaWQqIGFs
bG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUp
IG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVh
bChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAg
ICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29tcGxldGVTdWJzcGFjZSwgbV9hbGxvY2F0b3JGb3JT
aXplU3RlcCk7IH0KKyAgICAKKyAgICBNYXJrZWRBbGxvY2F0b3IqKiBhbGxvY2F0b3JGb3JTaXpl
U3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisKK3ByaXZhdGU6
CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JTbG93KHNpemVfdCk7CisgICAgCisg
ICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2VybmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlv
bnMgYW5kIGFsbG9jYXRvciBjcmVhdGlvbi4KKyAgICB2b2lkKiBhbGxvY2F0ZVNsb3coc2l6ZV90
LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgdm9pZCog
dHJ5QWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICAKKyAgICBz
dGQ6OmFycmF5PE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4g
bV9hbGxvY2F0b3JGb3JTaXplU3RlcDsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtl
ZEFsbG9jYXRvcj4+IG1fYWxsb2NhdG9yczsKK307CisKK0FMV0FZU19JTkxJTkUgTWFya2VkQWxs
b2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBz
aXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgaWYgKHNpemUg
PD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciog
cmVzdWx0ID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9J
bmRleChzaXplKV07CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OlJldHVybk51bGwgfHwgcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNsb3coc2l6ZSk7CisgICAgfQorICAgIHJldHVy
biBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCisKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCisvLyBXcml0aW5nIGl0IHRoaXMgd2F5
IGVuc3VyZXMgdGhhdCB3aGVuIHlvdSBwYXNzIHRoaXMgYXMgYSBmdW5jdG9yLCB0aGUgY2FsbGVl
IGlzIHNwZWNpYWxpemVkIGZvcgorLy8gdGhpcyBjYWxsYmFjay4gSWYgeW91IHdyb3RlIHRoaXMg
YXMgYSBub3JtYWwgZnVuY3Rpb24gdGhlbiB0aGUgY2FsbGVlIHdvdWxkIGJlIHNwZWNpYWxpemVk
IGZvcgorLy8gdGhlIGZ1bmN0aW9uJ3MgdHlwZSBhbmQgaXQgd291bGQgaGF2ZSBpbmRpcmVjdCBj
YWxscyB0byB0aGF0IGZ1bmN0aW9uLiBBbmQgdW5saWtlIGEgbGFtYmRhLCBpdCdzCisvLyBwb3Nz
aWJsZSB0byBtYXJrIHRoaXMgQUxXQVlTX0lOTElORS4KK3N0cnVjdCBEZXN0cm95RnVuYyB7Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoY2VsbC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAg
IEFTU0VSVChjZWxsLT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpOwor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAg
ICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsK
KyAgICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJ
bmZvLT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0cm95KGNlbGwpOworICAgIH0K
K307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitIZWFwQ2VsbFR5cGU6OkhlYXBDZWxs
VHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBtX2F0dHJpYnV0ZXMo
YXR0cmlidXRlcykKK3sKK30KKworSGVhcENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKCkKK3sKK30K
Kwordm9pZCBIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJs
b2NrLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5n
SGVhcENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBIZWFwQ2Vs
bFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMo
KSh2bSwgY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEhlYXBDZWxsVHlwZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGVh
cENlbGxUeXBlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRlcyk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SGVhcENlbGxUeXBlKCk7CisKKyAgICBjb25zdCBB
bGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzOyB9CisKKyAgICAvLyBUaGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3Bl
Y2lhbGl6ZSB0aGUgc3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKKyAgICAv
LyBiZSBjYWxsZWQgZm9yIG5vLWRlc3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJr
ZWRCbG9jazo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UuCisgICAgdmlydHVhbCB2b2lkIGZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopOworCisgICAgLy8gVGhl
c2UgZ2V0IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopOworCitwcml2YXRlOgorICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9h
dHRyaWJ1dGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Oklzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKQoreworfQorCitJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+SXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQqIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OnRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICAvLyBTaW5jZSB0aGlzIGlzIGRlc2lnbmVkIHNwZWNpYWxseSBmb3IgSXNvU3Vi
c3BhY2UsIHdlIGtub3cgdGhhdCB3ZSB3aWxsIG9ubHkgYmUgYXNrZWQgdG8KKyAgICAvLyBhbGxv
Y2F0ZSBNYXJrZWRCbG9ja3MuCisgICAgUkVMRUFTRV9BU1NFUlQoYWxpZ25tZW50ID09IE1hcmtl
ZEJsb2NrOjpibG9ja1NpemUpOworICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gTWFya2VkQmxv
Y2s6OmJsb2NrU2l6ZSk7CisgICAgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgIAorICAgIG1fZmlyc3RVbmNvbW1pdHRlZCA9IG1fY29tbWl0dGVkLmZpbmRCaXQobV9m
aXJzdFVuY29tbWl0dGVkLCBmYWxzZSk7CisgICAgaWYgKG1fZmlyc3RVbmNvbW1pdHRlZCA8IG1f
YmxvY2tzLnNpemUoKSkgeworICAgICAgICBtX2NvbW1pdHRlZFttX2ZpcnN0VW5jb21taXR0ZWRd
ID0gdHJ1ZTsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gbV9ibG9ja3NbbV9maXJzdFVuY29tbWl0
dGVkXTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmNvbW1pdChyZXN1bHQsIE1hcmtlZEJsb2NrOjpi
bG9ja1NpemUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCogcmVzdWx0ID0gZmFzdEFsaWduZWRNYWxsb2MoTWFya2VkQmxvY2s6OmJs
b2NrU2l6ZSwgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBt
X2Jsb2Nrcy5zaXplKCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKHJlc3VsdCk7CisgICAgbV9ibG9j
a0luZGljZXMuYWRkKHJlc3VsdCwgaW5kZXgpOworICAgIGlmIChtX2Jsb2Nrcy5jYXBhY2l0eSgp
ICE9IG1fY29tbWl0dGVkLnNpemUoKSkKKyAgICAgICAgbV9jb21taXR0ZWQucmVzaXplKG1fYmxv
Y2tzLmNhcGFjaXR5KCkpOworICAgIG1fY29tbWl0dGVkW2luZGV4XSA9IHRydWU7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQWxp
Z25lZE1lbW9yeSh2b2lkKiBiYXNlUHRyKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICAKKyAgICBhdXRvIGl0ZXIgPSBtX2Jsb2NrSW5kaWNlcy5maW5kKGJhc2VQ
dHIpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9ibG9ja0luZGljZXMuZW5kKCkpOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gaXRlci0+dmFsdWU7CisgICAgbV9jb21taXR0ZWRbaW5kZXhd
ID0gZmFsc2U7CisgICAgbV9maXJzdFVuY29tbWl0dGVkID0gc3RkOjptaW4oaW5kZXgsIG1fZmly
c3RVbmNvbW1pdHRlZCk7CisgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0KGJhc2VQdHIsIE1hcmtl
ZEJsb2NrOjpibG9ja1NpemUpOworfQorCit2b2lkIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIklzbygiLCBS
YXdQb2ludGVyKHRoaXMpLCAiKSIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IgOiBwdWJsaWMgQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cigpOworICAgIH5Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CisKKyAgICB2b2lkKiB0cnlB
bGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIG92ZXJy
aWRlOworICAgIHZvaWQgZnJlZUFsaWduZWRNZW1vcnkodm9pZCopIG92ZXJyaWRlOworCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
TG9jayBtX2xvY2s7CisgICAgVmVjdG9yPHZvaWQqPiBtX2Jsb2NrczsKKyAgICBIYXNoTWFwPHZv
aWQqLCB1bnNpZ25lZD4gbV9ibG9ja0luZGljZXM7CisgICAgRmFzdEJpdFZlY3RvciBtX2NvbW1p
dHRlZDsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0VW5jb21taXR0ZWQgeyAwIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vi
c3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIklzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFw
JiBoZWFwLCBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgc2l6ZV90IHNpemUpCisgICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwKQorICAgICwgbV9hbGxvY2F0b3IoJmhlYXAsIHNpemUpCisgICAg
LCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yPigpKQoreworICAgIGluaXRpYWxpemUoaGVhcENlbGxUeXBlLCBtX2lz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuZ2V0KCkpOworCisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX3NwYWNlLmFsbG9jYXRvckxvY2soKSk7CisgICAgbV9hbGxvY2F0b3Iuc2V0U3Vic3Bh
Y2UodGhpcyk7CisgICAgbV9zcGFjZS5hZGRNYXJrZWRBbGxvY2F0b3IobG9ja2VyLCAmbV9hbGxv
Y2F0b3IpOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJBbGxvY2F0b3Io
Jm1fYWxsb2NhdG9yKTsKKyAgICBtX2ZpcnN0QWxsb2NhdG9yID0gJm1fYWxsb2NhdG9yOworfQor
CitJc29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBJ
c29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZSwgZmFpbHVyZU1vZGUpOworfQorCitNYXJrZWRBbGxvY2F0b3IqIElzb1N1YnNwYWNlOjphbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSB0aGlzLT5zaXplKCkpOworICAgIHJldHVybiAm
bV9hbGxvY2F0b3I7Cit9CisKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6
ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwg
ZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cit9CisKK3ZvaWQqIElzb1N1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7CisgICAgcmV0dXJuIG1fYWxsb2NhdG9y
LmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtl
ZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworCitjbGFzcyBJc29TdWJzcGFjZSA6
IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vi
c3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgSGVhcENlbGxUeXBlKiwgc2l6ZV90IHNpemUpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Jc29TdWJzcGFjZSgpOworCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRvci5jZWxsU2l6ZSgpOyB9CisKKyAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3Zl
cnJpZGU7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVf
dCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworCisgICAgdm9pZCogYWxsb2NhdGUoc2l6
ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBz
aXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUgZmFpbHVyZU1vZGUpOworCitwcml2YXRlOgorCisgICAgTWFya2VkQWxsb2NhdG9yIG1f
YWxsb2NhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
PiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNyArNDEsMjEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0b3JCbG9ja3Mg
PSB0cnVlOwogCi1NYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBT
dWJzcGFjZSogc3Vic3BhY2UsIHNpemVfdCBjZWxsU2l6ZSkKK01hcmtlZEFsbG9jYXRvcjo6TWFy
a2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIHNpemVfdCBjZWxsU2l6ZSkKICAgICA6IG1fZnJlZUxp
c3QoY2VsbFNpemUpCiAgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogICAgICwgbV9sYXN0QWN0aXZl
QmxvY2soMCkKICAgICAsIG1fY2VsbFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXpl
KSkKLSAgICAsIG1fYXR0cmlidXRlcyhzdWJzcGFjZS0+YXR0cmlidXRlcygpKQogICAgICwgbV9o
ZWFwKGhlYXApCi0gICAgLCBtX3N1YnNwYWNlKHN1YnNwYWNlKQogewogfQogCit2b2lkIE1hcmtl
ZEFsbG9jYXRvcjo6c2V0U3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQoreworICAgIG1fYXR0
cmlidXRlcyA9IHN1YnNwYWNlLT5hdHRyaWJ1dGVzKCk7CisgICAgbV9zdWJzcGFjZSA9IHN1YnNw
YWNlOworfQorCiBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxp
bmUpCiB7CiAgICAgdW5zaWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwpAQCAtMTc1
LDE5ICsxNzksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAg
ICAgICAgIGFsbG9jYXRpb25Db3VudCA9IDA7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQotewot
ICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0cnVlOwotICAgIHJldHVybiBhbGxvY2F0ZVNsb3dD
YXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWlsdXJlKTsKLX0KLQotdm9pZCogTWFy
a2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQpCi17Ci0gICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOwotICAgIHJl
dHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWlsdXJl
KTsKLX0KLQotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBib29sIGNyYXNoT25GYWlsdXJlKQordm9p
ZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgQVNTRVJU
KG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CkBAIC0yMDQs
MTEgKzE5Niw4IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUkKICAg
ICAKICAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFu
ZCBub3cgdGhpcyBhbGxvY2F0b3IgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKICAgICAv
LyBoYXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxi
YWNrIGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJl
bnRCbG9jaykpIHsKLSAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKQotICAgICAgICAgICAgcmV0
dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0
ZShkZWZlcnJhbENvbnRleHQpOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50Qmxv
Y2spKQorICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9k
ZSk7CiAgICAgCiAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGlu
ZygpOwogICAgIApAQCAtMjE3LDcgKzIwNiw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGVTbG93Q2FzZUkKICAgICAKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IHRy
eUFsbG9jYXRlQmxvY2soKTsKICAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgIGlmIChjcmFzaE9u
RmFpbHVyZSkKKyAgICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6QXNzZXJ0KQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI0NTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiRnJlZUxpc3QuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgpAQCAtNjcsMTMg
KzY4LDE3IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIxMjEKIAogY2xhc3MgTWFya2VkQWxsb2NhdG9y
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRBbGxvY2F0b3IpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxp
c3QoKTsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKIAotICAgIE1h
cmtlZEFsbG9jYXRvcihIZWFwKiwgU3Vic3BhY2UqLCBzaXplX3QgY2VsbFNpemUpOworICAgIE1h
cmtlZEFsbG9jYXRvcihIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2b2lkIHNldFN1YnNw
YWNlKFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIHZv
aWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7CkBA
IC05MCw4ICs5NSw3IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsg
fQogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUo
R0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoR0NE
ZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJl
dHVybiBtX2hlYXA7IH0KIAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0
YXJnZXQpIGNvbnN0OwpAQCAtMTM2LDkgKzE0MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFy
a2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2Nh
dG9yOyB9CiAgICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2U7IH0KKyAgICBNYXJrZWRBbGxv
Y2F0b3IqIG5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KICAgICAKICAg
ICB2b2lkIHNldE5leHRBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9u
ZXh0QWxsb2NhdG9yID0gYWxsb2NhdG9yOyB9CiAgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5T
dWJzcGFjZShNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJblN1
YnNwYWNlID0gYWxsb2NhdG9yOyB9CisgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9j
YXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGFsbG9jYXRvcjsgfQogICAgIAogICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpOwogICAgIApAQCAtMTU1
LDkgKzE2MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJs
b2NrOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uo
R0NEZWZlcnJhbENvbnRleHQqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxv
Y2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0Kik7Ci0gICAgdm9pZCogYWxsb2NhdGVTbG93
Q2FzZUltcGwoR0NEZWZlcnJhbENvbnRleHQqLCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKICAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOwogICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsK
ICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7CkBAIC0xOTIsMTAg
KzE5NiwxMSBAQCBwcml2YXRlOgogICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVz
OwogICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIHJlZmVyZW5j
ZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4
OAotICAgIEhlYXAqIG1faGVhcDsKLSAgICBTdWJzcGFjZSogbV9zdWJzcGFjZTsKKyAgICBIZWFw
KiBtX2hlYXAgeyBudWxscHRyIH07CisgICAgU3Vic3BhY2UqIG1fc3Vic3BhY2UgeyBudWxscHRy
IH07CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3IgeyBudWxscHRyIH07CiAg
ICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlIHsgbnVsbHB0ciB9
OworICAgIE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yIHsgbnVsbHB0ciB9OwogfTsKIAogaW5saW5lIHB0cmRpZmZfdCBNYXJrZWRBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwyMSArMzUsMTIgQEAgaW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9y
Ojppc0ZyZWVMaXN0ZQogICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KHRhcmdldCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkK
K0FMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpCiB7CiAgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCiAgICAgICAgIFsmXSAoKSAt
PiBIZWFwQ2VsbCogewogICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKGhlYXAoKS0+dm0o
KSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPih0cnlBbGxvY2F0
ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOwotICAgICAgICB9KTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQpCi17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAg
ICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogewotICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZN
KGhlYXAoKS0+dm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwq
PihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQs
IGZhaWx1cmVNb2RlKSk7CiAgICAgICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsx
MzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIHRvIGJlIGNhbGxl
ZCBieSBTdWJzcGFjZS4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0g
ICAgICAgIHZvaWQgZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJlZUxpc3QqLCBjb25zdCBE
ZXN0cm95RnVuYyYpOworICAgICAgICB2b2lkIGZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlw
ZShGcmVlTGlzdCosIGNvbnN0IERlc3Ryb3lGdW5jJik7CiAgICAgICAgIAogICAgICAgICB2b2lk
IHVuc3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAy
MjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3BlY2lhbGl6ZWRTd2UKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+
Ci12b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZy
ZWVMaXN0KiBmcmVlTGlzdCwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQordm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoRnJlZUxp
c3QqIGZyZWVMaXN0LCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCiB7CiAgICAgU3dl
ZXBNb2RlIHN3ZWVwTW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0IDogU3dlZXBPbmx5
OwogICAgIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSA9IHRoaXMtPnN3ZWVw
RGVzdHJ1Y3Rpb25Nb2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MSwxMCArNTUxLDggQEAg
dm9pZCBNYXJrZWRTcGFjZTo6ZHVtcEJpdHMoUHJpbnRTdHJlYW0mIAogICAgICAgICB9KTsKIH0K
IAotTWFya2VkQWxsb2NhdG9yKiBNYXJrZWRTcGFjZTo6YWRkTWFya2VkQWxsb2NhdG9yKAotICAg
IGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU3Vic3BhY2UqIHN1YnNwYWNlLCBzaXplX3Qgc2l6ZUNs
YXNzKQordm9pZCBNYXJrZWRTcGFjZTo6YWRkTWFya2VkQWxsb2NhdG9yKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7Ci0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBtX2JhZ09mQWxsb2NhdG9ycy5hZGQoaGVhcCgpLCBzdWJzcGFjZSwg
c2l6ZUNsYXNzKTsKICAgICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3IobnVsbHB0cik7CiAg
ICAgCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTU2MiwxNCArNTYwLDEwIEBAIE1h
cmtlZEFsbG9jYXRvciogTWFya2VkU3BhY2U6OmFkZE1hcmtlZEEKICAgICBpZiAoIW1fZmlyc3RB
bGxvY2F0b3IpIHsKICAgICAgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKICAgICAg
ICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwotICAgICAgICBmb3IgKFN1YnNwYWNlKiBz
dWJzcGFjZSA6IG1fc3Vic3BhY2VzKQotICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0ZUZp
cnN0QWxsb2NhdG9yKGFsbG9jYXRvcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9sYXN0QWxs
b2NhdG9yLT5zZXROZXh0QWxsb2NhdG9yKGFsbG9jYXRvcik7CiAgICAgICAgIG1fbGFzdEFsbG9j
YXRvciA9IGFsbG9jYXRvcjsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFsbG9jYXRvcjsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBIZWFwOwogY2xh
c3MgSGVhcEl0ZXJhdGlvblNjb3BlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAt
MTU4LDcgKzE1OSw3IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IqIGZpcnN0QWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdEFsbG9jYXRvcjsgfQogICAgIAogICAgIExvY2sm
IGFsbG9jYXRvckxvY2soKSB7IHJldHVybiBtX2FsbG9jYXRvckxvY2s7IH0KLSAgICBNYXJrZWRB
bGxvY2F0b3IqIGFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIFN1YnNw
YWNlKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2b2lkIGFkZE1hcmtlZEFsbG9jYXRvcihjb25z
dCBBYnN0cmFjdExvY2tlciYsIE1hcmtlZEFsbG9jYXRvciopOwogICAgIAogICAgIC8vIFdoZW4g
dGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUgbWFyayBi
aXRzIGhhdmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlzTWFya2luZygpIGNvbnN0IHsg
cmV0dXJuIG1faXNNYXJraW5nOyB9CkBAIC0xNjgsMTQgKzE2OSwxMiBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJyYXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nl
cz4gc19zaXplQ2xhc3NGb3JTaXplU3RlcDsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIENvbXBsZXRlU3Vic3BhY2U7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBXZWFrU2V0Owog
ICAgIGZyaWVuZCBjbGFzcyBTdWJzcGFjZTsKICAgICAKLSAgICB2b2lkKiBhbGxvY2F0ZVNsb3co
U3Vic3BhY2UmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxs
b2NhdGVTbG93KFN1YnNwYWNlJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotCiAgICAg
Ly8gVXNlIHRoaXMgdmVyc2lvbiB3aGVuIGNhbGxpbmcgZnJvbSB3aXRoaW4gdGhlIEdDIHdoZXJl
IHdlIGtub3cgdGhhdCB0aGUgYWxsb2NhdG9ycwogICAgIC8vIGhhdmUgYWxyZWFkeSBiZWVuIHN0
b3BwZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNl
bGwoY29uc3QgRnVuY3RvciYpOwpAQCAtMjEwLDcgKzIwOSw2IEBAIHByaXZhdGU6CiAgICAgU2Vu
dGluZWxMaW5rZWRMaXN0PFdlYWtTZXQsIEJhc2ljUmF3U2VudGluZWxOb2RlPFdlYWtTZXQ+PiBt
X25ld0FjdGl2ZVdlYWtTZXRzOwogCiAgICAgTG9jayBtX2FsbG9jYXRvckxvY2s7Ci0gICAgQmFn
PE1hcmtlZEFsbG9jYXRvcj4gbV9iYWdPZkFsbG9jYXRvcnM7CiAgICAgTWFya2VkQWxsb2NhdG9y
KiBtX2ZpcnN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9s
YXN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgogCisjaW5jbHVkZSAiQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCkBAIC0zNCw0NSArMzYsMjMgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIFdyaXRpbmcgaXQgdGhpcyB3YXkgZW5z
dXJlcyB0aGF0IHdoZW4geW91IHBhc3MgdGhpcyBhcyBhIGZ1bmN0b3IsIHRoZSBjYWxsZWUgaXMg
c3BlY2lhbGl6ZWQgZm9yCi0vLyB0aGlzIGNhbGxiYWNrLiBJZiB5b3Ugd3JvdGUgdGhpcyBhcyBh
IG5vcm1hbCBmdW5jdGlvbiB0aGVuIHRoZSBjYWxsZWUgd291bGQgYmUgc3BlY2lhbGl6ZWQgZm9y
Ci0vLyB0aGUgZnVuY3Rpb24ncyB0eXBlIGFuZCBpdCB3b3VsZCBoYXZlIGluZGlyZWN0IGNhbGxz
IHRvIHRoYXQgZnVuY3Rpb24uIEFuZCB1bmxpa2UgYSBsYW1iZGEsIGl0J3MKLS8vIHBvc3NpYmxl
IHRvIG1hcmsgdGhpcyBBTFdBWVNfSU5MSU5FLgotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYgdm0sIEpTQ2VsbCogY2VsbCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChjZWxsLT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgQVNT
RVJUKGNlbGwtPmlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCk7Ci0gICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOwotICAg
ICAgICBNZXRob2RUYWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8t
Pm1ldGhvZFRhYmxlLmRlc3Ryb3k7Ci0gICAgICAgIGRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsK
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLVN1YnNwYWNlOjpTdWJzcGFjZShDU3RyaW5n
IG5hbWUsIEhlYXAmIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRlcywgQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKK1N1YnNwYWNlOjpTdWJz
cGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXApCiAgICAgOiBtX3NwYWNlKGhlYXAub2JqZWN0
U3BhY2UoKSkKICAgICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0
ZXMpCi0gICAgLCBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3IoYWxpZ25lZE1lbW9yeUFsbG9jYXRv
cikKLSAgICAsIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uKG1fc3BhY2UuZmlyc3RBbGxv
Y2F0b3IoKSkKLXsKLSAgICAvLyBJdCdzIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQgd2UncmUgR0Np
bmcgcmlnaHQgbm93IGV2ZW4gaWYgdGhlIGNsaWVudCBpcyBjYXJlZnVsIHRvIG9ubHkKLSAgICAv
LyBjcmVhdGUgc3Vic3BhY2VzIHJpZ2h0IGFmdGVyIFZNIGNyZWF0aW9uLCBzaW5jZSBjb2xsZWN0
Q29udGludW91c2x5IChhbmQgcHJvYmFibHkgb3RoZXIKLSAgICAvLyB0aGluZ3MpIGNvdWxkIGNh
dXNlIGEgR0MgdG8gYmUgbGF1bmNoZWQgYXQgcHJldHR5IG11Y2ggYW55IHRpbWUgYW5kIGl0J3Mg
bm90IDEwMCUgb2J2aW91cwotICAgIC8vIHRoYXQgYWxsIGNsaWVudHMgd291bGQgYmUgYWJsZSB0
byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgemVybyBzYWZlcG9pbnRzIGJldHdlZW4gd2hlbiB0aGV5
Ci0gICAgLy8gY3JlYXRlIFZNIGFuZCB3aGVuIHRoZXkgZG8gdGhpcy4gUHJldmVudGluZyBHQyB3
aGlsZSB3ZSdyZSBjcmVhdGluZyB0aGUgU3Vic3BhY2UgZW5zdXJlcwotICAgIC8vIHRoYXQgd2Ug
ZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB3aGV0aGVyIGl0J3MgT0sgZm9yIHRoZSBHQyB0byBl
dmVyIHNlZSBhIGJyYW5kIG5ldwotICAgIC8vIHN1YnNwYWNlLgoreworfQorCit2b2lkIFN1YnNw
YWNlOjppbml0aWFsaXplKEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQoreworICAgIG1fYXR0cmlidXRlcyA9
IGhlYXBDZWxsVHlwZS0+YXR0cmlidXRlcygpOworICAgIG1faGVhcENlbGxUeXBlID0gaGVhcENl
bGxUeXBlOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I7CisgICAgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1v
cnlBbGxvY2F0b3ItPmZpcnN0QWxsb2NhdG9yKCk7CisKKyAgICBIZWFwJiBoZWFwID0gKm1fc3Bh
Y2UuaGVhcCgpOwogICAgIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25T
Y29wZShoZWFwKTsKICAgICBoZWFwLm9iamVjdFNwYWNlKCkubV9zdWJzcGFjZXMuYXBwZW5kKHRo
aXMpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNz
ZXM7IGktLTspCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOwor
ICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJTdWJzcGFjZSh0aGlzKTsKIH0K
IAogU3Vic3BhY2U6On5TdWJzcGFjZSgpCkBAIC04MSw2MCArNjEsMTIgQEAgU3Vic3BhY2U6On5T
dWJzcGFjZSgpCiAKIHZvaWQgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5k
bGUmIGJsb2NrLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgYmxvY2suZmluaXNoU3dlZXBL
bm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIG1faGVhcENlbGxU
eXBlLT5maW5pc2hTd2VlcChibG9jaywgZnJlZUxpc3QpOwogfQogCiB2b2lkIFN1YnNwYWNlOjpk
ZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewotICAgIERlc3Ryb3lGdW5jKCkodm0sIGNl
bGwpOwotfQotCi0vLyBUaGUgcmVhc29uIHdoeSB3ZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFsbG9j
YXRlIGFuZCB0cnlBbGxvY2F0ZSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mCi0vLyBjaGVj
a3Mgb24gdGhlIGFsbG9jYXRpb24gcGF0aCBpbiBib3RoIGNhc2VzLiBMaWtld2lzZSwgdGhlIHJl
YXNvbiB3aHkgd2UgaGF2ZSBvdmVybG9hZHMgd2l0aCBhbmQKLS8vIHdpdGhvdXQgZGVmZXJyYWxD
b250ZXh0IGlzIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgY29kZSBmb3IgY2FsbGluZyBhbGxv
Y2F0ZSB3aGVuIHlvdSBkb24ndAotLy8gbmVlZCB0aGUgZGVmZXJyYWxDb250ZXh0Lgotdm9pZCog
U3Vic3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAg
ICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkp
Ci0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoKTsKLSAgICBlbHNlCi0gICAg
ICAgIHJlc3VsdCA9IGFsbG9jYXRlU2xvdyhudWxscHRyLCBzaXplKTsKLSAgICBkaWRBbGxvY2F0
ZShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjphbGxv
Y2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsK
LSAgICB2b2lkICpyZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
dHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9j
YXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0
ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZShzaXpl
X3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxv
Y2F0b3ItPnRyeUFsbG9jYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSB0cnlBbGxv
Y2F0ZVNsb3cobnVsbHB0ciwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJh
bENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcmVz
dWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZv
cihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZShkZWZlcnJh
bENvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KGRl
ZmVycmFsQ29udGV4dCwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIG1faGVhcENlbGxUeXBlLT5kZXN0cm95KHZtLCBjZWxsKTsKIH0KIAog
dm9pZCBTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQpAQCAtMTQ0LDEwNCArNzYsMTcg
QEAgdm9pZCBTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogICAgICAgICAgICAgYWxs
b2NhdG9yLnByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgICAgIH0pOwogCi0gICAgbV9hbGxv
Y2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX3NwYWNlLmZpcnN0QWxsb2NhdG9yKCk7CisgICAg
bV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3It
PmZpcnN0QWxsb2NhdG9yKCk7CiB9CiAKIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpm
aW5kRW1wdHlCbG9ja1RvU3RlYWwoKQogewotICAgIGZvciAoOyBtX2FsbG9jYXRvckZvckVtcHR5
QWxsb2NhdGlvbjsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsbG9jYXRvckZv
ckVtcHR5QWxsb2NhdGlvbi0+bmV4dEFsbG9jYXRvcigpKSB7Ci0gICAgICAgIFN1YnNwYWNlKiBv
dGhlclN1YnNwYWNlID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPnN1YnNwYWNlKCk7
Ci0gICAgICAgIGlmIChvdGhlclN1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgIT0g
YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IAorICAgIGZvciAoOyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbjsgbV9hbGxvY2F0b3JG
b3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+bmV4dEFs
bG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKSB7CiAgICAgICAgIGlmIChNYXJrZWRC
bG9jazo6SGFuZGxlKiBibG9jayA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5maW5k
RW1wdHlCbG9ja1RvU3RlYWwoKSkKICAgICAgICAgICAgIHJldHVybiBibG9jazsKICAgICB9CiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCi17Ci0gICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7Ci0gICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKLSAgICBpZiAoIXNpemVDbGFz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB3cml0dGVu
IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVhZHMgdG8gZW5kIHVw
IGhlcmUgaWYgdGhleSB3YW50Ci0gICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgc29t
ZSBhbGxvY2F0b3IgdGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0IGEgcG9zc2li
bHktCi0gICAgLy8ganVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxs
IGlmIHdlJ3JlIGluIHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAotICAgIC8vIGFs
bG9jYXRvciBhcyAicGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQg
Y291bGQgbGVhZCB0byBwZXJmb3JtYW5jZQotICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29y
aXRobSBoZXJlIGlzIHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUg
bG9jaywgdG8KLSAgICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBj
cmVhdGlvbnMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcwotICAgIC8v
IHRoYXQgYW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhp
cyBhbGxvY2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAotICAgIC8vIGVub3VnaDogaXQgd2ls
bCBoYXZlIAotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2Nr
KCkpOwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9y
U2l6ZVN0ZXBbaW5kZXhdKQotICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwotCi0gICAgaWYgKGZh
bHNlKQotICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBt
X25hbWUsICIsICIsIG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7Ci0gICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX3NwYWNlLmFkZE1hcmtlZEFsbG9jYXRvcihs
b2NrZXIsIHRoaXMsIHNpemVDbGFzcyk7Ci0gICAgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNs
YXNzVG9JbmRleChzaXplQ2xhc3MpOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xhc3MpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9
IGFsbG9jYXRvcjsKLSAgICAgICAgCi0gICAgICAgIGlmICghaW5kZXgtLSkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNl
KG1fZmlyc3RBbGxvY2F0b3IpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgbV9m
aXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICByZXR1cm4gYWxsb2NhdG9yOwotfQotCi12
b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xv
dyhkZWZlcnJhbENvbnRleHQsIHNpemUpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBz
YW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOwotICAgIAotICAgIGlmIChN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplKSkKLSAgICAgICAg
cmV0dXJuIGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAg
ICBpZiAoc2l6ZSA8PSBPcHRpb25zOjpsYXJnZUFsbG9jYXRpb25DdXRvZmYoKQotICAgICAgICAm
JiBzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewotICAgICAgICBkYXRhTG9nKCJG
QVRBTDogYXR0YW1wdGluZyB0byBhbGxvY2F0ZSBzbWFsbCBvYmplY3QgdXNpbmcgbGFyZ2UgYWxs
b2NhdGlvbi5cbiIpOwotICAgICAgICBkYXRhTG9nKCJSZXF1ZXN0ZWQgYWxsb2NhdGlvbiBzaXpl
OiAiLCBzaXplLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci0gICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVm
ZXIoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0gICAgTGFyZ2VBbGxvY2F0aW9u
KiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3BhY2UubV9oZWFw
LCBzaXplLCB0aGlzKTsKLSAgICBpZiAoIWFsbG9jYXRpb24pCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAotICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0
aW9uKTsKLSAgICBtX3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7Ci0gICAgbV9zcGFj
ZS5tX2NhcGFjaXR5ICs9IHNpemU7Ci0gICAgCi0gICAgbV9sYXJnZUFsbG9jYXRpb25zLmFwcGVu
ZChhbGxvY2F0aW9uKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIGFsbG9jYXRpb24tPmNlbGwoKTsK
LX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFN1YnNwYWNlOjpkaWRBbGxvY2F0ZSh2b2lkKiBwdHIp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHB0cik7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB1c2VmdWwg
Zm9yIGxvZ2dpbmcgYWxsb2NhdGlvbnMsIG9yIGRvaW5nIG90aGVyIGtpbmRzIG9mIGRlYnVnZ2lu
ZyBoYWNrcy4gSnVzdCBtYWtlCi0gICAgLy8gc3VyZSB5b3UgSlNDX2ZvcmNlR0NTbG93UGF0aHM9
dHJ1ZS4KLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0zMiw0NCArMzMsMzAgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworY2xhc3MgSGVhcENlbGxUeXBlOwogCiAv
LyBUaGUgaWRlYSBvZiBzdWJzcGFjZXMgaXMgdGhhdCB5b3UgY2FuIHByb3ZpZGUgc29tZSBjdXN0
b20gYmVoYXZpb3IgZm9yIHlvdXIgb2JqZWN0cyBpZiB5b3UKIC8vIGFsbG9jYXRlIHRoZW0gZnJv
bSBhIGN1c3RvbSBTdWJzcGFjZSBpbiB3aGljaCB5b3Ugb3ZlcnJpZGUgc29tZSBvZiB0aGUgdmly
dHVhbCBtZXRob2RzLiBUaGlzCi0vLyBjbGFzcyBpcyB0aGUgYmFzZWNsYXNzIG9mIFN1YnNwYWNl
cyBhbmQgaXQgcHJvdmlkZXMgYSByZWFzb25hYmxlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHdo
ZXJlCi0vLyBzd2VlcGluZyBhc3N1bWVzIGltbW9ydGFsIHN0cnVjdHVyZS4gVGhlIGNvbW1vbiB3
YXlzIG9mIG92ZXJyaWRpbmcgdGhpcyBhcmU6Ci0vLwotLy8gLSBQcm92aWRlIGN1c3RvbWl6ZWQg
ZGVzdHJ1Y3RvciBiZWhhdmlvci4gWW91IGNhbiBjaGFuZ2UgaG93IHRoZSBkZXN0cnVjdG9yIGlz
IGNhbGxlZC4gWW91IGNhbgotLy8gICBhbHNvIHNwZWNpYWxpemUgdGhlIGRlc3RydWN0b3IgY2Fs
bCBpbiB0aGUgbG9vcC4KLS8vCi0vLyAtIFVzZSB0aGUgU3Vic3BhY2UgYXMgYSBxdWljayB3YXkg
dG8gaXRlcmF0ZSBhbGwgb2YgdGhlIG9iamVjdHMgaW4gdGhhdCBzdWJzcGFjZS4KKy8vIGNsYXNz
IGlzIHRoZSBiYXNlY2xhc3Mgb2YgU3Vic3BhY2VzLiBVc3VhbGx5IHlvdSB3aWxsIHVzZSBlaXRo
ZXIgU3Vic3BhY2Ugb3IgRml4ZWRTaXplU3Vic3BhY2UuCiBjbGFzcyBTdWJzcGFjZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3Vic3BhY2UpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYsIEFsbG9jYXRvckF0dHJpYnV0ZXMsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5TdWJzcGFjZSgpOwotICAgIAorCiAgICAgY29u
c3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kYXRhKCk7IH0KICAgICBNYXJr
ZWRTcGFjZSYgc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlOyB9CiAgICAgCiAgICAgY29u
c3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlczsgfQorICAgIEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9oZWFwQ2VsbFR5cGU7IH0KICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OyB9CiAgICAgCi0gICAgLy8gVGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyB0aGlzIGlzIHRvIHNw
ZWNpYWxpemUgdGhlIHN3ZWVwIGZvciB5b3VyIGRlc3RydWN0b3JzLiBUaGlzIHdvbid0Ci0gICAg
Ly8gYmUgY2FsbGVkIGZvciBuby1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhpcyBtdXN0IGNhbGwgTWFy
a2VkQmxvY2s6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlLgotICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKLSAgICAKLSAgICAv
LyBUaGVzZSBnZXQgY2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgotICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KFZNJiwgSlNDZWxsKik7Ci0gICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiB0cnlBbGxv
Y2F0b3JGb3Ioc2l6ZV90KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXpl
X3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQq
LCBzaXplX3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRl
KHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGUoR0NEZWZl
cnJhbENvbnRleHQqLCBzaXplX3QpOworICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CisK
KyAgICB2aXJ0dWFsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShzaXplX3Qs
IEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7CiAgICAgCiAg
ICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApAQCAtOTYsNDggKzgzLDI1IEBA
IHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExp
dmVDZWxsKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
QWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Vic3BhY2Us
IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9Ci0gICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiog
YWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFsw
XTsgfQorICAgIFN1YnNwYWNlKiBuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsg
fQorICAgIHZvaWQgc2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKFN1YnNw
YWNlKiBzdWJzcGFjZSkgeyBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9
IHN1YnNwYWNlOyB9CiAKLXByaXZhdGU6Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JG
b3JTbG93KHNpemVfdCk7Ci0gICAgCi0gICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2Vy
bmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlvbnMgYW5kIGFsbG9jYXRvciBjcmVhdGlvbi4KLSAgICB2
b2lkKiBhbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIHZvaWQq
IHRyeUFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0gICAgCi0gICAg
dm9pZCBkaWRBbGxvY2F0ZSh2b2lkKik7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBpbml0aWFsaXpl
KEhlYXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKICAgICAKICAgICBNYXJr
ZWRTcGFjZSYgbV9zcGFjZTsKICAgICAKICAgICBDU3RyaW5nIG1fbmFtZTsKICAgICBBbGxvY2F0
b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKworICAgIEhlYXBDZWxsVHlwZSogbV9oZWFwQ2Vs
bFR5cGUgeyBudWxscHRyIH07CisgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogbV9hbGlnbmVk
TWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIAotICAgIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKLSAgICAKLSAgICBzdGQ6OmFycmF5PE1h
cmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JG
b3JTaXplU3RlcDsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fZmlyc3RBbGxvY2F0b3IgeyBudWxs
cHRyIH07CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlv
biB7IG51bGxwdHIgfTsgLy8gVXNlcyB0aGUgTWFya2VkU3BhY2UgbGlua2VkIGxpc3Qgb2YgYmxv
Y2tzLgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMYXJnZUFsbG9jYXRpb24sIEJhc2ljUmF3U2Vu
dGluZWxOb2RlPExhcmdlQWxsb2NhdGlvbj4+IG1fbGFyZ2VBbGxvY2F0aW9uczsKKyAgICBTdWJz
cGFjZSogbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07
CiB9OwogCi1BTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OnRyeUFsbG9j
YXRvckZvcihzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFy
Z2VDdXRvZmYpCi0gICAgICAgIHJldHVybiBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNw
YWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpXTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
QUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6
ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7
Ci0gICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6
ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldKQotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNsb3coc2l6ZSk7Ci0g
ICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTcyLDcgKzE1NzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZN
JiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VU
eXBlIHN0b3JhZ2UsIEdQUlJlZyBzY3JhdGNoR1BSMSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgsIHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxs
b2NhdG9yRm9yKHNpemUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTU4OSw3ICsxNTg5LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIGFsbG9jYXRpb25T
aXplIGNhbiBiZSBhbGlhc2VkIHdpdGggYW55IG9mIHRoZSBvdGhlciBpbnB1dCBHUFJzLiBJZiBp
dCdzIG5vdCBhbGlhc2VkIHRoZW4gaXQKICAgICAvLyB3b24ndCBiZSBjbG9iYmVyZWQuCi0gICAg
dm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIFN1YnNwYWNl
JiBzdWJzcGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQ
UlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9j
YXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBDb21wbGV0ZVN1YnNwYWNlJiBzdWJz
cGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBz
Y3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fz
c2VydCghKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAmIChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAx
KSksICJNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAg
ICAgICAgCkBAIC0xNjA3LDcgKzE2MDcsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgogICAgIHZvaWQgZW1pdEFsbG9j
YXRlVmFyaWFibGVTaXplZENlbGwoVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVU
eXBlIHN0cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEs
IEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAg
U3Vic3BhY2UmIHN1YnNwYWNlID0gKnN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pOworICAgICAg
ICBDb21wbGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSA9ICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZt
KTsKICAgICAgICAgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChyZXN1bHRHUFIsIHN1YnNwYWNl
LCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAg
ICAgICAgIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhzdHJ1Y3R1cmUsIHJlc3VsdEdQ
Uiwgc2NyYXRjaEdQUjIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3Zt
KS0+YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQp
OwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFs
bG9jYXRvclJlZyA9IHJlZ1QxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw3ICs2Miw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgQnV0dGVyZmx5OjpvcHRpbWEK
IGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0s
IEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
IHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAg
ICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGUo
c2l6ZSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OkFzc2VydCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTcwLDcg
KzcwLDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVhdGUoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVh
ZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoc2l6ZSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRy
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmICghYmFzZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShi
YXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAg
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRoZUJh
c2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwot
ICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlB
bGxvY2F0ZShuZXdTaXplKTsKKyAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYgKCFuZXdCYXNlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3Qg
YmUgYSBtZW1jcHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw4ICsxMTgsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0mCiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFs
T2JqZWN0KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCi0gICAgdm9pZCogYmFja2lu
Z1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFyZ3VtZW50cy5raW5k
KS50cnlBbGxvY2F0ZShtYXBwZWRBcmd1bWVudHNTaXplKCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KGJhY2tpbmdTdG9yZSk7CisgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZShtX21hcHBlZEFyZ3VtZW50cy5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwobWFw
cGVkQXJndW1lbnRzU2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2Vy
dCk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9y
ZSk7CiAgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDIyNDUzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgCiBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFDZWxsVHlwZTo6bmVlZHNEZXN0
cnVjdGlvbik7CiAgICAgICAgIHJldHVybiAmdm0uanNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjMsOCArMjYzLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppbml0TW9kaWZp
ZQogICAgIFJFTEVBU0VfQVNTRVJUKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik7CiAK
ICAgICBpZiAoYXJnc0xlbmd0aCkgewotICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5n
aWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQp
LnRyeUFsbG9jYXRlKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CisgICAgICAgIHZvaWQqIGJhY2tp
bmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rl
c2NyaXB0b3Iua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
Zjw4PihhcmdzTGVuZ3RoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQp
OwogICAgICAgICBib29sKiBtb2RpZmllZEFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PGJvb2wqPihi
YWNraW5nU3RvcmUpOwogICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5zZXQo
dm0sIHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
YXJnc0xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxs
b2NhdGlvblNpemUoY2FwYWNpdHkpOwotICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOworICAgICAg
ICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVO
b25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lv
biAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkCiAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlw
ZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1h
bENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAg
ICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9j
YXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3Rv
cmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
ICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRy
dWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWSghdGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAg
LTk4LDcgKzk4LDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbmRleEJpYXMgPSAw
OwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBBcnJheVN0b3JhZ2U6Om9wdGltYWxW
ZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAg
ICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2Nh
dGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9m
TGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSk7
CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5h
bGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxp
bmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIGluZGV4Qmlhcywgb3V0
T2ZMaW5lU3RvcmFnZSk7CkBAIC0zNjgsNyArMzY4LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRTbG93Q2FzZShjb25zdAogICAgICAgICBhbGxvY2F0ZWROZXdTdG9yYWdlID0gZmFsc2U7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoZGVz
aXJlZENhcGFjaXR5KSk7Ci0gICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOworICAgICAgICBuZXdBbGxvY0Jh
c2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwo
bmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAg
ICAgICAgaWYgKCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjM3
LDcgKzIzNyw5IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGUoVk0mIHYKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCB2
ZWN0b3JMZW5ndGhIaW50KTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLAorICAgICAgICAgICAgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwg
MCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlv
bkNvbnRleHQ6OgogICAgICAgICB2b2lkKiB0ZW1wOwogICAgICAgICBzaXplX3Qgc2l6ZSA9IHNp
emVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKICAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAg
ICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRl
KG51bGxwdHIsIHNpemUpOworICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgICAgICBpZiAoIXRlbXApCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIENv
cHlWaXNpdG9yOwogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBjbGFzcyBFeGVjU3RhdGU7CkBA
IC00OSwxMSArNTAsNiBAQCBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7CiBjbGFzcyBQcm9wZXJ0
eU5hbWVBcnJheTsKIGNsYXNzIFN0cnVjdHVyZTsKIAotZW51bSBjbGFzcyBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgewotICAgIFNob3VsZEFzc2VydE9uRmFpbHVyZSwKLSAgICBTaG91bGROb3RBc3Nl
cnRPbkZhaWx1cmUKLX07Ci0KIGVudW0gY2xhc3MgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5z
ZSB7CiAgICAgSGFzQXJnLAogICAgIERvZXNOb3RIYXZlQXJnCkBAIC03OSw4ICs3NSw4IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIHRyeUFsbG9jYXRlQ2UKIGNsYXNzIEpTQ2VsbCA6IHB1
YmxpYyBIZWFwQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpTVmFsdWU7CiAgICAgZnJpZW5kIGNs
YXNzIE1hcmtlZEJsb2NrOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIEFsbG9jYXRpb25GYWls
dXJlTW9kZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZT4KLSAgICBmcmllbmQgdm9pZCog
dHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBmcmllbmQgdm9pZCogdHJ5QWxsb2NhdGVD
ZWxsSGVscGVyKEhlYXAmLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKTsKIAogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IDA7CkBAIC05MSw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogUmVm
ZXIgdG8gU3Vic3BhY2UgYnkgcmVmZXJlbmNlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5ODgKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJik7CisgICAgc3RhdGljIENv
bXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJik7CiAKICAgICBzdGF0aWMgSlNDZWxsKiBz
ZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOyB9CiAKQEAgLTMxMSw3ICszMDcsNyBAQCBpbmxp
bmUgVG8ganNEeW5hbWljQ2FzdChWTSYgdm0sIEpTVmFsdWUgCiAvLyBGSVhNRTogUmVmZXIgdG8g
U3Vic3BhY2UgYnkgcmVmZXJlbmNlLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Njk4OAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLWlubGluZSBTdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQoraW5saW5lIGF1dG8gc3Vic3BhY2VGb3IoVk0mIHZtKQog
ewogICAgIHJldHVybiBUeXBlOjp0ZW1wbGF0ZSBzdWJzcGFjZUZvcjxUeXBlPih2bSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwzMCArMTM1LDIxIEBAIEFMV0FZU19JTkxJ
TkUgVk0mIEV4ZWNTdGF0ZTo6dm0oKSBjb25zdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KLVN1YnNwYWNlKiBKU0NlbGw6OnN1YnNwYWNlRm9yKFZNJiB2bSkKK0NvbXBsZXRlU3Vi
c3BhY2UqIEpTQ2VsbDo6c3Vic3BhY2VGb3IoVk0mIHZtKQogewogICAgIGlmIChDZWxsVHlwZTo6
bmVlZHNEZXN0cnVjdGlvbikKICAgICAgICAgcmV0dXJuICZ2bS5kZXN0cnVjdGlibGVDZWxsU3Bh
Y2U7CiAgICAgcmV0dXJuICZ2bS5jZWxsU3BhY2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSBtb2RlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNl
IGRlZmVycmFsQ29udGV4dEFyZ1ByZXNlbmNlPgotQUxXQVlTX0lOTElORSB2b2lkKiB0cnlBbGxv
Y2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2
b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUsIEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWls
dXJlTW9kZSkKIHsKICAgICBBU1NFUlQoZGVmZXJyYWxDb250ZXh0IHx8ICFEaXNhbGxvd0dDOjpp
c0luRWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChzaXplID49IHNpemVvZihU
KSk7Ci0gICAgSlNDZWxsKiByZXN1bHQ7Ci0gICAgaWYgKG1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpTaG91bGRBc3NlcnRPbkZhaWx1cmUpIHsKLSAgICAgICAgcmVzdWx0ID0gKGRlZmVy
cmFsQ29udGV4dEFyZ1ByZXNlbmNlID09IEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhh
c0FyZykKLSAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4o
KmhlYXAudm0oKSktPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgc2l6ZSkpCi0gICAgICAgICAg
ICA6IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxv
Y2F0ZShzaXplKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gKGRlZmVycmFsQ29u
dGV4dEFyZ1ByZXNlbmNlID09IEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZykK
LSAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAu
dm0oKSktPnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgc2l6ZSkpCi0gICAgICAgICAgICA6
IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT50cnlBbGxv
Y2F0ZShzaXplKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0
PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxvY2F0ZU5vblZpcnR1YWwo
c2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgIGlmIChmYWlsdXJlTW9k
ZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwgJiYgIXJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAgQVNTRVJU
KCFoZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwogICAgIGhlYXAudm0oKS0+c2V0
SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygpKTsKQEAgLTE3MCwyNSArMTYxLDI1IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGUKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUpCiB7Ci0g
ICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlNob3VsZEFzc2VydE9uRmFpbHVyZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6RG9l
c05vdEhhdmVBcmc+KGhlYXAsIG51bGxwdHIsIHNpemUpOworICAgIHJldHVybiB0cnlBbGxvY2F0
ZUNlbGxIZWxwZXI8VD4oaGVhcCwgc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpBc3NlcnQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCogdHJ5QWxsb2NhdGVD
ZWxsKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNl
bGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGROb3RBc3NlcnRPbkZhaWx1
cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6OkRvZXNOb3RIYXZlQXJnPihoZWFwLCBu
dWxscHRyLCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAs
IHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0
dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNob3Vs
ZEFzc2VydE9uRmFpbHVyZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnPiho
ZWFwLCBkZWZlcnJhbENvbnRleHQsIHNpemUpOworICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxI
ZWxwZXI8VD4oaGVhcCwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OkFzc2VydCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkKiB0cnlBbGxvY2F0
ZUNlbGwoSGVhcCYgaGVhcCwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6
ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OlNob3VsZE5vdEFzc2VydE9uRmFpbHVyZSwgR0NEZWZlcnJhbENvbnRl
eHRBcmdQcmVzZW5zZTo6SGFzQXJnPihoZWFwLCBkZWZlcnJhbENvbnRleHQsIHNpemUpOworICAg
IHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VD4oaGVhcCwgc2l6ZSwgZGVmZXJyYWxDb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogfQogCiBpbmxpbmUgYm9v
bCBKU0NlbGw6OmlzT2JqZWN0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaAkocmV2aXNpb24gMjI0NTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiAmdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQko
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlLmNwcDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFj
ZS5oIgorCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIHsKKworc3RydWN0IERlc3Ryb3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKKyAgICB7CisgICAgICAg
IHN0YXRpY19jYXN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Kj4oY2VsbCktPmNsYXNzSW5mbygpLT5t
ZXRob2RUYWJsZS5kZXN0cm95KGNlbGwpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpKU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciogYWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0
cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQor
eworfQorCitKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjp+SlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZSgpCit7Cit9CisKK3ZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6
ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxp
c3QpCit7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBE
ZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpk
ZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNl
bGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgiCiAKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MywyMSArNDIsMjEgQEAgc3RydWN0IERl
c3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUpTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZTo6SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENl
bGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpT
Q2VsbCkpCiB7CiB9CiAKLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlKCkKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjp+
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhh
bmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlz
dCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZy
ZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nSGVh
cENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQordm9pZCBK
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCog
Y2VsbCkKIHsKICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmg6MjI0NTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBI
ZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZp
cnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKKyAgICAKKyAgICB2b2lkIGZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAg
IHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24g
MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2Vs
bFR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsKIHB1YmxpYzoKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVh
cCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0
dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOwogICAgIAog
ICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMu
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMg
ewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBj
b25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNEZXN0cnVjdGlibGVPYmplY3QqPihj
ZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsK
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFw
LCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1l
LCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6
On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCkKLXsKLX0KLQotdm9pZCBKU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5k
bGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5n
U3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAg
RGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UgOiBw
dWJsaWMgU3Vic3BhY2UgewotcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UoKTsKLSAgICAKLSAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveShWTSYsIEpT
Q2VsbCopIG92ZXJyaWRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
aAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFz
cyBKU0xleGljYWxFbnZpcm9ubWVudCA6IHB1YmxpYyBKU1N5CiAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKTsKICAgICAgICAgcmV0
dXJuICZ2bS5qc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiAmdm0uc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2
aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IERl
c3Ryb3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2Vs
bCogY2VsbCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2Vs
bCk7CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
KENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2Nh
dG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVk
c0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQoreworfQorCitKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UoKQoreworfQorCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJl
ZUxpc3QpCit7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0
LCBEZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMo
KSh2bSwgY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMCBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC00MywyMSArNDIsMjEgQEAgc3RydWN0IERlc3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCiAKLUpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6SlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwg
aGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlND
ZWxsKSwgYWxsb2NhdG9yKQorSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5
cGUoQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxs
KSkKIHsKIH0KIAotSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCkKK0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFw
Q2VsbFR5cGU6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkKIHsKIH0K
IAotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICBoYW5kbGUuZmlu
aXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIGhh
bmRsZS5maW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIERlc3Ryb3lGdW5j
KCkpOwogfQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJv
eShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKIHsKICAgICBEZXN0cm95
RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmgJKHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmg6MjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJTdWJzcGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgfkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpOworICAg
IAorICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJT
dWJzcGFjZS5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlIDogcHVibGljIFN1YnNw
YWNlIHsKK2NsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUgOiBwdWJs
aWMgSGVhcENlbGxUeXBlIHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIH5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCk7CiAgICAg
CiAgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBv
dmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0NTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIgotCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1
ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIHsK
LQotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3Io
KShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0YXRpY19jYXN0PEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxl
LmRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0K
LUpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0
cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQot
ewotfQotCi1KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBG
cmVlTGlzdCogZnJlZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNw
YWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAg
RGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
U3Vic3BhY2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIH5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoKTsKLSAgICAKLSAg
ICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJy
aWRlOwotICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gV2Ugc3BlY2lhbGl6ZSB0aGUgc3RyaW5nIHN1YnNwYWNlIHRvIGdldCB0aGUgZmFzdGVz
dCBwb3NzaWJsZSBzd2VlcC4gVGhpcyB3b3VsZG4ndCBiZQogICAgIC8vIG5lY2Vzc2FyeSBpZiBK
U1N0cmluZyBkaWRuJ3QgaGF2ZSBhIGRlc3RydWN0b3IuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWU+
Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENv
bXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biAmdm0uc3RyaW5nU3BhY2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0
NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNl
LmNwcDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hl
YXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNTdHJpbmdTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IERlc3Ry
b3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCog
Y2VsbCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbCkt
PkpTU3RyaW5nOjp+SlNTdHJpbmcoKTsKKyAgICB9Cit9OworCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworSlNTdHJpbmdTdWJzcGFjZTo6SlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUs
IEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICA6IFN1
YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwg
SGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK3sKK30KKworSlNTdHJpbmdTdWJzcGFjZTo6
fkpTU3RyaW5nU3Vic3BhY2UoKQoreworfQorCit2b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQor
eworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJv
eUZ1bmMoKSk7Cit9CisKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkpTU3RyaW5nU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU1N0cmluZ0hlYXBD
ZWxsVHlwZS5oIgogCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtNDMsMjEgKzQyLDIxIEBAIHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi1KU1N0cmluZ1N1YnNwYWNlOjpKU1N0cmluZ1N1YnNwYWNl
KENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2Nh
dG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVk
c0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQorSlNTdHJpbmdIZWFw
Q2VsbFR5cGU6OkpTU3RyaW5nSGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxv
Y2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewog
fQogCi1KU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCitKU1N0cmluZ0hlYXBD
ZWxsVHlwZTo6fkpTU3RyaW5nSGVhcENlbGxUeXBlKCkKIHsKIH0KIAotdm9pZCBKU1N0cmluZ1N1
YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0
KiBmcmVlTGlzdCkKK3ZvaWQgSlNTdHJpbmdIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtl
ZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRs
ZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Cisg
ICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJv
eUZ1bmMoKSk7CiB9CiAKLXZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKK3ZvaWQgSlNTdHJpbmdIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBK
U0NlbGwqIGNlbGwpCiB7CiAgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxU
eXBlLmgJKHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdTdWJzcGFjZS5oOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBKU1N0cmluZ1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFs
aWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5K
U1N0cmluZ1N1YnNwYWNlKCk7CisgICAgCisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlc3Ryb3koVk0mLCBK
U0NlbGwqKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBl
LmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNCBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSGVhcENl
bGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1N0cmluZ1N1YnNwYWNlIDog
cHVibGljIFN1YnNwYWNlIHsKK2NsYXNzIEpTU3RyaW5nSGVhcENlbGxUeXBlIDogcHVibGljIEhl
YXBDZWxsVHlwZSB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJz
cGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTdHJpbmdTdWJzcGFjZSgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTU3RyaW5nSGVhcENlbGxUeXBlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB+SlNTdHJpbmdIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lkIGZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZv
aWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2Uu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SlNTdHJpbmdTdWJzcGFjZS5oIgotCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIHsKLQotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbCktPkpTU3RyaW5nOjp+
SlNTdHJpbmcoKTsKLSAgICB9Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNT
dHJpbmdTdWJzcGFjZTo6SlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAs
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUs
IGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpT
Q2VsbCksIGFsbG9jYXRvcikKLXsKLX0KLQotSlNTdHJpbmdTdWJzcGFjZTo6fkpTU3RyaW5nU3Vi
c3BhY2UoKQotewotfQotCi12b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtl
ZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQotewotICAgIGhhbmRs
ZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Ci19
Ci0KLXZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkK
LXsKLSAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1
YnNwYWNlLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNT
dHJpbmdTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTdHJpbmdT
dWJzcGFjZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikg
b3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9u
IDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIEFMV0FZU19JTkxJTkUgSlNB
cnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFs
aXplZCA9IGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7
Ci0gICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFs
bG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CiAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAs
IDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjI0NTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwogICAgICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCiAjaW5jbHVkZSAi
SlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIgogI2luY2x1ZGUgIkpTRml4ZWRBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5o
IgpAQCAtNzMsMTMgKzc0LDE2IEBACiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1
ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
IgogI2luY2x1ZGUgIkpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiSlNTY3Jp
cHRGZXRjaGVyLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiSlNTdHJpbmdIZWFwQ2Vs
bFR5cGUuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxs
VHlwZS5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgi
CiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTE3MSwxNyArMTc1LDI0IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGZhc3RNYWxsb2NBbGxvY2F0b3Ioc3Rk
OjptYWtlX3VuaXF1ZTxGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKICAgICAs
IHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8R2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6UHJpbWl0aXZlKSkKICAgICAsIGpzVmFsdWVH
aWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUpKQotICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIEFsbG9jYXRv
ckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSks
IHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQotICAgICwganNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgQWxsb2Nh
dG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5
KSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQotICAgICwgY2VsbFNwYWNlKCJKU0Nl
bGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhl
YXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQotICAgICwganNWYWx1
ZUdpZ2FjYWdlQ2VsbFNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEpTQ2VsbCIsIGhlYXAsIEFsbG9j
YXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCks
IGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAsIGRlc3RydWN0aWJsZUNlbGxT
cGFjZSgiRGVzdHJ1Y3RpYmxlIEpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVl
ZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0
KCkpCi0gICAgLCBzdHJpbmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQotICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0IiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIGVhZ2VybHlT
d2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJFYWdlcmx5IFN3ZXB0IEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0IiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIHNlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3BhY2UoIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIsIGhl
YXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBhdXhpbGlhcnlIZWFwQ2VsbFR5
cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9l
c05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSkpKQorICAgICwgY2VsbEhl
YXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxsVHlwZT4oQWxsb2NhdG9yQXR0cmli
dXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkpCisgICAgLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBl
PihBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwp
KSkKKyAgICAsIHN0cmluZ0hlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTU3RyaW5nSGVh
cENlbGxUeXBlPigpKQorICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0ZDo6
bWFrZV91bmlxdWU8SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCisgICAgLCBz
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCisgICAgLCB3ZWJBc3NlbWJseUNv
ZGVCbG9ja0hlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tIZWFwQ2VsbFR5cGU+KCkpCisgICAgLCBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
KCJQcmltaXRpdmUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxU
eXBlLmdldCgpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhl
YXAsIGF1eGlsaWFyeUhlYXBDZWxsVHlwZS5nZXQoKSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9y
LmdldCgpKQorICAgICwgY2VsbFNwYWNlKCJKU0NlbGwiLCBoZWFwLCBjZWxsSGVhcENlbGxUeXBl
LmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwganNWYWx1ZUdpZ2FjYWdl
Q2VsbFNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEpTQ2VsbCIsIGhlYXAsIGNlbGxIZWFwQ2VsbFR5
cGUuZ2V0KCksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGRlc3RydWN0
aWJsZUNlbGxTcGFjZSgiRGVzdHJ1Y3RpYmxlIEpTQ2VsbCIsIGhlYXAsIGRlc3RydWN0aWJsZUNl
bGxIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBz
dHJpbmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCBzdHJpbmdIZWFwQ2VsbFR5cGUuZ2V0KCksIGZh
c3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgi
SlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBkZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBlYWdlcmx5U3dlcHRE
ZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiRWFnZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJsZU9iamVj
dCIsIGhlYXAsIGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxv
Y0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UoIkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIsIGhlYXAsIHNlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKLSAgICAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UoIkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkp
CisgICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKCJKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3BhY2UiLCBoZWFwLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwgZmFz
dE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKICNlbmRpZgogICAgICwgdm1UeXBlKHZtVHlwZSkKICAg
ICAsIGNsaWVudERhdGEoMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNp
bmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiQ29tcGxldGVTdWJz
cGFjZS5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJDb250cm9s
Rmxvd1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKQEAgLTQxLDE4
ICs0MiwxMyBAQAogI2luY2x1ZGUgIkludHJpbnNpYy5oIgogI2luY2x1ZGUgIkpJVFRodW5rcy5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCi0jaW5jbHVkZSAiSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCi0jaW5jbHVkZSAiSlNTdHJpbmdTdWJzcGFjZS5oIgot
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgogI2luY2x1ZGUg
Ik51bWVyaWNTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAi
U3Ryb25nLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKLSNpbmNsdWRlICJTdWJzcGFj
ZS5oIgogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlZN
RW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCkBAIC0xMDgsOSArMTA0LDEzIEBA
IGNsYXNzIEhlYXBQcm9maWxlcjsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBJbnRlcnByZXRl
cjsKIGNsYXNzIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb247CitjbGFzcyBKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNP
YmplY3Q7CiBjbGFzcyBKU1J1bkxvb3BUaW1lcjsKK2NsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RIZWFwQ2VsbFR5cGU7CitjbGFzcyBKU1N0cmluZ0hlYXBDZWxsVHlwZTsKK2NsYXNzIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU7CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRh
YmxlOwpAQCAtMjkwLDkgKzI5MCwxNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBmYXN0TWFsbG9jQWxsb2NhdG9yOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+IHByaW1pdGl2
ZUdpZ2FjYWdlQWxsb2NhdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I+IGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcjsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxIZWFwQ2VsbFR5cGU+IGF1eGlsaWFyeUhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SGVhcENlbGxUeXBlPiBjZWxsSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxIZWFwQ2VsbFR5cGU+IGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGU7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEpTU3RyaW5nSGVhcENlbGxUeXBlPiBzdHJpbmdIZWFwQ2VsbFR5cGU7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlPiBkZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU+IHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVh
cENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKICAgICAKLSAgICBT
dWJzcGFjZSBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBUeXBlZCBhcnJheXMs
IHN0cmluZ3MsIGJpdHZlY3RvcnMsIGV0YyBnbyBoZXJlLgotICAgIFN1YnNwYWNlIGpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBCdXR0ZXJmbGllcywgYXJyYXlzIG9mIEpTVmFsdWVz
LCBldGMgZ28gaGVyZS4KKyAgICBDb21wbGV0ZVN1YnNwYWNlIHByaW1pdGl2ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2U7IC8vIFR5cGVkIGFycmF5cywgc3RyaW5ncywgYml0dmVjdG9ycywgZXRjIGdv
IGhlcmUuCisgICAgQ29tcGxldGVTdWJzcGFjZSBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZTsgLy8gQnV0dGVyZmxpZXMsIGFycmF5cyBvZiBKU1ZhbHVlcywgZXRjIGdvIGhlcmUuCiAKICAg
ICAvLyBXZSBtYWtlIGNyb3NzLWN1dHRpbmcgYXNzdW1wdGlvbnMgYWJvdXQgdHlwZWQgYXJyYXlz
IGJlaW5nIGluIHRoZSBwcmltaXRpdmUgR2lnYWNhZ2UgYW5kIGJ1dHRlcmZsaWVzCiAgICAgLy8g
YmVpbmcgaW4gdGhlIEpTVmFsdWUgZ2lnYWNhZ2UuIEZvciBzb21lIHR5cGVzLCBpdCdzIHN1cGVy
IG9idmlvdXMgd2hlcmUgdGhleSBzaG91bGQgZ28sIGFuZCBzbyB3ZQpAQCAtMzAwLDcgKzMwOCw3
IEBAIHB1YmxpYzoKICAgICAvLyBjb25zdGFudCBzb21ld2hlcmUuCiAgICAgLy8gRklYTUU6IE1h
eWJlIGl0IHdvdWxkIGJlIGJldHRlciBpZiBldmVyeW9uZSBhYnN0cmFjdGVkIHRoaXM/CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTI0OAotICAgIEFM
V0FZU19JTkxJTkUgU3Vic3BhY2UmIGdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoR2lnYWNhZ2U6Oktp
bmQga2luZCkKKyAgICBBTFdBWVNfSU5MSU5FIENvbXBsZXRlU3Vic3BhY2UmIGdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UoR2lnYWNhZ2U6OktpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
a2luZCkgewogICAgICAgICBjYXNlIEdpZ2FjYWdlOjpQcmltaXRpdmU6CkBAIC0zMTUsMTUgKzMy
MywxNSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIC8vIFdoZW5ldmVyIHBvc3NpYmxlLCB1
c2Ugc3Vic3BhY2VGb3I8Q2VsbFR5cGU+KHZtKSB0byBnZXQgb25lIG9mIHRoZXNlIHN1YnNwYWNl
cy4KLSAgICBTdWJzcGFjZSBjZWxsU3BhY2U7Ci0gICAgU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdl
Q2VsbFNwYWNlOwotICAgIFN1YnNwYWNlIGRlc3RydWN0aWJsZUNlbGxTcGFjZTsKLSAgICBKU1N0
cmluZ1N1YnNwYWNlIHN0cmluZ1NwYWNlOwotICAgIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2UgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7Ci0gICAgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZSBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKLSAgICBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Ugc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZTsKKyAg
ICBDb21wbGV0ZVN1YnNwYWNlIGNlbGxTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIGpzVmFs
dWVHaWdhY2FnZUNlbGxTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIGRlc3RydWN0aWJsZUNl
bGxTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIHN0cmluZ1NwYWNlOworICAgIENvbXBsZXRl
U3Vic3BhY2UgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSBl
YWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNl
IHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2U7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQot
ICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSB3ZWJBc3NlbWJseUNvZGVCbG9ja1Nw
YWNlOworICAgIENvbXBsZXRlU3Vic3BhY2Ugd2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZTsKICNl
bmRpZgogCiAgICAgVk1UeXBlIHZtVHlwZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0ud2ViQXNzZW1ibHlDb2RlQmxv
Y2tTcGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBl
LmNwcAkocmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOjIyNDUzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJT
dWJzcGFjZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK3N0
cnVjdCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0m
LCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfZmluYWw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz46OnZhbHVlLCAiT3RoZXJ3aXNlLCB0aGlz
IGNvZGUgd291bGQgbm90IGJlIGNvcnJlY3QuIik7CisgICAgICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmluZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9Cit9OworCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
OjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFw
LCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1l
LCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCit7Cit9CisKK3ZvaWQgSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxl
JiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBL
bm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDE0ICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgiCiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDcsMjEg
KzQ2LDIxIEBAIHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJp
YnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVl
ZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKLUpTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCitKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hl
YXBDZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
OjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVl
TGlzdCkKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0g
ICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVu
YygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKGZyZWVMaXN0
LCBEZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit2b2lkIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAg
RGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hl
YXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oOjIyNDUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2Vs
bFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7CitwdWJsaWM6CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcg
bmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKKyAgICB2aXJ0dWFsIH5KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVz
dHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
a0hlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0j
aW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSA6IHB1Ymxp
YyBTdWJzcGFjZSB7CitjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlIDog
cHVibGljIEhlYXBDZWxsVHlwZSB7CiBwdWJsaWM6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsK
LSAgICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKTsKKyAgICBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCk7CisgICAgdmlydHVhbCB+SlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSgpOwogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0
cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJz
cGFjZS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAi
TWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAot
ICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s+Ojp2YWx1ZSwgIk90aGVyd2lzZSwgdGhpcyBjb2RlIHdvdWxkIG5vdCBiZSBjb3Jy
ZWN0LiIpOwotICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbmZvKCktPm1ldGhvZFRh
YmxlLmRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
Ci0KLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmli
dXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQotewot
fQotCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJl
ZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0
LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgRGVzdHJveUZ1bmMoKSh2
bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgJKHJldmlzaW9uIDIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZS5oCShub25leGlzdGVudCkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UgOiBwdWJsaWMg
U3Vic3BhY2UgewotcHVibGljOgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShD
U3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgdmlydHVh
bCB+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCk7Ci0gICAgCi0gICAgdm9pZCBmaW5p
c2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNp
b24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgLy8gV2UgaG9sZCBvbnRvIGEgbG90IG9mIG1lbW9yeSwgc28gaXQgbWFrZXMgYSBsb3Qg
b2Ygc2Vuc2UgdG8gYmUgc3dlcHQgZWFnZXJseS4KICAgICAgICAgcmV0dXJuICZ2bS5lYWdlcmx5
U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyMjQ1MzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogSlNW
TUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICA6IG1fYnVpbHRpbkZ1bmN0
aW9ucyh2bSkKICAgICAsIG1fYnVpbHRpbk5hbWVzKCZ2bSkKLSAgICAsIG1fb3V0cHV0Q29uc3Ry
YWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFw
LCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQotICAgICwgbV9nbG9iYWxPYmplY3RPdXRw
dXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBPdXRwdXQgQ29uc3Ry
YWludCIsIHZtLmhlYXAsIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBtX291
dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBXcmFwcGVyIHcvIE91dHB1dCBDb25zdHJhaW50
Iiwgdm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCB2bS5m
YXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgbV9nbG9iYWxPYmplY3RPdXRwdXRDb25z
dHJhaW50U3BhY2UoIldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBPdXRwdXQgQ29uc3RyYWludCIs
IHZtLmhlYXAsIHZtLnNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCB2
bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAyMjQ1
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIFdlYkNvcmVCdWls
dGluTmFtZXMmIGJ1aWx0aW5OYW1lcygpIHsgcmV0dXJuIG1fYnVpbHRpbk5hbWVzOyB9CiAgICAg
SlNCdWlsdGluRnVuY3Rpb25zJiBidWlsdGluRnVuY3Rpb25zKCkgeyByZXR1cm4gbV9idWlsdGlu
RnVuY3Rpb25zOyB9CiAgICAgCi0gICAgSlNDOjpTdWJzcGFjZSYgb3V0cHV0Q29uc3RyYWludFNw
YWNlKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2U7IH0KLSAgICBKU0M6OlN1YnNw
YWNlJiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBtX2dsb2Jh
bE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZTsgfQorICAgIEpTQzo6Q29tcGxldGVTdWJzcGFj
ZSYgb3V0cHV0Q29uc3RyYWludFNwYWNlKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50U3Bh
Y2U7IH0KKyAgICBKU0M6OkNvbXBsZXRlU3Vic3BhY2UmIGdsb2JhbE9iamVjdE91dHB1dENvbnN0
cmFpbnRTcGFjZSgpIHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNl
OyB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hP
dXRwdXRDb25zdHJhaW50U3BhY2UoY29uc3QgRnVuYyYgZnVuYykKQEAgLTc2LDggKzc2LDggQEAg
cHJpdmF0ZToKICAgICBKU0J1aWx0aW5GdW5jdGlvbnMgbV9idWlsdGluRnVuY3Rpb25zOwogICAg
IFdlYkNvcmVCdWlsdGluTmFtZXMgbV9idWlsdGluTmFtZXM7CiAgICAgCi0gICAgSlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlOwotICAgIEpT
Qzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlIG1fZ2xvYmFsT2JqZWN0T3V0cHV0
Q29uc3RyYWludFNwYWNlOworICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSBtX291dHB1dENvbnN0
cmFpbnRTcGFjZTsKKyAgICBKU0M6OkNvbXBsZXRlU3Vic3BhY2UgbV9nbG9iYWxPYmplY3RPdXRw
dXRDb25zdHJhaW50U3BhY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3MzUsNyArMjczNSw3IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgIyB0aGlzIGp1c3QgY2FsbHMgdmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhp
cy4KICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgdmlz
aXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsKICAg
ICAgICAgICAgIG15ICRzdWJzcGFjZUZ1bmMgPSBJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNl
KSA/ICJnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IiIDogIm91dHB1dENv
bnN0cmFpbnRTdWJzcGFjZUZvciI7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHRlbXBsYXRlPHR5cGVuYW1lPiBzdGF0aWMgSlNDOjpTdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pIHsgcmV0dXJuICRzdWJzcGFjZUZ1bmModm0pOyB9XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0YXRpYyBK
U0M6OkNvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKSB7IHJldHVybiAk
c3Vic3BhY2VGdW5jKHZtKTsgfVxuIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326264</attachid>
            <date>2017-11-07 14:38:35 -0800</date>
            <delta_ts>2017-11-17 11:59:32 -0800</delta_ts>
            <desc>more things compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>184686</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNDUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDcwLDYg
KzQ3MCw3IEBAIGhlYXAvQ2VsbENvbnRhaW5lci5jcHAKIGhlYXAvQ29kZUJsb2NrU2V0LmNwcAog
aGVhcC9Db2xsZWN0aW9uU2NvcGUuY3BwCiBoZWFwL0NvbGxlY3RvclBoYXNlLmNwcAoraGVhcC9D
b21wbGV0ZVN1YnNwYWNlLmNwcAogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKIGhlYXAvRGVm
ZXJHQy5jcHAKIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcApAQCAtNDg2LDEyICs0ODcsMTUgQEAg
aGVhcC9IYW5kbGVTZXQuY3BwCiBoZWFwL0hhbmRsZVN0YWNrLmNwcAogaGVhcC9IZWFwLmNwcAog
aGVhcC9IZWFwQ2VsbC5jcHAKK2hlYXAvSGVhcENlbGxUeXBlLmNwcAogaGVhcC9IZWFwRmluYWxp
emVyQ2FsbGJhY2suY3BwCiBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAogaGVhcC9IZWFwUHJvZmls
ZXIuY3BwCiBoZWFwL0hlYXBTbmFwc2hvdC5jcHAKIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5j
cHAKIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAoraGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmNwcAoraGVhcC9Jc29TdWJzcGFjZS5jcHAKIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQu
Y3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNw
cApAQCAtNzcyLDcgKzc3Niw3IEBAIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlv
bi5jcHAKIHJ1bnRpbWUvSlNEYXRhVmlldy5jcHAKIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlw
ZS5jcHAKIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHAKLXJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZS5jcHAKK3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwCiBydW50aW1lL0pTRml4ZWRBcnJheS5jcHAKIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHAKIHJ1
bnRpbWUvSlNHZW5lcmF0b3JGdW5jdGlvbi5jcHAKQEAgLTgwNywxNCArODExLDE0IEBAIHJ1bnRp
bWUvSlNTY29wZS5jcHAKIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcAogcnVudGltZS9KU1Nj
cmlwdEZldGNoUGFyYW1ldGVycy5jcHAKIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5jcHAKLXJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAorcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAogcnVudGltZS9K
U1NldC5jcHAKIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKIHJ1bnRpbWUvSlNTb3VyY2VDb2Rl
LmNwcAogcnVudGltZS9KU1N0cmluZy5jcHAKIHJ1bnRpbWUvSlNTdHJpbmdJdGVyYXRvci5jcHAK
IHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCi1ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3Bw
CitydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAogcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAogcnVudGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCiBydW50aW1lL0pT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKQEAgLTk3Miw3ICs5NzYsNyBAQCB3YXNtL2pzL0pT
VG9XYXNtLmNwcAogd2FzbS9qcy9KU1RvV2FzbS5oCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3Bw
CiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCi13YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAKK3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hl
YXBDZWxsVHlwZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAKIHdh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TGlu
a0Vycm9yLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAKIAkJMEY0
QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAwNDM0MUE2IC8q
IEIzT3JpZ2luRHVtcC5oICovOyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZDMTEgLyogQWly
Rml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMu
aCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKLQkJMEY0RjgyODgxRTJGRkRFMDAwNzUx
ODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkREQjAwNzUxODRD
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0
QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4
NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEY4MjhDMUUzMUI5NzYw
MDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyOEExRTMxQjk3MTAw
NzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87IH07CiAJ
CTBGNTBBRjNDMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTBBRjNCMTkz
RThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLzsgfTsKIAkJMEY1
NTEzQTYxRDVBNjgyQzAwQzMyQkQ4IC8qIEZyZWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJl
ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNDAwLDggKzQwMCw4IEBACiAJCTBGN0RGMTM1MUUyOTcwREMwMDk1OTUxQiAvKiBNYXJrZWRT
cGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGN0RGMTMwMUUyOTcwRDUwMDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdERjEzNzFF
Mjk3MEUxMDA5NTk1MUIgLyogU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0RG
MTM4MUUyOTcwRTQwMDk1OTUxQiAvKiBTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTMzMUUyOTcwRDUwMDk1OTUxQiAv
KiBTdWJzcGFjZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVP
YmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYxM0UxRTJBRkM0QjAw
OTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hl
YXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3REYxNDYx
RTJCRUY2QTAwOTU5NTFCIC8qIE1hcmtlZEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUx
QiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJFIC8qIERGR1N0
b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5oICovOyB9OwogCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUg
LyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU0MCw2ICs1NDAsMTEgQEAK
IAkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFF
MDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFODE3NDgzMEEyMDA3QjNDMUIgLyogREZH
V29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyB9OwogCQkwRkRC
MkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFC
IC8qIENvbmN1cnJlbnRKU0xvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkRDRTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZh
aWx1cmVNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMjIx
RkFFODU4QzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBD
ZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEyODFGQUZBODU5
MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkwMSAvKiBJc29T
dWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMzIxRkIxMURBNDAwNkYz
OTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmggKi87IH07CiAJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRh
dG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5oICovOyB9OwogCQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdEMTFEOUM2MDg2
MDAxQjk4MjUgLyogQjNLaW5kLmggKi87IH07CkBAIC0xMDk4LDcgKzExMDMsNyBAQAogCQk3OURB
RTI3QTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZB
QSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5REZDQkRCMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9w
ZXJ0eUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OURGQ0JEQTFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RUUwQzAwMUI0
QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyog
VmFyaWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
a0hlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OUY4RkMxRjFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5RjhGQzFEMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFz
ZS5oICovOyB9OwogCQk3OUZDOEEwODFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0
cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlGQzhBMDcxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkM1NDdEMzFC
Njk1OUExMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3Jt
YXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjI3MCw4ICsyMjc1LDggQEAKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2lu
RHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbkR1
bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNv
dW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyODkxRTMxQjk3MTAwNzUxODRDIC8qIFN0
b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyOEExRTMxQjk3MTAwNzUxODRD
IC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkwMDY3NEVFOCAv
KiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJl
Q2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDEzLDEwICsy
NDE4LDEwIEBACiAJCTBGN0RGMTMxMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdWJzcGFjZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWJzcGFjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdERjEzMzFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vic3Bh
Y2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YnNwYWNlSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjdERjEzOTFFMjk3MTBFMDA5
NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8q
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ1N1YnNw
YWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0UxRTJBRkM0QjAw
OTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTdHJpbmdTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3REYxM0Qx
RTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSGVhcENlbGxUeXBlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3Ry
aW5nSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3Ry
aW5nSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTQ1
MUUyQkVGNjgwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZEFsbG9jYXRvcklubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3Jl
QmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVy
aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyQ2x1c3Rlcmlu
Z1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjY2LDYgKzI2NzEsMTUg
QEAKIAkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRm
Zy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U2
MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdXb3JrbGlzdC5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25j
dXJyZW50SlNMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmN1cnJl
bnRKU0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMUIxRkFFNjFG
NDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0Ux
MUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFw
Q2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjAxRkFFODU4
NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwQ2Vs
bFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyNzFGQUZBODU5
MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21w
bGV0ZVN1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMjgx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29t
cGxldGVTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyQjFG
QUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXNvU3Vic3Bh
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkMxRkFGQjRERTAwNkYz
OTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElzb1N1YnNwYWNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkYxRkIxMUQ5RDAwNkYzOTAx
IC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXNv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIzMTY2
NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9
IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENlbGxDb250YWluZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU4MCw4ICszNTk0LDggQEAKIAkJNzlERkNCREEx
RDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGFzT3duUHJvcGVydHlDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9u
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUVu
dmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkUxQjRB
RkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3OUVG
RDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5RUZENDgxMUVCQzA0NUMwMEYzREZFQSAvKiBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3Bw
OyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsgcGF0aCA9IGpz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaElu
c2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1
c2hJbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RjhG
QzFEMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25Q
aGFzZS5oOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdS
ZWdpc3RlcmVkU3RydWN0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDg3LDYgKzU1MDEsNyBAQAogCQkJ
CTBGRUMzQzUwMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAq
LywKIAkJCQkwRkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5oICovLAogCQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUu
aCAqLywKKwkJCQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVN
b2RlLmggKi8sCiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJp
YnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxvY2F0b3JB
dHRyaWJ1dGVzLmggKi8sCiAJCQkJMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxDb250
YWluZXIuY3BwICovLApAQCAtNTUwMSw2ICs1NTE2LDggQEAKIAkJCQkwRkE3NjIwMTFEQjkyNDIz
MDBCN0EyRkQgLyogQ29sbGVjdGlvblNjb3BlLmggKi8sCiAJCQkJMEZEMEU1RTUxRTQzRDM0NzAw
MDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmNwcCAqLywKIAkJCQkwRkQwRTVFNjFFNDNEMzQ3MDAw
NkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAqLywKKwkJCQkwRkRDRTEyNzFGQUZBODU5MDA2RjM5
MDEgLyogQ29tcGxldGVTdWJzcGFjZS5jcHAgKi8sCisJCQkJMEZEQ0UxMjgxRkFGQTg1OTAwNkYz
OTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVD
MUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgz
QjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCTBGN0RGMTJGMUUyOTcwRDUwMDk1
OTUxQiAvKiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLApAQCAtNTU1MSw2ICs1NTY4LDggQEAK
IAkJCQlEQzNEMkIwQjFEMzQzNzZFMDBCQTkxOEMgLyogSGVhcENlbGwuY3BwICovLAogCQkJCURD
M0QyQjA5MUQzNDMxNjEwMEJBOTE4QyAvKiBIZWFwQ2VsbC5oICovLAogCQkJCTBGMDcwQTQ0MUQ1
NDNBODkwMDZFNzIzMiAvKiBIZWFwQ2VsbElubGluZXMuaCAqLywKKwkJCQkwRkRDRTEyMDFGQUU4
NTg3MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRkRDRTExRjFGQUU4NTg3
MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggKi8sCiAJCQkJMEYwQ0FFRkQxRUM0REE4NTAwOTcw
RDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5jcHAgKi8sCiAJCQkJMEYwQ0FFRkUxRUM0REE4
NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovLAogCQkJCTBGMzJCRDBFMUJC
MzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgKi8sCkBAIC01NTY3LDYgKzU1ODYs
MTAgQEAKIAkJCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0aWwuaCAqLywKIAkJ
CQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCAqLywK
IAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8s
CisJCQkJMEZEQ0UxMkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IuY3BwICovLAorCQkJCTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmggKi8sCisJCQkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1
YnNwYWNlLmNwcCAqLywKKwkJCQkwRkRDRTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3Bh
Y2UuaCAqLywKIAkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuY3BwICovLAogCQkJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGlu
ZVNldC5oICovLAogCQkJCTBGMDcwQTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRp
b24uY3BwICovLApAQCAtNjUwNyw4ICs2NTMwLDggQEAKIAkJCQk5Nzg4RkMyMjE0NzFBRDBDMDA2
OENFMkQgLyogSlNEYXRlTWF0aC5jcHAgKi8sCiAJCQkJOTc4OEZDMjMxNDcxQUQwQzAwNjhDRTJE
IC8qIEpTRGF0ZU1hdGguaCAqLywKIAkJCQlDMkE3RjY4NzE2MDQzMkQ0MDBGNzZCOTggLyogSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCAqLywKLQkJCQkwRjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyog
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8sCi0JCQkJMEY3REYxM0ExRTI5NzEw
RTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLywKKwkJCQkwRjdE
RjEzOTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwICovLAorCQkJCTBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oICovLAogCQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBK
U0V4cG9ydE1hY3Jvcy5oICovLAogCQkJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRGQiAvKiBKU0Zp
eGVkQXJyYXkuY3BwICovLAogCQkJCTc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVk
QXJyYXkuaCAqLywKQEAgLTY1OTMsOCArNjYxNiw4IEBACiAJCQkJRTM4RDA2MEIxRjhFODE0MTAw
NjQ5Q0YyIC8qIEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmggKi8sCiAJCQkJMEY5MTlEMEUxNTdG
MzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovLAogCQkJCTBG
OTE5RDBGMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi8s
Ci0JCQkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RTdWJzcGFjZS5jcHAgKi8sCi0JCQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovLAorCQkJCTBGNEY4Mjg1MUUyRkZEREIw
MDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcCAqLywK
KwkJCQkwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oICovLAogCQkJCUE3Mjk5RDlCMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1Nl
dC5jcHAgKi8sCiAJCQkJQTcyOTlEOUMxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0LmggKi8sCiAJ
CQkJQTc5MERENjkxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuY3BwICovLApAQCAt
NjYwOSw4ICs2NjMyLDggQEAKIAkJCQk3MEVDMEVCRDFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJp
bmdJdGVyYXRvci5oICovLAogCQkJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmlu
Z0pvaW5lci5jcHAgKi8sCiAJCQkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmggKi8sCi0JCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vi
c3BhY2UuY3BwICovLAotCQkJCTBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1
YnNwYWNlLmggKi8sCisJCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVh
cENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8q
IEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLywKIAkJCQk3MEVDQTYwMDFBRkRCRUEyMDA0NDk3Mzkg
LyogSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCAqLywKQEAgLTc3ODgsOCArNzgxMSw4IEBACiAJ
CQkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAqLywKIAkJCQk1
MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAgKi8s
CiAJCQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2su
aCAqLywKLQkJCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlLmNwcCAqLywKLQkJCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi8sCisJCQkJNzlFRkQ0ODExRUJDMDQ1QzAw
RjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwICovLAorCQkJ
CTc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlLmggKi8sCiAJCQkJQUQyRkNCQTYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1i
bHlDb21waWxlRXJyb3IuY3BwICovLAogCQkJCUFEMkZDQkE3MURCNThEQTQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggKi8sCiAJCQkJNzk2RkI0MzkxREZGOEMzRjAwMzlD
OTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi8sCkBAIC04MDAwLDYgKzgwMjMsNyBAQAog
CQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29k
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQ0UxMzIxRkIxMURBNDAwNkYzOTAxIC8qIElzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMzNUI4MTYzOUMx
RUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0E4QUYzNTE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRkM5OUQ1MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODA1MSw2ICs4MDc1LDcgQEAKIAkJCQkwRkVD
ODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZEQ0UxMkQxRkFGQjRFNTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4OEYgLyogQjND
b21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzkxOUI3ODAxRTAzNTU5QzAwNUJFRUQ4
IC8qIEIzQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTkzLDYgKzg2MTgsNyBAQAogCQkJ
CUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJNzBCNzkxOTUxQzAyNEEyODAwMjQ4MUUyIC8qIEdlbmVyYXRvckZ1bmN0
aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk3MUMwMjRBMjkwMDI0
ODFFMiAvKiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZEQ0UxMkExRkFGQTg1RjAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcwQjc5MTk5MUMwMjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTlEMUMwMjRBNTYwMDI0ODFFMiAvKiBHZW5lcmF0
b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04Nzc2LDcgKzg4
MDIsNyBAQAogCQkJCTk5NkI3MzFDMUJEQTA4REQwMDMzMUI4NCAvKiBKU0RhdGFWaWV3UHJvdG90
eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8q
IEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5
OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3REYxM0Mx
RTI5NzExMzAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTYxQUREQjdBRDAw
NTVERTJDIC8qIEpTRG9sbGFyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4MUFEREI3
QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAt
ODgzMCw2ICs4ODU2LDcgQEAKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1
bGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDk3MjI3NTJEQzU0NDU5QjkxMjVC
NTM5IC8qIEpTTW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFF
RjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRENFMTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJl
Y29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMUQxQjkwMTNDMzAwMzQ2QjUyIC8qIEpT
TmF0aXZlU3RkRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODU0LDcgKzg4ODEsNyBA
QAogCQkJCUUzMjAxQzFEMUY4RTgyMzYwMDc2QTAzMiAvKiBKU1NjcmlwdEZldGNoUGFyYW1ldGVy
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2Ny
aXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0
RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
NEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzI5OUQ5RTE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCREZDQjJCQkU5MEY0MTM0OUUxQjBCRUQgLyogSlNTb3VyY2VDb2RlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTg4NjYsNyArODg5Myw3IEBACiAJCQkJQkMxOEM0MjgwRTE2RjVDRDAwQjM0NDYw
IC8qIEpTU3RyaW5nUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyOTBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNTdHJpbmdSZWZDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyOEQ0QTgxNzdC
NzFDODAwMDdGQTNDIC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEY3REYxM0YxRTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3lt
Ym9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA2MUFGREJFQTIwMDQ0
OTczOSAvKiBKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMz
NkVBMUY3NUFENkEwMDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODk0
LDcgKzg5MjEsNyBAQAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFz
c2VtYmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyog
SlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzlFRkQ0ODQxRUJD
MDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQw
MEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTIyNiw2ICs5MjUzLDcgQEAKIAkJCQkwRkZC
NkMzOTFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyRDRERUMxOTgzMkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5cGVTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZf
ZGVjb2RlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU2
LDcgKzk1Niw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5s
aW5lKSB7Ci0gICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CisgICAg
ICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpBc3NlcnQpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2shCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFs
bG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFs
bG9jYXRpb25Qcm9maQogICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0
OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpT
RmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3IoYWxsb2NhdGlv
blNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uY2VsbFNwYWNlLmFs
bG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6QXNzZXJ0KTsKIAogICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIGV4dHJhIGlubGluZSBjYXBh
Y2l0eSBhdmFpbGFibGUgaW4gdGhlIHNpemUgY2xhc3MuCiAgICAgaWYgKGFsbG9jYXRvcikgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzMwLDcgKzQzMzAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9j
YXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFz
c2VydCk7CiAKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0ciks
IGFsbG9jYXRvckdQUik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwg
YWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1
c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyNDUz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlUmF3T2JqZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgc3RvcmFn
ZUdQUik7CiAgICAgCiAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdG9yRm9yKHNpemUpKSB7CisgICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRv
ckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpKSB7CiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFnZUdQUiwgYWxsb2NhdG9y
LCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgIApAQCAt
MTI0LDcgKzEyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUK
ICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRv
ckZvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIg
PSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsK
ICAgICBpZiAoYWxsb2NhdG9yUHRyKSB7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3JQdHIpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CkBAIC00MjQ4LDcg
KzQyNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9kCiAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAogICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1hcmtlZEFsbG9jYXRv
ciA9IHN1YnNwYWNlRm9yPEpTU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvcihzaXpl
b2YoSlNSb3BlU3RyaW5nKSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBtYXJrZWRBbGxvY2F0b3Ig
PSBzdWJzcGFjZUZvcjxKU1N0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQobWFya2VkQWxsb2NhdG9yKTsKICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobWFya2VkQWxsb2NhdG9yKSwgYWxsb2NhdG9yR1BSKTsKICAgICBlbWl0QWxs
b2NhdGVKU0NlbGwocmVzdWx0R1BSLCBtYXJrZWRBbGxvY2F0b3IsIGFsbG9jYXRvckdQUiwgVHJ1
c3RlZEltbVB0cihtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKG1faml0LnZtKCktPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkBAIC04NDMwLDcg
Kzg0MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAg
CiAgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNW
YWx1ZSk7CiAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpz
VmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihzaXplKTsKKyAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpBc3NlcnQpOwogCiAgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigp
LT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTg0NzUsNyArODQ3
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBzaXpl
X3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiAgICAgQVNTRVJU
KG5ld1NpemUgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpKTsKICAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZv
cihuZXdTaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCkt
PmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3
U2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogCiAgICAgaWYgKCFhbGxvY2F0
b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFk
ZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI0LDEyICsxMjQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
CiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAogICAgIG1h
Y3JvKEFycmF5U3RvcmFnZV92ZWN0b3IsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCksIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBcCisgICAgbWFjcm8oQ29tcGxldGVTdWJzcGFj
ZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgQ29tcGxldGVTdWJzcGFjZTo6b2Zmc2V0T2ZBbGxvY2F0
b3JGb3JTaXplU3RlcCgpLCBzaXplb2YoTWFya2VkQWxsb2NhdG9yKikpIFwKICAgICBtYWNybyhE
aXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCks
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU0xleGljYWxFbnZpcm9ubWVu
dF92YXJpYWJsZXMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpLCBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250ZW50cywgMCwgc2l6ZW9mKFdyaXRlQmFy
cmllcjxKU1N0cmluZz4pKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZpYmVycywgSlNSb3Bl
U3RyaW5nOjpvZmZzZXRPZkZpYmVycygpLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikp
IFwKICAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3ZlcmZsb3dTdG9yYWdlLCBTY29wZWRBcmd1
bWVudHM6Om92ZXJmbG93U3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBc
Ci0gICAgbWFjcm8oU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIFN1YnNwYWNlOjpvZmZz
ZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihNYXJrZWRBbGxvY2F0b3IqKSkgXAog
ICAgIG1hY3JvKFdyaXRlQmFycmllckJ1ZmZlcl9idWZmZXJDb250ZW50cywgMCwgc2l6ZW9mKEpT
Q2VsbCopKSBcCiAgICAgbWFjcm8oY2hhcmFjdGVyczgsIDAsIHNpemVvZihMQ2hhcikpIFwKICAg
ICBtYWNybyhjaGFyYWN0ZXJzMTYsIDAsIHNpemVvZihVQ2hhcikpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyNDUz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTY2OSw3ICs1NjY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNs
b3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
c3Vic3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yKHNpemVvZihKU1Jv
cGVTdHJpbmcpKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFj
ZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihK
U1JvcGVTdHJpbmcpLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBhbGxvY2F0b3IpOwogICAgICAgICAKICAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKQEAgLTk0ODksNyArOTQ4OSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgfHwgaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpIHsKICAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2Jq
ZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAg
ICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogY2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpT
RmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOworICAgICAg
ICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogY2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpT
RmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIGNlbGxBbGxvY2F0b3IpOwogCiAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpOwpAQCAtMTA0ODUsNyArMTA0ODUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93
UGF0aCk7CiAKICAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gc2l6ZUluVmFsdWVzICogc2l6
ZW9mKEpTVmFsdWUpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtKCku
anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bSgpLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZUluQnl0ZXMsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgTFZhbHVlIHN0YXJ0T2ZTdG9yYWdl
ID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzbG93UGF0
aCk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
CiAgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluQnl0ZXMgKyBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc3RhcnRPZlN0b3JhZ2UpKTsKQEAgLTExNjI5LDcgKzEx
NjI5LDcgQEAgcHJpdmF0ZToKICAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoCiAgICAgICAgIHNp
emVfdCBzaXplLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJh
c2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvcihzaXplKTsK
KyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5
cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6QXNzZXJ0KTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0
SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7CiAgICAg
fQogICAgIApAQCAtMTE2NDYsMTAgKzExNjQ2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICAvLyBUcnkgdG8gZG8gc29tZSBjb25zdGFudC1mb2xkaW5nIGhlcmUuCiAgICAgICAgIGlm
IChzdWJzcGFjZS0+aGFzSW50UHRyKCkgJiYgc2l6ZS0+aGFzSW50UHRyKCkpIHsKLSAgICAgICAg
ICAgIFN1YnNwYWNlKiBhY3R1YWxTdWJzcGFjZSA9IGJpdHdpc2VfY2FzdDxTdWJzcGFjZSo+KHN1
YnNwYWNlLT5hc0ludFB0cigpKTsKKyAgICAgICAgICAgIENvbXBsZXRlU3Vic3BhY2UqIGFjdHVh
bFN1YnNwYWNlID0gYml0d2lzZV9jYXN0PENvbXBsZXRlU3Vic3BhY2UqPihzdWJzcGFjZS0+YXNJ
bnRQdHIoKSk7CiAgICAgICAgICAgICBzaXplX3QgYWN0dWFsU2l6ZSA9IHNpemUtPmFzSW50UHRy
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWN0dWFsQWxs
b2NhdG9yID0gYWN0dWFsU3Vic3BhY2UtPmFsbG9jYXRvckZvcihhY3R1YWxTaXplKTsKKyAgICAg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWN0dWFsQWxsb2NhdG9yID0gYWN0dWFsU3Vic3BhY2Ut
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWN0dWFsU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpBc3NlcnQpOwogICAgICAgICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0b3IpIHsKICAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tz
QmVmb3JlKGNvbnRpbnVhdGlvbik7CkBAIC0xMTY3OSwxMSArMTE2NzksMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKAogICAgICAgICAgICAgbV9v
dXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuU3Vic3BhY2VfYWxsb2NhdG9y
Rm9yU2l6ZVN0ZXAsCisgICAgICAgICAgICAgICAgbV9oZWFwcy5Db21wbGV0ZVN1YnNwYWNlX2Fs
bG9jYXRvckZvclNpemVTdGVwLAogICAgICAgICAgICAgICAgIHN1YnNwYWNlLCBtX291dC5zdWIo
c2l6ZUNsYXNzSW5kZXgsIG1fb3V0LmludFB0ck9uZSkpKTsKICAgICB9CiAgICAgCi0gICAgTFZh
bHVlIGFsbG9jYXRvckZvclNpemUoU3Vic3BhY2UmIHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJh
c2ljQmxvY2sgc2xvd1BhdGgpCisgICAgTFZhbHVlIGFsbG9jYXRvckZvclNpemUoQ29tcGxldGVT
dWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JTaXplKG1fb3V0LmNvbnN0SW50UHRyKCZz
dWJzcGFjZSksIHNpemUsIHNsb3dQYXRoKTsKICAgICB9CkBAIC0xMTcwOSw3ICsxMTcwOSw3IEBA
IHByaXZhdGU6CiAgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3RydWN0dXJlKQogICAgIHsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5h
bE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLmdldCgpLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0Zp
bmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2
bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IElmIHRoZSBh
bGxvY2F0b3IgaXMgbnVsbCwgd2UgY291bGQgc2ltcGx5IGVtaXQgYSBub3JtYWwgQyBjYWxsIHRv
IHRoZSBhbGxvY2F0b3IKICAgICAgICAgLy8gaW5zdGVhZCBvZiBwdXR0aW5nIGl0IG9uIHRoZSBz
bG93IHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNp
bmNsdWRlICJTdWJzcGFjZS5oIgorCiBuYW1lc3BhY2UgSlNDIHsgCiAKIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3I6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQpAQCAtMzYsNiArMzksNDEgQEAgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6fkFsaWduZWRNZW1vcnlBbAogewogfQogCit2b2lkIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyQWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFhbGxvY2F0b3ItPm5leHRBbGxvY2F0b3JJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0QWxsb2Nh
dG9yKSB7CisgICAgICAgIGZvciAoU3Vic3BhY2UqIHN1YnNwYWNlID0gbV9maXJzdFN1YnNwYWNl
OyBzdWJzcGFjZTsgc3Vic3BhY2UgPSBzdWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKCkpCisgICAgICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRlRmlyc3RBbGxv
Y2F0b3IoYWxsb2NhdG9yKTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xh
c3RBbGxvY2F0b3IpOworICAgICAgICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOworICAg
ICAgICBtX2xhc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX2xhc3RBbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoYWxsb2NhdG9yKTsKKyAgICBtX2xhc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7Cit9
CisKKy8vIEZJWE1FOiBXZSB1c2UgdGhpcyBpZGlvbSBhIGxvdC4gV2Ugc2hvdWxkIGNvbWUgdXAg
d2l0aCBhIGNsZXZlciB0ZW1wbGF0ZSBmb3IgdGhpcyBraW5kIG9mCisvLyBzaW5nbHktbGlua2Vk
IGxpc3QsIHdoZXJlIGVhY2ggZWxlbWVudCBtYXkgYmUgb24gbXVsdGlwbGUgbGlzdHMuCit2b2lk
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNw
YWNlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFzdWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5BbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgIAorICAgIGlmICghbV9maXJzdFN1YnNwYWNlKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2xhc3RTdWJzcGFjZSk7CisgICAgICAgIG1fZmly
c3RTdWJzcGFjZSA9IHN1YnNwYWNlOworICAgICAgICBtX2xhc3RTdWJzcGFjZSA9IHN1YnNwYWNl
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9sYXN0U3Vic3BhY2UtPnNldE5leHRT
dWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihzdWJzcGFjZSk7CisgICAgbV9sYXN0U3Vi
c3BhY2UgPSBzdWJzcGFjZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CitjbGFzcyBTdWJzcGFjZTsK
KwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC00MCw2ICs0MywxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZyZWVBbGlnbmVk
TWVtb3J5KHZvaWQqKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHJlZ2lzdGVyQWxsb2NhdG9yKE1hcmtlZEFsbG9j
YXRvciopOworICAgIE1hcmtlZEFsbG9jYXRvciogZmlyc3RBbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2ZpcnN0QWxsb2NhdG9yOyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyU3Vic3BhY2UoU3Vi
c3BhY2UqKTsKKworcHJpdmF0ZToKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fZmlyc3RBbGxvY2F0
b3I7CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX2xhc3RBbGxvY2F0b3I7CisgICAgU3Vic3BhY2Uq
IG1fZmlyc3RTdWJzcGFjZTsKKyAgICBTdWJzcGFjZSogbV9sYXN0U3Vic3BhY2U7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9j
YXRpb25GYWlsdXJlTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSB7CisgICAgQXNzZXJ0LAorICAgIFJldHVybk51bGwKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21w
bGV0ZVN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29w
ZS5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Q29tcGxldGVTdWJzcGFjZTo6Q29tcGxldGVTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhl
YXAsIEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBh
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKK3sKKyAg
ICBpbml0aWFsaXplKGhlYXBDZWxsVHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CisgICAg
Zm9yIChzaXplX3QgaSA9IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKKyAgICAg
ICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpXSA9IG51bGxwdHI7Cit9CisKK0NvbXBsZXRlU3Vi
c3BhY2U6On5Db21wbGV0ZVN1YnNwYWNlKCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBDb21w
bGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChz
aXplLCBmYWlsdXJlTW9kZSk7Cit9CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRl
KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmly
dHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogQ29t
cGxldGVTdWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpCit7CisgICAgdm9pZCAqcmVzdWx0OworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsKSkKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZl
cnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGFs
bG9jYXRlU2xvdyhzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7CisgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKKyAgICBpZiAoIXNpemVDbGFz
cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgLy8gVGhpcyBpcyB3cml0dGVu
IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVhZHMgdG8gZW5kIHVw
IGhlcmUgaWYgdGhleSB3YW50CisgICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgc29t
ZSBhbGxvY2F0b3IgdGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0IGEgcG9zc2li
bHktCisgICAgLy8ganVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxs
IGlmIHdlJ3JlIGluIHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAorICAgIC8vIGFs
bG9jYXRvciBhcyAicGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQg
Y291bGQgbGVhZCB0byBwZXJmb3JtYW5jZQorICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29y
aXRobSBoZXJlIGlzIHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUg
bG9jaywgdG8KKyAgICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBj
cmVhdGlvbnMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcworICAgIC8v
IHRoYXQgYW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhp
cyBhbGxvY2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAorICAgIC8vIGVub3VnaDogaXQgd2ls
bCBoYXZlIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2Nr
KCkpOworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9y
U2l6ZVN0ZXBbaW5kZXhdKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yOworCisgICAgaWYgKGZh
bHNlKQorICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBt
X25hbWUsICIsICIsIG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7CisgICAg
c3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFsbG9jYXRvcj4gdW5pcXVlQWxsb2NhdG9yID0KKyAgICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxNYXJrZWRBbGxvY2F0b3I+KG1fc3BhY2UuaGVhcCgpLCBzaXpl
Q2xhc3MpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdW5pcXVlQWxsb2NhdG9y
LmdldCgpOworICAgIG1fYWxsb2NhdG9ycy5hcHBlbmQoV1RGTW92ZSh1bmlxdWVBbGxvY2F0b3Ip
KTsKKyAgICBhbGxvY2F0b3ItPnNldFN1YnNwYWNlKHRoaXMpOworICAgIG1fc3BhY2UuYWRkTWFy
a2VkQWxsb2NhdG9yKGxvY2tlciwgYWxsb2NhdG9yKTsKKyAgICBpbmRleCA9IE1hcmtlZFNwYWNl
OjpzaXplQ2xhc3NUb0luZGV4KHNpemVDbGFzcyk7CisgICAgZm9yICg7OykgeworICAgICAgICBp
ZiAoTWFya2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFz
cykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBb
aW5kZXhdID0gYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgaWYgKCFpbmRleC0tKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvcklu
U3Vic3BhY2UobV9maXJzdEFsbG9jYXRvcik7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LT5yZWdpc3RlckFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICByZXR1cm4gYWxsb2Nh
dG9yOworfQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNp
emUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3co
c2l6ZSwgZGVmZXJyYWxDb250ZXh0KTsKKyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpBc3NlcnQpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2Nh
dGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQor
eworICAgIHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7CisgICAgCisg
ICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+
YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51
bGwpOworICAgIAorICAgIGlmIChzaXplIDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9m
ZigpCisgICAgICAgICYmIHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CisgICAg
ICAgIGRhdGFMb2coIkZBVEFMOiBhdHRhbXB0aW5nIHRvIGFsbG9jYXRlIHNtYWxsIG9iamVjdCB1
c2luZyBsYXJnZSBhbGxvY2F0aW9uLlxuIik7CisgICAgICAgIGRhdGFMb2coIlJlcXVlc3RlZCBh
bGxvY2F0aW9uIHNpemU6ICIsIHNpemUsICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX3NwYWNlLmhlYXAoKS0+Y29sbGVjdElm
TmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOworICAgIAorICAgIHNpemUgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkU3BhY2U6OnNpemVTdGVwPihzaXplKTsKKyAgICBM
YXJnZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgq
bV9zcGFjZS5tX2hlYXAsIHNpemUsIHRoaXMpOworICAgIGlmICghYWxsb2NhdGlvbikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgbV9zcGFjZS5tX2xhcmdlQWxsb2NhdGlvbnMu
YXBwZW5kKGFsbG9jYXRpb24pOworICAgIG1fc3BhY2UubV9oZWFwLT5kaWRBbGxvY2F0ZShzaXpl
KTsKKyAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKKyAgICAKKyAgICBtX2xhcmdlQWxs
b2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOworICAgICAgICAKKyAgICByZXR1cm4gYWxsb2Nh
dGlvbi0+Y2VsbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNl
IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb21wbGV0ZVN1YnNwYWNlKENTdHJp
bmcgbmFtZSwgSGVhcCYsIEhlYXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29tcGxldGVTdWJzcGFjZSgpOworCisgICAgLy8gSW4g
c29tZSBjb2RlIHBhdGhzLCB3ZSBuZWVkIGl0IHRvIGJlIGEgY29tcGlsZSBlcnJvciB0byBjYWxs
IHRoZSB2aXJ0dWFsIHZlcnNpb24gb2Ygb25lIG9mCisgICAgLy8gdGhlc2UgZnVuY3Rpb25zLiBU
aGF0J3Mgd2h5IHdlIGRvIGZpbmFsIG1ldGhvZHMgdGhlIG9sZCBzY2hvb2wgd2F5LgorICAgIAor
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlKSBvdmVycmlkZTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvck5vblZp
cnR1YWwoc2l6ZV90LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIAorICAgIHZvaWQqIGFs
bG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUp
IG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVh
bChzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAg
ICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29tcGxldGVTdWJzcGFjZSwgbV9hbGxvY2F0b3JGb3JT
aXplU3RlcCk7IH0KKyAgICAKKyAgICBNYXJrZWRBbGxvY2F0b3IqKiBhbGxvY2F0b3JGb3JTaXpl
U3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisKK3ByaXZhdGU6
CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JTbG93KHNpemVfdCk7CisgICAgCisg
ICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2VybmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlv
bnMgYW5kIGFsbG9jYXRvciBjcmVhdGlvbi4KKyAgICB2b2lkKiBhbGxvY2F0ZVNsb3coc2l6ZV90
LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgdm9pZCog
dHJ5QWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICAKKyAgICBz
dGQ6OmFycmF5PE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4g
bV9hbGxvY2F0b3JGb3JTaXplU3RlcDsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtl
ZEFsbG9jYXRvcj4+IG1fYWxsb2NhdG9yczsKK307CisKK0FMV0FZU19JTkxJTkUgTWFya2VkQWxs
b2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBz
aXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgaWYgKHNpemUg
PD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciog
cmVzdWx0ID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9J
bmRleChzaXplKV07CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OlJldHVybk51bGwgfHwgcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNsb3coc2l6ZSk7CisgICAgfQorICAgIHJldHVy
biBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCisKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCisvLyBXcml0aW5nIGl0IHRoaXMgd2F5
IGVuc3VyZXMgdGhhdCB3aGVuIHlvdSBwYXNzIHRoaXMgYXMgYSBmdW5jdG9yLCB0aGUgY2FsbGVl
IGlzIHNwZWNpYWxpemVkIGZvcgorLy8gdGhpcyBjYWxsYmFjay4gSWYgeW91IHdyb3RlIHRoaXMg
YXMgYSBub3JtYWwgZnVuY3Rpb24gdGhlbiB0aGUgY2FsbGVlIHdvdWxkIGJlIHNwZWNpYWxpemVk
IGZvcgorLy8gdGhlIGZ1bmN0aW9uJ3MgdHlwZSBhbmQgaXQgd291bGQgaGF2ZSBpbmRpcmVjdCBj
YWxscyB0byB0aGF0IGZ1bmN0aW9uLiBBbmQgdW5saWtlIGEgbGFtYmRhLCBpdCdzCisvLyBwb3Nz
aWJsZSB0byBtYXJrIHRoaXMgQUxXQVlTX0lOTElORS4KK3N0cnVjdCBEZXN0cm95RnVuYyB7Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoY2VsbC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAg
IEFTU0VSVChjZWxsLT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpOwor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAg
ICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsK
KyAgICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJ
bmZvLT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0cm95KGNlbGwpOworICAgIH0K
K307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitIZWFwQ2VsbFR5cGU6OkhlYXBDZWxs
VHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBtX2F0dHJpYnV0ZXMo
YXR0cmlidXRlcykKK3sKK30KKworSGVhcENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKCkKK3sKK30K
Kwordm9pZCBIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJs
b2NrLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5n
SGVhcENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBIZWFwQ2Vs
bFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMo
KSh2bSwgY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEhlYXBDZWxsVHlwZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGVh
cENlbGxUeXBlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRlcyk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SGVhcENlbGxUeXBlKCk7CisKKyAgICBjb25zdCBB
bGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzOyB9CisKKyAgICAvLyBUaGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3Bl
Y2lhbGl6ZSB0aGUgc3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKKyAgICAv
LyBiZSBjYWxsZWQgZm9yIG5vLWRlc3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJr
ZWRCbG9jazo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UuCisgICAgdmlydHVhbCB2b2lkIGZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopOworCisgICAgLy8gVGhl
c2UgZ2V0IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopOworCitwcml2YXRlOgorICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9h
dHRyaWJ1dGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Oklzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKQoreworfQorCitJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+SXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQqIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OnRyeUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICAvLyBTaW5jZSB0aGlzIGlzIGRlc2lnbmVkIHNwZWNpYWxseSBmb3IgSXNvU3Vi
c3BhY2UsIHdlIGtub3cgdGhhdCB3ZSB3aWxsIG9ubHkgYmUgYXNrZWQgdG8KKyAgICAvLyBhbGxv
Y2F0ZSBNYXJrZWRCbG9ja3MuCisgICAgUkVMRUFTRV9BU1NFUlQoYWxpZ25tZW50ID09IE1hcmtl
ZEJsb2NrOjpibG9ja1NpemUpOworICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gTWFya2VkQmxv
Y2s6OmJsb2NrU2l6ZSk7CisgICAgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgIAorICAgIG1fZmlyc3RVbmNvbW1pdHRlZCA9IG1fY29tbWl0dGVkLmZpbmRCaXQobV9m
aXJzdFVuY29tbWl0dGVkLCBmYWxzZSk7CisgICAgaWYgKG1fZmlyc3RVbmNvbW1pdHRlZCA8IG1f
YmxvY2tzLnNpemUoKSkgeworICAgICAgICBtX2NvbW1pdHRlZFttX2ZpcnN0VW5jb21taXR0ZWRd
ID0gdHJ1ZTsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gbV9ibG9ja3NbbV9maXJzdFVuY29tbWl0
dGVkXTsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmNvbW1pdChyZXN1bHQsIE1hcmtlZEJsb2NrOjpi
bG9ja1NpemUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCogcmVzdWx0ID0gZmFzdEFsaWduZWRNYWxsb2MoTWFya2VkQmxvY2s6OmJs
b2NrU2l6ZSwgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBt
X2Jsb2Nrcy5zaXplKCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKHJlc3VsdCk7CisgICAgbV9ibG9j
a0luZGljZXMuYWRkKHJlc3VsdCwgaW5kZXgpOworICAgIGlmIChtX2Jsb2Nrcy5jYXBhY2l0eSgp
ICE9IG1fY29tbWl0dGVkLnNpemUoKSkKKyAgICAgICAgbV9jb21taXR0ZWQucmVzaXplKG1fYmxv
Y2tzLmNhcGFjaXR5KCkpOworICAgIG1fY29tbWl0dGVkW2luZGV4XSA9IHRydWU7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQWxp
Z25lZE1lbW9yeSh2b2lkKiBiYXNlUHRyKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKyAgICAKKyAgICBhdXRvIGl0ZXIgPSBtX2Jsb2NrSW5kaWNlcy5maW5kKGJhc2VQ
dHIpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9ibG9ja0luZGljZXMuZW5kKCkpOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gaXRlci0+dmFsdWU7CisgICAgbV9jb21taXR0ZWRbaW5kZXhd
ID0gZmFsc2U7CisgICAgbV9maXJzdFVuY29tbWl0dGVkID0gc3RkOjptaW4oaW5kZXgsIG1fZmly
c3RVbmNvbW1pdHRlZCk7CisgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0KGJhc2VQdHIsIE1hcmtl
ZEJsb2NrOjpibG9ja1NpemUpOworfQorCit2b2lkIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIklzbygiLCBS
YXdQb2ludGVyKHRoaXMpLCAiKSIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IgOiBwdWJsaWMgQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cigpOworICAgIH5Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CisKKyAgICB2b2lkKiB0cnlB
bGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIG92ZXJy
aWRlOworICAgIHZvaWQgZnJlZUFsaWduZWRNZW1vcnkodm9pZCopIG92ZXJyaWRlOworCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
TG9jayBtX2xvY2s7CisgICAgVmVjdG9yPHZvaWQqPiBtX2Jsb2NrczsKKyAgICBIYXNoTWFwPHZv
aWQqLCB1bnNpZ25lZD4gbV9ibG9ja0luZGljZXM7CisgICAgRmFzdEJpdFZlY3RvciBtX2NvbW1p
dHRlZDsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0VW5jb21taXR0ZWQgeyAwIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vi
c3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIklzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFw
JiBoZWFwLCBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgc2l6ZV90IHNpemUpCisgICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwKQorICAgICwgbV9hbGxvY2F0b3IoJmhlYXAsIHNpemUpCisgICAg
LCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yPigpKQoreworICAgIGluaXRpYWxpemUoaGVhcENlbGxUeXBlLCBtX2lz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuZ2V0KCkpOworCisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX3NwYWNlLmFsbG9jYXRvckxvY2soKSk7CisgICAgbV9hbGxvY2F0b3Iuc2V0U3Vic3Bh
Y2UodGhpcyk7CisgICAgbV9zcGFjZS5hZGRNYXJrZWRBbGxvY2F0b3IobG9ja2VyLCAmbV9hbGxv
Y2F0b3IpOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJBbGxvY2F0b3Io
Jm1fYWxsb2NhdG9yKTsKKyAgICBtX2ZpcnN0QWxsb2NhdG9yID0gJm1fYWxsb2NhdG9yOworfQor
CitJc29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBJ
c29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZSwgZmFpbHVyZU1vZGUpOworfQorCitNYXJrZWRBbGxvY2F0b3IqIElzb1N1YnNwYWNlOjphbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSB0aGlzLT5zaXplKCkpOworICAgIHJldHVybiAm
bV9hbGxvY2F0b3I7Cit9CisKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6
ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwg
ZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cit9CisKK3ZvaWQqIElzb1N1YnNwYWNlOjph
bGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7CisgICAgcmV0dXJuIG1fYWxsb2NhdG9y
LmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtl
ZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworCitjbGFzcyBJc29TdWJzcGFjZSA6
IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vi
c3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgSGVhcENlbGxUeXBlKiwgc2l6ZV90IHNpemUpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Jc29TdWJzcGFjZSgpOworCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRvci5jZWxsU2l6ZSgpOyB9CisKKyAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3Zl
cnJpZGU7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVf
dCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworCisgICAgdm9pZCogYWxsb2NhdGUoc2l6
ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBz
aXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUgZmFpbHVyZU1vZGUpOworCitwcml2YXRlOgorCisgICAgTWFya2VkQWxsb2NhdG9yIG1f
YWxsb2NhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
PiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNyArNDEsMjEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0b3JCbG9ja3Mg
PSB0cnVlOwogCi1NYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBT
dWJzcGFjZSogc3Vic3BhY2UsIHNpemVfdCBjZWxsU2l6ZSkKK01hcmtlZEFsbG9jYXRvcjo6TWFy
a2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIHNpemVfdCBjZWxsU2l6ZSkKICAgICA6IG1fZnJlZUxp
c3QoY2VsbFNpemUpCiAgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogICAgICwgbV9sYXN0QWN0aXZl
QmxvY2soMCkKICAgICAsIG1fY2VsbFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXpl
KSkKLSAgICAsIG1fYXR0cmlidXRlcyhzdWJzcGFjZS0+YXR0cmlidXRlcygpKQogICAgICwgbV9o
ZWFwKGhlYXApCi0gICAgLCBtX3N1YnNwYWNlKHN1YnNwYWNlKQogewogfQogCit2b2lkIE1hcmtl
ZEFsbG9jYXRvcjo6c2V0U3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQoreworICAgIG1fYXR0
cmlidXRlcyA9IHN1YnNwYWNlLT5hdHRyaWJ1dGVzKCk7CisgICAgbV9zdWJzcGFjZSA9IHN1YnNw
YWNlOworfQorCiBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxp
bmUpCiB7CiAgICAgdW5zaWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwpAQCAtMTc1
LDE5ICsxNzksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAg
ICAgICAgIGFsbG9jYXRpb25Db3VudCA9IDA7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQotewot
ICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSB0cnVlOwotICAgIHJldHVybiBhbGxvY2F0ZVNsb3dD
YXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWlsdXJlKTsKLX0KLQotdm9pZCogTWFy
a2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQpCi17Ci0gICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOwotICAgIHJl
dHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWlsdXJl
KTsKLX0KLQotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBib29sIGNyYXNoT25GYWlsdXJlKQordm9p
ZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgQVNTRVJU
KG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CkBAIC0yMDQs
MTEgKzE5Niw4IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUkKICAg
ICAKICAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFu
ZCBub3cgdGhpcyBhbGxvY2F0b3IgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKICAgICAv
LyBoYXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxi
YWNrIGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJl
bnRCbG9jaykpIHsKLSAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKQotICAgICAgICAgICAgcmV0
dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0
ZShkZWZlcnJhbENvbnRleHQpOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50Qmxv
Y2spKQorICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9k
ZSk7CiAgICAgCiAgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGlu
ZygpOwogICAgIApAQCAtMjE3LDcgKzIwNiw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGVTbG93Q2FzZUkKICAgICAKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IHRy
eUFsbG9jYXRlQmxvY2soKTsKICAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgIGlmIChjcmFzaE9u
RmFpbHVyZSkKKyAgICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6QXNzZXJ0KQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI0NTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiRnJlZUxpc3QuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgpAQCAtNjcsMTMg
KzY4LDE3IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIxMjEKIAogY2xhc3MgTWFya2VkQWxsb2NhdG9y
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrZWRBbGxvY2F0b3IpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxp
c3QoKTsKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKIAotICAgIE1h
cmtlZEFsbG9jYXRvcihIZWFwKiwgU3Vic3BhY2UqLCBzaXplX3QgY2VsbFNpemUpOworICAgIE1h
cmtlZEFsbG9jYXRvcihIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2b2lkIHNldFN1YnNw
YWNlKFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIHZv
aWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7CkBA
IC05MCw4ICs5NSw3IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsg
fQogICAgIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlcy5kZXN0cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUo
R0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoR0NE
ZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CisgICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJl
dHVybiBtX2hlYXA7IH0KIAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0
YXJnZXQpIGNvbnN0OwpAQCAtMTM2LDkgKzE0MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFy
a2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2Nh
dG9yOyB9CiAgICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2U7IH0KKyAgICBNYXJrZWRBbGxv
Y2F0b3IqIG5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KICAgICAKICAg
ICB2b2lkIHNldE5leHRBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9u
ZXh0QWxsb2NhdG9yID0gYWxsb2NhdG9yOyB9CiAgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5T
dWJzcGFjZShNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJblN1
YnNwYWNlID0gYWxsb2NhdG9yOyB9CisgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9j
YXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGFsbG9jYXRvcjsgfQogICAgIAogICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpOwogICAgIApAQCAtMTU1
LDkgKzE2MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJs
b2NrOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uo
R0NEZWZlcnJhbENvbnRleHQqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxv
Y2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0Kik7Ci0gICAgdm9pZCogYWxsb2NhdGVTbG93
Q2FzZUltcGwoR0NEZWZlcnJhbENvbnRleHQqLCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKICAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOwogICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsK
ICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7CkBAIC0xOTIsMTAg
KzE5NiwxMSBAQCBwcml2YXRlOgogICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVz
OwogICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIHJlZmVyZW5j
ZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4
OAotICAgIEhlYXAqIG1faGVhcDsKLSAgICBTdWJzcGFjZSogbV9zdWJzcGFjZTsKKyAgICBIZWFw
KiBtX2hlYXAgeyBudWxscHRyIH07CisgICAgU3Vic3BhY2UqIG1fc3Vic3BhY2UgeyBudWxscHRy
IH07CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3IgeyBudWxscHRyIH07CiAg
ICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlIHsgbnVsbHB0ciB9
OworICAgIE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yIHsgbnVsbHB0ciB9OwogfTsKIAogaW5saW5lIHB0cmRpZmZfdCBNYXJrZWRBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwyMSArMzUsMTIgQEAgaW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9y
Ojppc0ZyZWVMaXN0ZQogICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KHRhcmdldCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkK
K0FMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpCiB7CiAgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCiAgICAgICAgIFsmXSAoKSAt
PiBIZWFwQ2VsbCogewogICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKGhlYXAoKS0+dm0o
KSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPih0cnlBbGxvY2F0
ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOwotICAgICAgICB9KTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQpCi17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAg
ICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogewotICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZN
KGhlYXAoKS0+dm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwq
PihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQs
IGZhaWx1cmVNb2RlKSk7CiAgICAgICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsx
MzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIHRvIGJlIGNhbGxl
ZCBieSBTdWJzcGFjZS4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0g
ICAgICAgIHZvaWQgZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJlZUxpc3QqLCBjb25zdCBE
ZXN0cm95RnVuYyYpOworICAgICAgICB2b2lkIGZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlw
ZShGcmVlTGlzdCosIGNvbnN0IERlc3Ryb3lGdW5jJik7CiAgICAgICAgIAogICAgICAgICB2b2lk
IHVuc3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAy
MjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3BlY2lhbGl6ZWRTd2UKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+
Ci12b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZy
ZWVMaXN0KiBmcmVlTGlzdCwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQordm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoRnJlZUxp
c3QqIGZyZWVMaXN0LCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCiB7CiAgICAgU3dl
ZXBNb2RlIHN3ZWVwTW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0IDogU3dlZXBPbmx5
OwogICAgIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSA9IHRoaXMtPnN3ZWVw
RGVzdHJ1Y3Rpb25Nb2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MSwxMCArNTUxLDggQEAg
dm9pZCBNYXJrZWRTcGFjZTo6ZHVtcEJpdHMoUHJpbnRTdHJlYW0mIAogICAgICAgICB9KTsKIH0K
IAotTWFya2VkQWxsb2NhdG9yKiBNYXJrZWRTcGFjZTo6YWRkTWFya2VkQWxsb2NhdG9yKAotICAg
IGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU3Vic3BhY2UqIHN1YnNwYWNlLCBzaXplX3Qgc2l6ZUNs
YXNzKQordm9pZCBNYXJrZWRTcGFjZTo6YWRkTWFya2VkQWxsb2NhdG9yKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7Ci0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBtX2JhZ09mQWxsb2NhdG9ycy5hZGQoaGVhcCgpLCBzdWJzcGFjZSwg
c2l6ZUNsYXNzKTsKICAgICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3IobnVsbHB0cik7CiAg
ICAgCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKQEAgLTU2MiwxNCArNTYwLDEwIEBAIE1h
cmtlZEFsbG9jYXRvciogTWFya2VkU3BhY2U6OmFkZE1hcmtlZEEKICAgICBpZiAoIW1fZmlyc3RB
bGxvY2F0b3IpIHsKICAgICAgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKICAgICAg
ICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwotICAgICAgICBmb3IgKFN1YnNwYWNlKiBz
dWJzcGFjZSA6IG1fc3Vic3BhY2VzKQotICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0ZUZp
cnN0QWxsb2NhdG9yKGFsbG9jYXRvcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9sYXN0QWxs
b2NhdG9yLT5zZXROZXh0QWxsb2NhdG9yKGFsbG9jYXRvcik7CiAgICAgICAgIG1fbGFzdEFsbG9j
YXRvciA9IGFsbG9jYXRvcjsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFsbG9jYXRvcjsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBIZWFwOwogY2xh
c3MgSGVhcEl0ZXJhdGlvblNjb3BlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAt
MTU4LDcgKzE1OSw3IEBAIHB1YmxpYzoKICAgICBNYXJrZWRBbGxvY2F0b3IqIGZpcnN0QWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdEFsbG9jYXRvcjsgfQogICAgIAogICAgIExvY2sm
IGFsbG9jYXRvckxvY2soKSB7IHJldHVybiBtX2FsbG9jYXRvckxvY2s7IH0KLSAgICBNYXJrZWRB
bGxvY2F0b3IqIGFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIFN1YnNw
YWNlKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2b2lkIGFkZE1hcmtlZEFsbG9jYXRvcihjb25z
dCBBYnN0cmFjdExvY2tlciYsIE1hcmtlZEFsbG9jYXRvciopOwogICAgIAogICAgIC8vIFdoZW4g
dGhpcyBpcyB0cnVlIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBmbGlwcGVkIGJ1dCB0aGUgbWFyayBi
aXRzIGhhdmVuJ3QgY29udmVyZ2VkIHlldC4KICAgICBib29sIGlzTWFya2luZygpIGNvbnN0IHsg
cmV0dXJuIG1faXNNYXJraW5nOyB9CkBAIC0xNjgsMTQgKzE2OSwxMiBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6YXJyYXk8c2l6ZV90LCBudW1TaXplQ2xhc3Nl
cz4gc19zaXplQ2xhc3NGb3JTaXplU3RlcDsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIENvbXBsZXRlU3Vic3BhY2U7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBXZWFrU2V0Owog
ICAgIGZyaWVuZCBjbGFzcyBTdWJzcGFjZTsKICAgICAKLSAgICB2b2lkKiBhbGxvY2F0ZVNsb3co
U3Vic3BhY2UmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxs
b2NhdGVTbG93KFN1YnNwYWNlJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotCiAgICAg
Ly8gVXNlIHRoaXMgdmVyc2lvbiB3aGVuIGNhbGxpbmcgZnJvbSB3aXRoaW4gdGhlIEdDIHdoZXJl
IHdlIGtub3cgdGhhdCB0aGUgYWxsb2NhdG9ycwogICAgIC8vIGhhdmUgYWxyZWFkeSBiZWVuIHN0
b3BwZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2ZUNl
bGwoY29uc3QgRnVuY3RvciYpOwpAQCAtMjEwLDcgKzIwOSw2IEBAIHByaXZhdGU6CiAgICAgU2Vu
dGluZWxMaW5rZWRMaXN0PFdlYWtTZXQsIEJhc2ljUmF3U2VudGluZWxOb2RlPFdlYWtTZXQ+PiBt
X25ld0FjdGl2ZVdlYWtTZXRzOwogCiAgICAgTG9jayBtX2FsbG9jYXRvckxvY2s7Ci0gICAgQmFn
PE1hcmtlZEFsbG9jYXRvcj4gbV9iYWdPZkFsbG9jYXRvcnM7CiAgICAgTWFya2VkQWxsb2NhdG9y
KiBtX2ZpcnN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9s
YXN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgogCisjaW5jbHVkZSAiQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCkBAIC0zNCw0NSArMzYsMjMgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIFdyaXRpbmcgaXQgdGhpcyB3YXkgZW5z
dXJlcyB0aGF0IHdoZW4geW91IHBhc3MgdGhpcyBhcyBhIGZ1bmN0b3IsIHRoZSBjYWxsZWUgaXMg
c3BlY2lhbGl6ZWQgZm9yCi0vLyB0aGlzIGNhbGxiYWNrLiBJZiB5b3Ugd3JvdGUgdGhpcyBhcyBh
IG5vcm1hbCBmdW5jdGlvbiB0aGVuIHRoZSBjYWxsZWUgd291bGQgYmUgc3BlY2lhbGl6ZWQgZm9y
Ci0vLyB0aGUgZnVuY3Rpb24ncyB0eXBlIGFuZCBpdCB3b3VsZCBoYXZlIGluZGlyZWN0IGNhbGxz
IHRvIHRoYXQgZnVuY3Rpb24uIEFuZCB1bmxpa2UgYSBsYW1iZGEsIGl0J3MKLS8vIHBvc3NpYmxl
IHRvIG1hcmsgdGhpcyBBTFdBWVNfSU5MSU5FLgotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYgdm0sIEpTQ2VsbCogY2VsbCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChjZWxsLT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgQVNT
RVJUKGNlbGwtPmlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCk7Ci0gICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOwotICAg
ICAgICBNZXRob2RUYWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8t
Pm1ldGhvZFRhYmxlLmRlc3Ryb3k7Ci0gICAgICAgIGRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsK
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLVN1YnNwYWNlOjpTdWJzcGFjZShDU3RyaW5n
IG5hbWUsIEhlYXAmIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRlcywgQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKK1N1YnNwYWNlOjpTdWJz
cGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXApCiAgICAgOiBtX3NwYWNlKGhlYXAub2JqZWN0
U3BhY2UoKSkKICAgICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0
ZXMpCi0gICAgLCBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3IoYWxpZ25lZE1lbW9yeUFsbG9jYXRv
cikKLSAgICAsIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uKG1fc3BhY2UuZmlyc3RBbGxv
Y2F0b3IoKSkKLXsKLSAgICAvLyBJdCdzIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQgd2UncmUgR0Np
bmcgcmlnaHQgbm93IGV2ZW4gaWYgdGhlIGNsaWVudCBpcyBjYXJlZnVsIHRvIG9ubHkKLSAgICAv
LyBjcmVhdGUgc3Vic3BhY2VzIHJpZ2h0IGFmdGVyIFZNIGNyZWF0aW9uLCBzaW5jZSBjb2xsZWN0
Q29udGludW91c2x5IChhbmQgcHJvYmFibHkgb3RoZXIKLSAgICAvLyB0aGluZ3MpIGNvdWxkIGNh
dXNlIGEgR0MgdG8gYmUgbGF1bmNoZWQgYXQgcHJldHR5IG11Y2ggYW55IHRpbWUgYW5kIGl0J3Mg
bm90IDEwMCUgb2J2aW91cwotICAgIC8vIHRoYXQgYWxsIGNsaWVudHMgd291bGQgYmUgYWJsZSB0
byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgemVybyBzYWZlcG9pbnRzIGJldHdlZW4gd2hlbiB0aGV5
Ci0gICAgLy8gY3JlYXRlIFZNIGFuZCB3aGVuIHRoZXkgZG8gdGhpcy4gUHJldmVudGluZyBHQyB3
aGlsZSB3ZSdyZSBjcmVhdGluZyB0aGUgU3Vic3BhY2UgZW5zdXJlcwotICAgIC8vIHRoYXQgd2Ug
ZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB3aGV0aGVyIGl0J3MgT0sgZm9yIHRoZSBHQyB0byBl
dmVyIHNlZSBhIGJyYW5kIG5ldwotICAgIC8vIHN1YnNwYWNlLgoreworfQorCit2b2lkIFN1YnNw
YWNlOjppbml0aWFsaXplKEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQoreworICAgIG1fYXR0cmlidXRlcyA9
IGhlYXBDZWxsVHlwZS0+YXR0cmlidXRlcygpOworICAgIG1faGVhcENlbGxUeXBlID0gaGVhcENl
bGxUeXBlOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9IGFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I7CisgICAgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1v
cnlBbGxvY2F0b3ItPmZpcnN0QWxsb2NhdG9yKCk7CisKKyAgICBIZWFwJiBoZWFwID0gKm1fc3Bh
Y2UuaGVhcCgpOwogICAgIFByZXZlbnRDb2xsZWN0aW9uU2NvcGUgcHJldmVudENvbGxlY3Rpb25T
Y29wZShoZWFwKTsKICAgICBoZWFwLm9iamVjdFNwYWNlKCkubV9zdWJzcGFjZXMuYXBwZW5kKHRo
aXMpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNz
ZXM7IGktLTspCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOwor
ICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJTdWJzcGFjZSh0aGlzKTsKIH0K
IAogU3Vic3BhY2U6On5TdWJzcGFjZSgpCkBAIC04MSw2MCArNjEsMTIgQEAgU3Vic3BhY2U6On5T
dWJzcGFjZSgpCiAKIHZvaWQgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5k
bGUmIGJsb2NrLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgYmxvY2suZmluaXNoU3dlZXBL
bm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIG1faGVhcENlbGxU
eXBlLT5maW5pc2hTd2VlcChibG9jaywgZnJlZUxpc3QpOwogfQogCiB2b2lkIFN1YnNwYWNlOjpk
ZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewotICAgIERlc3Ryb3lGdW5jKCkodm0sIGNl
bGwpOwotfQotCi0vLyBUaGUgcmVhc29uIHdoeSB3ZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFsbG9j
YXRlIGFuZCB0cnlBbGxvY2F0ZSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mCi0vLyBjaGVj
a3Mgb24gdGhlIGFsbG9jYXRpb24gcGF0aCBpbiBib3RoIGNhc2VzLiBMaWtld2lzZSwgdGhlIHJl
YXNvbiB3aHkgd2UgaGF2ZSBvdmVybG9hZHMgd2l0aCBhbmQKLS8vIHdpdGhvdXQgZGVmZXJyYWxD
b250ZXh0IGlzIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgY29kZSBmb3IgY2FsbGluZyBhbGxv
Y2F0ZSB3aGVuIHlvdSBkb24ndAotLy8gbmVlZCB0aGUgZGVmZXJyYWxDb250ZXh0Lgotdm9pZCog
U3Vic3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAg
ICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkp
Ci0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoKTsKLSAgICBlbHNlCi0gICAg
ICAgIHJlc3VsdCA9IGFsbG9jYXRlU2xvdyhudWxscHRyLCBzaXplKTsKLSAgICBkaWRBbGxvY2F0
ZShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjphbGxv
Y2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsK
LSAgICB2b2lkICpyZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
dHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9j
YXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0
ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZShzaXpl
X3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxv
Y2F0b3ItPnRyeUFsbG9jYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSB0cnlBbGxv
Y2F0ZVNsb3cobnVsbHB0ciwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJh
bENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcmVz
dWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZv
cihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZShkZWZlcnJh
bENvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KGRl
ZmVycmFsQ29udGV4dCwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIG1faGVhcENlbGxUeXBlLT5kZXN0cm95KHZtLCBjZWxsKTsKIH0KIAog
dm9pZCBTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQpAQCAtMTQ0LDEwNCArNzYsMTcg
QEAgdm9pZCBTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogICAgICAgICAgICAgYWxs
b2NhdG9yLnByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgICAgIH0pOwogCi0gICAgbV9hbGxv
Y2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX3NwYWNlLmZpcnN0QWxsb2NhdG9yKCk7CisgICAg
bV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3It
PmZpcnN0QWxsb2NhdG9yKCk7CiB9CiAKIE1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNwYWNlOjpm
aW5kRW1wdHlCbG9ja1RvU3RlYWwoKQogewotICAgIGZvciAoOyBtX2FsbG9jYXRvckZvckVtcHR5
QWxsb2NhdGlvbjsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsbG9jYXRvckZv
ckVtcHR5QWxsb2NhdGlvbi0+bmV4dEFsbG9jYXRvcigpKSB7Ci0gICAgICAgIFN1YnNwYWNlKiBv
dGhlclN1YnNwYWNlID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPnN1YnNwYWNlKCk7
Ci0gICAgICAgIGlmIChvdGhlclN1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgIT0g
YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IAorICAgIGZvciAoOyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbjsgbV9hbGxvY2F0b3JG
b3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+bmV4dEFs
bG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKSB7CiAgICAgICAgIGlmIChNYXJrZWRC
bG9jazo6SGFuZGxlKiBibG9jayA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5maW5k
RW1wdHlCbG9ja1RvU3RlYWwoKSkKICAgICAgICAgICAgIHJldHVybiBibG9jazsKICAgICB9CiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFsbG9j
YXRvckZvclNsb3coc2l6ZV90IHNpemUpCi17Ci0gICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3Bh
Y2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSk7Ci0gICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKLSAgICBpZiAoIXNpemVDbGFz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB3cml0dGVu
IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVhZHMgdG8gZW5kIHVw
IGhlcmUgaWYgdGhleSB3YW50Ci0gICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgc29t
ZSBhbGxvY2F0b3IgdGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0IGEgcG9zc2li
bHktCi0gICAgLy8ganVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxs
IGlmIHdlJ3JlIGluIHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAotICAgIC8vIGFs
bG9jYXRvciBhcyAicGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQg
Y291bGQgbGVhZCB0byBwZXJmb3JtYW5jZQotICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29y
aXRobSBoZXJlIGlzIHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUg
bG9jaywgdG8KLSAgICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBj
cmVhdGlvbnMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcwotICAgIC8v
IHRoYXQgYW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhp
cyBhbGxvY2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAotICAgIC8vIGVub3VnaDogaXQgd2ls
bCBoYXZlIAotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2Nr
KCkpOwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9y
U2l6ZVN0ZXBbaW5kZXhdKQotICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwotCi0gICAgaWYgKGZh
bHNlKQotICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBt
X25hbWUsICIsICIsIG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7Ci0gICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX3NwYWNlLmFkZE1hcmtlZEFsbG9jYXRvcihs
b2NrZXIsIHRoaXMsIHNpemVDbGFzcyk7Ci0gICAgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6ZUNs
YXNzVG9JbmRleChzaXplQ2xhc3MpOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKE1hcmtl
ZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xhc3MpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9
IGFsbG9jYXRvcjsKLSAgICAgICAgCi0gICAgICAgIGlmICghaW5kZXgtLSkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNl
KG1fZmlyc3RBbGxvY2F0b3IpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgbV9m
aXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICByZXR1cm4gYWxsb2NhdG9yOwotfQotCi12
b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xv
dyhkZWZlcnJhbENvbnRleHQsIHNpemUpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBz
YW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOwotICAgIAotICAgIGlmIChN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplKSkKLSAgICAgICAg
cmV0dXJuIGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAg
ICBpZiAoc2l6ZSA8PSBPcHRpb25zOjpsYXJnZUFsbG9jYXRpb25DdXRvZmYoKQotICAgICAgICAm
JiBzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewotICAgICAgICBkYXRhTG9nKCJG
QVRBTDogYXR0YW1wdGluZyB0byBhbGxvY2F0ZSBzbWFsbCBvYmplY3QgdXNpbmcgbGFyZ2UgYWxs
b2NhdGlvbi5cbiIpOwotICAgICAgICBkYXRhTG9nKCJSZXF1ZXN0ZWQgYWxsb2NhdGlvbiBzaXpl
OiAiLCBzaXplLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci0gICAgCi0gICAgbV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVm
ZXIoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7Ci0gICAgTGFyZ2VBbGxvY2F0aW9u
KiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3BhY2UubV9oZWFw
LCBzaXplLCB0aGlzKTsKLSAgICBpZiAoIWFsbG9jYXRpb24pCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAotICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0
aW9uKTsKLSAgICBtX3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7Ci0gICAgbV9zcGFj
ZS5tX2NhcGFjaXR5ICs9IHNpemU7Ci0gICAgCi0gICAgbV9sYXJnZUFsbG9jYXRpb25zLmFwcGVu
ZChhbGxvY2F0aW9uKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIGFsbG9jYXRpb24tPmNlbGwoKTsK
LX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFN1YnNwYWNlOjpkaWRBbGxvY2F0ZSh2b2lkKiBwdHIp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHB0cik7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB1c2VmdWwg
Zm9yIGxvZ2dpbmcgYWxsb2NhdGlvbnMsIG9yIGRvaW5nIG90aGVyIGtpbmRzIG9mIGRlYnVnZ2lu
ZyBoYWNrcy4gSnVzdCBtYWtlCi0gICAgLy8gc3VyZSB5b3UgSlNDX2ZvcmNlR0NTbG93UGF0aHM9
dHJ1ZS4KLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0zMiw0NCArMzMsMzAgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworY2xhc3MgSGVhcENlbGxUeXBlOwogCiAv
LyBUaGUgaWRlYSBvZiBzdWJzcGFjZXMgaXMgdGhhdCB5b3UgY2FuIHByb3ZpZGUgc29tZSBjdXN0
b20gYmVoYXZpb3IgZm9yIHlvdXIgb2JqZWN0cyBpZiB5b3UKIC8vIGFsbG9jYXRlIHRoZW0gZnJv
bSBhIGN1c3RvbSBTdWJzcGFjZSBpbiB3aGljaCB5b3Ugb3ZlcnJpZGUgc29tZSBvZiB0aGUgdmly
dHVhbCBtZXRob2RzLiBUaGlzCi0vLyBjbGFzcyBpcyB0aGUgYmFzZWNsYXNzIG9mIFN1YnNwYWNl
cyBhbmQgaXQgcHJvdmlkZXMgYSByZWFzb25hYmxlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHdo
ZXJlCi0vLyBzd2VlcGluZyBhc3N1bWVzIGltbW9ydGFsIHN0cnVjdHVyZS4gVGhlIGNvbW1vbiB3
YXlzIG9mIG92ZXJyaWRpbmcgdGhpcyBhcmU6Ci0vLwotLy8gLSBQcm92aWRlIGN1c3RvbWl6ZWQg
ZGVzdHJ1Y3RvciBiZWhhdmlvci4gWW91IGNhbiBjaGFuZ2UgaG93IHRoZSBkZXN0cnVjdG9yIGlz
IGNhbGxlZC4gWW91IGNhbgotLy8gICBhbHNvIHNwZWNpYWxpemUgdGhlIGRlc3RydWN0b3IgY2Fs
bCBpbiB0aGUgbG9vcC4KLS8vCi0vLyAtIFVzZSB0aGUgU3Vic3BhY2UgYXMgYSBxdWljayB3YXkg
dG8gaXRlcmF0ZSBhbGwgb2YgdGhlIG9iamVjdHMgaW4gdGhhdCBzdWJzcGFjZS4KKy8vIGNsYXNz
IGlzIHRoZSBiYXNlY2xhc3Mgb2YgU3Vic3BhY2VzLiBVc3VhbGx5IHlvdSB3aWxsIHVzZSBlaXRo
ZXIgU3Vic3BhY2Ugb3IgRml4ZWRTaXplU3Vic3BhY2UuCiBjbGFzcyBTdWJzcGFjZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3Vic3BhY2UpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYsIEFsbG9jYXRvckF0dHJpYnV0ZXMsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5TdWJzcGFjZSgpOwotICAgIAorCiAgICAgY29u
c3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5kYXRhKCk7IH0KICAgICBNYXJr
ZWRTcGFjZSYgc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlOyB9CiAgICAgCiAgICAgY29u
c3QgQWxsb2NhdG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlczsgfQorICAgIEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9oZWFwQ2VsbFR5cGU7IH0KICAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OyB9CiAgICAgCi0gICAgLy8gVGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyB0aGlzIGlzIHRvIHNw
ZWNpYWxpemUgdGhlIHN3ZWVwIGZvciB5b3VyIGRlc3RydWN0b3JzLiBUaGlzIHdvbid0Ci0gICAg
Ly8gYmUgY2FsbGVkIGZvciBuby1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhpcyBtdXN0IGNhbGwgTWFy
a2VkQmxvY2s6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlLgotICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKLSAgICAKLSAgICAv
LyBUaGVzZSBnZXQgY2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgotICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KFZNJiwgSlNDZWxsKik7Ci0gICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiB0cnlBbGxv
Y2F0b3JGb3Ioc2l6ZV90KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXpl
X3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQq
LCBzaXplX3QpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRl
KHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGUoR0NEZWZl
cnJhbENvbnRleHQqLCBzaXplX3QpOworICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7CisK
KyAgICB2aXJ0dWFsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShzaXplX3Qs
IEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSA9IDA7CiAgICAgCiAg
ICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIApAQCAtOTYsNDggKzgzLDI1IEBA
IHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaExp
dmVDZWxsKGNvbnN0IEZ1bmMmKTsKICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
QWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Vic3BhY2Us
IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXApOyB9Ci0gICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiog
YWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFsw
XTsgfQorICAgIFN1YnNwYWNlKiBuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsg
fQorICAgIHZvaWQgc2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKFN1YnNw
YWNlKiBzdWJzcGFjZSkgeyBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA9
IHN1YnNwYWNlOyB9CiAKLXByaXZhdGU6Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JG
b3JTbG93KHNpemVfdCk7Ci0gICAgCi0gICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2Vy
bmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlvbnMgYW5kIGFsbG9jYXRvciBjcmVhdGlvbi4KLSAgICB2
b2lkKiBhbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIHZvaWQq
IHRyeUFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0gICAgCi0gICAg
dm9pZCBkaWRBbGxvY2F0ZSh2b2lkKik7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBpbml0aWFsaXpl
KEhlYXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKICAgICAKICAgICBNYXJr
ZWRTcGFjZSYgbV9zcGFjZTsKICAgICAKICAgICBDU3RyaW5nIG1fbmFtZTsKICAgICBBbGxvY2F0
b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKworICAgIEhlYXBDZWxsVHlwZSogbV9oZWFwQ2Vs
bFR5cGUgeyBudWxscHRyIH07CisgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogbV9hbGlnbmVk
TWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIAotICAgIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKLSAgICAKLSAgICBzdGQ6OmFycmF5PE1h
cmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JG
b3JTaXplU3RlcDsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fZmlyc3RBbGxvY2F0b3IgeyBudWxs
cHRyIH07CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlv
biB7IG51bGxwdHIgfTsgLy8gVXNlcyB0aGUgTWFya2VkU3BhY2UgbGlua2VkIGxpc3Qgb2YgYmxv
Y2tzLgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMYXJnZUFsbG9jYXRpb24sIEJhc2ljUmF3U2Vu
dGluZWxOb2RlPExhcmdlQWxsb2NhdGlvbj4+IG1fbGFyZ2VBbGxvY2F0aW9uczsKKyAgICBTdWJz
cGFjZSogbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07
CiB9OwogCi1BTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OnRyeUFsbG9j
YXRvckZvcihzaXplX3Qgc2l6ZSkKLXsKLSAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFy
Z2VDdXRvZmYpCi0gICAgICAgIHJldHVybiBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNw
YWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpXTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
QUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6
ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7
Ci0gICAgICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIHJlc3VsdCA9IG1fYWxsb2NhdG9yRm9yU2l6
ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldKQotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNsb3coc2l6ZSk7Ci0g
ICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTcyLDcgKzE1NzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZN
JiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFN0b3JhZ2VU
eXBlIHN0b3JhZ2UsIEdQUlJlZyBzY3JhdGNoR1BSMSwKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgsIHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxs
b2NhdG9yRm9yKHNpemUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTU4OSw3ICsxNTg5LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIGFsbG9jYXRpb25T
aXplIGNhbiBiZSBhbGlhc2VkIHdpdGggYW55IG9mIHRoZSBvdGhlciBpbnB1dCBHUFJzLiBJZiBp
dCdzIG5vdCBhbGlhc2VkIHRoZW4gaXQKICAgICAvLyB3b24ndCBiZSBjbG9iYmVyZWQuCi0gICAg
dm9pZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIFN1YnNwYWNl
JiBzdWJzcGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQ
UlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQorICAgIHZvaWQgZW1pdEFsbG9j
YXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBDb21wbGV0ZVN1YnNwYWNlJiBzdWJz
cGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBz
Y3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgc3RhdGljX2Fz
c2VydCghKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAmIChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAx
KSksICJNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAg
ICAgICAgCkBAIC0xNjA3LDcgKzE2MDcsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgogICAgIHZvaWQgZW1pdEFsbG9j
YXRlVmFyaWFibGVTaXplZENlbGwoVk0mIHZtLCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVU
eXBlIHN0cnVjdHVyZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBHUFJSZWcgc2NyYXRjaEdQUjEs
IEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAg
U3Vic3BhY2UmIHN1YnNwYWNlID0gKnN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pOworICAgICAg
ICBDb21wbGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSA9ICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZt
KTsKICAgICAgICAgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChyZXN1bHRHUFIsIHN1YnNwYWNl
LCBhbGxvY2F0aW9uU2l6ZSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAg
ICAgICAgIGVtaXRTdG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhzdHJ1Y3R1cmUsIHJlc3VsdEdQ
Uiwgc2NyYXRjaEdQUjIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3Zt
KS0+YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQp
OwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFs
bG9jYXRvclJlZyA9IHJlZ1QxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw3ICs2Miw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgQnV0dGVyZmx5OjpvcHRpbWEK
IGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0s
IEpTQ2VsbCosIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
IHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAg
ICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGUo
c2l6ZSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OkFzc2VydCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTcwLDcg
KzcwLDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVhdGUoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVh
ZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoc2l6ZSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRy
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmICghYmFzZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShi
YXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAg
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRoZUJh
c2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwot
ICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlB
bGxvY2F0ZShuZXdTaXplKTsKKyAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYgKCFuZXdCYXNlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3Qg
YmUgYSBtZW1jcHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw4ICsxMTgsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0mCiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFs
T2JqZWN0KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCi0gICAgdm9pZCogYmFja2lu
Z1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFyZ3VtZW50cy5raW5k
KS50cnlBbGxvY2F0ZShtYXBwZWRBcmd1bWVudHNTaXplKCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KGJhY2tpbmdTdG9yZSk7CisgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZShtX21hcHBlZEFyZ3VtZW50cy5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwobWFw
cGVkQXJndW1lbnRzU2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2Vy
dCk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9y
ZSk7CiAgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDIyNDUzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgCiBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFDZWxsVHlwZTo6bmVlZHNEZXN0
cnVjdGlvbik7CiAgICAgICAgIHJldHVybiAmdm0uanNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjMsOCArMjYzLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppbml0TW9kaWZp
ZQogICAgIFJFTEVBU0VfQVNTRVJUKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik7CiAK
ICAgICBpZiAoYXJnc0xlbmd0aCkgewotICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5n
aWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQp
LnRyeUFsbG9jYXRlKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CisgICAgICAgIHZvaWQqIGJhY2tp
bmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rl
c2NyaXB0b3Iua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
Zjw4PihhcmdzTGVuZ3RoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQp
OwogICAgICAgICBib29sKiBtb2RpZmllZEFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PGJvb2wqPihi
YWNraW5nU3RvcmUpOwogICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5zZXQo
dm0sIHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
YXJnc0xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxs
b2NhdGlvblNpemUoY2FwYWNpdHkpOwotICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOworICAgICAg
ICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVO
b25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lv
biAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkCiAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlw
ZSkpOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1h
bENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAg
ICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9j
YXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3Rv
cmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
ICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRy
dWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWSghdGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAg
LTk4LDcgKzk4LDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbmRleEJpYXMgPSAw
OwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBBcnJheVN0b3JhZ2U6Om9wdGltYWxW
ZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAg
ICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2Nh
dGUoZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9m
TGluZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSk7
CisgICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5h
bGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxp
bmVTdG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIGluZGV4Qmlhcywgb3V0
T2ZMaW5lU3RvcmFnZSk7CkBAIC0zNjgsNyArMzY4LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRTbG93Q2FzZShjb25zdAogICAgICAgICBhbGxvY2F0ZWROZXdTdG9yYWdlID0gZmFsc2U7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoZGVz
aXJlZENhcGFjaXR5KSk7Ci0gICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOworICAgICAgICBuZXdBbGxvY0Jh
c2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwo
bmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAg
ICAgICAgaWYgKCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjM3
LDcgKzIzNyw5IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGUoVk0mIHYKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCB2
ZWN0b3JMZW5ndGhIaW50KTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLAorICAgICAgICAgICAgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwg
MCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlv
bkNvbnRleHQ6OgogICAgICAgICB2b2lkKiB0ZW1wOwogICAgICAgICBzaXplX3Qgc2l6ZSA9IHNp
emVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKICAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAg
ICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRl
KG51bGxwdHIsIHNpemUpOworICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgICAgICBpZiAoIXRlbXApCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIENv
cHlWaXNpdG9yOwogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBjbGFzcyBFeGVjU3RhdGU7CkBA
IC00OSwxMSArNTAsNiBAQCBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7CiBjbGFzcyBQcm9wZXJ0
eU5hbWVBcnJheTsKIGNsYXNzIFN0cnVjdHVyZTsKIAotZW51bSBjbGFzcyBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgewotICAgIFNob3VsZEFzc2VydE9uRmFpbHVyZSwKLSAgICBTaG91bGROb3RBc3Nl
cnRPbkZhaWx1cmUKLX07Ci0KIGVudW0gY2xhc3MgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5z
ZSB7CiAgICAgSGFzQXJnLAogICAgIERvZXNOb3RIYXZlQXJnCkBAIC03OSw4ICs3NSw4IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIHRyeUFsbG9jYXRlQ2UKIGNsYXNzIEpTQ2VsbCA6IHB1
YmxpYyBIZWFwQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpTVmFsdWU7CiAgICAgZnJpZW5kIGNs
YXNzIE1hcmtlZEJsb2NrOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIEFsbG9jYXRpb25GYWls
dXJlTW9kZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZT4KLSAgICBmcmllbmQgdm9pZCog
dHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBmcmllbmQgdm9pZCogdHJ5QWxsb2NhdGVD
ZWxsSGVscGVyKEhlYXAmLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKTsKIAogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IDA7CkBAIC05MSw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogUmVm
ZXIgdG8gU3Vic3BhY2UgYnkgcmVmZXJlbmNlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5ODgKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJik7CisgICAgc3RhdGljIENv
bXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJik7CiAKICAgICBzdGF0aWMgSlNDZWxsKiBz
ZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOyB9CiAKQEAgLTMxMSw3ICszMDcsNyBAQCBpbmxp
bmUgVG8ganNEeW5hbWljQ2FzdChWTSYgdm0sIEpTVmFsdWUgCiAvLyBGSVhNRTogUmVmZXIgdG8g
U3Vic3BhY2UgYnkgcmVmZXJlbmNlLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Njk4OAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLWlubGluZSBTdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQoraW5saW5lIGF1dG8gc3Vic3BhY2VGb3IoVk0mIHZtKQog
ewogICAgIHJldHVybiBUeXBlOjp0ZW1wbGF0ZSBzdWJzcGFjZUZvcjxUeXBlPih2bSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwzMCArMTM1LDIxIEBAIEFMV0FZU19JTkxJ
TkUgVk0mIEV4ZWNTdGF0ZTo6dm0oKSBjb25zdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KLVN1YnNwYWNlKiBKU0NlbGw6OnN1YnNwYWNlRm9yKFZNJiB2bSkKK0NvbXBsZXRlU3Vi
c3BhY2UqIEpTQ2VsbDo6c3Vic3BhY2VGb3IoVk0mIHZtKQogewogICAgIGlmIChDZWxsVHlwZTo6
bmVlZHNEZXN0cnVjdGlvbikKICAgICAgICAgcmV0dXJuICZ2bS5kZXN0cnVjdGlibGVDZWxsU3Bh
Y2U7CiAgICAgcmV0dXJuICZ2bS5jZWxsU3BhY2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSBtb2RlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNl
IGRlZmVycmFsQ29udGV4dEFyZ1ByZXNlbmNlPgotQUxXQVlTX0lOTElORSB2b2lkKiB0cnlBbGxv
Y2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2
b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUsIEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWls
dXJlTW9kZSkKIHsKICAgICBBU1NFUlQoZGVmZXJyYWxDb250ZXh0IHx8ICFEaXNhbGxvd0dDOjpp
c0luRWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChzaXplID49IHNpemVvZihU
KSk7Ci0gICAgSlNDZWxsKiByZXN1bHQ7Ci0gICAgaWYgKG1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpTaG91bGRBc3NlcnRPbkZhaWx1cmUpIHsKLSAgICAgICAgcmVzdWx0ID0gKGRlZmVy
cmFsQ29udGV4dEFyZ1ByZXNlbmNlID09IEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhh
c0FyZykKLSAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4o
KmhlYXAudm0oKSktPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgc2l6ZSkpCi0gICAgICAgICAg
ICA6IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxv
Y2F0ZShzaXplKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gKGRlZmVycmFsQ29u
dGV4dEFyZ1ByZXNlbmNlID09IEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZykK
LSAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAu
dm0oKSktPnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgc2l6ZSkpCi0gICAgICAgICAgICA6
IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT50cnlBbGxv
Y2F0ZShzaXplKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0
PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxvY2F0ZU5vblZpcnR1YWwo
c2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgIGlmIChmYWlsdXJlTW9k
ZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwgJiYgIXJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAgQVNTRVJU
KCFoZWFwLnZtKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwogICAgIGhlYXAudm0oKS0+c2V0
SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygpKTsKQEAgLTE3MCwyNSArMTYxLDI1IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGUKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUpCiB7Ci0g
ICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlNob3VsZEFzc2VydE9uRmFpbHVyZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6RG9l
c05vdEhhdmVBcmc+KGhlYXAsIG51bGxwdHIsIHNpemUpOworICAgIHJldHVybiB0cnlBbGxvY2F0
ZUNlbGxIZWxwZXI8VD4oaGVhcCwgc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpBc3NlcnQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCogdHJ5QWxsb2NhdGVD
ZWxsKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNl
bGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGROb3RBc3NlcnRPbkZhaWx1
cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6OkRvZXNOb3RIYXZlQXJnPihoZWFwLCBu
dWxscHRyLCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAs
IHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0
dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNob3Vs
ZEFzc2VydE9uRmFpbHVyZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnPiho
ZWFwLCBkZWZlcnJhbENvbnRleHQsIHNpemUpOworICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxI
ZWxwZXI8VD4oaGVhcCwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OkFzc2VydCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkKiB0cnlBbGxvY2F0
ZUNlbGwoSGVhcCYgaGVhcCwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6
ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OlNob3VsZE5vdEFzc2VydE9uRmFpbHVyZSwgR0NEZWZlcnJhbENvbnRl
eHRBcmdQcmVzZW5zZTo6SGFzQXJnPihoZWFwLCBkZWZlcnJhbENvbnRleHQsIHNpemUpOworICAg
IHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VD4oaGVhcCwgc2l6ZSwgZGVmZXJyYWxDb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogfQogCiBpbmxpbmUgYm9v
bCBKU0NlbGw6OmlzT2JqZWN0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaAkocmV2aXNpb24gMjI0NTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiAmdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQko
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlLmNwcDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFj
ZS5oIgorCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIHsKKworc3RydWN0IERlc3Ryb3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKKyAgICB7CisgICAgICAg
IHN0YXRpY19jYXN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Kj4oY2VsbCktPmNsYXNzSW5mbygpLT5t
ZXRob2RUYWJsZS5kZXN0cm95KGNlbGwpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpKU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciogYWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0
cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQor
eworfQorCitKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjp+SlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZSgpCit7Cit9CisKK3ZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6
ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxp
c3QpCit7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBE
ZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpk
ZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNl
bGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgiCiAKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MywyMSArNDIsMjEgQEAgc3RydWN0IERl
c3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUpTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZTo6SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENl
bGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpT
Q2VsbCkpCiB7CiB9CiAKLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlKCkKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjp+
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhh
bmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlz
dCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZy
ZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nSGVh
cENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQordm9pZCBK
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCog
Y2VsbCkKIHsKICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmg6MjI0NTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBI
ZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZp
cnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKKyAgICAKKyAgICB2b2lkIGZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAg
IHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24g
MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2Vs
bFR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsKIHB1YmxpYzoKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVh
cCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0
dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOwogICAgIAog
ICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMu
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMg
ewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBj
b25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNEZXN0cnVjdGlibGVPYmplY3QqPihj
ZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsK
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFw
LCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1l
LCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6
On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCkKLXsKLX0KLQotdm9pZCBKU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5k
bGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5n
U3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAg
RGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UgOiBw
dWJsaWMgU3Vic3BhY2UgewotcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UoKTsKLSAgICAKLSAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveShWTSYsIEpT
Q2VsbCopIG92ZXJyaWRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQu
aAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFz
cyBKU0xleGljYWxFbnZpcm9ubWVudCA6IHB1YmxpYyBKU1N5CiAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKTsKICAgICAgICAgcmV0
dXJuICZ2bS5qc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIHJldHVybiAmdm0uc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2
aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IERl
c3Ryb3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2Vs
bCogY2VsbCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2Vs
bCk7CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
KENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2Nh
dG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVk
c0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQoreworfQorCitKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UoKQoreworfQorCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJl
ZUxpc3QpCit7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0
LCBEZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMo
KSh2bSwgY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMCBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmgiCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC00MywyMSArNDIsMjEgQEAgc3RydWN0IERlc3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCiAKLUpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6SlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwg
aGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlND
ZWxsKSwgYWxsb2NhdG9yKQorSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5
cGUoQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxs
KSkKIHsKIH0KIAotSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCkKK0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFw
Q2VsbFR5cGU6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkKIHsKIH0K
IAotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICBoYW5kbGUuZmlu
aXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIGhh
bmRsZS5maW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIERlc3Ryb3lGdW5j
KCkpOwogfQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJv
eShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKIHsKICAgICBEZXN0cm95
RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmgJKHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmg6MjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJTdWJzcGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZpcnR1YWwgfkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpOworICAg
IAorICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJT
dWJzcGFjZS5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlIDogcHVibGljIFN1YnNw
YWNlIHsKK2NsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUgOiBwdWJs
aWMgSGVhcENlbGxUeXBlIHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIH5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCk7CiAgICAg
CiAgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBv
dmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0NTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIgotCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1
ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIHsK
LQotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3Io
KShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0YXRpY19jYXN0PEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxl
LmRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0K
LUpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0
cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQot
ewotfQotCi1KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBG
cmVlTGlzdCogZnJlZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNw
YWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAg
RGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
U3Vic3BhY2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIH5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoKTsKLSAgICAKLSAg
ICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJy
aWRlOwotICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gV2Ugc3BlY2lhbGl6ZSB0aGUgc3RyaW5nIHN1YnNwYWNlIHRvIGdldCB0aGUgZmFzdGVz
dCBwb3NzaWJsZSBzd2VlcC4gVGhpcyB3b3VsZG4ndCBiZQogICAgIC8vIG5lY2Vzc2FyeSBpZiBK
U1N0cmluZyBkaWRuJ3QgaGF2ZSBhIGRlc3RydWN0b3IuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWU+
Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENv
bXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVy
biAmdm0uc3RyaW5nU3BhY2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0
NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNl
LmNwcDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hl
YXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNTdHJpbmdTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IERlc3Ry
b3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCog
Y2VsbCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbCkt
PkpTU3RyaW5nOjp+SlNTdHJpbmcoKTsKKyAgICB9Cit9OworCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworSlNTdHJpbmdTdWJzcGFjZTo6SlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUs
IEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICA6IFN1
YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwg
SGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK3sKK30KKworSlNTdHJpbmdTdWJzcGFjZTo6
fkpTU3RyaW5nU3Vic3BhY2UoKQoreworfQorCit2b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQor
eworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJv
eUZ1bmMoKSk7Cit9CisKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkpTU3RyaW5nU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU1N0cmluZ0hlYXBD
ZWxsVHlwZS5oIgogCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtNDMsMjEgKzQyLDIxIEBAIHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi1KU1N0cmluZ1N1YnNwYWNlOjpKU1N0cmluZ1N1YnNwYWNl
KENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2Nh
dG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVk
c0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQorSlNTdHJpbmdIZWFw
Q2VsbFR5cGU6OkpTU3RyaW5nSGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxv
Y2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewog
fQogCi1KU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCitKU1N0cmluZ0hlYXBD
ZWxsVHlwZTo6fkpTU3RyaW5nSGVhcENlbGxUeXBlKCkKIHsKIH0KIAotdm9pZCBKU1N0cmluZ1N1
YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0
KiBmcmVlTGlzdCkKK3ZvaWQgSlNTdHJpbmdIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtl
ZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRs
ZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Cisg
ICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJv
eUZ1bmMoKSk7CiB9CiAKLXZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKK3ZvaWQgSlNTdHJpbmdIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBK
U0NlbGwqIGNlbGwpCiB7CiAgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxU
eXBlLmgJKHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdTdWJzcGFjZS5oOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBKU1N0cmluZ1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFs
aWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5K
U1N0cmluZ1N1YnNwYWNlKCk7CisgICAgCisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlc3Ryb3koVk0mLCBK
U0NlbGwqKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBl
LmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNCBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSGVhcENl
bGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1N0cmluZ1N1YnNwYWNlIDog
cHVibGljIFN1YnNwYWNlIHsKK2NsYXNzIEpTU3RyaW5nSGVhcENlbGxUeXBlIDogcHVibGljIEhl
YXBDZWxsVHlwZSB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJz
cGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTdHJpbmdTdWJzcGFjZSgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTU3RyaW5nSGVhcENlbGxUeXBlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB+SlNTdHJpbmdIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lkIGZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZv
aWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2Uu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SlNTdHJpbmdTdWJzcGFjZS5oIgotCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIHsKLQotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbCktPkpTU3RyaW5nOjp+
SlNTdHJpbmcoKTsKLSAgICB9Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNT
dHJpbmdTdWJzcGFjZTo6SlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAs
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUs
IGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpT
Q2VsbCksIGFsbG9jYXRvcikKLXsKLX0KLQotSlNTdHJpbmdTdWJzcGFjZTo6fkpTU3RyaW5nU3Vi
c3BhY2UoKQotewotfQotCi12b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtl
ZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQotewotICAgIGhhbmRs
ZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Ci19
Ci0KLXZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkK
LXsKLSAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1
YnNwYWNlLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNT
dHJpbmdTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTdHJpbmdT
dWJzcGFjZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikg
b3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9u
IDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIEFMV0FZU19JTkxJTkUgSlNB
cnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFs
aXplZCA9IGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7
Ci0gICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFs
bG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CiAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAs
IDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjI0NTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwogICAgICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCiAjaW5jbHVkZSAi
SlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIgogI2luY2x1ZGUgIkpTRml4ZWRBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5o
IgpAQCAtNzMsMTMgKzc0LDE2IEBACiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1
ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
IgogI2luY2x1ZGUgIkpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiSlNTY3Jp
cHRGZXRjaGVyLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiSlNTdHJpbmdIZWFwQ2Vs
bFR5cGUuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxs
VHlwZS5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgi
CiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTE3MSwxNyArMTc1LDI0IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGZhc3RNYWxsb2NBbGxvY2F0b3Ioc3Rk
OjptYWtlX3VuaXF1ZTxGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKICAgICAs
IHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8R2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6UHJpbWl0aXZlKSkKICAgICAsIGpzVmFsdWVH
aWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUpKQotICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIEFsbG9jYXRv
ckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSks
IHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQotICAgICwganNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgQWxsb2Nh
dG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5
KSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQotICAgICwgY2VsbFNwYWNlKCJKU0Nl
bGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhl
YXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQotICAgICwganNWYWx1
ZUdpZ2FjYWdlQ2VsbFNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEpTQ2VsbCIsIGhlYXAsIEFsbG9j
YXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCks
IGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAsIGRlc3RydWN0aWJsZUNlbGxT
cGFjZSgiRGVzdHJ1Y3RpYmxlIEpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVl
ZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0
KCkpCi0gICAgLCBzdHJpbmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQotICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0IiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIGVhZ2VybHlT
d2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJFYWdlcmx5IFN3ZXB0IEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0IiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIHNlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3BhY2UoIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIsIGhl
YXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBhdXhpbGlhcnlIZWFwQ2VsbFR5
cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9l
c05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSkpKQorICAgICwgY2VsbEhl
YXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxsVHlwZT4oQWxsb2NhdG9yQXR0cmli
dXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkpCisgICAgLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBl
PihBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwp
KSkKKyAgICAsIHN0cmluZ0hlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTU3RyaW5nSGVh
cENlbGxUeXBlPigpKQorICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0ZDo6
bWFrZV91bmlxdWU8SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCisgICAgLCBz
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCisgICAgLCB3ZWJBc3NlbWJseUNv
ZGVCbG9ja0hlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tIZWFwQ2VsbFR5cGU+KCkpCisgICAgLCBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
KCJQcmltaXRpdmUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxU
eXBlLmdldCgpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhl
YXAsIGF1eGlsaWFyeUhlYXBDZWxsVHlwZS5nZXQoKSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9y
LmdldCgpKQorICAgICwgY2VsbFNwYWNlKCJKU0NlbGwiLCBoZWFwLCBjZWxsSGVhcENlbGxUeXBl
LmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwganNWYWx1ZUdpZ2FjYWdl
Q2VsbFNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEpTQ2VsbCIsIGhlYXAsIGNlbGxIZWFwQ2VsbFR5
cGUuZ2V0KCksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGRlc3RydWN0
aWJsZUNlbGxTcGFjZSgiRGVzdHJ1Y3RpYmxlIEpTQ2VsbCIsIGhlYXAsIGRlc3RydWN0aWJsZUNl
bGxIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBz
dHJpbmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCBzdHJpbmdIZWFwQ2VsbFR5cGUuZ2V0KCksIGZh
c3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgi
SlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBkZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBlYWdlcmx5U3dlcHRE
ZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiRWFnZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJsZU9iamVj
dCIsIGhlYXAsIGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxv
Y0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UoIkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIsIGhlYXAsIHNlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKLSAgICAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UoIkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkp
CisgICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKCJKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3BhY2UiLCBoZWFwLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwgZmFz
dE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKICNlbmRpZgogICAgICwgdm1UeXBlKHZtVHlwZSkKICAg
ICAsIGNsaWVudERhdGEoMCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNp
bmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiQ29tcGxldGVTdWJz
cGFjZS5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIKICNpbmNsdWRlICJDb250cm9s
Rmxvd1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKQEAgLTQxLDE4
ICs0MiwxMyBAQAogI2luY2x1ZGUgIkludHJpbnNpYy5oIgogI2luY2x1ZGUgIkpJVFRodW5rcy5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCi0jaW5jbHVkZSAiSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCi0jaW5jbHVkZSAiSlNTdHJpbmdTdWJzcGFjZS5oIgot
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgogI2luY2x1ZGUg
Ik51bWVyaWNTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAi
U3Ryb25nLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKLSNpbmNsdWRlICJTdWJzcGFj
ZS5oIgogI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlZN
RW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCkBAIC0xMDgsOSArMTA0LDEzIEBA
IGNsYXNzIEhlYXBQcm9maWxlcjsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBJbnRlcnByZXRl
cjsKIGNsYXNzIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb247CitjbGFzcyBKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNP
YmplY3Q7CiBjbGFzcyBKU1J1bkxvb3BUaW1lcjsKK2NsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RIZWFwQ2VsbFR5cGU7CitjbGFzcyBKU1N0cmluZ0hlYXBDZWxsVHlwZTsKK2NsYXNzIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU7CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRh
YmxlOwpAQCAtMjkwLDkgKzI5MCwxNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZh
c3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBmYXN0TWFsbG9jQWxsb2NhdG9yOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+IHByaW1pdGl2
ZUdpZ2FjYWdlQWxsb2NhdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I+IGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcjsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxIZWFwQ2VsbFR5cGU+IGF1eGlsaWFyeUhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SGVhcENlbGxUeXBlPiBjZWxsSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxIZWFwQ2VsbFR5cGU+IGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGU7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEpTU3RyaW5nSGVhcENlbGxUeXBlPiBzdHJpbmdIZWFwQ2VsbFR5cGU7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlPiBkZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU+IHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVh
cENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKICAgICAKLSAgICBT
dWJzcGFjZSBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBUeXBlZCBhcnJheXMs
IHN0cmluZ3MsIGJpdHZlY3RvcnMsIGV0YyBnbyBoZXJlLgotICAgIFN1YnNwYWNlIGpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBCdXR0ZXJmbGllcywgYXJyYXlzIG9mIEpTVmFsdWVz
LCBldGMgZ28gaGVyZS4KKyAgICBDb21wbGV0ZVN1YnNwYWNlIHByaW1pdGl2ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2U7IC8vIFR5cGVkIGFycmF5cywgc3RyaW5ncywgYml0dmVjdG9ycywgZXRjIGdv
IGhlcmUuCisgICAgQ29tcGxldGVTdWJzcGFjZSBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFj
ZTsgLy8gQnV0dGVyZmxpZXMsIGFycmF5cyBvZiBKU1ZhbHVlcywgZXRjIGdvIGhlcmUuCiAKICAg
ICAvLyBXZSBtYWtlIGNyb3NzLWN1dHRpbmcgYXNzdW1wdGlvbnMgYWJvdXQgdHlwZWQgYXJyYXlz
IGJlaW5nIGluIHRoZSBwcmltaXRpdmUgR2lnYWNhZ2UgYW5kIGJ1dHRlcmZsaWVzCiAgICAgLy8g
YmVpbmcgaW4gdGhlIEpTVmFsdWUgZ2lnYWNhZ2UuIEZvciBzb21lIHR5cGVzLCBpdCdzIHN1cGVy
IG9idmlvdXMgd2hlcmUgdGhleSBzaG91bGQgZ28sIGFuZCBzbyB3ZQpAQCAtMzAwLDcgKzMwOCw3
IEBAIHB1YmxpYzoKICAgICAvLyBjb25zdGFudCBzb21ld2hlcmUuCiAgICAgLy8gRklYTUU6IE1h
eWJlIGl0IHdvdWxkIGJlIGJldHRlciBpZiBldmVyeW9uZSBhYnN0cmFjdGVkIHRoaXM/CiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTI0OAotICAgIEFM
V0FZU19JTkxJTkUgU3Vic3BhY2UmIGdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoR2lnYWNhZ2U6Oktp
bmQga2luZCkKKyAgICBBTFdBWVNfSU5MSU5FIENvbXBsZXRlU3Vic3BhY2UmIGdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UoR2lnYWNhZ2U6OktpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
a2luZCkgewogICAgICAgICBjYXNlIEdpZ2FjYWdlOjpQcmltaXRpdmU6CkBAIC0zMTUsMTUgKzMy
MywxNSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIC8vIFdoZW5ldmVyIHBvc3NpYmxlLCB1
c2Ugc3Vic3BhY2VGb3I8Q2VsbFR5cGU+KHZtKSB0byBnZXQgb25lIG9mIHRoZXNlIHN1YnNwYWNl
cy4KLSAgICBTdWJzcGFjZSBjZWxsU3BhY2U7Ci0gICAgU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdl
Q2VsbFNwYWNlOwotICAgIFN1YnNwYWNlIGRlc3RydWN0aWJsZUNlbGxTcGFjZTsKLSAgICBKU1N0
cmluZ1N1YnNwYWNlIHN0cmluZ1NwYWNlOwotICAgIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2UgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7Ci0gICAgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZSBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKLSAgICBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Ugc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZTsKKyAg
ICBDb21wbGV0ZVN1YnNwYWNlIGNlbGxTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIGpzVmFs
dWVHaWdhY2FnZUNlbGxTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIGRlc3RydWN0aWJsZUNl
bGxTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIHN0cmluZ1NwYWNlOworICAgIENvbXBsZXRl
U3Vic3BhY2UgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSBl
YWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNl
IHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2U7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQot
ICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSB3ZWJBc3NlbWJseUNvZGVCbG9ja1Nw
YWNlOworICAgIENvbXBsZXRlU3Vic3BhY2Ugd2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZTsKICNl
bmRpZgogCiAgICAgVk1UeXBlIHZtVHlwZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNl
Rm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0ud2ViQXNzZW1ibHlDb2RlQmxv
Y2tTcGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBl
LmNwcAkocmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOjIyNDUzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJT
dWJzcGFjZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK3N0
cnVjdCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0m
LCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfZmluYWw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz46OnZhbHVlLCAiT3RoZXJ3aXNlLCB0aGlz
IGNvZGUgd291bGQgbm90IGJlIGNvcnJlY3QuIik7CisgICAgICAgIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmluZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9Cit9OworCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
OjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFw
LCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1l
LCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCit7Cit9CisKK3ZvaWQgSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxl
JiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBL
bm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDE0ICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgiCiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDcsMjEg
KzQ2LDIxIEBAIHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJp
YnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVl
ZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKLUpTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCitKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hl
YXBDZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
OjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVl
TGlzdCkKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0g
ICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVu
YygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKGZyZWVMaXN0
LCBEZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit2b2lkIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAg
RGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hl
YXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oOjIyNDUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2Vs
bFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7CitwdWJsaWM6CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcg
bmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKKyAgICB2aXJ0dWFsIH5KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVz
dHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
a0hlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0j
aW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSA6IHB1Ymxp
YyBTdWJzcGFjZSB7CitjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlIDog
cHVibGljIEhlYXBDZWxsVHlwZSB7CiBwdWJsaWM6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsK
LSAgICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKTsKKyAgICBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCk7CisgICAgdmlydHVhbCB+SlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSgpOwogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0
cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJz
cGFjZS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAi
TWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAot
ICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s+Ojp2YWx1ZSwgIk90aGVyd2lzZSwgdGhpcyBjb2RlIHdvdWxkIG5vdCBiZSBjb3Jy
ZWN0LiIpOwotICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbmZvKCktPm1ldGhvZFRh
YmxlLmRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
Ci0KLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmli
dXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQotewot
fQotCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJl
ZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0
LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgRGVzdHJveUZ1bmMoKSh2
bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgJKHJldmlzaW9uIDIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZS5oCShub25leGlzdGVudCkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UgOiBwdWJsaWMg
U3Vic3BhY2UgewotcHVibGljOgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShD
U3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgdmlydHVh
bCB+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCk7Ci0gICAgCi0gICAgdm9pZCBmaW5p
c2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNp
b24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAg
ICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgLy8gV2UgaG9sZCBvbnRvIGEgbG90IG9mIG1lbW9yeSwgc28gaXQgbWFrZXMgYSBsb3Qg
b2Ygc2Vuc2UgdG8gYmUgc3dlcHQgZWFnZXJseS4KICAgICAgICAgcmV0dXJuICZ2bS5lYWdlcmx5
U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNl
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
PgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuY3BwCShy
ZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBw
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMTIgQEAgSlNET01XaW5kb3cmIEpT
RE9NT2JqZWN0Ojpkb21XaW5kb3coKSBjbwogICAgIHJldHVybiAqZG9tV2luZG93OwogfQogCi1T
dWJzcGFjZSogb3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKFZNJiB2bSkKK0NvbXBsZXRlU3Vi
c3BhY2UqIG91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvcihWTSYgdm0pCiB7CiAgICAgcmV0dXJu
ICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5vdXRwdXRDb25z
dHJhaW50U3BhY2UoKTsKIH0KIAotU3Vic3BhY2UqIGdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFp
bnRTdWJzcGFjZUZvcihWTSYgdm0pCitDb21wbGV0ZVN1YnNwYWNlKiBnbG9iYWxPYmplY3RPdXRw
dXRDb25zdHJhaW50U3Vic3BhY2VGb3IoVk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+Z2xvYmFsT2JqZWN0T3V0cHV0Q29u
c3RyYWludFNwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdyYXBwZXIuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDggQEAgcHJvdGVj
dGVkOgogICAgIH0KIH07CiAKLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3Vic3BhY2UqIG91dHB1dENv
bnN0cmFpbnRTdWJzcGFjZUZvcihKU0M6OlZNJik7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OlN1YnNw
YWNlKiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlNDOjpWTSYpOwor
V0VCQ09SRV9FWFBPUlQgSlNDOjpDb21wbGV0ZVN1YnNwYWNlKiBvdXRwdXRDb25zdHJhaW50U3Vi
c3BhY2VGb3IoSlNDOjpWTSYpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpDb21wbGV0ZVN1YnNwYWNl
KiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlNDOjpWTSYpOwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbXBsZW1lbnRhdGlvbkNsYXNzPiBjbGFzcyBKU0RPTVdyYXBwZXIg
OiBwdWJsaWMgSlNET01PYmplY3QgewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyNDUz
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8aGVhcC9NYXJrZWRC
bG9ja0lubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1
ZGUgPGhlYXAvVmlzaXRpbmdUaW1lb3V0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC00NCw4ICs0Niw4IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAgIDog
bV9idWlsdGluRnVuY3Rpb25zKHZtKQogICAgICwgbV9idWlsdGluTmFtZXMoJnZtKQotICAgICwg
bV9vdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRwdXQgQ29uc3Ry
YWludCIsIHZtLmhlYXAsIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBtX2ds
b2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcv
IE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQo
KSkKKyAgICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIgdy8gT3V0
cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBtX2dsb2JhbE9i
amVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcvIE91dHB1
dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uc2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiB7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJ
KHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVK
U0NsaWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAg
ICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyYgYnVpbHRpbk5hbWVzKCkgeyByZXR1cm4gbV9idWlsdGlu
TmFtZXM7IH0KICAgICBKU0J1aWx0aW5GdW5jdGlvbnMmIGJ1aWx0aW5GdW5jdGlvbnMoKSB7IHJl
dHVybiBtX2J1aWx0aW5GdW5jdGlvbnM7IH0KICAgICAKLSAgICBKU0M6OlN1YnNwYWNlJiBvdXRw
dXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBtX291dHB1dENvbnN0cmFpbnRTcGFjZTsgfQot
ICAgIEpTQzo6U3Vic3BhY2UmIGdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgpIHsg
cmV0dXJuIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlOyB9CisgICAgSlNDOjpD
b21wbGV0ZVN1YnNwYWNlJiBvdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBtX291dHB1
dENvbnN0cmFpbnRTcGFjZTsgfQorICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSYgZ2xvYmFsT2Jq
ZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlKCkgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RPdXRwdXRD
b25zdHJhaW50U3BhY2U7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAg
IHZvaWQgZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZShjb25zdCBGdW5jJiBmdW5jKQpAQCAt
NzYsOCArNzYsOCBAQCBwcml2YXRlOgogICAgIEpTQnVpbHRpbkZ1bmN0aW9ucyBtX2J1aWx0aW5G
dW5jdGlvbnM7CiAgICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyBtX2J1aWx0aW5OYW1lczsKICAgICAK
LSAgICBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UgbV9vdXRwdXRDb25zdHJhaW50
U3BhY2U7Ci0gICAgSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UgbV9nbG9i
YWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2U7CisgICAgSlNDOjpDb21wbGV0ZVN1YnNwYWNl
IG1fb3V0cHV0Q29uc3RyYWludFNwYWNlOworICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSBtX2ds
b2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjczNSw3
ICsyNzM1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRoaXMganVzdCBj
YWxscyB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2ZSB0byB3
b3JyeSBhYm91dCB0aGlzLgogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBz
dGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0
b3ImKTtcbiIpOwogICAgICAgICAgICAgbXkgJHN1YnNwYWNlRnVuYyA9IElzRE9NR2xvYmFsT2Jq
ZWN0KCRpbnRlcmZhY2UpID8gImdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZv
ciIgOiAib3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yIjsKLSAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0YXRpYyBKU0M6OlN1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkgeyByZXR1cm4gJHN1YnNwYWNlRnVuYyh2bSk7IH1c
biIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RhdGljIEpTQzo6Q29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pIHsgcmV0dXJuICRzdWJzcGFjZUZ1bmModm0pOyB9XG4iKTsKICAgICAgICAgfQogICAgIH0K
ICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327208</attachid>
            <date>2017-11-17 11:59:32 -0800</date>
            <delta_ts>2017-11-19 08:10:18 -0800</delta_ts>
            <desc>it ran 3d-cube so it&apos;s probably solid</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>208122</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0OTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNCBA
QAorMjAxNy0xMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBzdXBwb3J0IGlzb2hlYXBzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZXhwYW5kcyB0aGUgcG93ZXIgb2YgdGhl
IFN1YnNwYWNlIEFQSSBpbiBKU0M6CisgICAgICAgIAorICAgICAgICAtIEV2ZXJ5dGhpbmcgYXNz
b2NpYXRlZCB3aXRoIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIG9iamVjdHMgaXMgbm93IHBhcnQg
b2YgdGhlIEhlYXBDZWxsVHlwZSBjbGFzcy4KKyAgICAgICAgICBXZSBoYXZlIGRpZmZlcmVudCBI
ZWFwQ2VsbFR5cGVzIGZvciBkaWZmZXJlbnQgZGVzdHJ1Y3Rpb24gc3RyYXRlZ2llcy4gQW55IFN1
YnNwYWNlIGNhbiB1c2UgYW55CisgICAgICAgICAgSGVhcENlbGxUeXBlOyB0aGVzZSBhcmUgb3J0
aG9nb25hbCB0aGluZ3MuCisgICAgICAgIAorICAgICAgICAtIFRoZXJlIGFyZSBub3cgdHdvIHZh
cmlhbnRzIG9mIFN1YnNwYWNlOiBDb21wbGV0ZVN1YnNwYWNlLCB3aGljaCBjYW4gYWxsb2NhdGUg
YW55IHNpemUgb2JqZWN0cyB1c2luZworICAgICAgICAgIGFueSBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOyBhbmQgSXNvU3Vic3BhY2UsIHdoaWNoIGNhbiBhbGxvY2F0ZSBqdXN0IG9uZSBzaXplIG9m
IG9iamVjdCBhbmQgdXNlcyBhCisgICAgICAgICAgc3BlY2lhbCB2aXJ0dWFsIG1lbW9yeSBwb29s
IGZvciB0aGF0IHB1cnBvc2UuCisgICAgICAgIAorICAgICAgICBTbyBmYXIsIHRoaXMgcGF0Y2gg
anVzdCBwdXRzIHN1YnR5cGVzIG9mIEV4ZWN1dGFibGVCYXNlIGluIElzb1N1YnNwYWNlcy4KKwor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjppbml0aWFsaXplUHJvZmlsZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2VXaXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjph
bGxvY2F0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFs
bG9jYXRvckZvclNpemUpOgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyQWxsb2Nh
dG9yKToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJTdWJz
cGFjZSk6CisgICAgICAgICogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg6CisgICAgICAg
IChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZpcnN0QWxsb2NhdG9yIGNvbnN0KToKKyAg
ICAgICAgKiBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBo
ZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxldGVT
dWJzcGFjZTo6Q29tcGxldGVTdWJzcGFjZSk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3Bh
Y2U6On5Db21wbGV0ZVN1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6
YWxsb2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUp
OgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgor
ICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KToKKyAgICAg
ICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
Q29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KToKKyAgICAgICAgKiBoZWFwL0NvbXBs
ZXRlU3Vic3BhY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6Om9m
ZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXApOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNw
YWNlOjphbGxvY2F0b3JGb3JTaXplU3RlcCk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3Bh
Y2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAvSGVhcENlbGxUeXBl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBlKToK
KyAgICAgICAgKEpTQzo6SGVhcENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpT
Qzo6SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlw
ZTo6ZGVzdHJveSk6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbFR5cGUuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogaGVh
cC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oklz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IpOgorICAg
ICAgICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+SXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlQWxpZ25lZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6OmZyZWVBbGlnbmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SXNvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaGVhcC9Jc29BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNlKToKKyAgICAgICAgKEpT
Qzo6SXNvU3Vic3BhY2U6On5Jc29TdWJzcGFjZSk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNl
OjphbGxvY2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbCk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0ZSk6CisgICAg
ICAgIChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgorICAgICAgICAqIGhl
YXAvSXNvU3Vic3BhY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjpzaXpl
IGNvbnN0KToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjpzZXRTdWJzcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGVTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6YWxsb2NhdGVTbG93Q2FzZUltcGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2Vk
QWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6bmV4dEFsbG9jYXRv
ckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6c2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik6CisgICAg
ICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAg
ICAgICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJr
ZWRTcGFjZTo6YWRkTWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNl
Lmg6CisgICAgICAgICogaGVhcC9TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNl
OjpTdWJzcGFjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjppbml0aWFsaXplKToKKyAgICAg
ICAgKEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6
OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24p
OgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKToKKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNwYWNlOjphbGxvY2F0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlN1YnNwYWNlOjp0cnlBbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OmFsbG9jYXRlU2xvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1
YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFj
ZTo6ZGlkQWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAg
ICAgICAgKEpTQzo6U3Vic3BhY2U6OmhlYXBDZWxsVHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6
OlN1YnNwYWNlOjpuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgY29uc3QpOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6c2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6
ZVN0ZXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2l6
ZVN0ZXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6dHJ5QWxsb2NhdG9yRm9y
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmFsbG9jYXRvckZvcik6IERlbGV0
ZWQuCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX25ld19vYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OnRyeUNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jv
d0FycmF5UmlnaHQpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAg
ICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyk6CisgICAgICAgICog
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRz
OjpzdWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5o
OgorICAgICAgICAqIHJ1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1l
L0V4ZWN1dGFibGVCYXNlLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpzdWJzcGFj
ZUZvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAg
KiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVy
aWNBcmd1bWVudHM8VHlwZT46OmluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDoKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3RlZCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnVuc2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0
cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNDZWxsLmg6CisgICAgICAgIChKU0M6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1l
L0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzdWJzcGFjZUZvcik6Cisg
ICAgICAgIChKU0M6OnRyeUFsbG9jYXRlQ2VsbEhlbHBlcik6CisgICAgICAgIChKU0M6OmFsbG9j
YXRlQ2VsbCk6CisgICAgICAgIChKU0M6OnRyeUFsbG9jYXRlQ2VsbCk6CisgICAgICAgICogcnVu
dGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJs
ZU9iamVjdDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcC4KKyAgICAgICAgKEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlKToKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGU6On5KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgIChKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgIChK
U0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpkZXN0cm95KToKKyAgICAgICAg
KEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2U6On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXApOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaC4KKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNMZXhp
Y2FsRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKEpTQzo6SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN1
YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6c3Vic3BhY2VGb3Ip
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHAuCisgICAgICAgIChKU0M6OkpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFw
Q2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENl
bGxUeXBlOjp+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAg
IChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVw
KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6
ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5oLgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnN1YnNwYWNlRm9yKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAuCisgICAg
ICAgIChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjpKU1N0cmluZ0hlYXBDZWxsVHlwZSk6Cisg
ICAgICAgIChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjp+SlNTdHJpbmdIZWFwQ2VsbFR5cGUp
OgorICAgICAgICAoSlNDOjpKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXApOgorICAg
ICAgICAoSlNDOjpKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nU3Vic3BhY2U6OkpTU3RyaW5nU3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmguCisgICAgICAgICogcnVudGltZS9K
U1N0cmluZ1N1YnNwYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5n
U3Vic3BhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisgICAgICAg
ICogcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdF
eHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmg6Cisg
ICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UpOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAqIHdhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5j
cHAuCisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGU6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hl
YXBDZWxsVHlwZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1
YnNwYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eU1lbW9yeS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpzdWJzcGFjZUZv
cik6CisKIDIwMTctMTEtMTYgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBmZWF0dXJlIGRlZmluZSBmb3IgYWx0ZXJuYXRpdmUgcHJlc2VudGF0aW9uIGJ1
dHRvbiBlbGVtZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAy
MjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3MCw2ICs0NzAsNyBAQCBoZWFwL0NlbGxDb250YWluZXIuY3BwCiBoZWFwL0NvZGVC
bG9ja1NldC5jcHAKIGhlYXAvQ29sbGVjdGlvblNjb3BlLmNwcAogaGVhcC9Db2xsZWN0b3JQaGFz
ZS5jcHAKK2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAKIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwCiBoZWFwL0RlZmVyR0MuY3BwCiBoZWFwL0Rlc3RydWN0aW9uTW9kZS5jcHAKQEAgLTQ4Niwx
MiArNDg3LDE1IEBAIGhlYXAvSGFuZGxlU2V0LmNwcAogaGVhcC9IYW5kbGVTdGFjay5jcHAKIGhl
YXAvSGVhcC5jcHAKIGhlYXAvSGVhcENlbGwuY3BwCitoZWFwL0hlYXBDZWxsVHlwZS5jcHAKIGhl
YXAvSGVhcEZpbmFsaXplckNhbGxiYWNrLmNwcAogaGVhcC9IZWFwSGVscGVyUG9vbC5jcHAKIGhl
YXAvSGVhcFByb2ZpbGVyLmNwcAogaGVhcC9IZWFwU25hcHNob3QuY3BwCiBoZWFwL0hlYXBTbmFw
c2hvdEJ1aWxkZXIuY3BwCiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKK2hlYXAvSXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5jcHAKK2hlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0
dWJSb3V0aW5lU2V0LmNwcAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3BwCiBoZWFwL01hY2hpbmVT
dGFja01hcmtlci5jcHAKQEAgLTc3Miw3ICs3NzYsNyBAQCBydW50aW1lL0pTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uY3BwCiBydW50aW1lL0pTRGF0YVZpZXcuY3BwCiBydW50aW1lL0pTRGF0
YVZpZXdQcm90b3R5cGUuY3BwCiBydW50aW1lL0pTRGF0ZU1hdGguY3BwCi1ydW50aW1lL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCitydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmNwcAogcnVudGltZS9KU0ZpeGVkQXJyYXkuY3BwCiBydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCiBydW50aW1lL0pTR2VuZXJhdG9yRnVuY3Rpb24uY3BwCkBAIC04MDcsMTQgKzgx
MSwxNCBAQCBydW50aW1lL0pTU2NvcGUuY3BwCiBydW50aW1lL0pTU2NyaXB0RmV0Y2hlci5jcHAK
IHJ1bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuY3BwCiBydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuY3BwCi1ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZS5jcHAKK3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5j
cHAKIHJ1bnRpbWUvSlNTZXQuY3BwCiBydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCiBydW50aW1l
L0pTU291cmNlQ29kZS5jcHAKIHJ1bnRpbWUvSlNTdHJpbmcuY3BwCiBydW50aW1lL0pTU3RyaW5n
SXRlcmF0b3IuY3BwCiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAotcnVudGltZS9KU1N0cmlu
Z1N1YnNwYWNlLmNwcAorcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAKIHJ1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNw
cAogcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCkBAIC05NzEsNyArOTc1LDcg
QEAgd2FzbS9qcy9KU1RvV2FzbS5jcHAKIHdhc20vanMvSlNUb1dhc20uaAogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAotd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCit3YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKIHdhc20vanMvSlNX
ZWJBc3NlbWJseUxpbmtFcnJvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEzLDcgKzMx
Myw3IEBACiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0
RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAw
NEQ2QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhP
YnZpb3VzU3BpbGxzLmggKi87IH07CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERG
R1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi87IH07Ci0JCTBGNEY4Mjg4
MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUy
RkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjRGODI4ODFF
MkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYx
RTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRG
ODI4QzFFMzFCOTc2MDA3NTE4NEMgLyogU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4
MjhBMUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxl
ci5oICovOyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xv
YmJlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgg
Ki87IH07CiAJCTBGNTUxM0E2MUQ1QTY4MkMwMEMzMkJEOCAvKiBGcmVlTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTEzQTUxRDVBNjgyQTAw
QzMyQkQ4IC8qIEZyZWVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTQwMCw4ICs0MDAsOCBAQAogCQkwRjdERjEzNTFFMjk3MERDMDA5NTk1
MUIgLyogTWFya2VkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMDFFMjk3MEQ1MDA5NTk1MUIgLyogTWFya2VkU3BhY2VJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY3REYxMzcxRTI5NzBFMTAwOTU5NTFCIC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMjFFMjk3MEQ1MDA5NTk1MUIg
LyogU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjdERjEzODFFMjk3MEU0MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMzFFMjk3
MEQ1MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3REYxM0MxRTI5NzExMzAwOTU5NTFCIC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMEY3REYxM0YxRTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3Bh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RG
MTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3REYxM0MxRTI5NzExMzAwOTU5
NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIg
LyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIg
LyogSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBD
ZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGN0RGMTQ2MUUyQkVGNkEwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjE0NTFF
MkJFRjY4MDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0Y5ODhDMUQ5NTk2QzgwMEY0
RjEyRSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAv
KiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLzsgfTsKIAkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NDAs
NiArNTQwLDExIEBACiAJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21C
bG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
QjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTgxNzQ4MzBBMjAw
N0IzQzFCIC8qIERGR1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAq
LzsgfTsKIAkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U5MTc0
ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8q
IEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWls
dXJlTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGRENFMTIyMUZBRTg1OEMwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTFGMUZBRTg1ODcwMDZG
MzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkRDRTEyQTFGQUZBODVGMDA2RjM5MDEgLyogQ29tcGxldGVTdWJz
cGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
Q0UxMjgxRkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTEyRDFGQUZCNEU1MDA2
RjM5MDEgLyogSXNvU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRENFMTJCMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTMy
MUZCMTFEQTQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEzMDFGQjExRDlEMDA2
RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oICovOyB9OwogCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyog
U3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11
dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEZERjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIz
S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
RjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICovOyB9OwpAQCAtMTA5OSw3ICsxMTA0
LDcgQEAKIAkJNzlEQUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURBRTI3OTFF
MDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMg
LyogSGFzT3duUHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3OUVFMEMwMDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4
NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyog
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUYxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGlt
YWxGbHVzaEluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OUY4RkMxRDFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuaCAqLzsgfTsKIAkJNzlGQzhBMDgxRTMyRTlGMDAwRDg4RjBFIC8qIERG
R1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdSZWdpc3RlcmVkU3Ry
dWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1
OCAvKiBXYXNtRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTIyNzAsOCArMjI3NSw4IEBACiAJCTBGNERFMUQwMUM0RDc2NEIwMDRENkMx
MSAvKiBCM09yaWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNPcmlnaW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0
aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhh
c2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjRGODI4NTFFMkZGRERCMDA3NTE4NEMg
LyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0
QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRGODI4NjFFMkZGRERCMDA3
NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEY4Mjg5MUUzMUI5NzEw
MDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEY4MjhBMUUz
MUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwQUYzQjE5M0U4
QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBwYXRoID0gZGZn
L0RGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjQxMywxMCArMjQxOCwxMCBAQAogCQkwRjdERjEzMTFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vi
c3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Vic3BhY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdERjEzMjFFMjk3MEQ1MDA5NTk1
MUIgLyogU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Vic3Bh
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3REYxMzMxRTI5NzBENTAwOTU5
NTFCIC8qIFN1YnNwYWNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdWJzcGFjZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYx
MzkxRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGN0RGMTNBMUUyOTcx
MEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpT
U3RyaW5nU3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTdHJpbmdTdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGN0RG
MTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nU3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY3REYxMzkxRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ0hlYXBDZWxsVHlw
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0RGMTNFMUUyQUZDNEIwMDk1
OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRBbGxvY2F0b3JJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEy
RSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVC
YXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFy
cmllckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY2
Niw2ICsyNjcxLDE1IEBACiAJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXb3JrbGlzdC5j
cHA7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3QuaDsgcGF0aCA9IGRmZy9ERkdXb3Jr
bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNFOTE3NDg5NkM3MDA3
QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb25jdXJyZW50SlNMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RENFMTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRENFMTFGMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RENFMTIwMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZE
Q0UxMjcxRkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29tcGxldGVTdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRENFMTI4MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbXBsZXRlU3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElzb1N1YnNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTJD
MUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
c29TdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTJGMUZC
MTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRh
aW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFp
bmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1ODEsOCArMzU5NSw4IEBA
CiAJCTc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc093blByb3BlcnR5Q2FjaGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZh
cmlhYmxlRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVmFyaWFibGVFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc5RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlRW52aXJvbm1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOyBwYXRoID0ganMv
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUVGRDQ4MTFFQkMwNDVD
MDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUVGRDQ4MjFFQkMwNDVDMDBG
M0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBl
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcv
REZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OUY4RkMxRDFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWF4aW1hbEZs
dXNoSW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25Q
aGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUZDOEEwNzFFMzJFOUYwMDBE
ODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdSZWdpc3RlcmVkU3RydWN0dXJlLmg7IHBhdGggPSBkZmcvREZHUmVnaXN0
ZXJlZFN0cnVjdHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ4Niw2ICs1
NTAwLDcgQEAKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxs
b2NhdGluZ1Njb3BlLmggKi8sCisJCQkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9j
YXRpb25GYWlsdXJlTW9kZS5oICovLAogCQkJCTBGOTYzMDM1MUQ0MTkyQzMwMDU2MDlEOSAvKiBB
bGxvY2F0b3JBdHRyaWJ1dGVzLmNwcCAqLywKIAkJCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkg
LyogQWxsb2NhdG9yQXR0cmlidXRlcy5oICovLAogCQkJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5
MCAvKiBDZWxsQ29udGFpbmVyLmNwcCAqLywKQEAgLTU1MDAsNiArNTUxNSw4IEBACiAJCQkJMEZB
NzYyMDExREI5MjQyMzAwQjdBMkZEIC8qIENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBF
NUU1MUU0M0QzNDcwMDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5jcHAgKi8sCiAJCQkJMEZEMEU1
RTYxRTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmggKi8sCisJCQkJMEZEQ0UxMjcx
RkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuY3BwICovLAorCQkJCTBGRENFMTI4
MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8sCiAJCQkJMTQ2QjE0REIx
MkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFG
MjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKIAkJCQkwRjdERjEy
RjFFMjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKQEAgLTU1NTAs
NiArNTU2Nyw4IEBACiAJCQkJREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBDZWxsLmNw
cCAqLywKIAkJCQlEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAqLywKIAkJ
CQkwRjA3MEE0NDFENTQzQTg5MDA2RTcyMzIgLyogSGVhcENlbGxJbmxpbmVzLmggKi8sCisJCQkJ
MEZEQ0UxMjAxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJMEZE
Q0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovLAogCQkJCTBGMENBRUZE
MUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suY3BwICovLAogCQkJCTBG
MENBRUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAqLywKIAkJ
CQkwRjMyQkQwRTFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuY3BwICovLApAQCAt
NTU2Niw2ICs1NTg1LDEwIEBACiAJCQkJMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBV
dGlsLmggKi8sCiAJCQkJQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dl
ZXBlci5jcHAgKi8sCiAJCQkJQzI1RjhCQ0MxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFs
U3dlZXBlci5oICovLAorCQkJCTBGRENFMTJGMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyog
SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAorCQkJCTBGRENFMTJDMUZBRkI0REUwMDZG
MzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCisJCQkJMEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAx
IC8qIElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJ
VFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKIAkJCQkwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyog
SklUU3R1YlJvdXRpbmVTZXQuaCAqLywKIAkJCQkwRjA3MEE0NTFENTQzQTg5MDA2RTcyMzIgLyog
TGFyZ2VBbGxvY2F0aW9uLmNwcCAqLywKQEAgLTY1MDcsOCArNjUzMCw4IEBACiAJCQkJOTc4OEZD
MjIxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhGQzIzMTQ3
MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0MzJENDAw
Rjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCi0JCQkJMEY3REYxMzkxRTI5NzEw
RTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovLAotCQkJCTBG
N0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgg
Ki8sCisJCQkJMEY3REYxMzkxRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQlBN0I0QUNBRTE0ODRDOUNF
MDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCAqLywKIAkJCQk3OTg5Mzc3NjFEQ0FCNTczMDBG
OEQ0RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLywKIAkJCQk3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0
RkIgLyogSlNGaXhlZEFycmF5LmggKi8sCkBAIC02NTkzLDggKzY2MTYsOCBAQAogCQkJCUUzOEQw
NjBCMUY4RTgxNDEwMDY0OUNGMiAvKiBKU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oICovLAogCQkJ
CTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cCAqLywKIAkJCQkwRjkxOUQwRjE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdC5oICovLAotCQkJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovLAotCQkJCTBGNEY4Mjg2MUUyRkZEREIwMDc1
MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCAqLywKKwkJCQkwRjRG
ODI4NTFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5jcHAgKi8sCisJCQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQlBNzI5OUQ5QjE3RDEyODM3MDA1
RjVGRjkgLyogSlNTZXQuY3BwICovLAogCQkJCUE3Mjk5RDlDMTdEMTI4MzcwMDVGNUZGOSAvKiBK
U1NldC5oICovLAogCQkJCUE3OTBERDY5MTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9y
LmNwcCAqLywKQEAgLTY2MDksOCArNjYzMiw4IEBACiAJCQkJNzBFQzBFQkQxQUEwRDdEQTAwQjZB
QUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuaCAqLywKIAkJCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVF
NUYgLyogSlNTdHJpbmdKb2luZXIuY3BwICovLAogCQkJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1
RiAvKiBKU1N0cmluZ0pvaW5lci5oICovLAotCQkJCTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAv
KiBKU1N0cmluZ1N1YnNwYWNlLmNwcCAqLywKLQkJCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIg
LyogSlNTdHJpbmdTdWJzcGFjZS5oICovLAorCQkJCTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAv
KiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJMEY3REYxM0UxRTJBRkM0QjAwOTU5
NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmggKi8sCiAJCQkJMEY5MTlEMDkxNTdFRTA5RDAw
NEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovLAogCQkJCTBGOTE5RDBBMTU3RUUw
OUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJNzBFQ0E2MDAxQUZE
QkVBMjAwNDQ5NzM5IC8qIEpTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgKi8sCkBAIC03Nzg2LDgg
Kzc4MDksOCBAQAogCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5
LmggKi8sCiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suY3BwICovLAogCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrLmggKi8sCi0JCQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8sCi0JCQkJNzlFRkQ0ODIxRUJDMDQ1QzAw
RjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oICovLAorCQkJCTc5RUZE
NDgxMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBl
LmNwcCAqLywKKwkJCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja0hlYXBDZWxsVHlwZS5oICovLAogCQkJCUFEMkZDQkE2MURCNThEQTQwMEIzRTczNiAv
KiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJCQlBRDJGQ0JBNzFEQjU4REE0
MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oICovLAogCQkJCTc5NkZCNDM5
MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovLApAQCAtNzk5OCw2
ICs4MDIxLDcgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdB
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAv
KiBBUk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENFMTMyMUZCMTFEQTQwMDZG
MzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZm
ZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTgwNDksNiArODA3Myw3
IEBACiAJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21t
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkwMSAvKiBJc29T
dWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEMxQkYwMjc2QzAw
MTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5MTlCNzgwMUUw
MzU1OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtODU5MCw2ICs4
NjE1LDcgQEAKIAkJCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weSBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk1MUMwMjRBMjgwMDI0ODFFMiAvKiBH
ZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5
NzFDMDI0QTI5MDAyNDgxRTIgLyogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5OTFDMDI0QTI5MDAyNDgxRTIgLyogR2VuZXJh
dG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5RDFDMDI0QTU2MDAyNDgx
RTIgLyogR2VuZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUw
MTkxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLApA
QCAtODc3Myw3ICs4Nzk5LDcgQEAKIAkJCQk5OTZCNzMxQzFCREEwOEREMDAzMzFCODQgLyogSlNE
YXRhVmlld1Byb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3ODgwMTQxMTQ3MUFE
OTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2
MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0
RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04ODI2LDYgKzg4NTIsNyBAQAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAv
KiBKU01vZHVsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEOTcyMjc1MkRDNTQ0
NTlCOTEyNUI1MzkgLyogSlNNb2R1bGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMThD
QkMxMUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJl
TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5REE0QTcxQjdFOEI3QzAwODRGMzNBIC8qIEpT
TW9kdWxlUmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQxRDFCOTAxM0MzMDAzNDZC
NTIgLyogSlNOYXRpdmVTdGRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTg4NTAsNyAr
ODg3Nyw3IEBACiAJCQkJRTMyMDFDMUQxRjhFODIzNjAwNzZBMDMyIC8qIEpTU2NyaXB0RmV0Y2hQ
YXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAxMUQg
LyogSlNTY3JpcHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1N0Yz
MzJDMDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRD
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3Mjk5RDlFMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1NldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc5MERENzAxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJERkNCMkJCRTkwRjQxMzQ5RTFCMEJFRCAvKiBKU1NvdXJjZUNvZGUuaCBp
biBIZWFkZXJzICovLApAQCAtODg2Miw3ICs4ODg5LDcgQEAKIAkJCQlCQzE4QzQyODBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI5MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZkNGLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTI4
RDRBODE3N0I3MUM4MDAwN0ZBM0MgLyogSlNTdHJpbmdSZWZQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKLQkJCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY3REYxM0YxRTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nSGVh
cENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRFN0Qg
LyogSlNTeW1ib2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQ0E2MDYxQUZE
QkVBMjAwNDQ5NzM5IC8qIEpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ1QzM2RUExRjc1QUQ2QTAwMEJDQUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywK
QEAgLTg4OTAsNyArODkxNyw3IEBACiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpT
V2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8q
IEpTV2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhE
RTM5RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKLQkJCQk3OUVG
RDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTMx
REI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc5NkZCNDNBMURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVy
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTUxREI1OERBRDAwQjNFNzM2IC8qIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjIzLDYgKzkyNTAsNyBAQAog
CQkJCTBGRkI2QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJENERFQzE5ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9n
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRDRTEyMjFGQUU4NThDMDA2RjM5MDEgLyogSGVhcENl
bGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyog
VHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8q
IHVkaXM4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8q
IHVkaXM4Nl9kZWNvZGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NTUsNyArOTU1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNz
R2VuZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFsbG9j
YXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXpl
KTsKKyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikg
ewogICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlzIGNhc2Ugd291bGQgc3VjayEKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmls
ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
T2JqZWN0QWxsb2NhdGlvblByb2ZpCiAgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5IDw9IEpTRmlu
YWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5saW5lQ2FwYWNpdHkpOwotICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uY2VsbFNwYWNlLmFsbG9jYXRvckZvcihh
bGxvY2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5jZWxs
U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlOjpBc3NlcnQpOwogCiAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2YgZXh0cmEgaW5s
aW5lIGNhcGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFzcy4KICAgICBpZiAoYWxsb2Nh
dG9yKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMzAsNyAr
NDMzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAg
ICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwog
ICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9u
U2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgp
KS0+YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSkt
PmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6QXNzZXJ0KTsKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2Nh
dG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVz
dWx0R1BSLCBhbGxvY2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDAp
LCBzdG9yYWdlR1BSKTsKICAgICAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZSkpIHsKKyAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uu
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2Vy
dCkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBh
bGxvY2F0b3IsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAg
ICAgCkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRl
UmF3T2JqZQogICAgIH0KIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmpl
Y3Q6OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+
YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpB
c3NlcnQpOwogICAgIGlmIChhbGxvY2F0b3JQdHIpIHsKICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNjcmF0Y2hHUFIpOwogICAgICAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKQEAg
LTQyNDksNyArNDI0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShO
b2QKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIE1hcmtlZEFsbG9jYXRvciogbWFya2Vk
QWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNTdHJpbmc+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9y
Rm9yKHNpemVvZihKU1JvcGVTdHJpbmcpKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1hcmtlZEFs
bG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZv
ck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6
QXNzZXJ0KTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXJrZWRBbGxvY2F0b3IpOwogICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihtYXJrZWRBbGxvY2F0b3IpLCBhbGxvY2F0b3JHUFIpOwogICAg
IGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIG1hcmtlZEFsbG9jYXRvciwgYWxsb2NhdG9y
R1BSLCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQu
dm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAg
LTg0MjcsNyArODQyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVBy
b3AKICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNp
emVvZihKU1ZhbHVlKTsKIAotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQu
dm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpOwor
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFu
c2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ3
Miw3ICs4NDcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgog
ICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKICAg
ICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNh
cGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yKG5ld1NpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9q
aXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmly
dHVhbChuZXdTaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICBpZiAo
IWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRl
eGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQsMTIgKzEyNCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKICNkZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBc
CiAgICAgbWFjcm8oQXJyYXlTdG9yYWdlX3ZlY3RvciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIFwKKyAgICBtYWNybyhDb21wbGV0
ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRP
ZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihNYXJrZWRBbGxvY2F0b3IqKSkgXAogICAg
IG1hY3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTTGV4aWNhbEVu
dmlyb25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCAwLCBzaXplb2Yo
V3JpdGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmliZXJz
LCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNT
dHJpbmc+KSkgXAogICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVyZmxvd1N0b3JhZ2UsIFNj
b3BlZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpIFwKLSAgICBtYWNybyhTdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgU3Vic3Bh
Y2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKE1hcmtlZEFsbG9jYXRv
ciopKSBcCiAgICAgbWFjcm8oV3JpdGVCYXJyaWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCAwLCBz
aXplb2YoSlNDZWxsKikpIFwKICAgICBtYWNybyhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFy
KSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnMxNiwgMCwgc2l6ZW9mKFVDaGFyKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjkzLDcgKzU2OTMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NC
ZWZvcmUoc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3Ioc2l6
ZW9mKEpTUm9wZVN0cmluZykpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwo
c2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGFsbG9jYXRvcik7CiAgICAgICAgIAog
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKApAQCAtOTUyNSw3ICs5NTI1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpT
RmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
Ci0gICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBjZWxsQWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7
CisgICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBjZWxsQWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgY2VsbEFsbG9jYXRvcik7CiAKICAgICAgICAg
ICAgICAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CkBAIC0xMDUyMSw3ICsxMDUyMSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVm
b3JlKHNsb3dQYXRoKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1
ZXMgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gdm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZUlu
Qnl0ZXMpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtKCkuanNWYWx1
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplSW5CeXRl
cywgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICBMVmFsdWUgc3RhcnRP
ZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciks
IHNsb3dQYXRoKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0
LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5C
eXRlcyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwpAQCAtMTE2
NjUsNyArMTE2NjUsNyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAg
ICAgICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVy
Zmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKS0+YWxsb2NhdG9yRm9y
KHNpemUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9y
PENsYXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9v
dXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRo
KTsKICAgICB9CiAgICAgCkBAIC0xMTY4MiwxMCArMTE2ODIsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIC8vIFRyeSB0byBkbyBzb21lIGNvbnN0YW50LWZvbGRpbmcgaGVyZS4KICAg
ICAgICAgaWYgKHN1YnNwYWNlLT5oYXNJbnRQdHIoKSAmJiBzaXplLT5oYXNJbnRQdHIoKSkgewot
ICAgICAgICAgICAgU3Vic3BhY2UqIGFjdHVhbFN1YnNwYWNlID0gYml0d2lzZV9jYXN0PFN1YnNw
YWNlKj4oc3Vic3BhY2UtPmFzSW50UHRyKCkpOworICAgICAgICAgICAgQ29tcGxldGVTdWJzcGFj
ZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxldGVTdWJzcGFjZSo+KHN1YnNw
YWNlLT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBhY3R1YWxTaXplID0gc2l6ZS0+
YXNJbnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBh
Y3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+YWxsb2NhdG9yRm9yKGFjdHVhbFNpemUp
OworICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxT
dWJzcGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewog
ICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnRO
ZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKQEAgLTExNzE1LDExICsxMTcxNSwxMSBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoCiAgICAgICAg
ICAgICBtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5TdWJzcGFjZV9h
bGxvY2F0b3JGb3JTaXplU3RlcCwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vi
c3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1f
b3V0LnN1YihzaXplQ2xhc3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwogICAgIH0KICAgICAK
LSAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1ZSBz
aXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShD
b21wbGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9vdXQuY29uc3RJ
bnRQdHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgIH0KQEAgLTExNzQ1LDcgKzEx
NzQ1LDcgQEAgcHJpdmF0ZToKICAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUuZ2V0KCktPmlubGluZUNh
cGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNl
Rm9yPEpTRmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOwor
ICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxP
YmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTog
SWYgdGhlIGFsbG9jYXRvciBpcyBudWxsLCB3ZSBjb3VsZCBzaW1wbHkgZW1pdCBhIG5vcm1hbCBD
IGNhbGwgdG8gdGhlIGFsbG9jYXRvcgogICAgICAgICAvLyBpbnN0ZWFkIG9mIHB1dHRpbmcgaXQg
b24gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKIAorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKIG5hbWVzcGFjZSBKU0MgeyAKIAogQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcjo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCkBAIC0zNiw2ICszOSw0
MSBAQCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+QWxpZ25lZE1lbW9yeUFsCiB7CiB9CiAKK3Zv
aWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci0+bmV4dEFs
bG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICAKKyAgICBpZiAoIW1fZmly
c3RBbGxvY2F0b3IpIHsKKyAgICAgICAgZm9yIChTdWJzcGFjZSogc3Vic3BhY2UgPSBtX2ZpcnN0
U3Vic3BhY2U7IHN1YnNwYWNlOyBzdWJzcGFjZSA9IHN1YnNwYWNlLT5uZXh0U3Vic3BhY2VJbkFs
aWduZWRNZW1vcnlBbGxvY2F0b3IoKSkKKyAgICAgICAgICAgIHN1YnNwYWNlLT5kaWRDcmVhdGVG
aXJzdEFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fbGFzdEFsbG9jYXRvcik7CisgICAgICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0
b3I7CisgICAgICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fbGFzdEFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvckluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9j
YXRvcjsKK30KKworLy8gRklYTUU6IFdlIHVzZSB0aGlzIGlkaW9tIGEgbG90LiBXZSBzaG91bGQg
Y29tZSB1cCB3aXRoIGEgY2xldmVyIHRlbXBsYXRlIGZvciB0aGlzIGtpbmQgb2YKKy8vIHNpbmds
eS1saW5rZWQgbGlzdCwgd2hlcmUgZWFjaCBlbGVtZW50IG1heSBiZSBvbiBtdWx0aXBsZSBsaXN0
cy4KK3ZvaWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJTdWJzcGFjZShTdWJzcGFj
ZSogc3Vic3BhY2UpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIXN1YnNwYWNlLT5uZXh0U3Vic3Bh
Y2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0U3Vi
c3BhY2UpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFzdFN1YnNwYWNlKTsKKyAgICAg
ICAgbV9maXJzdFN1YnNwYWNlID0gc3Vic3BhY2U7CisgICAgICAgIG1fbGFzdFN1YnNwYWNlID0g
c3Vic3BhY2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2xhc3RTdWJzcGFjZS0+
c2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKHN1YnNwYWNlKTsKKyAgICBt
X2xhc3RTdWJzcGFjZSA9IHN1YnNwYWNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIE1hcmtlZEFsbG9jYXRvcjsKK2NsYXNzIFN1
YnNwYWNlOworCiBjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTQwLDYgKzQzLDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZnJl
ZUFsaWduZWRNZW1vcnkodm9pZCopID0gMDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIHZvaWQgcmVnaXN0ZXJBbGxvY2F0b3IoTWFy
a2VkQWxsb2NhdG9yKik7CisgICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlyc3RBbGxvY2F0b3I7IH0KKworICAgIHZvaWQgcmVnaXN0ZXJTdWJz
cGFjZShTdWJzcGFjZSopOworCitwcml2YXRlOgorICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJz
dEFsbG9jYXRvciB7IG51bGxwdHIgfTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFzdEFsbG9j
YXRvciB7IG51bGxwdHIgfTsKKyAgICBTdWJzcGFjZSogbV9maXJzdFN1YnNwYWNlIHsgbnVsbHB0
ciB9OworICAgIFN1YnNwYWNlKiBtX2xhc3RTdWJzcGFjZSB7IG51bGxwdHIgfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlIHsKKyAgICBBc3NlcnQsCisgICAgUmV0dXJuTnVsbAorfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBs
ZXRlU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvbXBsZXRlU3Vic3BhY2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRl
ICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3Bl
LmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitD
b21wbGV0ZVN1YnNwYWNlOjpDb21wbGV0ZVN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVh
cCwgSGVhcENlbGxUeXBlKiBoZWFwQ2VsbFR5cGUsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFs
aWduZWRNZW1vcnlBbGxvY2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwKQoreworICAg
IGluaXRpYWxpemUoaGVhcENlbGxUeXBlLCBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzOyBpLS07KQorICAgICAg
ICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2ldID0gbnVsbHB0cjsKK30KKworQ29tcGxldGVTdWJz
cGFjZTo6fkNvbXBsZXRlU3Vic3BhY2UoKQoreworfQorCitNYXJrZWRBbGxvY2F0b3IqIENvbXBs
ZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNp
emUsIGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUo
c2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0
dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworfQorCit2b2lkKiBDb21w
bGV0ZVN1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9k
ZSkKK3sKKyAgICB2b2lkICpyZXN1bHQ7CisgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpKQorICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gYWxs
b2NhdGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK01hcmtlZEFsbG9jYXRvciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2Nh
dG9yRm9yU2xvdyhzaXplX3Qgc2l6ZSkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBNYXJrZWRTcGFj
ZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKTsKKyAgICBzaXplX3Qgc2l6ZUNsYXNzID0gTWFya2Vk
U3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdOworICAgIGlmICghc2l6ZUNsYXNz
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHdyaXR0ZW4g
aW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sgZm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAg
aGVyZSBpZiB0aGV5IHdhbnQKKyAgICAvLyB0byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21l
IGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVuIHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJs
eS0KKyAgICAvLyBqdXN0LWFzLWdvb2Qgc29sdXRpb24gd291bGQgYmUgdG8gcmV0dXJuIG51bGwg
aWYgd2UncmUgaW4gdGhlIEpJVCBzaW5jZSB0aGUgSklUIHRyZWF0cyBudWxsCisgICAgLy8gYWxs
b2NhdG9yIGFzICJwbGVhc2UgYWx3YXlzIHRha2UgdGhlIHNsb3cgcGF0aCIuIEJ1dCwgdGhhdCBj
b3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlCisgICAgLy8gc3VycHJpc2VzIGFuZCB0aGUgYWxnb3Jp
dGhtIGhlcmUgaXMgcHJldHR5IGVhc3kuIE9ubHkgdGhpcyBjb2RlIGhhcyB0byBob2xkIHRoZSBs
b2NrLCB0bworICAgIC8vIHByZXZlbnQgc2ltdWx0YW5lb3VzbHkgTWFya2VkQWxsb2NhdG9yIGNy
ZWF0aW9ucyBmcm9tIG11bHRpcGxlIHRocmVhZHMuIFRoaXMgY29kZSBlbnN1cmVzCisgICAgLy8g
dGhhdCBhbnkgImZvckVhY2hBbGxvY2F0b3IiIHRyYXZlcnNhbHMgd2lsbCBvbmx5IHNlZSB0aGlz
IGFsbG9jYXRvciBhZnRlciBpdCdzIGluaXRpYWxpemVkCisgICAgLy8gZW5vdWdoOiBpdCB3aWxs
IGhhdmUgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmFsbG9jYXRvckxvY2so
KSk7CisgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JT
aXplU3RlcFtpbmRleF0pCisgICAgICAgIHJldHVybiBhbGxvY2F0b3I7CisKKyAgICBpZiAoZmFs
c2UpCisgICAgICAgIGRhdGFMb2coIkNyZWF0aW5nIG1hcmtlZCBhbGxvY2F0b3IgZm9yICIsIG1f
bmFtZSwgIiwgIiwgbV9hdHRyaWJ1dGVzLCAiLCAiLCBzaXplQ2xhc3MsICIuXG4iKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWFya2VkQWxsb2NhdG9yPiB1bmlxdWVBbGxvY2F0b3IgPQorICAgICAg
ICBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtlZEFsbG9jYXRvcj4obV9zcGFjZS5oZWFwKCksIHNpemVD
bGFzcyk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB1bmlxdWVBbGxvY2F0b3Iu
Z2V0KCk7CisgICAgbV9hbGxvY2F0b3JzLmFwcGVuZChXVEZNb3ZlKHVuaXF1ZUFsbG9jYXRvcikp
OworICAgIGFsbG9jYXRvci0+c2V0U3Vic3BhY2UodGhpcyk7CisgICAgbV9zcGFjZS5hZGRNYXJr
ZWRBbGxvY2F0b3IobG9ja2VyLCBhbGxvY2F0b3IpOworICAgIGluZGV4ID0gTWFya2VkU3BhY2U6
OnNpemVDbGFzc1RvSW5kZXgoc2l6ZUNsYXNzKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlm
IChNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF0gIT0gc2l6ZUNsYXNz
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtp
bmRleF0gPSBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAgICBpZiAoIWluZGV4LS0pCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9ySW5T
dWJzcGFjZShtX2ZpcnN0QWxsb2NhdG9yKTsKKyAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3It
PnJlZ2lzdGVyQWxsb2NhdG9yKGFsbG9jYXRvcik7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKKyAgICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOworICAgIHJldHVybiBhbGxvY2F0
b3I7Cit9CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhzaXplX3Qgc2l6
ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlIGZhaWx1cmVNb2RlKQoreworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhz
aXplLCBkZWZlcnJhbENvbnRleHQpOworICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0
ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7
CisgICAgc2FuaXRpemVTdGFja0ZvclZNKG1fc3BhY2UuaGVhcCgpLT52bSgpKTsKKyAgICAKKyAg
ICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT5h
bGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVs
bCk7CisgICAgCisgICAgaWYgKHNpemUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2Zm
KCkKKyAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKKyAgICAg
ICAgZGF0YUxvZygiRkFUQUw6IGF0dGFtcHRpbmcgdG8gYWxsb2NhdGUgc21hbGwgb2JqZWN0IHVz
aW5nIGxhcmdlIGFsbG9jYXRpb24uXG4iKTsKKyAgICAgICAgZGF0YUxvZygiUmVxdWVzdGVkIGFs
bG9jYXRpb24gc2l6ZTogIiwgc2l6ZSwgIlxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIG1fc3BhY2UuaGVhcCgpLT5jb2xsZWN0SWZO
ZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgc2l6ZSA9IFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRTcGFjZTo6c2l6ZVN0ZXA+KHNpemUpOworICAgIExh
cmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCpt
X3NwYWNlLm1faGVhcCwgc2l6ZSwgdGhpcyk7CisgICAgaWYgKCFhbGxvY2F0aW9uKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBtX3NwYWNlLm1fbGFyZ2VBbGxvY2F0aW9ucy5h
cHBlbmQoYWxsb2NhdGlvbik7CisgICAgbV9zcGFjZS5tX2hlYXAtPmRpZEFsbG9jYXRlKHNpemUp
OworICAgIG1fc3BhY2UubV9jYXBhY2l0eSArPSBzaXplOworICAgIAorICAgIG1fbGFyZ2VBbGxv
Y2F0aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7CisgICAgICAgIAorICAgIHJldHVybiBhbGxvY2F0
aW9uLT5jZWxsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbXBsZXRlU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2Ug
eworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBsZXRlU3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJiwgSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db21wbGV0ZVN1YnNwYWNlKCk7CisKKyAgICAvLyBJbiBz
b21lIGNvZGUgcGF0aHMsIHdlIG5lZWQgaXQgdG8gYmUgYSBjb21waWxlIGVycm9yIHRvIGNhbGwg
dGhlIHZpcnR1YWwgdmVyc2lvbiBvZiBvbmUgb2YKKyAgICAvLyB0aGVzZSBmdW5jdGlvbnMuIFRo
YXQncyB3aHkgd2UgZG8gZmluYWwgbWV0aG9kcyB0aGUgb2xkIHNjaG9vbCB3YXkuCisgICAgCisg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUpIG92ZXJyaWRlOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yTm9uVmly
dHVhbChzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9pZCogYWxs
b2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkg
b3ZlcnJpZGU7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFs
KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAg
IAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb21wbGV0ZVN1YnNwYWNlLCBtX2FsbG9jYXRvckZvclNp
emVTdGVwKTsgfQorICAgIAorICAgIE1hcmtlZEFsbG9jYXRvcioqIGFsbG9jYXRvckZvclNpemVT
dGVwKCkgeyByZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0KKworcHJpdmF0ZToK
KyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsKKyAgICAKKyAg
ICAvLyBUaGVzZSBzbG93IHBhdGhzIGFyZSBjb25jZXJuZWQgd2l0aCBsYXJnZSBhbGxvY2F0aW9u
cyBhbmQgYWxsb2NhdG9yIGNyZWF0aW9uLgorICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhzaXplX3Qs
IEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiB0
cnlBbGxvY2F0ZVNsb3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCopOworICAgIAorICAgIHN0
ZDo6YXJyYXk8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzPiBt
X2FsbG9jYXRvckZvclNpemVTdGVwOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2Vk
QWxsb2NhdG9yPj4gbV9hbGxvY2F0b3JzOworfTsKKworQUxXQVlTX0lOTElORSBNYXJrZWRBbGxv
Y2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNp
emUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBpZiAoc2l6ZSA8
PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBy
ZXN1bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0lu
ZGV4KHNpemUpXTsKKyAgICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6UmV0dXJuTnVsbCB8fCByZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICByZXR1cm4gYWxsb2NhdG9yRm9yU2xvdyhzaXplKTsKKyAgICB9CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKKworI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKKy8vIFdyaXRpbmcgaXQgdGhpcyB3YXkg
ZW5zdXJlcyB0aGF0IHdoZW4geW91IHBhc3MgdGhpcyBhcyBhIGZ1bmN0b3IsIHRoZSBjYWxsZWUg
aXMgc3BlY2lhbGl6ZWQgZm9yCisvLyB0aGlzIGNhbGxiYWNrLiBJZiB5b3Ugd3JvdGUgdGhpcyBh
cyBhIG5vcm1hbCBmdW5jdGlvbiB0aGVuIHRoZSBjYWxsZWUgd291bGQgYmUgc3BlY2lhbGl6ZWQg
Zm9yCisvLyB0aGUgZnVuY3Rpb24ncyB0eXBlIGFuZCBpdCB3b3VsZCBoYXZlIGluZGlyZWN0IGNh
bGxzIHRvIHRoYXQgZnVuY3Rpb24uIEFuZCB1bmxpa2UgYSBsYW1iZGEsIGl0J3MKKy8vIHBvc3Np
YmxlIHRvIG1hcmsgdGhpcyBBTFdBWVNfSU5MSU5FLgorc3RydWN0IERlc3Ryb3lGdW5jIHsKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYgdm0sIEpTQ2VsbCogY2VsbCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChjZWxsLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAg
QVNTRVJUKGNlbGwtPmlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCk7Cisg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAg
ICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOwor
ICAgICAgICBNZXRob2RUYWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0lu
Zm8tPm1ldGhvZFRhYmxlLmRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3koY2VsbCk7CisgICAgfQor
fTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0hlYXBDZWxsVHlwZTo6SGVhcENlbGxU
eXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IG1fYXR0cmlidXRlcyhh
dHRyaWJ1dGVzKQoreworfQorCitIZWFwQ2VsbFR5cGU6On5IZWFwQ2VsbFR5cGUoKQoreworfQor
Cit2b2lkIEhlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxv
Y2ssIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBibG9jay5maW5pc2hTd2VlcEtub3dpbmdI
ZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEhlYXBDZWxs
VHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygp
KHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSGVhcENlbGxUeXBlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFw
Q2VsbFR5cGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEpT
X0VYUE9SVF9QUklWQVRFIEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5IZWFwQ2VsbFR5cGUoKTsKKworICAgIGNvbnN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXM7IH0KKworICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBpcyB0byBzcGVj
aWFsaXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24ndAorICAgIC8v
IGJlIGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBjYWxsIE1hcmtl
ZEJsb2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgZmlu
aXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisKKyAgICAvLyBUaGVz
ZSBnZXQgY2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
KFZNJiwgSlNDZWxsKik7CisKK3ByaXZhdGU6CisgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0
dHJpYnV0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6SXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpCit7Cit9CisKK0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6On5Jc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKCkKK3sKK30KKwordm9pZCogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQoreworICAgIC8vIFNpbmNlIHRoaXMgaXMgZGVzaWduZWQgc3BlY2lhbGx5IGZvciBJc29TdWJz
cGFjZSwgd2Uga25vdyB0aGF0IHdlIHdpbGwgb25seSBiZSBhc2tlZCB0bworICAgIC8vIGFsbG9j
YXRlIE1hcmtlZEJsb2Nrcy4KKyAgICBSRUxFQVNFX0FTU0VSVChhbGlnbm1lbnQgPT0gTWFya2Vk
QmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSBNYXJrZWRCbG9j
azo6YmxvY2tTaXplKTsKKyAgICAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CisgICAgCisgICAgbV9maXJzdFVuY29tbWl0dGVkID0gbV9jb21taXR0ZWQuZmluZEJpdChtX2Zp
cnN0VW5jb21taXR0ZWQsIGZhbHNlKTsKKyAgICBpZiAobV9maXJzdFVuY29tbWl0dGVkIDwgbV9i
bG9ja3Muc2l6ZSgpKSB7CisgICAgICAgIG1fY29tbWl0dGVkW21fZmlyc3RVbmNvbW1pdHRlZF0g
PSB0cnVlOworICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2Jsb2Nrc1ttX2ZpcnN0VW5jb21taXR0
ZWRdOworICAgICAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KHJlc3VsdCwgTWFya2VkQmxvY2s6OmJs
b2NrU2l6ZSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICB2b2lkKiByZXN1bHQgPSBmYXN0QWxpZ25lZE1hbGxvYyhNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1f
YmxvY2tzLnNpemUoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQocmVzdWx0KTsKKyAgICBtX2Jsb2Nr
SW5kaWNlcy5hZGQocmVzdWx0LCBpbmRleCk7CisgICAgaWYgKG1fYmxvY2tzLmNhcGFjaXR5KCkg
IT0gbV9jb21taXR0ZWQuc2l6ZSgpKQorICAgICAgICBtX2NvbW1pdHRlZC5yZXNpemUobV9ibG9j
a3MuY2FwYWNpdHkoKSk7CisgICAgbV9jb21taXR0ZWRbaW5kZXhdID0gdHJ1ZTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZyZWVBbGln
bmVkTWVtb3J5KHZvaWQqIGJhc2VQdHIpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworICAgIAorICAgIGF1dG8gaXRlciA9IG1fYmxvY2tJbmRpY2VzLmZpbmQoYmFzZVB0
cik7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtX2Jsb2NrSW5kaWNlcy5lbmQoKSk7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBpdGVyLT52YWx1ZTsKKyAgICBtX2NvbW1pdHRlZFtpbmRleF0g
PSBmYWxzZTsKKyAgICBtX2ZpcnN0VW5jb21taXR0ZWQgPSBzdGQ6Om1pbihpbmRleCwgbV9maXJz
dFVuY29tbWl0dGVkKTsKKyAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXQoYmFzZVB0ciwgTWFya2Vk
QmxvY2s6OmJsb2NrU2l6ZSk7Cit9CisKK3ZvaWQgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiSXNvKCIsIFJh
d1BvaW50ZXIodGhpcyksICIpIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA6IHB1YmxpYyBBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KCk7CisgICAgfklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKKworICAgIHZvaWQqIHRyeUFs
bG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBM
b2NrIG1fbG9jazsKKyAgICBWZWN0b3I8dm9pZCo+IG1fYmxvY2tzOworICAgIEhhc2hNYXA8dm9p
ZCosIHVuc2lnbmVkPiBtX2Jsb2NrSW5kaWNlczsKKyAgICBGYXN0Qml0VmVjdG9yIG1fY29tbWl0
dGVkOworICAgIHVuc2lnbmVkIG1fZmlyc3RVbmNvbW1pdHRlZCB7IDAgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJz
cGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vi
c3BhY2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJc29TdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK0lzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
IGhlYXAsIEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBzaXplX3Qgc2l6ZSkKKyAgICA6IFN1
YnNwYWNlKG5hbWUsIGhlYXApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYWxsb2NhdG9y
KCZoZWFwLCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihz
aXplKSkKKyAgICAsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVl
PElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCit7CisgICAgaW5pdGlhbGl6ZShoZWFwQ2Vs
bFR5cGUsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5nZXQoKSk7CisKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKKyAgICBtX2FsbG9jYXRv
ci5zZXRTdWJzcGFjZSh0aGlzKTsKKyAgICBtX3NwYWNlLmFkZE1hcmtlZEFsbG9jYXRvcihsb2Nr
ZXIsICZtX2FsbG9jYXRvcik7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3Rl
ckFsbG9jYXRvcigmbV9hbGxvY2F0b3IpOworICAgIG1fZmlyc3RBbGxvY2F0b3IgPSAmbV9hbGxv
Y2F0b3I7Cit9CisKK0lzb1N1YnNwYWNlOjp+SXNvU3Vic3BhY2UoKQoreworfQorCitNYXJrZWRB
bGxvY2F0b3IqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9u
VmlydHVhbChzaXplLCBmYWlsdXJlTW9kZSk7Cit9CisKK01hcmtlZEFsbG9jYXRvciogSXNvU3Vi
c3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWls
dXJlTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7Cisg
ICAgcmV0dXJuICZtX2FsbG9jYXRvcjsKK30KKwordm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRl
KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmly
dHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogSXNv
U3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKKyAgICB2b2lkKiBy
ZXN1bHQgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2Rl
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2lu
Y2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yOworCitjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7
CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiwgSGVhcENlbGxUeXBlKiwgc2l6ZV90IHNpemUpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5Jc29TdWJzcGFjZSgpOworCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisK
KyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxv
Y2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CisKK3ByaXZhdGU6Cisg
ICAgc2l6ZV90IG1fc2l6ZTsKKyAgICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CisgICAg
c3RkOjp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjsKK307CisKKyNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVh
cENlbGxUeXBlLCB0eXBlKSAoIklzb2xhdGVkICIgI3R5cGUgIiBTcGFjZSIsIChoZWFwKSwgKGhl
YXBDZWxsVHlwZSksIHNpemVvZih0eXBlKSkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTcgKzQxLDIxIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBzdGF0aWMgY29uc3RleHByIGJvb2wgdHJhZGVEZXN0cnVjdG9yQmxvY2tzID0gdHJ1ZTsK
IAotTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaGVhcCwgU3Vic3BhY2Uq
IHN1YnNwYWNlLCBzaXplX3QgY2VsbFNpemUpCitNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9j
YXRvcihIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCiAgICAgOiBtX2ZyZWVMaXN0KGNlbGxT
aXplKQogICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDAp
CiAgICAgLCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCi0gICAg
LCBtX2F0dHJpYnV0ZXMoc3Vic3BhY2UtPmF0dHJpYnV0ZXMoKSkKICAgICAsIG1faGVhcChoZWFw
KQotICAgICwgbV9zdWJzcGFjZShzdWJzcGFjZSkKIHsKIH0KIAordm9pZCBNYXJrZWRBbGxvY2F0
b3I6OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKK3sKKyAgICBtX2F0dHJpYnV0ZXMg
PSBzdWJzcGFjZS0+YXR0cmlidXRlcygpOworICAgIG1fc3Vic3BhY2UgPSBzdWJzcGFjZTsKK30K
KwogYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQogewog
ICAgIHVuc2lnbmVkIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKQEAgLTE3NSwxOSArMTc5
LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZQogICAgICAgICBh
bGxvY2F0aW9uQ291bnQgPSAwOwogfQogCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICBib29s
IGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKLSAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwo
ZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7Ci19Ci0KLXZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250
ZXh0KQotewotICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBmYWxzZTsKLSAgICByZXR1cm4gYWxs
b2NhdGVTbG93Q2FzZUltcGwoZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7Ci19Ci0K
LXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3ZvaWQqIE1hcmtl
ZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIEFTU0VSVChtX2hlYXAt
PnZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwpAQCAtMjA0LDExICsxOTYs
OCBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJCiAgICAgCiAgICAg
Ly8gR29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRo
aXMgYWxsb2NhdG9yIGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CiAgICAgLy8gaGFwcGVu
cyB3aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRv
IHRoZSBHQydzIGZpbmFsaXphdGlvbi4KLSAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2sp
KSB7Ci0gICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKLSAgICAgICAgICAgIHJldHVybiBhbGxv
Y2F0ZShkZWZlcnJhbENvbnRleHQpOwotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGUoZGVmZXJy
YWxDb250ZXh0KTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJsb2NrKSkKKyAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAg
IAogICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKICAg
ICAKQEAgLTIxNyw3ICsyMDYsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2VJCiAgICAgCiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlBbGxvY2F0
ZUJsb2NrKCk7CiAgICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoY3Jhc2hPbkZhaWx1cmUp
CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2Vy
dCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWxsb2NhdGlvbkZh
aWx1cmVNb2RlLmgiCiAjaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgogI2luY2x1ZGUg
IkZyZWVMaXN0LmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKQEAgLTY3LDEzICs2OCwxNyBA
QCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMTIxCiAKIGNsYXNzIE1hcmtlZEFsbG9jYXRvciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2VkQWxsb2NhdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCiBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CiAKLSAgICBNYXJrZWRBbGxv
Y2F0b3IoSGVhcCosIFN1YnNwYWNlKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICBNYXJrZWRBbGxv
Y2F0b3IoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAgdm9pZCBzZXRTdWJzcGFjZShTdWJz
cGFjZSopOwogICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICB2b2lkIHByZXBh
cmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgdm9pZCBzdG9wQWxsb2NhdGluZygpOwpAQCAtOTAsOCAr
OTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb247IH0KICAgICBE
ZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMu
ZGVzdHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQotICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJy
YWxDb250ZXh0KiA9IG51bGxwdHIpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxD
b250ZXh0KiA9IG51bGxwdHIpOworICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9o
ZWFwOyB9CiAKICAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBj
b25zdDsKQEAgLTEzNiw5ICsxNDAsMTEgQEAgcHVibGljOgogICAgIAogICAgIE1hcmtlZEFsbG9j
YXRvciogbmV4dEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvcjsgfQog
ICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlOyB9CisgICAgTWFya2VkQWxsb2NhdG9yKiBu
ZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9CiAgICAgCiAgICAgdm9pZCBz
ZXROZXh0QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9j
YXRvciA9IGFsbG9jYXRvcjsgfQogICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluU3Vic3BhY2Uo
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSA9
IGFsbG9jYXRvcjsgfQorICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJbkFs
aWduZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KICAgICAKICAgICBNYXJrZWRCbG9j
azo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKTsKICAgICAKQEAgLTE1NSw5ICsxNjEs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAg
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJy
YWxDb250ZXh0Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93
Q2FzZShHQ0RlZmVycmFsQ29udGV4dCopOwotICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBs
KEdDRGVmZXJyYWxDb250ZXh0KiwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxp
c3QoKTsKICAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CiAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwpAQCAtMTkyLDEwICsxOTYsMTEg
QEAgcHJpdmF0ZToKICAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAv
LyBGSVhNRTogQWxsIG9mIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSByZWZlcmVuY2VzLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5ODgKLSAgICBI
ZWFwKiBtX2hlYXA7Ci0gICAgU3Vic3BhY2UqIG1fc3Vic3BhY2U7CisgICAgSGVhcCogbV9oZWFw
IHsgbnVsbHB0ciB9OworICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlIHsgbnVsbHB0ciB9OwogICAg
IE1hcmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIE1hcmtl
ZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKKyAgICBN
YXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7
IG51bGxwdHIgfTsKIH07CiAKIGlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZz
ZXRPZkZyZWVMaXN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMjEgKzM1LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNGcmVl
TGlzdGUKICAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPih0YXJnZXQpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCitBTFdBWVNf
SU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewog
ICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAogICAgICAgICBbJl0gKCkgLT4gSGVhcENl
bGwqIHsKICAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4odHJ5QWxsb2NhdGVTbG93Q2Fz
ZShkZWZlcnJhbENvbnRleHQpKTsKLSAgICAgICAgfSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0KQotewotICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbJl0g
KCkgLT4gSGVhcENlbGwqIHsKLSAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCkt
PnZtKCkpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2Nh
dGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJl
TW9kZSkpOwogICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAg
cHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBpcyB0byBiZSBjYWxsZWQgYnkgU3Vi
c3BhY2UuCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotICAgICAgICB2
b2lkIGZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiwgY29uc3QgRGVzdHJveUZ1
bmMmKTsKKyAgICAgICAgdm9pZCBmaW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoRnJlZUxp
c3QqLCBjb25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB1bnN3ZWVw
V2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjI0OTM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNw
ZWNpYWxpemVkU3dlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotdm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShGcmVlTGlzdCog
ZnJlZUxpc3QsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykKK3ZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKEZyZWVMaXN0KiBmcmVl
TGlzdCwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQogewogICAgIFN3ZWVwTW9kZSBz
d2VlcE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVwVG9GcmVlTGlzdCA6IFN3ZWVwT25seTsKICAgICBT
d2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUgPSB0aGlzLT5zd2VlcERlc3RydWN0
aW9uTW9kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTEsMTAgKzU1MSw4IEBAIHZvaWQgTWFy
a2VkU3BhY2U6OmR1bXBCaXRzKFByaW50U3RyZWFtJiAKICAgICAgICAgfSk7CiB9CiAKLU1hcmtl
ZEFsbG9jYXRvciogTWFya2VkU3BhY2U6OmFkZE1hcmtlZEFsbG9jYXRvcigKLSAgICBjb25zdCBB
YnN0cmFjdExvY2tlciYsIFN1YnNwYWNlKiBzdWJzcGFjZSwgc2l6ZV90IHNpemVDbGFzcykKK3Zv
aWQgTWFya2VkU3BhY2U6OmFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYs
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQogewotICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yID0gbV9iYWdPZkFsbG9jYXRvcnMuYWRkKGhlYXAoKSwgc3Vic3BhY2UsIHNpemVDbGFz
cyk7CiAgICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9yKG51bGxwdHIpOwogICAgIAogICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC01NjIsMTQgKzU2MCwxMCBAQCBNYXJrZWRBbGxv
Y2F0b3IqIE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBCiAgICAgaWYgKCFtX2ZpcnN0QWxsb2NhdG9y
KSB7CiAgICAgICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CiAgICAgICAgIG1fbGFz
dEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICAgICAgZm9yIChTdWJzcGFjZSogc3Vic3BhY2Ug
OiBtX3N1YnNwYWNlcykKLSAgICAgICAgICAgIHN1YnNwYWNlLT5kaWRDcmVhdGVGaXJzdEFsbG9j
YXRvcihhbGxvY2F0b3IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbGFzdEFsbG9jYXRvci0+
c2V0TmV4dEFsbG9jYXRvcihhbGxvY2F0b3IpOwogICAgICAgICBtX2xhc3RBbGxvY2F0b3IgPSBh
bGxvY2F0b3I7CiAgICAgfQotICAgIAotICAgIHJldHVybiBhbGxvY2F0b3I7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3Bh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBJ
dGVyYXRpb25TY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTE1OCw3ICsx
NTksNyBAQCBwdWJsaWM6CiAgICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlyc3RBbGxvY2F0b3I7IH0KICAgICAKICAgICBMb2NrJiBhbGxvY2F0
b3JMb2NrKCkgeyByZXR1cm4gbV9hbGxvY2F0b3JMb2NrOyB9Ci0gICAgTWFya2VkQWxsb2NhdG9y
KiBhZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTdWJzcGFjZSosIHNp
emVfdCBjZWxsU2l6ZSk7CisgICAgdm9pZCBhZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBNYXJrZWRBbGxvY2F0b3IqKTsKICAgICAKICAgICAvLyBXaGVuIHRoaXMgaXMg
dHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZl
bid0IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBt
X2lzTWFya2luZzsgfQpAQCAtMTY4LDE0ICsxNjksMTIgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNpemVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6
ZUNsYXNzRm9yU2l6ZVN0ZXA7CiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb21w
bGV0ZVN1YnNwYWNlOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAg
ICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3MgV2Vha1NldDsKICAgICBmcmll
bmQgY2xhc3MgU3Vic3BhY2U7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KFN1YnNwYWNl
JiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xv
dyhTdWJzcGFjZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLQogICAgIC8vIFVzZSB0
aGlzIHZlcnNpb24gd2hlbiBjYWxsaW5nIGZyb20gd2l0aGluIHRoZSBHQyB3aGVyZSB3ZSBrbm93
IHRoYXQgdGhlIGFsbG9jYXRvcnMKICAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0
IEZ1bmN0b3ImKTsKQEAgLTIxMCw3ICsyMDksNiBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlu
a2VkTGlzdDxXZWFrU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxXZWFrU2V0Pj4gbV9uZXdBY3Rp
dmVXZWFrU2V0czsKIAogICAgIExvY2sgbV9hbGxvY2F0b3JMb2NrOwotICAgIEJhZzxNYXJrZWRB
bGxvY2F0b3I+IG1fYmFnT2ZBbGxvY2F0b3JzOwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJz
dEFsbG9jYXRvciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFzdEFsbG9j
YXRvciB7IG51bGxwdHIgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKIAorI2luY2x1ZGUgIkFsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrSW5saW5lcy5oIgpAQCAtMzQsNDUgKzM2LDIzIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1uYW1lc3BhY2UgewotCi0vLyBXcml0aW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhh
dCB3aGVuIHlvdSBwYXNzIHRoaXMgYXMgYSBmdW5jdG9yLCB0aGUgY2FsbGVlIGlzIHNwZWNpYWxp
emVkIGZvcgotLy8gdGhpcyBjYWxsYmFjay4gSWYgeW91IHdyb3RlIHRoaXMgYXMgYSBub3JtYWwg
ZnVuY3Rpb24gdGhlbiB0aGUgY2FsbGVlIHdvdWxkIGJlIHNwZWNpYWxpemVkIGZvcgotLy8gdGhl
IGZ1bmN0aW9uJ3MgdHlwZSBhbmQgaXQgd291bGQgaGF2ZSBpbmRpcmVjdCBjYWxscyB0byB0aGF0
IGZ1bmN0aW9uLiBBbmQgdW5saWtlIGEgbGFtYmRhLCBpdCdzCi0vLyBwb3NzaWJsZSB0byBtYXJr
IHRoaXMgQUxXQVlTX0lOTElORS4KLXN0cnVjdCBEZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlTX0lO
TElORSB2b2lkIG9wZXJhdG9yKCkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoY2VsbC0+c3RydWN0dXJlSUQoKSk7Ci0gICAgICAgIEFTU0VSVChjZWxs
LT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpOwotICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKLSAgICAgICAgTWV0
aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RU
YWJsZS5kZXN0cm95OwotICAgICAgICBkZXN0cm95KGNlbGwpOwotICAgIH0KLX07Ci0KLX0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQotCi1TdWJzcGFjZTo6U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBI
ZWFwJiBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpCitTdWJzcGFjZTo6U3Vic3BhY2UoQ1N0
cmluZyBuYW1lLCBIZWFwJiBoZWFwKQogICAgIDogbV9zcGFjZShoZWFwLm9iamVjdFNwYWNlKCkp
CiAgICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAg
ICwgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpCi0gICAg
LCBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbihtX3NwYWNlLmZpcnN0QWxsb2NhdG9yKCkp
Ci17Ci0gICAgLy8gSXQncyByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHdlJ3JlIEdDaW5nIHJpZ2h0
IG5vdyBldmVuIGlmIHRoZSBjbGllbnQgaXMgY2FyZWZ1bCB0byBvbmx5Ci0gICAgLy8gY3JlYXRl
IHN1YnNwYWNlcyByaWdodCBhZnRlciBWTSBjcmVhdGlvbiwgc2luY2UgY29sbGVjdENvbnRpbnVv
dXNseSAoYW5kIHByb2JhYmx5IG90aGVyCi0gICAgLy8gdGhpbmdzKSBjb3VsZCBjYXVzZSBhIEdD
IHRvIGJlIGxhdW5jaGVkIGF0IHByZXR0eSBtdWNoIGFueSB0aW1lIGFuZCBpdCdzIG5vdCAxMDAl
IG9idmlvdXMKLSAgICAvLyB0aGF0IGFsbCBjbGllbnRzIHdvdWxkIGJlIGFibGUgdG8gZW5zdXJl
IHRoYXQgdGhlcmUgYXJlIHplcm8gc2FmZXBvaW50cyBiZXR3ZWVuIHdoZW4gdGhleQotICAgIC8v
IGNyZWF0ZSBWTSBhbmQgd2hlbiB0aGV5IGRvIHRoaXMuIFByZXZlbnRpbmcgR0Mgd2hpbGUgd2Un
cmUgY3JlYXRpbmcgdGhlIFN1YnNwYWNlIGVuc3VyZXMKLSAgICAvLyB0aGF0IHdlIGRvbid0IGhh
dmUgdG8gd29ycnkgYWJvdXQgd2hldGhlciBpdCdzIE9LIGZvciB0aGUgR0MgdG8gZXZlciBzZWUg
YSBicmFuZCBuZXcKLSAgICAvLyBzdWJzcGFjZS4KK3sKK30KKwordm9pZCBTdWJzcGFjZTo6aW5p
dGlhbGl6ZShIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKK3sKKyAgICBtX2F0dHJpYnV0ZXMgPSBoZWFwQ2Vs
bFR5cGUtPmF0dHJpYnV0ZXMoKTsKKyAgICBtX2hlYXBDZWxsVHlwZSA9IGhlYXBDZWxsVHlwZTsK
KyAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwor
ICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLT5maXJzdEFsbG9jYXRvcigpOworCisgICAgSGVhcCYgaGVhcCA9ICptX3NwYWNlLmhlYXAo
KTsKICAgICBQcmV2ZW50Q29sbGVjdGlvblNjb3BlIHByZXZlbnRDb2xsZWN0aW9uU2NvcGUoaGVh
cCk7CiAgICAgaGVhcC5vYmplY3RTcGFjZSgpLm1fc3Vic3BhY2VzLmFwcGVuZCh0aGlzKTsKLSAg
ICAKLSAgICBmb3IgKHNpemVfdCBpID0gTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzOyBpLS07
KQotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2ldID0gbnVsbHB0cjsKKyAgICBtX2Fs
aWduZWRNZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVyU3Vic3BhY2UodGhpcyk7CiB9CiAKIFN1YnNw
YWNlOjp+U3Vic3BhY2UoKQpAQCAtODEsNjAgKzYxLDEyIEBAIFN1YnNwYWNlOjp+U3Vic3BhY2Uo
KQogCiB2b2lkIFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9j
aywgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1
YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBtX2hlYXBDZWxsVHlwZS0+Zmlu
aXNoU3dlZXAoYmxvY2ssIGZyZWVMaXN0KTsKIH0KIAogdm9pZCBTdWJzcGFjZTo6ZGVzdHJveShW
TSYgdm0sIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKLX0K
LQotLy8gVGhlIHJlYXNvbiB3aHkgd2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbGxvY2F0ZSBhbmQg
dHJ5QWxsb2NhdGUgaXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZgotLy8gY2hlY2tzIG9uIHRo
ZSBhbGxvY2F0aW9uIHBhdGggaW4gYm90aCBjYXNlcy4gTGlrZXdpc2UsIHRoZSByZWFzb24gd2h5
IHdlIGhhdmUgb3ZlcmxvYWRzIHdpdGggYW5kCi0vLyB3aXRob3V0IGRlZmVycmFsQ29udGV4dCBp
cyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGNvZGUgZm9yIGNhbGxpbmcgYWxsb2NhdGUgd2hl
biB5b3UgZG9uJ3QKLS8vIG5lZWQgdGhlIGRlZmVycmFsQ29udGV4dC4KLXZvaWQqIFN1YnNwYWNl
OjphbGxvY2F0ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAg
ICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1
bHQgPSBhbGxvY2F0ZVNsb3cobnVsbHB0ciwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGUoR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9p
ZCAqcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9j
YXRvckZvcihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZl
cnJhbENvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KGRl
ZmVycmFsQ29udGV4dCwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNpemUp
Ci17Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT50
cnlBbGxvY2F0ZSgpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93
KG51bGxwdHIsIHNpemUpOwotICAgIGRpZEFsbG9jYXRlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAg
ICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkp
Ci0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0
KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhkZWZlcnJhbENv
bnRleHQsIHNpemUpOwotICAgIGRpZEFsbG9jYXRlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICBtX2hlYXBDZWxsVHlwZS0+ZGVzdHJveSh2bSwgY2VsbCk7CiB9CiAKIHZvaWQgU3Vi
c3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKQEAgLTE0NCwxMDQgKzc2LDE3IEBAIHZvaWQg
U3Vic3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKICAgICAgICAgICAgIGFsbG9jYXRvci5w
cmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgICAgICB9KTsKIAotICAgIG1fYWxsb2NhdG9yRm9y
RW1wdHlBbGxvY2F0aW9uID0gbV9zcGFjZS5maXJzdEFsbG9jYXRvcigpOworICAgIG1fYWxsb2Nh
dG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5maXJzdEFs
bG9jYXRvcigpOwogfQogCiBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5
QmxvY2tUb1N0ZWFsKCkKIHsKLSAgICBmb3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRp
b247IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFs
bG9jYXRpb24tPm5leHRBbGxvY2F0b3IoKSkgewotICAgICAgICBTdWJzcGFjZSogb3RoZXJTdWJz
cGFjZSA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5zdWJzcGFjZSgpOwotICAgICAg
ICBpZiAob3RoZXJTdWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpICE9IGFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKyAgICBm
b3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb247IG1fYWxsb2NhdG9yRm9yRW1wdHlB
bGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPm5leHRBbGxvY2F0b3JJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkgewogICAgICAgICBpZiAoTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2sgPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+ZmluZEVtcHR5Qmxv
Y2tUb1N0ZWFsKCkpCiAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CiAgICAgfQogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1NYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3JT
bG93KHNpemVfdCBzaXplKQotewotICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXpl
Q2xhc3NUb0luZGV4KHNpemUpOwotICAgIHNpemVfdCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFjZTo6
c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF07Ci0gICAgaWYgKCFzaXplQ2xhc3MpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIC8vIFRoaXMgaXMgd3JpdHRlbiBpbiBzdWNo
IGEgd2F5IHRoYXQgaXQncyBPSyBmb3IgdGhlIEpJVCB0aHJlYWRzIHRvIGVuZCB1cCBoZXJlIGlm
IHRoZXkgd2FudAotICAgIC8vIHRvIGdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIHNvbWUgYWxsb2Nh
dG9yIHRoYXQgaGFkbid0IGJlZW4gdXNlZCB5ZXQuIE5vdGUgdGhhdCBhIHBvc3NpYmx5LQotICAg
IC8vIGp1c3QtYXMtZ29vZCBzb2x1dGlvbiB3b3VsZCBiZSB0byByZXR1cm4gbnVsbCBpZiB3ZSdy
ZSBpbiB0aGUgSklUIHNpbmNlIHRoZSBKSVQgdHJlYXRzIG51bGwKLSAgICAvLyBhbGxvY2F0b3Ig
YXMgInBsZWFzZSBhbHdheXMgdGFrZSB0aGUgc2xvdyBwYXRoIi4gQnV0LCB0aGF0IGNvdWxkIGxl
YWQgdG8gcGVyZm9ybWFuY2UKLSAgICAvLyBzdXJwcmlzZXMgYW5kIHRoZSBhbGdvcml0aG0gaGVy
ZSBpcyBwcmV0dHkgZWFzeS4gT25seSB0aGlzIGNvZGUgaGFzIHRvIGhvbGQgdGhlIGxvY2ssIHRv
Ci0gICAgLy8gcHJldmVudCBzaW11bHRhbmVvdXNseSBNYXJrZWRBbGxvY2F0b3IgY3JlYXRpb25z
IGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gVGhpcyBjb2RlIGVuc3VyZXMKLSAgICAvLyB0aGF0IGFu
eSAiZm9yRWFjaEFsbG9jYXRvciIgdHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2Nh
dG9yIGFmdGVyIGl0J3MgaW5pdGlhbGl6ZWQKLSAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAK
LSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKLSAg
ICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVw
W2luZGV4XSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKLQotICAgIGlmIChmYWxzZSkKLSAg
ICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgbWFya2VkIGFsbG9jYXRvciBmb3IgIiwgbV9uYW1lLCAi
LCAiLCBtX2F0dHJpYnV0ZXMsICIsICIsIHNpemVDbGFzcywgIi5cbiIpOwotICAgIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gbV9zcGFjZS5hZGRNYXJrZWRBbGxvY2F0b3IobG9ja2VyLCB0
aGlzLCBzaXplQ2xhc3MpOwotICAgIGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5k
ZXgoc2l6ZUNsYXNzKTsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChNYXJrZWRTcGFjZTo6
c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF0gIT0gc2l6ZUNsYXNzKQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0gPSBhbGxvY2F0
b3I7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWluZGV4LS0pCi0gICAgICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9ySW5TdWJzcGFjZShtX2ZpcnN0
QWxsb2NhdG9yKTsKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIG1fZmlyc3RBbGxv
Y2F0b3IgPSBhbGxvY2F0b3I7Ci0gICAgcmV0dXJuIGFsbG9jYXRvcjsKLX0KLQotdm9pZCogU3Vi
c3BhY2U6OmFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBz
aXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coZGVmZXJy
YWxDb250ZXh0LCBzaXplKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coR0NEZWZlcnJh
bENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgc2FuaXRpemVT
dGFja0ZvclZNKG1fc3BhY2UuaGVhcCgpLT52bSgpKTsKLSAgICAKLSAgICBpZiAoTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJldHVybiBh
bGxvY2F0b3ItPnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgCi0gICAgaWYgKHNp
emUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKLSAgICAgICAgJiYgc2l6ZSA8
PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAgZGF0YUxvZygiRkFUQUw6IGF0
dGFtcHRpbmcgdG8gYWxsb2NhdGUgc21hbGwgb2JqZWN0IHVzaW5nIGxhcmdlIGFsbG9jYXRpb24u
XG4iKTsKLSAgICAgICAgZGF0YUxvZygiUmVxdWVzdGVkIGFsbG9jYXRpb24gc2l6ZTogIiwgc2l6
ZSwgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
ICAgIAotICAgIG1fc3BhY2UuaGVhcCgpLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVy
cmFsQ29udGV4dCk7Ci0gICAgCi0gICAgc2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxN
YXJrZWRTcGFjZTo6c2l6ZVN0ZXA+KHNpemUpOwotICAgIExhcmdlQWxsb2NhdGlvbiogYWxsb2Nh
dGlvbiA9IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCptX3NwYWNlLm1faGVhcCwgc2l6ZSwg
dGhpcyk7Ci0gICAgaWYgKCFhbGxvY2F0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAKLSAgICBtX3NwYWNlLm1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7Ci0g
ICAgbV9zcGFjZS5tX2hlYXAtPmRpZEFsbG9jYXRlKHNpemUpOwotICAgIG1fc3BhY2UubV9jYXBh
Y2l0eSArPSBzaXplOwotICAgIAotICAgIG1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxsb2Nh
dGlvbik7Ci0gICAgICAgIAotICAgIHJldHVybiBhbGxvY2F0aW9uLT5jZWxsKCk7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgdm9pZCBTdWJzcGFjZTo6ZGlkQWxsb2NhdGUodm9pZCogcHRyKQotewotICAg
IFVOVVNFRF9QQVJBTShwdHIpOwotICAgIAotICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciBsb2dn
aW5nIGFsbG9jYXRpb25zLCBvciBkb2luZyBvdGhlciBraW5kcyBvZiBkZWJ1Z2dpbmcgaGFja3Mu
IEp1c3QgbWFrZQotICAgIC8vIHN1cmUgeW91IEpTQ19mb3JjZUdDU2xvd1BhdGhzPXRydWUuCi19
Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKICNpbmNsdWRlICJNYXJr
ZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgpAQCAtMzIsNDQgKzMzLDMwIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKK2NsYXNzIEhlYXBDZWxsVHlwZTsKIAogLy8gVGhlIGlk
ZWEgb2Ygc3Vic3BhY2VzIGlzIHRoYXQgeW91IGNhbiBwcm92aWRlIHNvbWUgY3VzdG9tIGJlaGF2
aW9yIGZvciB5b3VyIG9iamVjdHMgaWYgeW91CiAvLyBhbGxvY2F0ZSB0aGVtIGZyb20gYSBjdXN0
b20gU3Vic3BhY2UgaW4gd2hpY2ggeW91IG92ZXJyaWRlIHNvbWUgb2YgdGhlIHZpcnR1YWwgbWV0
aG9kcy4gVGhpcwotLy8gY2xhc3MgaXMgdGhlIGJhc2VjbGFzcyBvZiBTdWJzcGFjZXMgYW5kIGl0
IHByb3ZpZGVzIGEgcmVhc29uYWJsZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCB3aGVyZQotLy8g
c3dlZXBpbmcgYXNzdW1lcyBpbW1vcnRhbCBzdHJ1Y3R1cmUuIFRoZSBjb21tb24gd2F5cyBvZiBv
dmVycmlkaW5nIHRoaXMgYXJlOgotLy8KLS8vIC0gUHJvdmlkZSBjdXN0b21pemVkIGRlc3RydWN0
b3IgYmVoYXZpb3IuIFlvdSBjYW4gY2hhbmdlIGhvdyB0aGUgZGVzdHJ1Y3RvciBpcyBjYWxsZWQu
IFlvdSBjYW4KLS8vICAgYWxzbyBzcGVjaWFsaXplIHRoZSBkZXN0cnVjdG9yIGNhbGwgaW4gdGhl
IGxvb3AuCi0vLwotLy8gLSBVc2UgdGhlIFN1YnNwYWNlIGFzIGEgcXVpY2sgd2F5IHRvIGl0ZXJh
dGUgYWxsIG9mIHRoZSBvYmplY3RzIGluIHRoYXQgc3Vic3BhY2UuCisvLyBjbGFzcyBpcyB0aGUg
YmFzZWNsYXNzIG9mIFN1YnNwYWNlcy4gVXN1YWxseSB5b3Ugd2lsbCB1c2UgZWl0aGVyIFN1YnNw
YWNlIG9yIEZpeGVkU2l6ZVN1YnNwYWNlLgogY2xhc3MgU3Vic3BhY2UgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFN1YnNwYWNlKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
LCBBbGxvY2F0b3JBdHRyaWJ1dGVzLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdmlydHVhbCB+U3Vic3BhY2UoKTsKLSAgICAKKwogICAgIGNvbnN0IGNoYXIq
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUuZGF0YSgpOyB9CiAgICAgTWFya2VkU3BhY2Um
IHNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZTsgfQogICAgIAogICAgIGNvbnN0IEFsbG9j
YXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KKyAgICBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGVh
cENlbGxUeXBlOyB9CiAgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgfQogICAg
IAotICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBpcyB0byBzcGVjaWFsaXpl
IHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24ndAotICAgIC8vIGJlIGNh
bGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBjYWxsIE1hcmtlZEJsb2Nr
OjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7Ci0gICAgCi0gICAgLy8gVGhlc2Ug
Z2V0IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShW
TSYsIEpTQ2VsbCopOwotICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciogdHJ5QWxsb2NhdG9yRm9y
KHNpemVfdCk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90KTsKLSAg
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90
KTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3Qp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250
ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
LCBGcmVlTGlzdCopOworICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOworCisgICAgdmly
dHVhbCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRpb25GYWls
dXJlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVy
cmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgPSAwOwogICAgIAogICAgIHZvaWQg
cHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICAKQEAgLTk2LDQ4ICs4MywyNSBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jJik7CiAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRv
ckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN1YnNwYWNlLCBtX2FsbG9j
YXRvckZvclNpemVTdGVwKTsgfQotICAgIAotICAgIE1hcmtlZEFsbG9jYXRvcioqIGFsbG9jYXRv
ckZvclNpemVTdGVwKCkgeyByZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0KKyAg
ICBTdWJzcGFjZSogbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KKyAgICB2
b2lkIHNldE5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihTdWJzcGFjZSogc3Vi
c3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBzdWJzcGFj
ZTsgfQogCi1wcml2YXRlOgotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yU2xvdyhz
aXplX3QpOwotICAgIAotICAgIC8vIFRoZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRo
IGxhcmdlIGFsbG9jYXRpb25zIGFuZCBhbGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxs
b2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxv
Y2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIAotICAgIHZvaWQgZGlk
QWxsb2NhdGUodm9pZCopOworcHJvdGVjdGVkOgorICAgIHZvaWQgaW5pdGlhbGl6ZShIZWFwQ2Vs
bFR5cGUqLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CiAgICAgCiAgICAgTWFya2VkU3BhY2Um
IG1fc3BhY2U7CiAgICAgCiAgICAgQ1N0cmluZyBtX25hbWU7CiAgICAgQWxsb2NhdG9yQXR0cmli
dXRlcyBtX2F0dHJpYnV0ZXM7CisKKyAgICBIZWFwQ2VsbFR5cGUqIG1faGVhcENlbGxUeXBlIHsg
bnVsbHB0ciB9OworICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFs
bG9jYXRvciB7IG51bGxwdHIgfTsKICAgICAKLSAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBt
X2FsaWduZWRNZW1vcnlBbGxvY2F0b3I7Ci0gICAgCi0gICAgc3RkOjphcnJheTxNYXJrZWRBbGxv
Y2F0b3IqLCBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0
ZXA7CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2ZpcnN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9Owog
ICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24geyBudWxs
cHRyIH07IC8vIFVzZXMgdGhlIE1hcmtlZFNwYWNlIGxpbmtlZCBsaXN0IG9mIGJsb2Nrcy4KICAg
ICBTZW50aW5lbExpbmtlZExpc3Q8TGFyZ2VBbGxvY2F0aW9uLCBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTxMYXJnZUFsbG9jYXRpb24+PiBtX2xhcmdlQWxsb2NhdGlvbnM7CisgICAgU3Vic3BhY2UqIG1f
bmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogfTsKIAot
QUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjp0cnlBbGxvY2F0b3JGb3Io
c2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2Zm
KQotICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6
ZUNsYXNzVG9JbmRleChzaXplKV07Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXpl
KQotewotICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewotICAgICAg
ICBpZiAoTWFya2VkQWxsb2NhdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01h
cmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpXSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JTbG93KHNpemUpOwotICAgIH0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjI0OTM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU3Miw3ICsxNTcyLDcgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0sIEdQ
UlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9y
YWdlLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVt
cExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZv
cihzaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxDbGFzc1R5cGU+KHZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1
ODksNyArMTU4OSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBhbGxvY2F0aW9uU2l6ZSBjYW4g
YmUgYWxpYXNlZCB3aXRoIGFueSBvZiB0aGUgb3RoZXIgaW5wdXQgR1BScy4gSWYgaXQncyBub3Qg
YWxpYXNlZCB0aGVuIGl0CiAgICAgLy8gd29uJ3QgYmUgY2xvYmJlcmVkLgotICAgIHZvaWQgZW1p
dEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBTdWJzcGFjZSYgc3Vic3Bh
Y2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2Ny
YXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlh
YmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQ
UlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQ
UjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShN
YXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkpLCAiTWFy
a2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAgICAgICAgIApA
QCAtMTYwNyw3ICsxNjA3LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNz
VHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlh
YmxlU2l6ZWRDZWxsKFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1
Y3R1cmUsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcg
c2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIFN1YnNwYWNl
JiBzdWJzcGFjZSA9ICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKTsKKyAgICAgICAgQ29tcGxl
dGVTdWJzcGFjZSYgc3Vic3BhY2UgPSAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSk7CiAgICAg
ICAgIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQocmVzdWx0R1BSLCBzdWJzcGFjZSwgYWxsb2Nh
dGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgICAgICBl
bWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oc3RydWN0dXJlLCByZXN1bHRHUFIsIHNjcmF0
Y2hHUFIyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVj
dHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9j
YXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9j
YXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIAogICAg
IFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JS
ZWcgPSByZWdUMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1hCiBpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBKU0NlbGwq
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAg
c2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhh
c0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCog
YmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlKHNpemUpOwor
ICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0
ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQp
OwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC03MCw3ICs3MCw3IEBA
IGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbmkKIGlubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6dHJ5Q3JlYXRlKFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29u
c3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHks
IHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7Ci0gICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNw
YWNlLnRyeUFsbG9jYXRlKHNpemUpOworICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIGlubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFz
ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5
Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lk
KiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUo
bmV3U2l6ZSk7CisgICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmICghbmV3QmFzZSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkbid0IGJlIGEgbWVt
Y3B5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RB
cmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4
LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJgogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdsb2JhbE9iamVjdCgp
LT5hcnJheVByb3RvVmFsdWVzRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIAotICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9
IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRBcmd1bWVudHMua2luZCkudHJ5QWxs
b2NhdGUobWFwcGVkQXJndW1lbnRzU2l6ZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChiYWNraW5n
U3RvcmUpOworICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UobV9tYXBwZWRBcmd1bWVudHMua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKG1hcHBlZEFyZ3Vt
ZW50c1NpemUoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAg
IGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAg
IG1fbWFwcGVkQXJndW1lbnRzLnNldCh2bSwgdGhpcywgb3ZlcnJpZGVzKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24p
OwogICAgICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0RXZhbEV4ZWN1dGFi
bGUuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0RXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgRGlyZWN0RXZhbEV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMg
RXZhbEV4ZWN1dGFibGUgewogcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
PgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICZ2bS5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOworICAgIH0KKwogICAg
IHN0YXRpYyBEaXJlY3RFdmFsRXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUsIGJv
b2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50Kik7CiBwcml2YXRlOgogICAgIERpcmVjdEV2YWxFeGVjdXRhYmxlKEV4ZWNT
dGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENv
bnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2
YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCisgICAgCiAgICAgRXZhbENvZGVCbG9jayogY29kZUJs
b2NrKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2V2YWxDb2RlQmxvY2suZ2V0KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJKHJl
dmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDEwIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgCisgICAgLy8gRm9yY2Ugc3ViY2xhc3NlcyB0byBv
dmVycmlkZSB0aGlzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0YXRpYyB2b2lkIHN1
YnNwYWNlRm9yKFZNJikgeyB9CiAgICAgICAgIAogICAgIENvZGVCbG9ja0hhc2ggaGFzaEZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIyNDkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMiBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBT
Y3JpcHRFeGVjdXRhYmxlIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZtLmZ1bmN0aW9uRXhl
Y3V0YWJsZVNwYWNlOworICAgIH0KKwogICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNy
ZWF0ZSgKICAgICAgICAgVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIAogICAgICAgICB1bnNpZ25l
ZCBsYXN0TGluZSwgdW5zaWduZWQgZW5kQ29sdW1uLCBJbnRyaW5zaWMgaW50cmluc2ljKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjMsOCArMjYzLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppbml0TW9kaWZpZQog
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik7CiAKICAg
ICBpZiAoYXJnc0xlbmd0aCkgewotICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdh
Y2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQpLnRy
eUFsbG9jYXRlKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CisgICAgICAgIHZvaWQqIGJhY2tpbmdT
dG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rlc2Ny
aXB0b3Iua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4
PihhcmdzTGVuZ3RoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwog
ICAgICAgICBib29sKiBtb2RpZmllZEFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNr
aW5nU3RvcmUpOwogICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5zZXQodm0s
IHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJn
c0xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hN
YXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2Nh
dGlvblNpemUoY2FwYWNpdHkpOwotICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOworICAgICAgICB2
b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25W
aXJ0dWFsKGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJl
dHVybk51bGwpOwogICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRpcmVjdEV2
YWxFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICsz
MSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZSBm
aW5hbCA6IHB1YmxpYyBFdmFsRXhlY3V0YWJsZSB7CiBwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZtLmluZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFj
ZTsKKyAgICB9CisKICAgICBzdGF0aWMgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZSogY3JlYXRlKEV4
ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBEZXJp
dmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRU
eXBlKTsKIHByaXZhdGU6CiAgICAgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBj
b25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlw
ZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIyNDkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CiAK
ICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGln
dW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lk
KiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVm
ZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0
cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIHZv
aWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZp
cnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0
ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgsNyAr
OTgsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgfSBl
bHNlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CiAgICAg
ICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxl
bmd0aChpbmRleEJpYXMsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQq
IHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZl
cnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3Rv
cmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAg
ICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRl
Tm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3Jh
Z2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgZGVmZXJyYWxD
b250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAo
VU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRPZkxpbmVT
dG9yYWdlKTsKQEAgLTM2OCw3ICszNjgsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKGNvbnN0CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAgICB9
IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2Fw
YWNpdHkpKTsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6ZSk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZt
LmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChuZXdTaXpl
LCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBp
ZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3
U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3
LDkgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZShWTSYgdgogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0
dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIHZlY3Rvckxl
bmd0aEhpbnQpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0
T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdGVOb25WaXJ0dWFsKAorICAgICAgICAgICAgQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksCisgICAgICAgICAgICBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJl
dHVybk51bGwpOwogICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRP
ZkxpbmVTdG9yYWdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4
dDo6CiAgICAgICAgIHZvaWQqIHRlbXA7CiAgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxl
bmd0aCwgZWxlbWVudFNpemUpOwogICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgICAgdGVt
cCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0
ciwgc2l6ZSk7CisgICAgICAgICAgICB0ZW1wID0gdm0ucHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgICAgIGlmICghdGVtcCkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogY2xhc3MgQ29weVZpc2l0
b3I7CiBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dDsKIGNsYXNzIEV4ZWNTdGF0ZTsKQEAgLTUwLDEx
ICs1MSw2IEBAIGNsYXNzIFByb3BlcnR5TmFtZTsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5Owog
Y2xhc3MgU3RydWN0dXJlOwogCi1lbnVtIGNsYXNzIEFsbG9jYXRpb25GYWlsdXJlTW9kZSB7Ci0g
ICAgU2hvdWxkQXNzZXJ0T25GYWlsdXJlLAotICAgIFNob3VsZE5vdEFzc2VydE9uRmFpbHVyZQot
fTsKLQogZW51bSBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlIHsKICAgICBIYXNB
cmcsCiAgICAgRG9lc05vdEhhdmVBcmcKQEAgLTg2LDggKzgyLDggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdm9pZCogdHJ5QWxsb2NhdGVDZQogY2xhc3MgSlNDZWxsIDogcHVibGljIEhlYXBDZWxs
IHsKICAgICBmcmllbmQgY2xhc3MgSlNWYWx1ZTsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxv
Y2s7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlLCBHQ0Rl
ZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlPgotICAgIGZyaWVuZCB2b2lkKiB0cnlBbGxvY2F0ZUNl
bGxIZWxwZXIoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIGZyaWVuZCB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIoSGVh
cCYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwog
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gMDsK
QEAgLTk4LDcgKzk0LDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBSZWZlciB0byBTdWJzcGFj
ZSBieSByZWZlcmVuY2UuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2Njk4OAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRp
YyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mKTsKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mKTsKIAogICAgIHN0YXRpYyBKU0NlbGwqIHNlZW5NdWx0aXBsZUNh
bGxlZU9iamVjdHMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oc3RhdGljX2Nhc3Q8
dWludHB0cl90PigxKSk7IH0KIApAQCAtMzIwLDcgKzMxNiw3IEBAIGlubGluZSBUbyBqc0R5bmFt
aWNDYXN0KFZNJiB2bSwgSlNWYWx1ZSAKIC8vIEZJWE1FOiBSZWZlciB0byBTdWJzcGFjZSBieSBy
ZWZlcmVuY2UuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
OTg4CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotaW5saW5lIFN1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCitpbmxpbmUgYXV0byBzdWJzcGFjZUZvcihWTSYgdm0pCiB7CiAgICAgcmV0dXJu
IFR5cGU6OnRlbXBsYXRlIHN1YnNwYWNlRm9yPFR5cGU+KHZtKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM1LDMwICsxMzUsMjEgQEAgQUxXQVlTX0lOTElORSBWTSYgRXhlY1N0
YXRlOjp2bSgpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotU3Vic3Bh
Y2UqIEpTQ2VsbDo6c3Vic3BhY2VGb3IoVk0mIHZtKQorQ29tcGxldGVTdWJzcGFjZSogSlNDZWxs
OjpzdWJzcGFjZUZvcihWTSYgdm0pCiB7CiAgICAgaWYgKENlbGxUeXBlOjpuZWVkc0Rlc3RydWN0
aW9uKQogICAgICAgICByZXR1cm4gJnZtLmRlc3RydWN0aWJsZUNlbGxTcGFjZTsKICAgICByZXR1
cm4gJnZtLmNlbGxTcGFjZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIG1vZGUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2UgZGVmZXJyYWxDb250
ZXh0QXJnUHJlc2VuY2U+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBl
cihIZWFwJiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qg
c2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9j
YXRlQ2VsbEhlbHBlcihIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewog
ICAgIEFTU0VSVChkZWZlcnJhbENvbnRleHQgfHwgIURpc2FsbG93R0M6OmlzSW5FZmZlY3RPbkN1
cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAgICBKU0Nl
bGwqIHJlc3VsdDsKLSAgICBpZiAobW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNob3Vs
ZEFzc2VydE9uRmFpbHVyZSkgewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250ZXh0QXJn
UHJlc2VuY2UgPT0gR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQotICAgICAg
ICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+
YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3RhdGljX2Nh
c3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlKHNpemUpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vu
Y2UgPT0gR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQotICAgICAgICAgICAg
PyBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+dHJ5QWxs
b2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8
SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPnRyeUFsbG9jYXRlKHNpemUpKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQorICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vi
c3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZlcnJh
bENvbnRleHQsIGZhaWx1cmVNb2RlKSk7CisgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCAmJiAhcmVzdWx0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICBBU1NFUlQoIWhlYXAudm0oKS0+
aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CiAgICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXppbmdP
YmplY3RDbGFzcyhUOjppbmZvKCkpOwpAQCAtMTcwLDI1ICsxNjEsMjUgQEAgQUxXQVlTX0lOTElO
RSB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQq
IGFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ5
QWxsb2NhdGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkQXNzZXJ0
T25GYWlsdXJlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpEb2VzTm90SGF2ZUFyZz4o
aGVhcCwgbnVsbHB0ciwgc2l6ZSk7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxU
PihoZWFwLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkKiB0cnlBbGxvY2F0ZUNlbGwoSGVhcCYgaGVh
cCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNob3VsZE5vdEFzc2VydE9uRmFpbHVyZSwgR0NEZWZlcnJh
bENvbnRleHRBcmdQcmVzZW5zZTo6RG9lc05vdEhhdmVBcmc+KGhlYXAsIG51bGxwdHIsIHNpemUp
OworICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VD4oaGVhcCwgc2l6ZSwgbnVsbHB0
ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4
dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ5QWxsb2Nh
dGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkQXNzZXJ0T25GYWls
dXJlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpIYXNBcmc+KGhlYXAsIGRlZmVycmFs
Q29udGV4dCwgc2l6ZSk7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFw
LCBzaXplLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbChIZWFwJiBo
ZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsK
LSAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6U2hvdWxkTm90QXNzZXJ0T25GYWlsdXJlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNl
OjpIYXNBcmc+KGhlYXAsIGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7CisgICAgcmV0dXJuIHRyeUFs
bG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFwLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiB9CiAKIGlubGluZSBib29sIEpTQ2VsbDo6aXNP
YmplY3QoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0
cnVjdGlibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlw
ZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
Q29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuICZ2bS5kZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwOjIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgiCisKKyNpbmNs
dWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2Ug
eworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRv
cigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
SlNEZXN0cnVjdGlibGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRl
c3Ryb3koY2VsbCk7CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2Uo
Q1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0
b3IpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRz
RGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCkK
K3sKK30KKwordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChN
YXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBo
YW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkp
OworfQorCit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZt
LCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDExICsyNCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0Rl
c3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaCIKIAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDIxICs0MiwyMSBAQCBzdHJ1Y3QgRGVzdHJveUZ1bmMgewog
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFj
ZTo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAs
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUs
IGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpT
Q2VsbCksIGFsbG9jYXRvcikKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5cGUoQWxsb2Nh
dG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsKIH0K
IAotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2UoKQorSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6On5KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlz
dCogZnJlZUxpc3QpCit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5p
c2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkK
IHsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ry
b3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoZnJl
ZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit2b2lkIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAg
IERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaDoyMjQ1MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdWJzcGFj
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZSgpOworICAgIAorICAgIHZvaWQgZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXN0cm95
KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSA6IHB1
YmxpYyBTdWJzcGFjZSB7CitjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSA6
IHB1YmxpYyBIZWFwQ2VsbFR5cGUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCk7CiAgICAgCiAgICAgdm9pZCBmaW5p
c2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2
b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UuaCIKLQotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBEZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlT
X0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAgewot
ICAgICAgICBzdGF0aWNfY2FzdDxKU0Rlc3RydWN0aWJsZU9iamVjdCo+KGNlbGwpLT5jbGFzc0lu
Zm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKLSAgICB9Ci19OwotCi19IC8vIGFub255
bW91cyBuYW1lc3BhY2UKLQotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9j
YXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9j
YXRvcikKLXsKLX0KLQotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3Qq
IGZyZWVMaXN0KQotewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVl
TGlzdCwgRGVzdHJveUZ1bmMoKSk7Ci19Ci0KLXZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVuYygp
KHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFj
ZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZy
ZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJp
ZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAy
MjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9u
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEpTTGV4aWNhbEVu
dmlyb25tZW50IDogcHVibGljIEpTU3kKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0
YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm4gJnZtLmpzVmFs
dWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDIy
NDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMg
Q29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0
dXJuICZ2bS5zZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RTdWJzcGFjZS5jcHA6MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgewor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+
KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9Cit9
OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpCit7
Cit9CisKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAg
ICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5j
KCkpOworfQorCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJv
eShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIgor
I2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCIKIAogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNp
bmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDIx
ICs0MiwyMSBAQCBzdHJ1Y3QgRGVzdHJveUZ1bmMgewogCiB9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKIAotSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0
b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0
b3IpCitKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0b3JB
dHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCi1K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UoKQorSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6fkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6Okhh
bmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit2b2lkIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhh
bmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dp
bmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3
ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKLXZv
aWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlND
ZWxsKiBjZWxsKQordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpk
ZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAgIERlc3Ryb3lGdW5jKCkodm0sIGNl
bGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAko
cmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNl
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
LCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7CisgICAgCisgICAgdm9pZCBm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
CShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDE0ICsyNSwxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisj
aW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xhc3Mg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSA6IHB1YmxpYyBIZWFwQ2VsbFR5
cGUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdEhlYXBDZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lkIGZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAg
IHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJ
bmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVz
dHJveUZ1bmMgewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxs
KiBjZWxsKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdCo+KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxs
KTsKLSAgICB9Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Uo
Q1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0
b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRz
RGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZSgpCi17Ci19Ci0KLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
OjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVl
TGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3Qs
IERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVuYygp
KHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlIDogcHVibGljIFN1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZp
c2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAvLyBXZSBzcGVj
aWFsaXplIHRoZSBzdHJpbmcgc3Vic3BhY2UgdG8gZ2V0IHRoZSBmYXN0ZXN0IHBvc3NpYmxlIHN3
ZWVwLiBUaGlzIHdvdWxkbid0IGJlCiAgICAgLy8gbmVjZXNzYXJ5IGlmIEpTU3RyaW5nIGRpZG4n
dCBoYXZlIGEgZGVzdHJ1Y3Rvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KLSAgICBzdGF0aWMg
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdT
cGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwOjIyNDUzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U1N0cmluZ1N1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsKS0+SlNTdHJpbmc6On5K
U1N0cmluZygpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitKU1N0
cmluZ1N1YnNwYWNlOjpKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwg
aGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlND
ZWxsKSwgYWxsb2NhdG9yKQoreworfQorCitKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJz
cGFjZSgpCit7Cit9CisKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgaGFuZGxl
LmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKK30K
Kwordm9pZCBKU1N0cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQor
eworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SlNTdHJpbmdTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkpTU3RyaW5nSGVhcENlbGxUeXBlLmgiCiAK
ICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00
MywyMSArNDIsMjEgQEAgc3RydWN0IERlc3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCiAKLUpTU3RyaW5nU3Vic3BhY2U6OkpTU3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU1N0cmluZ0hlYXBDZWxsVHlwZTo6SlNT
dHJpbmdIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0
ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKLUpTU3RyaW5n
U3Vic3BhY2U6On5KU1N0cmluZ1N1YnNwYWNlKCkKK0pTU3RyaW5nSGVhcENlbGxUeXBlOjp+SlNT
dHJpbmdIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQor
dm9pZCBKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVw
S25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmlu
aXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0K
IAotdm9pZCBKU1N0cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQor
dm9pZCBKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkK
IHsKICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAkocmV2aXNp
b24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1
YnNwYWNlLmg6MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTU3RyaW5n
U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTU3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU3RyaW5nU3Vic3Bh
Y2UoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBG
cmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJy
aWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24g
MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2Vs
bFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTU3RyaW5nU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3Bh
Y2UgeworY2xhc3MgSlNTdHJpbmdIZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsK
IHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcg
bmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNTdHJpbmdIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5K
U1N0cmluZ0hlYXBDZWxsVHlwZSgpOwogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZN
JiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1N0cmluZ1N1YnNw
YWNlLmgiCi0KLSNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAotICAgIHsKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsKS0+SlNTdHJpbmc6On5KU1N0cmluZygpOwot
ICAgIH0KLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1KU1N0cmluZ1N1YnNwYWNl
OjpKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2Nh
dG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2Nh
dG9yKQotewotfQotCi1KU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCi17Ci19
Ci0KLXZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVw
S25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1N0
cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQotewotICAgIERlc3Ry
b3lGdW5jKCkodm0sIGNlbGwpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkocmV2
aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdT
dWJzcGFjZS5oCShub25leGlzdGVudCkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlN1YnNwYWNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU1N0cmluZ1N1YnNwYWNl
IDogcHVibGljIFN1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0
cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Iq
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7Ci0g
ICAgCi0gICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3Qq
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIy
NDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVj
dXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEyIEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIFNjcmlwdEV4ZWN1dGFibGUgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0
YWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KKyAgICBzdGF0aWMgSXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiAmdm0ubW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICB9CisKICAgICBzdGF0aWMgTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjI0OTM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIsMTIgQEAgcHVibGljOgogICAg
IHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoVk0mLCBSZWY8SklUQ29kZT4mJiBjYWxs
VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBSZWY8SklUQ29kZT4mJiBjb25zdHJ1Y3RU
aHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIEludHJpbnNpYywgY29uc3QgRE9NSklU
OjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KKyAg
ICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAg
IHJldHVybiAmdm0ubmF0aXZlRXhlY3V0YWJsZVNwYWNlOworICAgIH0KIAogICAgIENvZGVCbG9j
a0hhc2ggaGFzaEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFt
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMiBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRhYmxlIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+CisgICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZt
LnByb2dyYW1FeGVjdXRhYmxlU3BhY2U7CisgICAgfQorCiAgICAgc3RhdGljIFByb2dyYW1FeGVj
dXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Up
CiAgICAgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9u
IDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIEFMV0FZU19JTkxJTkUgSlNB
cnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFs
aXplZCA9IGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7
Ci0gICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFs
bG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CiAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAs
IDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjI0OTM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYg
dm0pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1
Y3Rpb24pOwogICAgICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkN1
c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCisjaW5jbHVkZSAi
RGlyZWN0RXZhbEV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNs
dWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5oIgpAQCAtNDcs
NiArNDgsNyBAQAogI2luY2x1ZGUgIkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR0NB
Y3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAi
R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCkBAIC01Nyw2ICs1OSw3IEBACiAjaW5j
bHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNp
bmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJJbmRpcmVjdEV2YWxFeGVj
dXRhYmxlLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKQEAgLTY0LDYgKzY3LDcgQEAKICNpbmNs
dWRlICJKU0FQSVZhbHVlV3JhcHBlci5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuaCIKICNpbmNsdWRlICJKU0ZpeGVkQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKQEAgLTczLDI0ICs3NywzMCBA
QAogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJl
ZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgorI2luY2x1ZGUgIkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJKU1Njcmlw
dEZldGNoUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIkpTU2NyaXB0RmV0Y2hlci5oIgogI2luY2x1
ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU291
cmNlQ29kZS5oIgorI2luY2x1ZGUgIkpTU3RyaW5nSGVhcENlbGxUeXBlLmgiCiAjaW5jbHVkZSAi
SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseS5oIgorI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJK
U1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxleGVyLmgi
CiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTWluaW11bVJlc2VydmVkWm9uZVNpemUu
aCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJOYXRpdmVFeGVjdXRhYmxlLmgiCiAjaW5j
bHVkZSAiTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNs
dWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAi
UHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlByb2dyYW1FeGVjdXRhYmxlLmgiCiAjaW5j
bHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCkBAIC0xNzEsMTggKzE4MSwzMSBAQCBW
TTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBmYXN0TWFsbG9j
QWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I+KCkpCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVl
PEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OlByaW1pdGl2ZSkpCiAg
ICAgLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxHaWdhY2FnZUFs
aWduZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpKU1ZhbHVlKSkKLSAgICAsIHByaW1pdGl2
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBo
ZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxs
OjpBdXhpbGlhcnkpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAsIGpz
VmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEF1eGlsaWFyeSIs
IGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENl
bGw6OkF1eGlsaWFyeSksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAsIGNl
bGxTcGFjZSgiSlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERl
c3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkK
LSAgICAsIGpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBKU0NlbGwi
LCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBD
ZWxsOjpKU0NlbGwpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBkZXN0
cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBKU0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JB
dHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9j
QWxsb2NhdG9yLmdldCgpKQotICAgICwgc3RyaW5nU3BhY2UoIkpTU3RyaW5nIiwgaGVhcCwgZmFz
dE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJK
U0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0g
ICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiRWFnZXJseSBTd2VwdCBK
U0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0g
ICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlKCJKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3BhY2UiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgYXV4aWxp
YXJ5SGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBlPihBbGxvY2F0b3JB
dHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpKSkK
KyAgICAsIGNlbGxIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KEFs
bG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2Vs
bCkpKQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVl
PEhlYXBDZWxsVHlwZT4oQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFw
Q2VsbDo6SlNDZWxsKSkpCisgICAgLCBzdHJpbmdIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1
ZTxKU1N0cmluZ0hlYXBDZWxsVHlwZT4oKSkKKyAgICAsIGRlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
PigpKQorICAgICwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoc3RkOjptYWtl
X3VuaXF1ZTxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlPigpKQorICAgICwg
d2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlPigpKQorICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIGF1eGls
aWFyeUhlYXBDZWxsVHlwZS5nZXQoKSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkp
CisgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBB
dXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0KCksIGpzVmFsdWVHaWdh
Y2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGNlbGxTcGFjZSgiSlNDZWxsIiwgaGVhcCwgY2Vs
bEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIGpz
VmFsdWVHaWdhY2FnZUNlbGxTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBKU0NlbGwiLCBoZWFwLCBj
ZWxsSGVhcENlbGxUeXBlLmdldCgpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCisg
ICAgLCBkZXN0cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBKU0NlbGwiLCBoZWFwLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdl
dCgpKQorICAgICwgc3RyaW5nU3BhY2UoIkpTU3RyaW5nIiwgaGVhcCwgc3RyaW5nSGVhcENlbGxU
eXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgZGVzdHJ1Y3RpYmxl
T2JqZWN0U3BhY2UoIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwg
ZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVhZ2VybHkgU3dlcHQgSlNEZXN0
cnVjdGlibGVPYmplY3QiLCBoZWFwLCBkZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0
KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFNwYWNlKCJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UiLCBoZWFwLCBzZWdtZW50
ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5n
ZXQoKSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9j
a1NwYWNlKCJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCBmYXN0TWFsbG9jQWxs
b2NhdG9yLmdldCgpKQorICAgICwgd2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSgiSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1NwYWNlIiwgaGVhcCwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiAjZW5kaWYKKyAgICAsIG5hdGl2
ZUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxs
SGVhcENlbGxUeXBlLmdldCgpLCBOYXRpdmVFeGVjdXRhYmxlKQorICAgICwgZGlyZWN0RXZhbEV4
ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVh
cENlbGxUeXBlLmdldCgpLCBEaXJlY3RFdmFsRXhlY3V0YWJsZSkKKyAgICAsIGluZGlyZWN0RXZh
bEV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxs
SGVhcENlbGxUeXBlLmdldCgpLCBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlKQorICAgICwgZnVuY3Rp
b25FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2Vs
bEhlYXBDZWxsVHlwZS5nZXQoKSwgRnVuY3Rpb25FeGVjdXRhYmxlKQorICAgICwgbW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVD
ZWxsSGVhcENlbGxUeXBlLmdldCgpLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSkKKyAgICAsIHBy
b2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxl
Q2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgUHJvZ3JhbUV4ZWN1dGFibGUpCiAgICAgLCB2bVR5cGUo
dm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQogICAgICwgdG9wRW50cnlGcmFtZShudWxscHRy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjQ5MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkNvZGVTcGVj
aWFsaXphdGlvbktpbmQuaCIKKyNpbmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlLmgiCiAjaW5jbHVk
ZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkNvbnRyb2xGbG93UHJvZmlsZXIuaCIK
ICNpbmNsdWRlICJEYXRlSW5zdGFuY2VDYWNoZS5oIgpAQCAtMzksMjAgKzQwLDE2IEBACiAjaW5j
bHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2lu
Y2x1ZGUgIkludHJpbnNpYy5oIgorI2luY2x1ZGUgIklzb1N1YnNwYWNlLmgiCiAjaW5jbHVkZSAi
SklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKLSNpbmNsdWRlICJK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCIKLSNpbmNsdWRlICJKU1N0cmluZ1N1
YnNwYWNlLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgiCiAj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiTWljcm90YXNrLmgi
CiAjaW5jbHVkZSAiTnVtZXJpY1N0cmluZ3MuaCIKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIK
ICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgotI2luY2x1
ZGUgIlN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgiCiAj
aW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUgIlZNVHJhcHMuaCIKQEAgLTEwOCw5
ICsxMDUsMTMgQEAgY2xhc3MgSGVhcFByb2ZpbGVyOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNz
IEludGVycHJldGVyOwogY2xhc3MgSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjsKK2NsYXNz
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTUnVuTG9vcFRpbWVyOworY2xhc3MgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTsKK2NsYXNzIEpTU3RyaW5nSGVhcENlbGxUeXBl
OworY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKIGNsYXNzIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE5h
dGl2ZUV4ZWN1dGFibGU7CkBAIC0yOTAsOSArMjkxLDE5IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IGZhc3RNYWxsb2NBbGxv
Y2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cj4gcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2Fj
YWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4ganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBDZWxsVHlwZT4gYXV4aWxpYXJ5SGVhcENlbGxUeXBlOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwQ2VsbFR5cGU+IGNlbGxIZWFwQ2VsbFR5cGU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEhlYXBDZWxsVHlwZT4gZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlw
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNTdHJpbmdIZWFwQ2VsbFR5cGU+IHN0cmluZ0hlYXBD
ZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGU+IGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZT4gc2VnbWVudGVkVmFyaWFi
bGVPYmplY3RIZWFwQ2VsbFR5cGU7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHN0ZDo6
dW5pcXVlX3B0cjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKKyNlbmRpZgogICAgIAotICAgIFN1YnNwYWNlIHByaW1p
dGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIFR5cGVkIGFycmF5cywgc3RyaW5ncywgYml0
dmVjdG9ycywgZXRjIGdvIGhlcmUuCi0gICAgU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2U7IC8vIEJ1dHRlcmZsaWVzLCBhcnJheXMgb2YgSlNWYWx1ZXMsIGV0YyBnbyBoZXJl
LgorICAgIENvbXBsZXRlU3Vic3BhY2UgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsg
Ly8gVHlwZWQgYXJyYXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVyZS4KKyAgICBD
b21wbGV0ZVN1YnNwYWNlIGpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBCdXR0ZXJm
bGllcywgYXJyYXlzIG9mIEpTVmFsdWVzLCBldGMgZ28gaGVyZS4KIAogICAgIC8vIFdlIG1ha2Ug
Y3Jvc3MtY3V0dGluZyBhc3N1bXB0aW9ucyBhYm91dCB0eXBlZCBhcnJheXMgYmVpbmcgaW4gdGhl
IHByaW1pdGl2ZSBHaWdhY2FnZSBhbmQgYnV0dGVyZmxpZXMKICAgICAvLyBiZWluZyBpbiB0aGUg
SlNWYWx1ZSBnaWdhY2FnZS4gRm9yIHNvbWUgdHlwZXMsIGl0J3Mgc3VwZXIgb2J2aW91cyB3aGVy
ZSB0aGV5IHNob3VsZCBnbywgYW5kIHNvIHdlCkBAIC0zMDAsNyArMzExLDcgQEAgcHVibGljOgog
ICAgIC8vIGNvbnN0YW50IHNvbWV3aGVyZS4KICAgICAvLyBGSVhNRTogTWF5YmUgaXQgd291bGQg
YmUgYmV0dGVyIGlmIGV2ZXJ5b25lIGFic3RyYWN0ZWQgdGhpcz8KICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjQ4Ci0gICAgQUxXQVlTX0lOTElORSBT
dWJzcGFjZSYgZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShHaWdhY2FnZTo6S2luZCBraW5kKQorICAg
IEFMV0FZU19JTkxJTkUgQ29tcGxldGVTdWJzcGFjZSYgZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShH
aWdhY2FnZTo6S2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAg
ICAgIGNhc2UgR2lnYWNhZ2U6OlByaW1pdGl2ZToKQEAgLTMxNSwxNiArMzI2LDIzIEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgLy8gV2hlbmV2ZXIgcG9zc2libGUsIHVzZSBzdWJzcGFjZUZv
cjxDZWxsVHlwZT4odm0pIHRvIGdldCBvbmUgb2YgdGhlc2Ugc3Vic3BhY2VzLgotICAgIFN1YnNw
YWNlIGNlbGxTcGFjZTsKLSAgICBTdWJzcGFjZSBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7Ci0g
ICAgU3Vic3BhY2UgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlOwotICAgIEpTU3RyaW5nU3Vic3BhY2Ug
c3RyaW5nU3BhY2U7Ci0gICAgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSBkZXN0cnVjdGli
bGVPYmplY3RTcGFjZTsKLSAgICBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIGVhZ2VybHlT
d2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlOwotICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RTdWJzcGFjZSBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlOworICAgIENvbXBsZXRlU3Vi
c3BhY2UgY2VsbFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQ2Vs
bFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2UgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlOworICAg
IENvbXBsZXRlU3Vic3BhY2Ugc3RyaW5nU3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSBkZXN0
cnVjdGlibGVPYmplY3RTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIGVhZ2VybHlTd2VwdERl
c3RydWN0aWJsZU9iamVjdFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2Ugc2VnbWVudGVkVmFy
aWFibGVPYmplY3RTcGFjZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CisgICAgQ29t
cGxldGVTdWJzcGFjZSB3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlOwogI2VuZGlmCisgICAgCisg
ICAgSXNvU3Vic3BhY2UgbmF0aXZlRXhlY3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIGRp
cmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgaW5kaXJlY3RFdmFsRXhl
Y3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOwor
ICAgIElzb1N1YnNwYWNlIG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vi
c3BhY2UgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKIAogICAgIFZNVHlwZSB2bVR5cGU7CiAgICAg
Q2xpZW50RGF0YSogY2xpZW50RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDIyNDkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tT
cGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNw
cAkocmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOjIyNDUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJTdWJz
cGFjZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK3N0cnVj
dCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBK
U0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
ZmluYWw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz46OnZhbHVlLCAiT3RoZXJ3aXNlLCB0aGlzIGNv
ZGUgd291bGQgbm90IGJlIGNvcnJlY3QuIik7CisgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmluZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9Cit9OworCit9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKKworSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1lLCBo
ZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0Nl
bGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6
fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCit7Cit9CisKK3ZvaWQgSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBo
YW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93
aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDE0ICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCIKKyNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgiCiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1
ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDcsMjEgKzQ2
LDIxIEBAIHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQog
Ci1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Iq
IGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0
ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFw
Q2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNE
ZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKLUpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCitKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlz
dCkKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAg
aGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygp
KTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKGZyZWVMaXN0LCBE
ZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6
OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgRGVz
dHJveUZ1bmMoKSh2bSwgY2VsbCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oOjIyNDUzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7
CitwdWJsaWM6CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKKyAgICB2aXJ0dWFsIH5KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hl
YXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDE0ICsyNywxNCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5j
bHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSA6IHB1YmxpYyBT
dWJzcGFjZSB7CitjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlIDogcHVi
bGljIEhlYXBDZWxsVHlwZSB7CiBwdWJsaWM6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1
YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAg
ICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKTsKKyAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCk7CisgICAgdmlydHVhbCB+SlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZSgpOwogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95
KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZS5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw3
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vi
c3BhY2UuaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiTWFy
a2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAotICAg
IHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2s+Ojp2YWx1ZSwgIk90aGVyd2lzZSwgdGhpcyBjb2RlIHdvdWxkIG5vdCBiZSBjb3JyZWN0
LiIpOwotICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbmZvKCktPm1ldGhvZFRhYmxl
LmRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0K
LUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1
YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciog
YWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRl
cyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQotewotfQot
Ci1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6
ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxp
c3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBE
ZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6
OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgRGVzdHJveUZ1bmMoKSh2bSwg
Y2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNDkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oCShub25leGlzdGVudCkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UgOiBwdWJsaWMgU3Vi
c3BhY2UgewotcHVibGljOgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3Ry
aW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgdmlydHVhbCB+
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCk7Ci0gICAgCi0gICAgdm9pZCBmaW5pc2hT
d2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24g
MjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
ZWxsVHlwZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBz
dGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgLy8gV2UgaG9sZCBvbnRvIGEgbG90IG9mIG1lbW9yeSwgc28gaXQgbWFrZXMgYSBsb3Qgb2Yg
c2Vuc2UgdG8gYmUgc3dlcHQgZWFnZXJseS4KICAgICAgICAgcmV0dXJuICZ2bS5lYWdlcmx5U3dl
cHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDkz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI4IEBACisyMDE3LTExLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgR0Mgc2hvdWxkIHN1cHBvcnQgaXNvaGVhcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhh
dmlvci4KKyAgICAgICAgCisgICAgICAgIEFkb3B0aW5nIGNoYW5nZXMgaW4gSlNDIFN1YnNwYWNl
IEFQSS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg6IEFkZGVk
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpvdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6Z2xv
YmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVdyYXBwZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGll
bnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50
RGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oOgorICAg
ICAgICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6Om91dHB1dENvbnN0cmFpbnRTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6Z2xvYmFsT2JqZWN0T3V0cHV0Q29uc3Ry
YWludFNwYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKwogMjAxNy0xMS0xNiAgQW5keSBFc3RlcyAg
PGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW1BheW1lbnQgUmVxdWVzdF0gVXBkYXRlIGZl
YXR1cmUgc3RhdHVzIHRvICJTdXBwb3J0ZWQgSW4gUHJldmlldyIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3By
YWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNl
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBw
ZXIuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMTIgQEAgSlNET01X
aW5kb3cmIEpTRE9NT2JqZWN0Ojpkb21XaW5kb3coKSBjbwogICAgIHJldHVybiAqZG9tV2luZG93
OwogfQogCi1TdWJzcGFjZSogb3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKFZNJiB2bSkKK0Nv
bXBsZXRlU3Vic3BhY2UqIG91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvcihWTSYgdm0pCiB7CiAg
ICAgcmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5v
dXRwdXRDb25zdHJhaW50U3BhY2UoKTsKIH0KIAotU3Vic3BhY2UqIGdsb2JhbE9iamVjdE91dHB1
dENvbnN0cmFpbnRTdWJzcGFjZUZvcihWTSYgdm0pCitDb21wbGV0ZVN1YnNwYWNlKiBnbG9iYWxP
YmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoVk0mIHZtKQogewogICAgIHJldHVybiAm
c3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+Z2xvYmFsT2JqZWN0
T3V0cHV0Q29uc3RyYWludFNwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdyYXBwZXIuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDgg
QEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAKLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3Vic3BhY2Uq
IG91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvcihKU0M6OlZNJik7Ci1XRUJDT1JFX0VYUE9SVCBK
U0M6OlN1YnNwYWNlKiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlND
OjpWTSYpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpDb21wbGV0ZVN1YnNwYWNlKiBvdXRwdXRDb25z
dHJhaW50U3Vic3BhY2VGb3IoSlNDOjpWTSYpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpDb21wbGV0
ZVN1YnNwYWNlKiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlNDOjpW
TSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJbXBsZW1lbnRhdGlvbkNsYXNzPiBjbGFzcyBKU0RP
TVdyYXBwZXIgOiBwdWJsaWMgSlNET01PYmplY3QgewogcHVibGljOgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlz
aW9uIDIyNDkzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVu
dERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8aGVh
cC9NYXJrZWRCbG9ja0lubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5saW5lcy5o
PgogI2luY2x1ZGUgPGhlYXAvVmlzaXRpbmdUaW1lb3V0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
Vk0uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC00NCw4ICs0Niw4IEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZt
KQogICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQogICAgICwgbV9idWlsdGluTmFtZXMoJnZt
KQotICAgICwgbV9vdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRw
dXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0g
ICAgLCBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwg
T2JqZWN0IHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uZmFzdE1hbGxvY0FsbG9j
YXRvci5nZXQoKSkKKyAgICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBw
ZXIgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBt
X2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0
IHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uc2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGll
bnREYXRhLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVKU0NsaWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBw
dWJsaWM6CiAgICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyYgYnVpbHRpbk5hbWVzKCkgeyByZXR1cm4g
bV9idWlsdGluTmFtZXM7IH0KICAgICBKU0J1aWx0aW5GdW5jdGlvbnMmIGJ1aWx0aW5GdW5jdGlv
bnMoKSB7IHJldHVybiBtX2J1aWx0aW5GdW5jdGlvbnM7IH0KICAgICAKLSAgICBKU0M6OlN1YnNw
YWNlJiBvdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBtX291dHB1dENvbnN0cmFpbnRT
cGFjZTsgfQotICAgIEpTQzo6U3Vic3BhY2UmIGdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRT
cGFjZSgpIHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlOyB9Cisg
ICAgSlNDOjpDb21wbGV0ZVN1YnNwYWNlJiBvdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVy
biBtX291dHB1dENvbnN0cmFpbnRTcGFjZTsgfQorICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSYg
Z2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlKCkgeyByZXR1cm4gbV9nbG9iYWxPYmpl
Y3RPdXRwdXRDb25zdHJhaW50U3BhY2U7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgogICAgIHZvaWQgZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZShjb25zdCBGdW5jJiBm
dW5jKQpAQCAtNzYsOCArNzYsOCBAQCBwcml2YXRlOgogICAgIEpTQnVpbHRpbkZ1bmN0aW9ucyBt
X2J1aWx0aW5GdW5jdGlvbnM7CiAgICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyBtX2J1aWx0aW5OYW1l
czsKICAgICAKLSAgICBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UgbV9vdXRwdXRD
b25zdHJhaW50U3BhY2U7Ci0gICAgSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3Bh
Y2UgbV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2U7CisgICAgSlNDOjpDb21wbGV0
ZVN1YnNwYWNlIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlOworICAgIEpTQzo6Q29tcGxldGVTdWJz
cGFjZSBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpA
QCAtMjczNSw3ICsyNzM1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRo
aXMganVzdCBjYWxscyB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3Qg
aGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzLgogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6
U2xvdFZpc2l0b3ImKTtcbiIpOwogICAgICAgICAgICAgbXkgJHN1YnNwYWNlRnVuYyA9IElzRE9N
R2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpID8gImdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRT
dWJzcGFjZUZvciIgOiAib3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yIjsKLSAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0YXRpYyBKU0M6
OlN1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkgeyByZXR1cm4gJHN1YnNwYWNlRnVu
Yyh2bSk7IH1cbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RhdGljIEpTQzo6Q29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3Io
SlNDOjpWTSYgdm0pIHsgcmV0dXJuICRzdWJzcGFjZUZ1bmModm0pOyB9XG4iKTsKICAgICAgICAg
fQogICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327342</attachid>
            <date>2017-11-19 08:10:18 -0800</date>
            <delta_ts>2017-11-19 08:12:55 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>208785</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0OTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzNSBA
QAorMjAxNy0xMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBzdXBwb3J0IGlzb2hlYXBzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZXhwYW5kcyB0aGUgcG93ZXIgb2YgdGhl
IFN1YnNwYWNlIEFQSSBpbiBKU0M6CisgICAgICAgIAorICAgICAgICAtIEV2ZXJ5dGhpbmcgYXNz
b2NpYXRlZCB3aXRoIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIG9iamVjdHMgaXMgbm93IHBhcnQg
b2YgdGhlIEhlYXBDZWxsVHlwZSBjbGFzcy4KKyAgICAgICAgICBXZSBoYXZlIGRpZmZlcmVudCBI
ZWFwQ2VsbFR5cGVzIGZvciBkaWZmZXJlbnQgZGVzdHJ1Y3Rpb24gc3RyYXRlZ2llcy4gQW55IFN1
YnNwYWNlIGNhbiB1c2UgYW55CisgICAgICAgICAgSGVhcENlbGxUeXBlOyB0aGVzZSBhcmUgb3J0
aG9nb25hbCB0aGluZ3MuCisgICAgICAgIAorICAgICAgICAtIFRoZXJlIGFyZSBub3cgdHdvIHZh
cmlhbnRzIG9mIFN1YnNwYWNlOiBDb21wbGV0ZVN1YnNwYWNlLCB3aGljaCBjYW4gYWxsb2NhdGUg
YW55IHNpemUgb2JqZWN0cyB1c2luZworICAgICAgICAgIGFueSBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOyBhbmQgSXNvU3Vic3BhY2UsIHdoaWNoIGNhbiBhbGxvY2F0ZSBqdXN0IG9uZSBzaXplIG9m
IG9iamVjdCBhbmQgdXNlcyBhCisgICAgICAgICAgc3BlY2lhbCB2aXJ0dWFsIG1lbW9yeSBwb29s
IGZvciB0aGF0IHB1cnBvc2UuCisgICAgICAgIAorICAgICAgICBTbyBmYXIsIHRoaXMgcGF0Y2gg
anVzdCBwdXRzIHN1YnR5cGVzIG9mIEV4ZWN1dGFibGVCYXNlIGluIElzb1N1YnNwYWNlcy4gSWYg
aXQgd29ya3MsIHdlIGNhbiB1c2UgaXQKKyAgICAgICAgZm9yIG1vcmUgdGhpbmdzLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9P
YmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6T2JqZWN0QWxs
b2NhdGlvblByb2ZpbGU6OmluaXRpYWxpemVQcm9maWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
QWxsb2NhdGVSYXdPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWFrZVJvcGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWFrZVJvcGUpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdp
dGhTaXplSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9j
YXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2Nh
dG9yRm9yU2l6ZSk6CisgICAgICAgICogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3Ip
OgorICAgICAgICAoSlNDOjpBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpyZWdpc3RlclN1YnNwYWNl
KToKKyAgICAgICAgKiBoZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpT
Qzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6Zmlyc3RBbGxvY2F0b3IgY29uc3QpOgorICAgICAg
ICAqIGhlYXAvQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAv
Q29tcGxldGVTdWJzcGFjZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNw
YWNlOjpDb21wbGV0ZVN1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6
fkNvbXBsZXRlU3Vic3BhY2UpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxv
Y2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZSk6Cisg
ICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbCk6CisgICAg
ICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3cpOgorICAgICAgICAo
SlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3cpOgorICAgICAgICAoSlNDOjpDb21w
bGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3cpOgorICAgICAgICAqIGhlYXAvQ29tcGxldGVT
dWJzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6b2Zmc2V0
T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvclNpemVTdGVwKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6
YWxsb2NhdG9yRm9yTm9uVmlydHVhbCk6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbFR5cGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SGVhcENlbGxUeXBlOjpIZWFwQ2VsbFR5cGUpOgorICAg
ICAgICAoSlNDOjpIZWFwQ2VsbFR5cGU6On5IZWFwQ2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpI
ZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6SGVhcENlbGxUeXBlOjpk
ZXN0cm95KToKKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsVHlwZS5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6SGVhcENlbGxUeXBlOjphdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL0lz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjo6SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik6CisgICAgICAg
IChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6On5Jc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKToKKyAgICAgICAgKEpTQzo6SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGVBbGlnbmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
cjo6ZnJlZUFsaWduZWRNZW1vcnkpOgorICAgICAgICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9Jc29TdWJzcGFjZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UpOgorICAgICAgICAoSlNDOjpJ
c29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFs
bG9jYXRvckZvcik6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKToKKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlKToKKyAgICAgICAg
KEpTQzo6SXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbCk6CisgICAgICAgICogaGVhcC9J
c29TdWJzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6OnNpemUgY29u
c3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6OnNldFN1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjph
bGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZVNsb3dDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjph
bGxvY2F0ZVNsb3dDYXNlSW1wbCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpuZXh0QWxsb2NhdG9ySW5B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjpzZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKToKKyAgICAgICAg
KiBoZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAg
KiBoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjphZGRNYXJrZWRBbGxvY2F0b3IpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoK
KyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OlN1
YnNwYWNlKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmluaXRpYWxpemUpOgorICAgICAgICAo
SlNDOjpTdWJzcGFjZTo6ZmluaXNoU3dlZXApOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2NhdGlvbik6Cisg
ICAgICAgIChKU0M6OlN1YnNwYWNlOjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwpOgorICAgICAgICAo
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmFsbG9jYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OnRyeUFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3cpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdWJzcGFjZTo6YWxsb2NhdGVTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3Vic3Bh
Y2U6OnRyeUFsbG9jYXRlU2xvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpk
aWRBbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TdWJzcGFjZS5oOgorICAgICAg
ICAoSlNDOjpTdWJzcGFjZTo6aGVhcENlbGxUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3Vi
c3BhY2U6Om5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciBjb25zdCk6CisgICAg
ICAgIChKU0M6OlN1YnNwYWNlOjpzZXROZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0
b3IpOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6b2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3Rl
cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNwYWNlOjphbGxvY2F0b3JGb3JTaXplU3Rl
cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNwYWNlOjp0cnlBbGxvY2F0b3JGb3IpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdEFsbG9jYXRlSlNPYmplY3RXaXRoS25vd25TaXplKToKKyAgICAgICAgKEpT
Qzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbCk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmV3X29iamVjdCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJy
YXlSaWdodCk6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwOgorICAgICAg
ICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKToKKyAgICAgICAgKiBydW50
aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OnN1
YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmg6Cisg
ICAgICAgICogcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhl
Y3V0YWJsZUJhc2UuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OnN1YnNwYWNlRm9y
KToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0Fy
Z3VtZW50czxUeXBlPjo6aW5pdE1vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik6CisgICAgICAg
ICogcnVudGltZS9IYXNoTWFwSW1wbC5oOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWRSZXN0cmljdGVkKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5z
aGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAg
ICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0
aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6CisgICAgICAgICogcnVudGltZS9KU0Nl
bGwuaDoKKyAgICAgICAgKEpTQzo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlND
ZWxsSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnN1YnNwYWNlRm9yKToKKyAgICAg
ICAgKEpTQzo6dHJ5QWxsb2NhdGVDZWxsSGVscGVyKToKKyAgICAgICAgKEpTQzo6YWxsb2NhdGVD
ZWxsKToKKyAgICAgICAgKEpTQzo6dHJ5QWxsb2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1l
L0pTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0OjpzdWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwLgorICAgICAgICAoSlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUpOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6
fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpTQzo6SlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmRlc3Ryb3kpOgorICAgICAgICAoSlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFj
ZTo6fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3kpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZS5oLgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdFN1YnNwYWNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9KU0xleGljYWxF
bnZpcm9ubWVudC5oOgorICAgICAgICAoSlNDOjpKU0xleGljYWxFbnZpcm9ubWVudDo6c3Vic3Bh
Y2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oOgor
ICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpzdWJzcGFjZUZvcik6Cisg
ICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNw
cDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcC4KKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxs
VHlwZSk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5
cGU6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpT
Qzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXApOgor
ICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpkZXN0
cm95KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaDog
Q29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmguCisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGlt
ZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6c3Vic3BhY2VGb3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcC4KKyAgICAgICAg
KEpTQzo6SlNTdHJpbmdIZWFwQ2VsbFR5cGU6OkpTU3RyaW5nSGVhcENlbGxUeXBlKToKKyAgICAg
ICAgKEpTQzo6SlNTdHJpbmdIZWFwQ2VsbFR5cGU6On5KU1N0cmluZ0hlYXBDZWxsVHlwZSk6Cisg
ICAgICAgIChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcCk6CisgICAgICAg
IChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNT
dHJpbmdTdWJzcGFjZTo6SlNTdHJpbmdTdWJzcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTU3RyaW5nU3Vic3BhY2U6On5KU1N0cmluZ1N1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXApOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU1N0cmluZ1N1YnNwYWNlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaC4KKyAgICAgICAgKiBydW50aW1lL0pTU3Ry
aW5nU3Vic3BhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdTdWJz
cGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUuaDoKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1h
dGNoZXNBcnJheSk6CisgICAgICAgICogcnVudGltZS9TY29wZWRBcmd1bWVudHMuaDoKKyAgICAg
ICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzOjpzdWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGlt
ZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICAoSlNDOjpWTTo6Z2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSk6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcDogQ29waWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcC4K
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6SlNXZWJB
c3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6On5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxU
eXBlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6
ZmluaXNoU3dlZXApOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1
YnNwYWNlOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrU3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAg
KiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1
YnNwYWNlLmguCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVt
b3J5Lmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNZW1vcnk6OnN1YnNwYWNlRm9yKToK
KwogMjAxNy0xMS0xNiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIGZlYXR1cmUgZGVmaW5lIGZvciBhbHRlcm5hdGl2ZSBwcmVzZW50YXRpb24gYnV0dG9u
IGVsZW1lbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNDkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDcwLDYgKzQ3MCw3IEBAIGhlYXAvQ2VsbENvbnRhaW5lci5jcHAKIGhlYXAvQ29kZUJsb2Nr
U2V0LmNwcAogaGVhcC9Db2xsZWN0aW9uU2NvcGUuY3BwCiBoZWFwL0NvbGxlY3RvclBoYXNlLmNw
cAoraGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAK
IGhlYXAvRGVmZXJHQy5jcHAKIGhlYXAvRGVzdHJ1Y3Rpb25Nb2RlLmNwcApAQCAtNDg2LDEyICs0
ODcsMTUgQEAgaGVhcC9IYW5kbGVTZXQuY3BwCiBoZWFwL0hhbmRsZVN0YWNrLmNwcAogaGVhcC9I
ZWFwLmNwcAogaGVhcC9IZWFwQ2VsbC5jcHAKK2hlYXAvSGVhcENlbGxUeXBlLmNwcAogaGVhcC9I
ZWFwRmluYWxpemVyQ2FsbGJhY2suY3BwCiBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAogaGVhcC9I
ZWFwUHJvZmlsZXIuY3BwCiBoZWFwL0hlYXBTbmFwc2hvdC5jcHAKIGhlYXAvSGVhcFNuYXBzaG90
QnVpbGRlci5jcHAKIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAoraGVhcC9Jc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmNwcAoraGVhcC9Jc29TdWJzcGFjZS5jcHAKIGhlYXAvSklUU3R1YlJv
dXRpbmVTZXQuY3BwCiBoZWFwL0xhcmdlQWxsb2NhdGlvbi5jcHAKIGhlYXAvTWFjaGluZVN0YWNr
TWFya2VyLmNwcApAQCAtNzcyLDcgKzc3Niw3IEBAIHJ1bnRpbWUvSlNDdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbi5jcHAKIHJ1bnRpbWUvSlNEYXRhVmlldy5jcHAKIHJ1bnRpbWUvSlNEYXRhVmll
d1Byb3RvdHlwZS5jcHAKIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHAKLXJ1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZS5jcHAKK3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuY3BwCiBydW50aW1lL0pTRml4ZWRBcnJheS5jcHAKIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHAKIHJ1bnRpbWUvSlNHZW5lcmF0b3JGdW5jdGlvbi5jcHAKQEAgLTgwNywxNCArODExLDE0
IEBAIHJ1bnRpbWUvSlNTY29wZS5jcHAKIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcAogcnVu
dGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVycy5jcHAKIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHAKLXJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
LmNwcAorcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAog
cnVudGltZS9KU1NldC5jcHAKIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKIHJ1bnRpbWUvSlNT
b3VyY2VDb2RlLmNwcAogcnVudGltZS9KU1N0cmluZy5jcHAKIHJ1bnRpbWUvSlNTdHJpbmdJdGVy
YXRvci5jcHAKIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCi1ydW50aW1lL0pTU3RyaW5nU3Vi
c3BhY2UuY3BwCitydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAogcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcAogcnVudGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCiBy
dW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKQEAgLTk3MSw3ICs5NzUsNyBAQCB3
YXNtL2pzL0pTVG9XYXNtLmNwcAogd2FzbS9qcy9KU1RvV2FzbS5oCiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHkuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwCi13YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAKK3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ci5jcHAKIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TGlua0Vycm9yLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcg
QEAKIAkJMEY0QzkxNjYxQzI5RjRGMjAwNDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0QzkxNjUxQzI5RjRGMjAw
NDM0MUE2IC8qIEIzT3JpZ2luRHVtcC5oICovOyB9OwogCQkwRjRERTFDRjFDNEMxQjU0MDA0RDZD
MTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0REUxQ0QxQzRDMUI1NDAwNEQ2QzExIC8qIEFpckZpeE9idmlv
dXNTcGlsbHMuaCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3Rh
dGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLzsgfTsKLQkJMEY0RjgyODgxRTJG
RkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJGRkRE
QjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNEY4Mjg4MUUyRkZE
RTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZG
RERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNEY4MjhD
MUUzMUI5NzYwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyOEEx
RTMxQjk3MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmgg
Ki87IH07CiAJCTBGNTBBRjNDMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTBBRjNCMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLzsg
fTsKIAkJMEY1NTEzQTYxRDVBNjgyQzAwQzMyQkQ4IC8qIEZyZWVMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1MTNBNTFENUE2ODJBMDBDMzJC
RDggLyogRnJlZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNDAwLDggKzQwMCw4IEBACiAJCTBGN0RGMTM1MUUyOTcwREMwMDk1OTUxQiAv
KiBNYXJrZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGN0RGMTMwMUUyOTcwRDUwMDk1OTUxQiAvKiBNYXJrZWRTcGFjZUlubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjdERjEzNzFFMjk3MEUxMDA5NTk1MUIgLyogU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAvKiBT
dWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGN0RGMTM4MUUyOTcwRTQwMDk1OTUxQiAvKiBTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTMzMUUyOTcwRDUw
MDk1OTUxQiAvKiBTdWJzcGFjZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYxM0Ux
RTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIg
LyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBK
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBK
U1N0cmluZ0hlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxU
eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3REYxNDYxRTJCRUY2QTAwOTU5NTFCIC8qIE1hcmtlZEFsbG9jYXRvcklubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTQ1MUUyQkVG
NjgwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3Rjk4OEMxRDk1OTZDODAwRjRGMTJF
IC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oICovOyB9OwogCQkwRjgwMjNFQTE2MTM4MzJC
MDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU0MCw2ICs1
NDAsMTEgQEAKIAkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2Nr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkND
ODE3M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFODE3NDgzMEEyMDA3QjND
MUIgLyogREZHV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovOyB9
OwogCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpTTG9jay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTkxNzQ4OTZD
NzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxs
b2NhdGlvbkZhaWx1cmVNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVN
b2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAx
IC8qIEhlYXBDZWxsVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEy
ODFGQUZBODU5MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkw
MSAvKiBJc29TdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMzIxRkIx
MURBNDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTMwMUZCMTFEOUQwMDZGMzkw
MSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFj
Y2Vzc0RhdGFEdW1wLmggKi87IH07CiAJCTBGREU4N0ZDMURGRTZFNTEwMDY0QzM5MCAvKiBTcGFj
ZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkRFODdGQjFERkU2RTUwMDA2NEMzOTAgLyogU3BhY2VUaW1lTXV0YXRv
clNjaGVkdWxlci5oICovOyB9OwogCQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdE
MTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi87IH07CkBAIC0xMDk5LDcgKzExMDQsNyBA
QAogCQk3OURBRTI3QTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4
MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5REZDQkRCMUQ4OEM1OTYwMDUyN0QwMyAvKiBI
YXNPd25Qcm9wZXJ0eUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OURGQ0JEQTFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNo
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5
RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAw
Mzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3OUY4RkMxRjFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZs
dXNoSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5RjhGQzFEMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNl
cnRpb25QaGFzZS5oICovOyB9OwogCQk3OUZDOEEwODFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVn
aXN0ZXJlZFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlGQzhBMDcxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1
cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
QkM1NDdEMzFCNjk1OUExMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8q
IFdhc21Gb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMjI3MCw4ICsyMjc1LDggQEAKIAkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8q
IEIzT3JpZ2luRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M09yaWdpbkR1bXAuY3BwOyBwYXRoID0gYjMvQjNPcmlnaW5EdW1wLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBE
RkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8q
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0
QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyODkxRTMxQjk3MTAwNzUx
ODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjgyOEExRTMxQjk3
MTAwNzUxODRDIC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2No
ZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTBBRjNCMTkzRThCMzkw
MDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcvREZH
U3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NDEzLDEwICsyNDE4LDEwIEBACiAJCTBGN0RGMTMxMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdWJzcGFjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0RGMTMyMUUyOTcwRDUwMDk1OTUxQiAv
KiBTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWJzcGFjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdERjEzMzFFMjk3MEQ1MDA5NTk1MUIg
LyogU3Vic3BhY2VJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1
YnNwYWNlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjdERjEzOTFF
Mjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0ExRTI5NzEwRTAw
OTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJp
bmdTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0
cmluZ1N1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0Ux
RTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSGVhcENlbGxUeXBlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFC
IC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RyaW5nSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGN0RGMTQ1MUUyQkVGNjgwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZEFsbG9jYXRvcklubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3Rjk4ODkxRDk1OTZDMzAwRjRGMTJFIC8q
IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBERkdTdG9yZUJhcnJp
ZXJDbHVzdGVyaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
U3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjY2LDYg
KzI2NzEsMTUgQEAKIAkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dvcmtsaXN0LmNwcDsg
cGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGREIyQ0U2MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXb3JrbGlzdC5oOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0Mx
QiAvKiBDb25jdXJyZW50SlNMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbmN1cnJlbnRKU0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0Ux
MUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEQ0UxMUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0Ux
MjAxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEy
NzFGQUZBODU5MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb21wbGV0ZVN1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZEQ0UxMjgxRkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29tcGxldGVTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkRDRTEyQjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SXNvU3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkMxRkFG
QjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElzb1N1
YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0UxMkYxRkIxMUQ5
RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjIxNjY2RUVENTAwQzU1RkVGIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHBhdGggPSBkZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
aDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAvKiBDZWxsQ29udGFpbmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENlbGxDb250YWluZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU4MSw4ICszNTk1LDggQEAKIAkJ
NzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzT3duUHJvcGVydHlDYWNoZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFi
bGVFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
YXJpYWJsZUVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlF
RTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA7IHBhdGggPSBqcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1
YnNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5RUZENDgxMUVCQzA0NUMwMEYz
REZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2Vs
bFR5cGUuY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5RUZENDgyMUVCQzA0NUMwMEYzREZF
QSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsg
cGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGlt
YWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc5RjhGQzFEMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25Q
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNYXhpbWFsRmx1c2hJ
bnNlcnRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYw
RSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVk
U3RydWN0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDg2LDYgKzU1MDAs
NyBAQAogCQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmNwcCAqLywKIAkJCQkwRkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0
aW5nU2NvcGUuaCAqLywKKwkJCQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlv
bkZhaWx1cmVNb2RlLmggKi8sCiAJCQkJMEY5NjMwMzUxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9j
YXRvckF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTBGOTYzMDM2MUQ0MTkyQzMwMDU2MDlEOSAvKiBB
bGxvY2F0b3JBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8q
IENlbGxDb250YWluZXIuY3BwICovLApAQCAtNTUwMCw2ICs1NTE1LDggQEAKIAkJCQkwRkE3NjIw
MTFEQjkyNDIzMDBCN0EyRkQgLyogQ29sbGVjdGlvblNjb3BlLmggKi8sCiAJCQkJMEZEMEU1RTUx
RTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmNwcCAqLywKIAkJCQkwRkQwRTVFNjFF
NDNEMzQ3MDAwNkFCMDggLyogQ29sbGVjdG9yUGhhc2UuaCAqLywKKwkJCQkwRkRDRTEyNzFGQUZB
ODU5MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5jcHAgKi8sCisJCQkJMEZEQ0UxMjgxRkFG
QTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1
QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJF
QjU1OUQwMDgzQjEyQiAvKiBDb25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCTBGN0RGMTJGMUUy
OTcwRDUwMDk1OTUxQiAvKiBDb25zdHJhaW50Vm9sYXRpbGl0eS5oICovLApAQCAtNTU1MCw2ICs1
NTY3LDggQEAKIAkJCQlEQzNEMkIwQjFEMzQzNzZFMDBCQTkxOEMgLyogSGVhcENlbGwuY3BwICov
LAogCQkJCURDM0QyQjA5MUQzNDMxNjEwMEJBOTE4QyAvKiBIZWFwQ2VsbC5oICovLAogCQkJCTBG
MDcwQTQ0MUQ1NDNBODkwMDZFNzIzMiAvKiBIZWFwQ2VsbElubGluZXMuaCAqLywKKwkJCQkwRkRD
RTEyMDFGQUU4NTg3MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRkRDRTEx
RjFGQUU4NTg3MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggKi8sCiAJCQkJMEYwQ0FFRkQxRUM0
REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5jcHAgKi8sCiAJCQkJMEYwQ0FF
RkUxRUM0REE4NTAwOTcwRDEyIC8qIEhlYXBGaW5hbGl6ZXJDYWxsYmFjay5oICovLAogCQkJCTBG
MzJCRDBFMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgKi8sCkBAIC01NTY2
LDYgKzU1ODUsMTAgQEAKIAkJCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0aWwu
aCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVy
LmNwcCAqLywKIAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2Vl
cGVyLmggKi8sCisJCQkJMEZEQ0UxMkYxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGRENFMTMwMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCisJCQkJMEZEQ0UxMkMxRkFGQjRERTAwNkYzOTAx
IC8qIElzb1N1YnNwYWNlLmNwcCAqLywKKwkJCQkwRkRDRTEyQjFGQUZCNERFMDA2RjM5MDEgLyog
SXNvU3Vic3BhY2UuaCAqLywKIAkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1
YlJvdXRpbmVTZXQuY3BwICovLAogCQkJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZVNldC5oICovLAogCQkJCTBGMDcwQTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJn
ZUFsbG9jYXRpb24uY3BwICovLApAQCAtNjUwNyw4ICs2NTMwLDggQEAKIAkJCQk5Nzg4RkMyMjE0
NzFBRDBDMDA2OENFMkQgLyogSlNEYXRlTWF0aC5jcHAgKi8sCiAJCQkJOTc4OEZDMjMxNDcxQUQw
QzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguaCAqLywKIAkJCQlDMkE3RjY4NzE2MDQzMkQ0MDBGNzZC
OTggLyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCAqLywKLQkJCQkwRjdERjEzOTFFMjk3MTBFMDA5
NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8sCi0JCQkJMEY3REYx
M0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCAqLywK
KwkJCQkwRjdERjEzOTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuY3BwICovLAorCQkJCTBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovLAogCQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIz
OEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICovLAogCQkJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRG
QiAvKiBKU0ZpeGVkQXJyYXkuY3BwICovLAogCQkJCTc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAv
KiBKU0ZpeGVkQXJyYXkuaCAqLywKQEAgLTY1OTMsOCArNjYxNiw4IEBACiAJCQkJRTM4RDA2MEIx
RjhFODE0MTAwNjQ5Q0YyIC8qIEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmggKi8sCiAJCQkJMEY5
MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICov
LAogCQkJCTBGOTE5RDBGMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmggKi8sCi0JCQkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5jcHAgKi8sCi0JCQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRD
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oICovLAorCQkJCTBGNEY4Mjg1
MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmNwcCAqLywKKwkJCQkwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovLAogCQkJCUE3Mjk5RDlCMTdEMTI4MzcwMDVGNUZG
OSAvKiBKU1NldC5jcHAgKi8sCiAJCQkJQTcyOTlEOUMxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0
LmggKi8sCiAJCQkJQTc5MERENjkxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuY3Bw
ICovLApAQCAtNjYwOSw4ICs2NjMyLDggQEAKIAkJCQk3MEVDMEVCRDFBQTBEN0RBMDBCNkFBRkEg
LyogSlNTdHJpbmdJdGVyYXRvci5oICovLAogCQkJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAv
KiBKU1N0cmluZ0pvaW5lci5jcHAgKi8sCiAJCQkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8q
IEpTU3RyaW5nSm9pbmVyLmggKi8sCi0JCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpT
U3RyaW5nU3Vic3BhY2UuY3BwICovLAotCQkJCTBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBK
U1N0cmluZ1N1YnNwYWNlLmggKi8sCisJCQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpT
U3RyaW5nSGVhcENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIg
LyogSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJMEY5MTlEMEExNTdFRTA5RDAw
NEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLywKIAkJCQk3MEVDQTYwMDFBRkRCRUEy
MDA0NDk3MzkgLyogSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCAqLywKQEAgLTc3ODYsOCArNzgw
OSw4IEBACiAJCQkJQUREMDlBRjMxRjYyNDgyRTAwMTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuaCAq
LywKIAkJCQk1MzgzQUEyRjFFNjVFOEExMDBBNTMyRkMgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5jcHAgKi8sCiAJCQkJQUQ5RTg1MkUxRThBMEM2RTAwOERFMzlFIC8qIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2suaCAqLywKLQkJCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcCAqLywKLQkJCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RG
RUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi8sCisJCQkJNzlFRkQ0ODEx
RUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3Bw
ICovLAorCQkJCTc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlLmggKi8sCiAJCQkJQUQyRkNCQTYxREI1OERBNDAwQjNFNzM2IC8qIEpT
V2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwICovLAogCQkJCUFEMkZDQkE3MURCNThEQTQwMEIz
RTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggKi8sCiAJCQkJNzk2RkI0MzkxREZG
OEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi8sCkBAIC03OTk4LDYgKzgw
MjEsNyBAQAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2Vt
Ymxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFS
TXY3RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQ0UxMzIxRkIxMURBNDAwNkYzOTAx
IC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODMz
NUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0E4QUYzNTE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkM5OUQ1MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5l
dXRlcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODA0OSw2ICs4MDczLDcgQEAK
IAkJCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZEQ0UxMkQxRkFGQjRFNTAwNkYzOTAxIC8qIElzb1N1YnNw
YWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUwQzFCRjAyNzZDMDAxM0M4
OEYgLyogQjNDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzkxOUI3ODAxRTAzNTU5
QzAwNUJFRUQ4IC8qIEIzQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTkwLDYgKzg2MTUs
NyBAQAogCQkJCUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVz
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCNzkxOTUxQzAyNEEyODAwMjQ4MUUyIC8qIEdlbmVy
YXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk3MUMw
MjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZEQ0UxMkExRkFGQTg1RjAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk5MUMwMjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTlEMUMwMjRBNTYwMDI0ODFFMiAv
KiBHZW5lcmF0b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFB
QTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04
NzczLDcgKzg3OTksNyBAQAogCQkJCTk5NkI3MzFDMUJEQTA4REQwMDMzMUI4NCAvKiBKU0RhdGFW
aWV3UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAw
NDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMy
RDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEY3REYxM0MxRTI5NzExMzAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTYx
QUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTND
NjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdC
NEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywK
QEAgLTg4MjYsNiArODg1Miw3IEBACiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8qIEpT
TW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUQ5NzIyNzUyREM1NDQ1OUI5
MTI1QjUzOSAvKiBKU01vZHVsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxOENCQzEx
QjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkRDRTExQzFGQUU2MjA5MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzlEQTRBNzFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1
bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0U4RDFEMUI5MDEzQzMwMDM0NkI1MiAv
KiBKU05hdGl2ZVN0ZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNDBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtODg1MCw3ICs4ODc3
LDcgQEAKIAkJCQlFMzIwMUMxRDFGOEU4MjM2MDA3NkEwMzIgLyogSlNTY3JpcHRGZXRjaFBhcmFt
ZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzBDNEFDMTY4MTAzMDIwMDE3MDExRCAvKiBK
U1NjcmlwdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDExMTU3RjMzMkMw
MDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTcyOTlEOUUxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzkwREQ3MDE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkRGQ0IyQkJFOTBGNDEzNDlFMUIwQkVEIC8qIEpTU291cmNlQ29kZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC04ODYyLDcgKzg4ODksNyBAQAogCQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjkwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTU3RyaW5nUmVmQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjhENEE4
MTc3QjcxQzgwMDA3RkEzQyAvKiBKU1N0cmluZ1JlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGN0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFwQ2Vs
bFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBK
U1N5bWJvbFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVDQTYwNjFBRkRCRUEy
MDA0NDk3MzkgLyogSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
RDVDMzZFQTFGNzVBRDZBMDAwQkNBQUYgLyogSlNUb1dhc20uaCBpbiBIZWFkZXJzICovLApAQCAt
ODg5MCw3ICs4OTE3LDcgQEAKIAkJCQk3MDlGQjg2ODFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFr
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFQjFGNzVBRDczMDAwQkNBQUYgLyogSlNX
ZWJBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ5RTg1MkYxRThBMEM3QzAwOERFMzlF
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAotCQkJCTc5RUZENDg0
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFMzFEQjU4
REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzk2RkI0M0ExREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0JFNTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTkyMjMsNiArOTI1MCw3IEBACiAJCQkJ
MEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkQ0REVDMTk4MzJEQzQwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRENFMTIyMUZBRTg1OEMwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REYwMTk4MzJERDYwMDdENEIxOSAvKiBUeXBl
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRp
czg2LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRp
czg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk1NSw3ICs5NTUsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5l
CiAgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogCiAgICAgICAgICAgICBpZiAoYWxsb2NhdGlu
Z0lubGluZSkgewotICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
dm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1NpemUpOwor
ICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1NpemUsIEFsbG9jYXRpb25GYWls
dXJlTW9kZTo6QXNzZXJ0KTsKIAogICAgICAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBzdWNrIQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmkKICAgICBBU1NFUlQoaW5saW5lQ2FwYWNpdHkgPD0gSlNGaW5hbE9i
amVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKSk7CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5jZWxsU3BhY2UuYWxsb2NhdG9yRm9yKGFsbG9j
YXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmNlbGxTcGFj
ZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OkFzc2VydCk7CiAKICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBleHRyYSBpbmxpbmUg
Y2FwYWNpdHkgYXZhaWxhYmxlIGluIHRoZSBzaXplIGNsYXNzLgogICAgIGlmIChhbGxvY2F0b3Ip
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMzMCw3ICs0MzMw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAg
IFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAg
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5h
bGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxs
b2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpBc3NlcnQpOwogCiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQ
dHIpLCBhbGxvY2F0b3JHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRH
UFIsIGFsbG9jYXRvclB0ciwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
MjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHN0
b3JhZ2VHUFIpOwogICAgIAogICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGlmIChNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNw
YWNlLmFsbG9jYXRvckZvcihzaXplKSkgeworICAgICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KSkg
ewogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHN0b3JhZ2VHUFIsIGFsbG9j
YXRvciwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAK
QEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdP
YmplCiAgICAgfQogCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoaW5saW5lQ2FwYWNpdHkpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxv
Y2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
UHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2Vy
dCk7CiAgICAgaWYgKGFsbG9jYXRvclB0cikgewogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIoYWxsb2NhdG9yUHRyKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tUHRy
KHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwpAQCAtNDI0
OSw3ICs0MjQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5vZAog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBtYXJrZWRBbGxv
Y2F0b3IgPSBzdWJzcGFjZUZvcjxKU1N0cmluZz4oKm1faml0LnZtKCkpLT5hbGxvY2F0b3JGb3Io
c2l6ZW9mKEpTUm9wZVN0cmluZykpOworICAgIE1hcmtlZEFsbG9jYXRvciogbWFya2VkQWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8SlNTdHJpbmc+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9u
VmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3Nl
cnQpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1hcmtlZEFsbG9jYXRvcik7CiAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKG1hcmtlZEFsbG9jYXRvciksIGFsbG9jYXRvckdQUik7CiAgICAgZW1p
dEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgbWFya2VkQWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIs
IFRydXN0ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwpAQCAtODQy
Nyw3ICs4NDI3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAog
ICAgIAogICAgIHNpemVfdCBzaXplID0gaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9m
KEpTVmFsdWUpOwogCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgp
LT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZSk7CisgICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRpb25GYWls
dXJlTW9kZTo6QXNzZXJ0KTsKIAogICAgIGlmICghYWxsb2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRp
b24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC04NDcyLDcg
Kzg0NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAg
c2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogICAgIEFT
U0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0
b3JGb3IobmV3U2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52
bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KG5ld1NpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIAogICAgIGlmICghYWxs
b2NhdG9yIHx8IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5n
SGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNCwxMiArMTI0LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAg
ICBtYWNybyhBcnJheVN0b3JhZ2VfdmVjdG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgXAorICAgIG1hY3JvKENvbXBsZXRlU3Vi
c3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxs
b2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKE1hcmtlZEFsbG9jYXRvciopKSBcCiAgICAgbWFj
cm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2FsRW52aXJv
bm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVvZihXcml0
ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcnMsIEpT
Um9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcnMoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU1N0cmlu
Zz4pKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX292ZXJmbG93U3RvcmFnZSwgU2NvcGVk
QXJndW1lbnRzOjpvdmVyZmxvd1N0b3JhZ2VPZmZzZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkgXAotICAgIG1hY3JvKFN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBTdWJzcGFjZTo6
b2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpLCBzaXplb2YoTWFya2VkQWxsb2NhdG9yKikp
IFwKICAgICBtYWNybyhXcml0ZUJhcnJpZXJCdWZmZXJfYnVmZmVyQ29udGVudHMsIDAsIHNpemVv
ZihKU0NlbGwqKSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnM4LCAwLCBzaXplb2YoTENoYXIpKSBc
CiAgICAgbWFjcm8oY2hhcmFjdGVyczE2LCAwLCBzaXplb2YoVUNoYXIpKSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAy
MjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2OTMsNyArNTY5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShzbG93UGF0aCk7CiAgICAgICAgIAotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4odm0oKSktPmFsbG9jYXRvckZvcihzaXplb2Yo
SlNSb3BlU3RyaW5nKSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vi
c3BhY2VGb3I8SlNSb3BlU3RyaW5nPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXpl
b2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgYWxsb2NhdG9yKTsKICAgICAgICAgCiAgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoCkBAIC05NTI1LDcgKzk1MjUsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpIHx8IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5h
bE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAg
ICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBjZWxsQWxsb2NhdG9yKTsKIAogICAgICAgICAgICAg
ICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKTsKQEAgLTEwNTIxLDcgKzEwNTIxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUo
c2xvd1BhdGgpOwogCiAgICAgICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IHNpemVJblZhbHVlcyAq
IHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2
bSgpLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihzaXplSW5CeXRl
cyk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVJbkJ5dGVzLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIExWYWx1ZSBzdGFydE9mU3Rv
cmFnZSA9IGFsbG9jYXRlSGVhcENlbGwobV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc2xv
d1BhdGgpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5j
aG9yKAogICAgICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVJbkJ5dGVz
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHN0YXJ0T2ZTdG9yYWdlKSk7CkBAIC0xMTY2NSw3
ICsxMTY2NSw3IEBAIHByaXZhdGU6CiAgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KAogICAgICAg
ICBzaXplX3Qgc2l6ZSwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHks
IExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3Ioc2l6
ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xh
c3NUeXBlPih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdChtX291dC5j
b25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOwog
ICAgIH0KICAgICAKQEAgLTExNjgyLDEwICsxMTY4MiwxMCBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgLy8gVHJ5IHRvIGRvIHNvbWUgY29uc3RhbnQtZm9sZGluZyBoZXJlLgogICAgICAg
ICBpZiAoc3Vic3BhY2UtPmhhc0ludFB0cigpICYmIHNpemUtPmhhc0ludFB0cigpKSB7Ci0gICAg
ICAgICAgICBTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8U3Vic3BhY2Uq
PihzdWJzcGFjZS0+YXNJbnRQdHIoKSk7CisgICAgICAgICAgICBDb21wbGV0ZVN1YnNwYWNlKiBh
Y3R1YWxTdWJzcGFjZSA9IGJpdHdpc2VfY2FzdDxDb21wbGV0ZVN1YnNwYWNlKj4oc3Vic3BhY2Ut
PmFzSW50UHRyKCkpOwogICAgICAgICAgICAgc2l6ZV90IGFjdHVhbFNpemUgPSBzaXplLT5hc0lu
dFB0cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFjdHVh
bEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxvY2F0b3JGb3IoYWN0dWFsU2l6ZSk7Cisg
ICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNw
YWNlLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6QXNzZXJ0KTsKICAgICAgICAgICAgIGlmICghYWN0dWFsQWxsb2NhdG9yKSB7CiAgICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsK
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShjb250aW51YXRpb24pOwpAQCAtMTE3MTUsMTEgKzExNzE1LDExIEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cigKICAgICAgICAgICAg
IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICBtX2hlYXBzLlN1YnNwYWNlX2FsbG9j
YXRvckZvclNpemVTdGVwLAorICAgICAgICAgICAgICAgIG1faGVhcHMuQ29tcGxldGVTdWJzcGFj
ZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwKICAgICAgICAgICAgICAgICBzdWJzcGFjZSwgbV9vdXQu
c3ViKHNpemVDbGFzc0luZGV4LCBtX291dC5pbnRQdHJPbmUpKSk7CiAgICAgfQogICAgIAotICAg
IExWYWx1ZSBhbGxvY2F0b3JGb3JTaXplKFN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUs
IExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIExWYWx1ZSBhbGxvY2F0b3JGb3JTaXplKENvbXBs
ZXRlU3Vic3BhY2UmIHN1YnNwYWNlLCBMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
CiAgICAgewogICAgICAgICByZXR1cm4gYWxsb2NhdG9yRm9yU2l6ZShtX291dC5jb25zdEludFB0
cigmc3Vic3BhY2UpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgfQpAQCAtMTE3NDUsNyArMTE3NDUs
NyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpT
RmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS5nZXQoKS0+aW5saW5lQ2FwYWNp
dHkoKSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8
SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVj
dD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0
aGUgYWxsb2NhdG9yIGlzIG51bGwsIHdlIGNvdWxkIHNpbXBseSBlbWl0IGEgbm9ybWFsIEMgY2Fs
bCB0byB0aGUgYWxsb2NhdG9yCiAgICAgICAgIC8vIGluc3RlYWQgb2YgcHV0dGluZyBpdCBvbiB0
aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgogCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgi
CisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKwogbmFtZXNwYWNlIEpTQyB7IAogCiBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOjpBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKQEAgLTM2LDYgKzM5LDQxIEBA
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6On5BbGlnbmVkTWVtb3J5QWwKIHsKIH0KIAordm9pZCBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpyZWdpc3RlckFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLT5uZXh0QWxsb2Nh
dG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOworICAgIAorICAgIGlmICghbV9maXJzdEFs
bG9jYXRvcikgeworICAgICAgICBmb3IgKFN1YnNwYWNlKiBzdWJzcGFjZSA9IG1fZmlyc3RTdWJz
cGFjZTsgc3Vic3BhY2U7IHN1YnNwYWNlID0gc3Vic3BhY2UtPm5leHRTdWJzcGFjZUluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpKQorICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0ZUZpcnN0
QWxsb2NhdG9yKGFsbG9jYXRvcik7CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9sYXN0QWxsb2NhdG9yKTsKKyAgICAgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsK
KyAgICAgICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9sYXN0QWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKGFsbG9jYXRvcik7CisgICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2NhdG9y
OworfQorCisvLyBGSVhNRTogV2UgdXNlIHRoaXMgaWRpb20gYSBsb3QuIFdlIHNob3VsZCBjb21l
IHVwIHdpdGggYSBjbGV2ZXIgdGVtcGxhdGUgZm9yIHRoaXMga2luZCBvZgorLy8gc2luZ2x5LWxp
bmtlZCBsaXN0LCB3aGVyZSBlYWNoIGVsZW1lbnQgbWF5IGJlIG9uIG11bHRpcGxlIGxpc3RzLgor
dm9pZCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpyZWdpc3RlclN1YnNwYWNlKFN1YnNwYWNlKiBz
dWJzcGFjZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghc3Vic3BhY2UtPm5leHRTdWJzcGFjZUlu
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICAKKyAgICBpZiAoIW1fZmlyc3RTdWJzcGFj
ZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9sYXN0U3Vic3BhY2UpOworICAgICAgICBt
X2ZpcnN0U3Vic3BhY2UgPSBzdWJzcGFjZTsKKyAgICAgICAgbV9sYXN0U3Vic3BhY2UgPSBzdWJz
cGFjZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbGFzdFN1YnNwYWNlLT5zZXRO
ZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3Ioc3Vic3BhY2UpOworICAgIG1fbGFz
dFN1YnNwYWNlID0gc3Vic3BhY2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgTWFya2VkQWxsb2NhdG9yOworY2xhc3MgU3Vic3Bh
Y2U7CisKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtNDAsNiArNDMsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBmcmVlQWxp
Z25lZE1lbW9yeSh2b2lkKikgPSAwOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3QgPSAwOworCisgICAgdm9pZCByZWdpc3RlckFsbG9jYXRvcihNYXJrZWRB
bGxvY2F0b3IqKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGZpcnN0QWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdEFsbG9jYXRvcjsgfQorCisgICAgdm9pZCByZWdpc3RlclN1YnNwYWNl
KFN1YnNwYWNlKik7CisKK3ByaXZhdGU6CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX2ZpcnN0QWxs
b2NhdG9yIHsgbnVsbHB0ciB9OworICAgIE1hcmtlZEFsbG9jYXRvciogbV9sYXN0QWxsb2NhdG9y
IHsgbnVsbHB0ciB9OworICAgIFN1YnNwYWNlKiBtX2ZpcnN0U3Vic3BhY2UgeyBudWxscHRyIH07
CisgICAgU3Vic3BhY2UqIG1fbGFzdFN1YnNwYWNlIHsgbnVsbHB0ciB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0aW9u
RmFpbHVyZU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGxvY2F0aW9uRmFpbHVyZU1vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BbGxvY2F0aW9uRmFpbHVyZU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgeworICAgIEFzc2VydCwKKyAgICBSZXR1cm5OdWxsCit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVT
dWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29t
cGxldGVTdWJzcGFjZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk1h
cmtlZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUuaCIK
KyNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0NvbXBs
ZXRlU3Vic3BhY2U6OkNvbXBsZXRlU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBI
ZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcikKKyAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCit7CisgICAgaW5p
dGlhbGl6ZShoZWFwQ2VsbFR5cGUsIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOworICAgIGZvciAo
c2l6ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM7IGktLTspCisgICAgICAgIG1f
YWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOworfQorCitDb21wbGV0ZVN1YnNwYWNl
Ojp+Q29tcGxldGVTdWJzcGFjZSgpCit7Cit9CisKK01hcmtlZEFsbG9jYXRvciogQ29tcGxldGVT
dWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUg
ZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwg
ZmFpbHVyZU1vZGUpOworfQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZShzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwo
c2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cit9CisKK3ZvaWQqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQor
eworICAgIHZvaWQgKnJlc3VsdDsKKyAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCkpCisgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoZGVmZXJyYWxD
b250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBhbGxvY2F0
ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JG
b3JTbG93KHNpemVfdCBzaXplKQoreworICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpz
aXplQ2xhc3NUb0luZGV4KHNpemUpOworICAgIHNpemVfdCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFj
ZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF07CisgICAgaWYgKCFzaXplQ2xhc3MpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIC8vIFRoaXMgaXMgd3JpdHRlbiBpbiBz
dWNoIGEgd2F5IHRoYXQgaXQncyBPSyBmb3IgdGhlIEpJVCB0aHJlYWRzIHRvIGVuZCB1cCBoZXJl
IGlmIHRoZXkgd2FudAorICAgIC8vIHRvIGdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIHNvbWUgYWxs
b2NhdG9yIHRoYXQgaGFkbid0IGJlZW4gdXNlZCB5ZXQuIE5vdGUgdGhhdCBhIHBvc3NpYmx5LQor
ICAgIC8vIGp1c3QtYXMtZ29vZCBzb2x1dGlvbiB3b3VsZCBiZSB0byByZXR1cm4gbnVsbCBpZiB3
ZSdyZSBpbiB0aGUgSklUIHNpbmNlIHRoZSBKSVQgdHJlYXRzIG51bGwKKyAgICAvLyBhbGxvY2F0
b3IgYXMgInBsZWFzZSBhbHdheXMgdGFrZSB0aGUgc2xvdyBwYXRoIi4gQnV0LCB0aGF0IGNvdWxk
IGxlYWQgdG8gcGVyZm9ybWFuY2UKKyAgICAvLyBzdXJwcmlzZXMgYW5kIHRoZSBhbGdvcml0aG0g
aGVyZSBpcyBwcmV0dHkgZWFzeS4gT25seSB0aGlzIGNvZGUgaGFzIHRvIGhvbGQgdGhlIGxvY2ss
IHRvCisgICAgLy8gcHJldmVudCBzaW11bHRhbmVvdXNseSBNYXJrZWRBbGxvY2F0b3IgY3JlYXRp
b25zIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gVGhpcyBjb2RlIGVuc3VyZXMKKyAgICAvLyB0aGF0
IGFueSAiZm9yRWFjaEFsbG9jYXRvciIgdHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxs
b2NhdG9yIGFmdGVyIGl0J3MgaW5pdGlhbGl6ZWQKKyAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2
ZSAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsK
KyAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVT
dGVwW2luZGV4XSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKKworICAgIGlmIChmYWxzZSkK
KyAgICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgbWFya2VkIGFsbG9jYXRvciBmb3IgIiwgbV9uYW1l
LCAiLCAiLCBtX2F0dHJpYnV0ZXMsICIsICIsIHNpemVDbGFzcywgIi5cbiIpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxNYXJrZWRBbGxvY2F0b3I+IHVuaXF1ZUFsbG9jYXRvciA9CisgICAgICAgIHN0
ZDo6bWFrZV91bmlxdWU8TWFya2VkQWxsb2NhdG9yPihtX3NwYWNlLmhlYXAoKSwgc2l6ZUNsYXNz
KTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHVuaXF1ZUFsbG9jYXRvci5nZXQo
KTsKKyAgICBtX2FsbG9jYXRvcnMuYXBwZW5kKFdURk1vdmUodW5pcXVlQWxsb2NhdG9yKSk7Cisg
ICAgYWxsb2NhdG9yLT5zZXRTdWJzcGFjZSh0aGlzKTsKKyAgICBtX3NwYWNlLmFkZE1hcmtlZEFs
bG9jYXRvcihsb2NrZXIsIGFsbG9jYXRvcik7CisgICAgaW5kZXggPSBNYXJrZWRTcGFjZTo6c2l6
ZUNsYXNzVG9JbmRleChzaXplQ2xhc3MpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKE1h
cmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XSAhPSBzaXplQ2xhc3MpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4
XSA9IGFsbG9jYXRvcjsKKyAgICAgICAgCisgICAgICAgIGlmICghaW5kZXgtLSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBhbGxvY2F0b3ItPnNldE5leHRBbGxvY2F0b3JJblN1YnNw
YWNlKG1fZmlyc3RBbGxvY2F0b3IpOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVn
aXN0ZXJBbGxvY2F0b3IoYWxsb2NhdG9yKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CisgICAgcmV0dXJuIGFsbG9jYXRvcjsK
K30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVTbG93KHNpemVfdCBzaXplLCBH
Q0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUg
ZmFpbHVyZU1vZGUpCit7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KHNpemUs
IGRlZmVycmFsQ29udGV4dCk7CisgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWls
dXJlTW9kZTo6QXNzZXJ0KQorICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xv
dyhzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3sKKyAg
ICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOworICAgIAorICAgIGlm
IChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXplLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9j
YXRlKGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsK
KyAgICAKKyAgICBpZiAoc2l6ZSA8PSBPcHRpb25zOjpsYXJnZUFsbG9jYXRpb25DdXRvZmYoKQor
ICAgICAgICAmJiBzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgeworICAgICAgICBk
YXRhTG9nKCJGQVRBTDogYXR0YW1wdGluZyB0byBhbGxvY2F0ZSBzbWFsbCBvYmplY3QgdXNpbmcg
bGFyZ2UgYWxsb2NhdGlvbi5cbiIpOworICAgICAgICBkYXRhTG9nKCJSZXF1ZXN0ZWQgYWxsb2Nh
dGlvbiBzaXplOiAiLCBzaXplLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgbV9zcGFjZS5oZWFwKCktPmNvbGxlY3RJZk5lY2Vz
c2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKKyAgICAKKyAgICBzaXplID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3RlcD4oc2l6ZSk7CisgICAgTGFyZ2VB
bGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3Bh
Y2UubV9oZWFwLCBzaXplLCB0aGlzKTsKKyAgICBpZiAoIWFsbG9jYXRpb24pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVu
ZChhbGxvY2F0aW9uKTsKKyAgICBtX3NwYWNlLm1faGVhcC0+ZGlkQWxsb2NhdGUoc2l6ZSk7Cisg
ICAgbV9zcGFjZS5tX2NhcGFjaXR5ICs9IHNpemU7CisgICAgCisgICAgbV9sYXJnZUFsbG9jYXRp
b25zLmFwcGVuZChhbGxvY2F0aW9uKTsKKyAgICAgICAgCisgICAgcmV0dXJuIGFsbG9jYXRpb24t
PmNlbGwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdWJzcGFjZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQ29tcGxldGVTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Citw
dWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGxldGVTdWJzcGFjZShDU3RyaW5nIG5h
bWUsIEhlYXAmLCBIZWFwQ2VsbFR5cGUqLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBsZXRlU3Vic3BhY2UoKTsKKworICAgIC8vIEluIHNvbWUg
Y29kZSBwYXRocywgd2UgbmVlZCBpdCB0byBiZSBhIGNvbXBpbGUgZXJyb3IgdG8gY2FsbCB0aGUg
dmlydHVhbCB2ZXJzaW9uIG9mIG9uZSBvZgorICAgIC8vIHRoZXNlIGZ1bmN0aW9ucy4gVGhhdCdz
IHdoeSB3ZSBkbyBmaW5hbCBtZXRob2RzIHRoZSBvbGQgc2Nob29sIHdheS4KKyAgICAKKyAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSkgb3ZlcnJpZGU7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
KHNpemVfdCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICAKKyAgICB2b2lkKiBhbGxvY2F0
ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBvdmVy
cmlkZTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6
ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKENvbXBsZXRlU3Vic3BhY2UsIG1fYWxsb2NhdG9yRm9yU2l6ZVN0
ZXApOyB9CisgICAgCisgICAgTWFya2VkQWxsb2NhdG9yKiogYWxsb2NhdG9yRm9yU2l6ZVN0ZXAo
KSB7IHJldHVybiAmbV9hbGxvY2F0b3JGb3JTaXplU3RlcFswXTsgfQorCitwcml2YXRlOgorICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOworICAgIAorICAgIC8v
IFRoZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFu
ZCBhbGxvY2F0b3IgY3JlYXRpb24uCisgICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIHRyeUFs
bG9jYXRlU2xvdyhzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7CisgICAgCisgICAgc3RkOjph
cnJheTxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxs
b2NhdG9yRm9yU2l6ZVN0ZXA7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNYXJrZWRBbGxv
Y2F0b3I+PiBtX2FsbG9jYXRvcnM7Cit9OworCitBTFdBWVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRv
ciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIGlmIChzaXplIDw9IE1h
cmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgeworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIHJlc3Vs
dCA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgo
c2l6ZSldOworICAgICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsIHx8IHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIHJldHVybiBhbGxvY2F0b3JGb3JTbG93KHNpemUpOworICAgIH0KKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgorCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworLy8gV3JpdGluZyBpdCB0aGlzIHdheSBlbnN1
cmVzIHRoYXQgd2hlbiB5b3UgcGFzcyB0aGlzIGFzIGEgZnVuY3RvciwgdGhlIGNhbGxlZSBpcyBz
cGVjaWFsaXplZCBmb3IKKy8vIHRoaXMgY2FsbGJhY2suIElmIHlvdSB3cm90ZSB0aGlzIGFzIGEg
bm9ybWFsIGZ1bmN0aW9uIHRoZW4gdGhlIGNhbGxlZSB3b3VsZCBiZSBzcGVjaWFsaXplZCBmb3IK
Ky8vIHRoZSBmdW5jdGlvbidzIHR5cGUgYW5kIGl0IHdvdWxkIGhhdmUgaW5kaXJlY3QgY2FsbHMg
dG8gdGhhdCBmdW5jdGlvbi4gQW5kIHVubGlrZSBhIGxhbWJkYSwgaXQncworLy8gcG9zc2libGUg
dG8gbWFyayB0aGlzIEFMV0FZU19JTkxJTkUuCitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiB2bSwgSlNDZWxsKiBjZWxsKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGNlbGwtPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBBU1NF
UlQoY2VsbC0+aW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKTsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCk7CisgICAg
ICAgIE1ldGhvZFRhYmxlOjpEZXN0cm95RnVuY3Rpb25QdHIgZGVzdHJveSA9IGNsYXNzSW5mby0+
bWV0aG9kVGFibGUuZGVzdHJveTsKKyAgICAgICAgZGVzdHJveShjZWxsKTsKKyAgICB9Cit9Owor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSGVhcENlbGxUeXBlOjpIZWFwQ2VsbFR5cGUo
QWxsb2NhdG9yQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogbV9hdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpCit7Cit9CisKK0hlYXBDZWxsVHlwZTo6fkhlYXBDZWxsVHlwZSgpCit7Cit9CisKK3Zv
aWQgSGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9jaywg
RnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAgIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ0hlYXBD
ZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Cit9CisKK3ZvaWQgSGVhcENlbGxUeXBl
OjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIERlc3Ryb3lGdW5jKCkodm0s
IGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBIZWFwQ2VsbFR5cGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXBDZWxs
VHlwZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgfkhlYXBDZWxsVHlwZSgpOworCisgICAgY29uc3QgQWxsb2Nh
dG9yQXR0cmlidXRlcyYgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsg
fQorCisgICAgLy8gVGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyB0aGlzIGlzIHRvIHNwZWNpYWxp
emUgdGhlIHN3ZWVwIGZvciB5b3VyIGRlc3RydWN0b3JzLiBUaGlzIHdvbid0CisgICAgLy8gYmUg
Y2FsbGVkIGZvciBuby1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhpcyBtdXN0IGNhbGwgTWFya2VkQmxv
Y2s6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlLgorICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hT
d2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKKworICAgIC8vIFRoZXNlIGdl
dCBjYWxsZWQgZm9yIGxhcmdlIG9iamVjdHMuCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koVk0m
LCBKU0NlbGwqKTsKKworcHJpdmF0ZToKKyAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmli
dXRlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpJc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKCkKK3sKK30KKworSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6fklzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKQoreworfQorCit2b2lkKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp0
cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7
CisgICAgLy8gU2luY2UgdGhpcyBpcyBkZXNpZ25lZCBzcGVjaWFsbHkgZm9yIElzb1N1YnNwYWNl
LCB3ZSBrbm93IHRoYXQgd2Ugd2lsbCBvbmx5IGJlIGFza2VkIHRvCisgICAgLy8gYWxsb2NhdGUg
TWFya2VkQmxvY2tzLgorICAgIFJFTEVBU0VfQVNTRVJUKGFsaWdubWVudCA9PSBNYXJrZWRCbG9j
azo6YmxvY2tTaXplKTsKKyAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IE1hcmtlZEJsb2NrOjpi
bG9ja1NpemUpOworICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAg
ICAKKyAgICBtX2ZpcnN0VW5jb21taXR0ZWQgPSBtX2NvbW1pdHRlZC5maW5kQml0KG1fZmlyc3RV
bmNvbW1pdHRlZCwgZmFsc2UpOworICAgIGlmIChtX2ZpcnN0VW5jb21taXR0ZWQgPCBtX2Jsb2Nr
cy5zaXplKCkpIHsKKyAgICAgICAgbV9jb21taXR0ZWRbbV9maXJzdFVuY29tbWl0dGVkXSA9IHRy
dWU7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1fYmxvY2tzW21fZmlyc3RVbmNvbW1pdHRlZF07
CisgICAgICAgIE9TQWxsb2NhdG9yOjpjb21taXQocmVzdWx0LCBNYXJrZWRCbG9jazo6YmxvY2tT
aXplLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQqIHJlc3VsdCA9IGZhc3RBbGlnbmVkTWFsbG9jKE1hcmtlZEJsb2NrOjpibG9ja1Np
emUsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9ibG9j
a3Muc2l6ZSgpOworICAgIG1fYmxvY2tzLmFwcGVuZChyZXN1bHQpOworICAgIG1fYmxvY2tJbmRp
Y2VzLmFkZChyZXN1bHQsIGluZGV4KTsKKyAgICBpZiAobV9ibG9ja3MuY2FwYWNpdHkoKSAhPSBt
X2NvbW1pdHRlZC5zaXplKCkpCisgICAgICAgIG1fY29tbWl0dGVkLnJlc2l6ZShtX2Jsb2Nrcy5j
YXBhY2l0eSgpKTsKKyAgICBtX2NvbW1pdHRlZFtpbmRleF0gPSB0cnVlOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZnJlZUFsaWduZWRN
ZW1vcnkodm9pZCogYmFzZVB0cikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CisgICAgCisgICAgYXV0byBpdGVyID0gbV9ibG9ja0luZGljZXMuZmluZChiYXNlUHRyKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChpdGVyICE9IG1fYmxvY2tJbmRpY2VzLmVuZCgpKTsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IGl0ZXItPnZhbHVlOworICAgIG1fY29tbWl0dGVkW2luZGV4XSA9IGZh
bHNlOworICAgIG1fZmlyc3RVbmNvbW1pdHRlZCA9IHN0ZDo6bWluKGluZGV4LCBtX2ZpcnN0VW5j
b21taXR0ZWQpOworICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdChiYXNlUHRyLCBNYXJrZWRCbG9j
azo6YmxvY2tTaXplKTsKK30KKwordm9pZCBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJJc28oIiwgUmF3UG9p
bnRlcih0aGlzKSwgIikiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIDogcHVibGljIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IgeworcHVibGljOgorICAgIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsK
KyAgICB+SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOworCisgICAgdm9pZCogdHJ5QWxsb2Nh
dGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSBvdmVycmlkZTsK
KyAgICB2b2lkIGZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSBvdmVycmlkZTsKKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIExvY2sg
bV9sb2NrOworICAgIFZlY3Rvcjx2b2lkKj4gbV9ibG9ja3M7CisgICAgSGFzaE1hcDx2b2lkKiwg
dW5zaWduZWQ+IG1fYmxvY2tJbmRpY2VzOworICAgIEZhc3RCaXRWZWN0b3IgbV9jb21taXR0ZWQ7
CisgICAgdW5zaWduZWQgbV9maXJzdFVuY29tbWl0dGVkIHsgMCB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vi
c3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIklzb1N1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJJc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yLmgiCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworSXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVh
cCwgSGVhcENlbGxUeXBlKiBoZWFwQ2VsbFR5cGUsIHNpemVfdCBzaXplKQorICAgIDogU3Vic3Bh
Y2UobmFtZSwgaGVhcCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9hbGxvY2F0b3IoJmhl
YXAsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUp
KQorICAgICwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8SXNv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKK3sKKyAgICBpbml0aWFsaXplKGhlYXBDZWxsVHlw
ZSwgbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmdldCgpKTsKKworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2NrKCkpOworICAgIG1fYWxsb2NhdG9yLnNl
dFN1YnNwYWNlKHRoaXMpOworICAgIG1fc3BhY2UuYWRkTWFya2VkQWxsb2NhdG9yKGxvY2tlciwg
Jm1fYWxsb2NhdG9yKTsKKyAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVyQWxs
b2NhdG9yKCZtX2FsbG9jYXRvcik7CisgICAgbV9maXJzdEFsbG9jYXRvciA9ICZtX2FsbG9jYXRv
cjsKK30KKworSXNvU3Vic3BhY2U6On5Jc29TdWJzcGFjZSgpCit7Cit9CisKK01hcmtlZEFsbG9j
YXRvciogSXNvU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemUsIGZhaWx1cmVNb2RlKTsKK30KKworTWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKKyAgICBy
ZXR1cm4gJm1fYWxsb2NhdG9yOworfQorCit2b2lkKiBJc29TdWJzcGFjZTo6YWxsb2NhdGUoc2l6
ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFs
KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworfQorCit2b2lkKiBJc29TdWJz
cGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCog
ZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSB0aGlzLT5zaXplKCkpOworICAgIHZvaWQqIHJlc3Vs
dCA9IG1fYWxsb2NhdG9yLmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisjaW5jbHVk
ZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIElzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3I7CisKK2NsYXNzIElzb1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1
YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhl
YXAmLCBIZWFwQ2VsbFR5cGUqLCBzaXplX3Qgc2l6ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
fklzb1N1YnNwYWNlKCk7CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorCisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKworICAg
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRl
Tm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKKworcHJpdmF0ZToKKyAgICBz
aXplX3QgbV9zaXplOworICAgIE1hcmtlZEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOworfTsKKworI2RlZmluZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBoZWFwQ2Vs
bFR5cGUsIHR5cGUpICgiSXNvbGF0ZWQgIiAjdHlwZSAiIFNwYWNlIiwgKGhlYXApLCAoaGVhcENl
bGxUeXBlKSwgc2l6ZW9mKHR5cGUpKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lv
biAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNyArNDEsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFkZURlc3RydWN0b3JCbG9ja3MgPSB0cnVlOwogCi1N
YXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBTdWJzcGFjZSogc3Vi
c3BhY2UsIHNpemVfdCBjZWxsU2l6ZSkKK01hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9y
KEhlYXAqIGhlYXAsIHNpemVfdCBjZWxsU2l6ZSkKICAgICA6IG1fZnJlZUxpc3QoY2VsbFNpemUp
CiAgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKICAg
ICAsIG1fY2VsbFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXplKSkKLSAgICAsIG1f
YXR0cmlidXRlcyhzdWJzcGFjZS0+YXR0cmlidXRlcygpKQogICAgICwgbV9oZWFwKGhlYXApCi0g
ICAgLCBtX3N1YnNwYWNlKHN1YnNwYWNlKQogewogfQogCit2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
c2V0U3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQoreworICAgIG1fYXR0cmlidXRlcyA9IHN1
YnNwYWNlLT5hdHRyaWJ1dGVzKCk7CisgICAgbV9zdWJzcGFjZSA9IHN1YnNwYWNlOworfQorCiBi
b29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCiB7CiAgICAg
dW5zaWduZWQgaXRlcnNTaW5jZUxhc3RUaW1lQ2hlY2sgPSAwOwpAQCAtMTc1LDE5ICsxNzksNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkb1RlCiAgICAgICAgIGFsbG9j
YXRpb25Db3VudCA9IDA7CiB9CiAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93
Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQotewotICAgIGJvb2wgY3Jh
c2hPbkZhaWx1cmUgPSB0cnVlOwotICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChkZWZl
cnJhbENvbnRleHQsIGNyYXNoT25GYWlsdXJlKTsKLX0KLQotdm9pZCogTWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQp
Ci17Ci0gICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IGZhbHNlOwotICAgIHJldHVybiBhbGxvY2F0
ZVNsb3dDYXNlSW1wbChkZWZlcnJhbENvbnRleHQsIGNyYXNoT25GYWlsdXJlKTsKLX0KLQotdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0RlZmVycmFsQ29udGV4
dCogZGVmZXJyYWxDb250ZXh0LCBib29sIGNyYXNoT25GYWlsdXJlKQordm9pZCogTWFya2VkQWxs
b2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgQVNTRVJUKG1faGVhcC0+dm0o
KS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CkBAIC0yMDQsMTEgKzE5Niw4IEBA
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUkKICAgICAKICAgICAvLyBH
b29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBub3cgdGhpcyBh
bGxvY2F0b3IgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKICAgICAvLyBoYXBwZW5zIHdo
ZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNrIGludG8gdGhl
IEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpIHsK
LSAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKQotICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KGRlZmVycmFsQ29udGV4dCk7Ci0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZShkZWZlcnJhbENv
bnRleHQpOwotICAgIH0KKyAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKQorICAgICAg
ICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgCiAg
ICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIApA
QCAtMjE3LDcgKzIwNiw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2Fz
ZUkKICAgICAKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IHRyeUFsbG9jYXRlQmxv
Y2soKTsKICAgICBpZiAoIWJsb2NrKSB7Ci0gICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKKyAg
ICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KQog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUuaCIKICNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRnJl
ZUxpc3QuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgpAQCAtNjcsMTMgKzY4LDE3IEBAIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjIxMjEKIAogY2xhc3MgTWFya2VkQWxsb2NhdG9yIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShNYXJrZWRBbGxvY2F0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIAogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAK
IHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnJlZUxpc3QoKTsKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKIAotICAgIE1hcmtlZEFsbG9jYXRv
cihIZWFwKiwgU3Vic3BhY2UqLCBzaXplX3QgY2VsbFNpemUpOworICAgIE1hcmtlZEFsbG9jYXRv
cihIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICB2b2lkIHNldFN1YnNwYWNlKFN1YnNwYWNl
Kik7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIHZvaWQgcHJlcGFyZUZv
ckFsbG9jYXRpb24oKTsKICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7CkBAIC05MCw4ICs5NSw3
IEBAIHB1YmxpYzoKICAgICBib29sIG5lZWRzRGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbjsgfQogICAgIERlc3Ry
dWN0aW9uTW9kZSBkZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0
cnVjdGlvbjsgfQogICAgIEhlYXBDZWxsOjpLaW5kIGNlbGxLaW5kKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGVzLmNlbGxLaW5kOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENv
bnRleHQqID0gbnVsbHB0cik7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRl
eHQqID0gbnVsbHB0cik7CisgICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7
IH0KIAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0
OwpAQCAtMTM2LDkgKzE0MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFya2VkQWxsb2NhdG9y
KiBuZXh0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9yOyB9CiAgICAg
TWFya2VkQWxsb2NhdG9yKiBuZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2U7IH0KKyAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRB
bGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRB
bGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KICAgICAKICAgICB2b2lkIHNldE5l
eHRBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9y
ID0gYWxsb2NhdG9yOyB9CiAgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5TdWJzcGFjZShNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlID0gYWxs
b2NhdG9yOyB9CisgICAgdm9pZCBzZXROZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvckluQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciA9IGFsbG9jYXRvcjsgfQogICAgIAogICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpOwogICAgIApAQCAtMTU1LDkgKzE2MSw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAgIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENv
bnRleHQqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVNsb3dDYXNl
KEdDRGVmZXJyYWxDb250ZXh0Kik7Ci0gICAgdm9pZCogYWxsb2NhdGVTbG93Q2FzZUltcGwoR0NE
ZWZlcnJhbENvbnRleHQqLCBib29sIGNyYXNoT25GYWlsdXJlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgp
OwogICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKICAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7CkBAIC0xOTIsMTAgKzE5NiwxMSBAQCBw
cml2YXRlOgogICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwogICAgIC8vIEZJ
WE1FOiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIHJlZmVyZW5jZXMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OAotICAgIEhlYXAq
IG1faGVhcDsKLSAgICBTdWJzcGFjZSogbV9zdWJzcGFjZTsKKyAgICBIZWFwKiBtX2hlYXAgeyBu
dWxscHRyIH07CisgICAgU3Vic3BhY2UqIG1fc3Vic3BhY2UgeyBudWxscHRyIH07CiAgICAgTWFy
a2VkQWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3IgeyBudWxscHRyIH07CiAgICAgTWFya2VkQWxs
b2NhdG9yKiBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlIHsgbnVsbHB0ciB9OworICAgIE1hcmtl
ZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVs
bHB0ciB9OwogfTsKIAogaW5saW5lIHB0cmRpZmZfdCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwyMSArMzUsMTIgQEAgaW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc0ZyZWVMaXN0
ZQogICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+
KHRhcmdldCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAg
cmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCiAgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCog
ewogICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKGhlYXAoKS0+dm0oKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPih0cnlBbGxvY2F0ZVNsb3dDYXNlKGRl
ZmVycmFsQ29udGV4dCkpOwotICAgICAgICB9KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQpCi17Ci0gICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCi0gICAgICAgIFsmXSAoKSAt
PiBIZWFwQ2VsbCogewotICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKGhlYXAoKS0+dm0o
KSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNs
b3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2Rl
KSk7CiAgICAgICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIHRvIGJlIGNhbGxlZCBieSBTdWJzcGFj
ZS4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAgICAgIHZvaWQg
ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJlZUxpc3QqLCBjb25zdCBEZXN0cm95RnVuYyYp
OworICAgICAgICB2b2lkIGZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShGcmVlTGlzdCos
IGNvbnN0IERlc3Ryb3lGdW5jJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHVuc3dlZXBXaXRo
Tm9OZXdseUFsbG9jYXRlZCgpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lh
bGl6ZWRTd2UKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci12b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiBmcmVl
TGlzdCwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQordm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoRnJlZUxpc3QqIGZyZWVMaXN0
LCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCiB7CiAgICAgU3dlZXBNb2RlIHN3ZWVw
TW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0IDogU3dlZXBPbmx5OwogICAgIFN3ZWVw
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSA9IHRoaXMtPnN3ZWVwRGVzdHJ1Y3Rpb25N
b2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
CShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw5ICsxMzIsMTAgQEAgY29uc3QgVmVjdG9y
PHNpemVfdD4mIHNpemVDbGFzc2VzKCkKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8g
TWFudWFsbHkgaW5qZWN0IHNpemUgY2xhc3NlcyBmb3Igb2JqZWN0cyB3ZSBrbm93IHdpbGwgYmUg
YWxsb2NhdGVkIGluIGhpZ2ggdm9sdW1lLgorICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBvZiB0
aGVzZSB0aGluZ3Mgc2hvdWxkIGhhdmUgSXNvU3Vic3BhY2VzLgorICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTg3NgogICAgICAgICAgICAg
YWRkKHNpemVvZihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSkpOwogICAgICAgICAgICAgYWRk
KHNpemVvZihVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBhZGQoc2l6
ZW9mKEZ1bmN0aW9uRXhlY3V0YWJsZSkpOwogICAgICAgICAgICAgYWRkKHNpemVvZihGdW5jdGlv
bkNvZGVCbG9jaykpOwogICAgICAgICAgICAgYWRkKHNpemVvZihKU1N0cmluZykpOwogICAgICAg
ICAgICAgYWRkKHNpemVvZihKU0Z1bmN0aW9uKSk7CkBAIC01NTEsMTAgKzU1Miw4IEBAIHZvaWQg
TWFya2VkU3BhY2U6OmR1bXBCaXRzKFByaW50U3RyZWFtJiAKICAgICAgICAgfSk7CiB9CiAKLU1h
cmtlZEFsbG9jYXRvciogTWFya2VkU3BhY2U6OmFkZE1hcmtlZEFsbG9jYXRvcigKLSAgICBjb25z
dCBBYnN0cmFjdExvY2tlciYsIFN1YnNwYWNlKiBzdWJzcGFjZSwgc2l6ZV90IHNpemVDbGFzcykK
K3ZvaWQgTWFya2VkU3BhY2U6OmFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tl
ciYsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQogewotICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gbV9iYWdPZkFsbG9jYXRvcnMuYWRkKGhlYXAoKSwgc3Vic3BhY2UsIHNpemVD
bGFzcyk7CiAgICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9yKG51bGxwdHIpOwogICAgIAog
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CkBAIC01NjIsMTQgKzU2MSwxMCBAQCBNYXJrZWRB
bGxvY2F0b3IqIE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBCiAgICAgaWYgKCFtX2ZpcnN0QWxsb2Nh
dG9yKSB7CiAgICAgICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7CiAgICAgICAgIG1f
bGFzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICAgICAgZm9yIChTdWJzcGFjZSogc3Vic3Bh
Y2UgOiBtX3N1YnNwYWNlcykKLSAgICAgICAgICAgIHN1YnNwYWNlLT5kaWRDcmVhdGVGaXJzdEFs
bG9jYXRvcihhbGxvY2F0b3IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbGFzdEFsbG9jYXRv
ci0+c2V0TmV4dEFsbG9jYXRvcihhbGxvY2F0b3IpOwogICAgICAgICBtX2xhc3RBbGxvY2F0b3Ig
PSBhbGxvY2F0b3I7CiAgICAgfQotICAgIAotICAgIHJldHVybiBhbGxvY2F0b3I7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogY2xhc3MgSGVhcDsKIGNsYXNzIEhl
YXBJdGVyYXRpb25TY29wZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTE1OCw3
ICsxNTksNyBAQCBwdWJsaWM6CiAgICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RBbGxvY2F0b3I7IH0KICAgICAKICAgICBMb2NrJiBhbGxv
Y2F0b3JMb2NrKCkgeyByZXR1cm4gbV9hbGxvY2F0b3JMb2NrOyB9Ci0gICAgTWFya2VkQWxsb2Nh
dG9yKiBhZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTdWJzcGFjZSos
IHNpemVfdCBjZWxsU2l6ZSk7CisgICAgdm9pZCBhZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBNYXJrZWRBbGxvY2F0b3IqKTsKICAgICAKICAgICAvLyBXaGVuIHRoaXMg
aXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBo
YXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVy
biBtX2lzTWFya2luZzsgfQpAQCAtMTY4LDE0ICsxNjksMTIgQEAgcHVibGljOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNpemVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNf
c2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBD
b21wbGV0ZVN1YnNwYWNlOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3MgV2Vha1NldDsKICAgICBm
cmllbmQgY2xhc3MgU3Vic3BhY2U7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KFN1YnNw
YWNlJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRl
U2xvdyhTdWJzcGFjZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLQogICAgIC8vIFVz
ZSB0aGlzIHZlcnNpb24gd2hlbiBjYWxsaW5nIGZyb20gd2l0aGluIHRoZSBHQyB3aGVyZSB3ZSBr
bm93IHRoYXQgdGhlIGFsbG9jYXRvcnMKICAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVk
LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNv
bnN0IEZ1bmN0b3ImKTsKQEAgLTIxMCw3ICsyMDksNiBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVs
TGlua2VkTGlzdDxXZWFrU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxXZWFrU2V0Pj4gbV9uZXdB
Y3RpdmVXZWFrU2V0czsKIAogICAgIExvY2sgbV9hbGxvY2F0b3JMb2NrOwotICAgIEJhZzxNYXJr
ZWRBbGxvY2F0b3I+IG1fYmFnT2ZBbGxvY2F0b3JzOwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9m
aXJzdEFsbG9jYXRvciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFzdEFs
bG9jYXRvciB7IG51bGxwdHIgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKIAorI2luY2x1ZGUgIkFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgpAQCAtMzQsNDUgKzM2LDIzIEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1uYW1lc3BhY2UgewotCi0vLyBXcml0aW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMg
dGhhdCB3aGVuIHlvdSBwYXNzIHRoaXMgYXMgYSBmdW5jdG9yLCB0aGUgY2FsbGVlIGlzIHNwZWNp
YWxpemVkIGZvcgotLy8gdGhpcyBjYWxsYmFjay4gSWYgeW91IHdyb3RlIHRoaXMgYXMgYSBub3Jt
YWwgZnVuY3Rpb24gdGhlbiB0aGUgY2FsbGVlIHdvdWxkIGJlIHNwZWNpYWxpemVkIGZvcgotLy8g
dGhlIGZ1bmN0aW9uJ3MgdHlwZSBhbmQgaXQgd291bGQgaGF2ZSBpbmRpcmVjdCBjYWxscyB0byB0
aGF0IGZ1bmN0aW9uLiBBbmQgdW5saWtlIGEgbGFtYmRhLCBpdCdzCi0vLyBwb3NzaWJsZSB0byBt
YXJrIHRoaXMgQUxXQVlTX0lOTElORS4KLXN0cnVjdCBEZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlT
X0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoY2VsbC0+c3RydWN0dXJlSUQoKSk7Ci0gICAgICAgIEFTU0VSVChj
ZWxsLT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpOwotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKLSAgICAgICAg
TWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRo
b2RUYWJsZS5kZXN0cm95OwotICAgICAgICBkZXN0cm95KGNlbGwpOwotICAgIH0KLX07Ci0KLX0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1TdWJzcGFjZTo6U3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpCitTdWJzcGFjZTo6U3Vic3BhY2Uo
Q1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwKQogICAgIDogbV9zcGFjZShoZWFwLm9iamVjdFNwYWNl
KCkpCiAgICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQot
ICAgICwgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpCi0g
ICAgLCBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbihtX3NwYWNlLmZpcnN0QWxsb2NhdG9y
KCkpCi17Ci0gICAgLy8gSXQncyByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHdlJ3JlIEdDaW5nIHJp
Z2h0IG5vdyBldmVuIGlmIHRoZSBjbGllbnQgaXMgY2FyZWZ1bCB0byBvbmx5Ci0gICAgLy8gY3Jl
YXRlIHN1YnNwYWNlcyByaWdodCBhZnRlciBWTSBjcmVhdGlvbiwgc2luY2UgY29sbGVjdENvbnRp
bnVvdXNseSAoYW5kIHByb2JhYmx5IG90aGVyCi0gICAgLy8gdGhpbmdzKSBjb3VsZCBjYXVzZSBh
IEdDIHRvIGJlIGxhdW5jaGVkIGF0IHByZXR0eSBtdWNoIGFueSB0aW1lIGFuZCBpdCdzIG5vdCAx
MDAlIG9idmlvdXMKLSAgICAvLyB0aGF0IGFsbCBjbGllbnRzIHdvdWxkIGJlIGFibGUgdG8gZW5z
dXJlIHRoYXQgdGhlcmUgYXJlIHplcm8gc2FmZXBvaW50cyBiZXR3ZWVuIHdoZW4gdGhleQotICAg
IC8vIGNyZWF0ZSBWTSBhbmQgd2hlbiB0aGV5IGRvIHRoaXMuIFByZXZlbnRpbmcgR0Mgd2hpbGUg
d2UncmUgY3JlYXRpbmcgdGhlIFN1YnNwYWNlIGVuc3VyZXMKLSAgICAvLyB0aGF0IHdlIGRvbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgd2hldGhlciBpdCdzIE9LIGZvciB0aGUgR0MgdG8gZXZlciBz
ZWUgYSBicmFuZCBuZXcKLSAgICAvLyBzdWJzcGFjZS4KK3sKK30KKwordm9pZCBTdWJzcGFjZTo6
aW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKK3sKKyAgICBtX2F0dHJpYnV0ZXMgPSBoZWFw
Q2VsbFR5cGUtPmF0dHJpYnV0ZXMoKTsKKyAgICBtX2hlYXBDZWxsVHlwZSA9IGhlYXBDZWxsVHlw
ZTsKKyAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGlnbmVkTWVtb3J5QWxsb2NhdG9y
OworICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLT5maXJzdEFsbG9jYXRvcigpOworCisgICAgSGVhcCYgaGVhcCA9ICptX3NwYWNlLmhl
YXAoKTsKICAgICBQcmV2ZW50Q29sbGVjdGlvblNjb3BlIHByZXZlbnRDb2xsZWN0aW9uU2NvcGUo
aGVhcCk7CiAgICAgaGVhcC5vYmplY3RTcGFjZSgpLm1fc3Vic3BhY2VzLmFwcGVuZCh0aGlzKTsK
LSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzOyBp
LS07KQotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2ldID0gbnVsbHB0cjsKKyAgICBt
X2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVyU3Vic3BhY2UodGhpcyk7CiB9CiAKIFN1
YnNwYWNlOjp+U3Vic3BhY2UoKQpAQCAtODEsNjAgKzYxLDEyIEBAIFN1YnNwYWNlOjp+U3Vic3Bh
Y2UoKQogCiB2b2lkIFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBi
bG9jaywgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2lu
Z1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBtX2hlYXBDZWxsVHlwZS0+
ZmluaXNoU3dlZXAoYmxvY2ssIGZyZWVMaXN0KTsKIH0KIAogdm9pZCBTdWJzcGFjZTo6ZGVzdHJv
eShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsK
LX0KLQotLy8gVGhlIHJlYXNvbiB3aHkgd2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbGxvY2F0ZSBh
bmQgdHJ5QWxsb2NhdGUgaXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZgotLy8gY2hlY2tzIG9u
IHRoZSBhbGxvY2F0aW9uIHBhdGggaW4gYm90aCBjYXNlcy4gTGlrZXdpc2UsIHRoZSByZWFzb24g
d2h5IHdlIGhhdmUgb3ZlcmxvYWRzIHdpdGggYW5kCi0vLyB3aXRob3V0IGRlZmVycmFsQ29udGV4
dCBpcyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGNvZGUgZm9yIGNhbGxpbmcgYWxsb2NhdGUg
d2hlbiB5b3UgZG9uJ3QKLS8vIG5lZWQgdGhlIGRlZmVycmFsQ29udGV4dC4KLXZvaWQqIFN1YnNw
YWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYg
KE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICBy
ZXN1bHQgPSBhbGxvY2F0ZVNsb3cobnVsbHB0ciwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVz
dWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGUo
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAg
dm9pZCAqcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFs
bG9jYXRvckZvcihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShk
ZWZlcnJhbENvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93
KGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNp
emUpCi17Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9y
LT50cnlBbGxvY2F0ZSgpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVT
bG93KG51bGxwdHIsIHNpemUpOwotICAgIGRpZEFsbG9jYXRlKHJlc3VsdCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdDsK
LSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6
ZSkpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250
ZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhkZWZlcnJh
bENvbnRleHQsIHNpemUpOwotICAgIGRpZEFsbG9jYXRlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBtX2hlYXBDZWxsVHlwZS0+ZGVzdHJveSh2bSwgY2VsbCk7CiB9CiAKIHZvaWQg
U3Vic3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKQEAgLTE0NCwxMDQgKzc2LDE3IEBAIHZv
aWQgU3Vic3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKICAgICAgICAgICAgIGFsbG9jYXRv
ci5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgICAgICB9KTsKIAotICAgIG1fYWxsb2NhdG9y
Rm9yRW1wdHlBbGxvY2F0aW9uID0gbV9zcGFjZS5maXJzdEFsbG9jYXRvcigpOworICAgIG1fYWxs
b2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5maXJz
dEFsbG9jYXRvcigpOwogfQogCiBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVt
cHR5QmxvY2tUb1N0ZWFsKCkKIHsKLSAgICBmb3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9j
YXRpb247IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0
eUFsbG9jYXRpb24tPm5leHRBbGxvY2F0b3IoKSkgewotICAgICAgICBTdWJzcGFjZSogb3RoZXJT
dWJzcGFjZSA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5zdWJzcGFjZSgpOwotICAg
ICAgICBpZiAob3RoZXJTdWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpICE9IGFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKyAg
ICBmb3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb247IG1fYWxsb2NhdG9yRm9yRW1w
dHlBbGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPm5leHRBbGxvY2F0
b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkgewogICAgICAgICBpZiAoTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2sgPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+ZmluZEVtcHR5
QmxvY2tUb1N0ZWFsKCkpCiAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CiAgICAgfQogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1NYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JG
b3JTbG93KHNpemVfdCBzaXplKQotewotICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpz
aXplQ2xhc3NUb0luZGV4KHNpemUpOwotICAgIHNpemVfdCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFj
ZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF07Ci0gICAgaWYgKCFzaXplQ2xhc3MpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIC8vIFRoaXMgaXMgd3JpdHRlbiBpbiBz
dWNoIGEgd2F5IHRoYXQgaXQncyBPSyBmb3IgdGhlIEpJVCB0aHJlYWRzIHRvIGVuZCB1cCBoZXJl
IGlmIHRoZXkgd2FudAotICAgIC8vIHRvIGdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIHNvbWUgYWxs
b2NhdG9yIHRoYXQgaGFkbid0IGJlZW4gdXNlZCB5ZXQuIE5vdGUgdGhhdCBhIHBvc3NpYmx5LQot
ICAgIC8vIGp1c3QtYXMtZ29vZCBzb2x1dGlvbiB3b3VsZCBiZSB0byByZXR1cm4gbnVsbCBpZiB3
ZSdyZSBpbiB0aGUgSklUIHNpbmNlIHRoZSBKSVQgdHJlYXRzIG51bGwKLSAgICAvLyBhbGxvY2F0
b3IgYXMgInBsZWFzZSBhbHdheXMgdGFrZSB0aGUgc2xvdyBwYXRoIi4gQnV0LCB0aGF0IGNvdWxk
IGxlYWQgdG8gcGVyZm9ybWFuY2UKLSAgICAvLyBzdXJwcmlzZXMgYW5kIHRoZSBhbGdvcml0aG0g
aGVyZSBpcyBwcmV0dHkgZWFzeS4gT25seSB0aGlzIGNvZGUgaGFzIHRvIGhvbGQgdGhlIGxvY2ss
IHRvCi0gICAgLy8gcHJldmVudCBzaW11bHRhbmVvdXNseSBNYXJrZWRBbGxvY2F0b3IgY3JlYXRp
b25zIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gVGhpcyBjb2RlIGVuc3VyZXMKLSAgICAvLyB0aGF0
IGFueSAiZm9yRWFjaEFsbG9jYXRvciIgdHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxs
b2NhdG9yIGFmdGVyIGl0J3MgaW5pdGlhbGl6ZWQKLSAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2
ZSAKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsK
LSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVT
dGVwW2luZGV4XSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKLQotICAgIGlmIChmYWxzZSkK
LSAgICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgbWFya2VkIGFsbG9jYXRvciBmb3IgIiwgbV9uYW1l
LCAiLCAiLCBtX2F0dHJpYnV0ZXMsICIsICIsIHNpemVDbGFzcywgIi5cbiIpOwotICAgIE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9zcGFjZS5hZGRNYXJrZWRBbGxvY2F0b3IobG9ja2Vy
LCB0aGlzLCBzaXplQ2xhc3MpOwotICAgIGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1Rv
SW5kZXgoc2l6ZUNsYXNzKTsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChNYXJrZWRTcGFj
ZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF0gIT0gc2l6ZUNsYXNzKQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0gPSBhbGxv
Y2F0b3I7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWluZGV4LS0pCi0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9ySW5TdWJzcGFjZShtX2Zp
cnN0QWxsb2NhdG9yKTsKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIG1fZmlyc3RB
bGxvY2F0b3IgPSBhbGxvY2F0b3I7Ci0gICAgcmV0dXJuIGFsbG9jYXRvcjsKLX0KLQotdm9pZCog
U3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coZGVm
ZXJyYWxDb250ZXh0LCBzaXplKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coR0NEZWZl
cnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgc2FuaXRp
emVTdGFja0ZvclZNKG1fc3BhY2UuaGVhcCgpLT52bSgpKTsKLSAgICAKLSAgICBpZiAoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJldHVy
biBhbGxvY2F0b3ItPnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgCi0gICAgaWYg
KHNpemUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKLSAgICAgICAgJiYgc2l6
ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAgZGF0YUxvZygiRkFUQUw6
IGF0dGFtcHRpbmcgdG8gYWxsb2NhdGUgc21hbGwgb2JqZWN0IHVzaW5nIGxhcmdlIGFsbG9jYXRp
b24uXG4iKTsKLSAgICAgICAgZGF0YUxvZygiUmVxdWVzdGVkIGFsbG9jYXRpb24gc2l6ZTogIiwg
c2l6ZSwgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotICAgIAotICAgIG1fc3BhY2UuaGVhcCgpLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRl
ZmVycmFsQ29udGV4dCk7Ci0gICAgCi0gICAgc2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZjxNYXJrZWRTcGFjZTo6c2l6ZVN0ZXA+KHNpemUpOwotICAgIExhcmdlQWxsb2NhdGlvbiogYWxs
b2NhdGlvbiA9IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCptX3NwYWNlLm1faGVhcCwgc2l6
ZSwgdGhpcyk7Ci0gICAgaWYgKCFhbGxvY2F0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAKLSAgICBtX3NwYWNlLm1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7
Ci0gICAgbV9zcGFjZS5tX2hlYXAtPmRpZEFsbG9jYXRlKHNpemUpOwotICAgIG1fc3BhY2UubV9j
YXBhY2l0eSArPSBzaXplOwotICAgIAotICAgIG1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxs
b2NhdGlvbik7Ci0gICAgICAgIAotICAgIHJldHVybiBhbGxvY2F0aW9uLT5jZWxsKCk7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCBTdWJzcGFjZTo6ZGlkQWxsb2NhdGUodm9pZCogcHRyKQotewot
ICAgIFVOVVNFRF9QQVJBTShwdHIpOwotICAgIAotICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciBs
b2dnaW5nIGFsbG9jYXRpb25zLCBvciBkb2luZyBvdGhlciBraW5kcyBvZiBkZWJ1Z2dpbmcgaGFj
a3MuIEp1c3QgbWFrZQotICAgIC8vIHN1cmUgeW91IEpTQ19mb3JjZUdDU2xvd1BhdGhzPXRydWUu
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKICNpbmNsdWRlICJN
YXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgpAQCAtMzIsNDQgKzMzLDMwIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKK2NsYXNzIEhlYXBDZWxsVHlwZTsKIAogLy8gVGhl
IGlkZWEgb2Ygc3Vic3BhY2VzIGlzIHRoYXQgeW91IGNhbiBwcm92aWRlIHNvbWUgY3VzdG9tIGJl
aGF2aW9yIGZvciB5b3VyIG9iamVjdHMgaWYgeW91CiAvLyBhbGxvY2F0ZSB0aGVtIGZyb20gYSBj
dXN0b20gU3Vic3BhY2UgaW4gd2hpY2ggeW91IG92ZXJyaWRlIHNvbWUgb2YgdGhlIHZpcnR1YWwg
bWV0aG9kcy4gVGhpcwotLy8gY2xhc3MgaXMgdGhlIGJhc2VjbGFzcyBvZiBTdWJzcGFjZXMgYW5k
IGl0IHByb3ZpZGVzIGEgcmVhc29uYWJsZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCB3aGVyZQot
Ly8gc3dlZXBpbmcgYXNzdW1lcyBpbW1vcnRhbCBzdHJ1Y3R1cmUuIFRoZSBjb21tb24gd2F5cyBv
ZiBvdmVycmlkaW5nIHRoaXMgYXJlOgotLy8KLS8vIC0gUHJvdmlkZSBjdXN0b21pemVkIGRlc3Ry
dWN0b3IgYmVoYXZpb3IuIFlvdSBjYW4gY2hhbmdlIGhvdyB0aGUgZGVzdHJ1Y3RvciBpcyBjYWxs
ZWQuIFlvdSBjYW4KLS8vICAgYWxzbyBzcGVjaWFsaXplIHRoZSBkZXN0cnVjdG9yIGNhbGwgaW4g
dGhlIGxvb3AuCi0vLwotLy8gLSBVc2UgdGhlIFN1YnNwYWNlIGFzIGEgcXVpY2sgd2F5IHRvIGl0
ZXJhdGUgYWxsIG9mIHRoZSBvYmplY3RzIGluIHRoYXQgc3Vic3BhY2UuCisvLyBjbGFzcyBpcyB0
aGUgYmFzZWNsYXNzIG9mIFN1YnNwYWNlcy4gVXN1YWxseSB5b3Ugd2lsbCB1c2UgZWl0aGVyIFN1
YnNwYWNlIG9yIEZpeGVkU2l6ZVN1YnNwYWNlLgogY2xhc3MgU3Vic3BhY2UgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN1YnNwYWNlKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhl
YXAmLCBBbGxvY2F0b3JBdHRyaWJ1dGVzLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+U3Vic3BhY2UoKTsKLSAgICAKKwogICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUuZGF0YSgpOyB9CiAgICAgTWFya2VkU3Bh
Y2UmIHNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZTsgfQogICAgIAogICAgIGNvbnN0IEFs
bG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXM7IH0KKyAgICBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGVhcENlbGxUeXBlOyB9CiAgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgfQog
ICAgIAotICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBpcyB0byBzcGVjaWFs
aXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24ndAotICAgIC8vIGJl
IGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBjYWxsIE1hcmtlZEJs
b2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7Ci0gICAgCi0gICAgLy8gVGhl
c2UgZ2V0IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopOwotICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciogdHJ5QWxsb2NhdG9y
Rm9yKHNpemVfdCk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90KTsK
LSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6
ZV90KTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShzaXpl
X3QpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxD
b250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5k
bGUmLCBGcmVlTGlzdCopOworICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOworCisgICAg
dmlydHVhbCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0Rl
ZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgPSAwOwogICAgIAogICAgIHZv
aWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICAKQEAgLTk2LDQ4ICs4MywyNSBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2Vs
bChjb25zdCBGdW5jJik7CiAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9j
YXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN1YnNwYWNlLCBtX2Fs
bG9jYXRvckZvclNpemVTdGVwKTsgfQotICAgIAotICAgIE1hcmtlZEFsbG9jYXRvcioqIGFsbG9j
YXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0K
KyAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KKyAg
ICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihTdWJzcGFjZSog
c3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBzdWJz
cGFjZTsgfQogCi1wcml2YXRlOgotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yU2xv
dyhzaXplX3QpOwotICAgIAotICAgIC8vIFRoZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3
aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBhbGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCog
YWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLSAgICB2b2lkKiB0cnlB
bGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIAotICAgIHZvaWQg
ZGlkQWxsb2NhdGUodm9pZCopOworcHJvdGVjdGVkOgorICAgIHZvaWQgaW5pdGlhbGl6ZShIZWFw
Q2VsbFR5cGUqLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CiAgICAgCiAgICAgTWFya2VkU3Bh
Y2UmIG1fc3BhY2U7CiAgICAgCiAgICAgQ1N0cmluZyBtX25hbWU7CiAgICAgQWxsb2NhdG9yQXR0
cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisKKyAgICBIZWFwQ2VsbFR5cGUqIG1faGVhcENlbGxUeXBl
IHsgbnVsbHB0ciB9OworICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIG1fYWxpZ25lZE1lbW9y
eUFsbG9jYXRvciB7IG51bGxwdHIgfTsKICAgICAKLSAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KiBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3I7Ci0gICAgCi0gICAgc3RkOjphcnJheTxNYXJrZWRB
bGxvY2F0b3IqLCBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6
ZVN0ZXA7CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2ZpcnN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9
OwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24geyBu
dWxscHRyIH07IC8vIFVzZXMgdGhlIE1hcmtlZFNwYWNlIGxpbmtlZCBsaXN0IG9mIGJsb2Nrcy4K
ICAgICBTZW50aW5lbExpbmtlZExpc3Q8TGFyZ2VBbGxvY2F0aW9uLCBCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTxMYXJnZUFsbG9jYXRpb24+PiBtX2xhcmdlQWxsb2NhdGlvbnM7CisgICAgU3Vic3BhY2Uq
IG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogfTsK
IAotQUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjp0cnlBbGxvY2F0b3JG
b3Ioc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0
b2ZmKQotICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6
c2l6ZUNsYXNzVG9JbmRleChzaXplKV07Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBz
aXplKQotewotICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewotICAg
ICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVw
W01hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpXSkKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3JTbG93KHNpemUpOwotICAgIH0K
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjI0
OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTU3Miw3ICsxNTcyLDcgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0s
IEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBz
dG9yYWdlLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwg
SnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRv
ckZvcihzaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFj
ZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTE1ODksNyArMTU4OSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBhbGxvY2F0aW9uU2l6ZSBj
YW4gYmUgYWxpYXNlZCB3aXRoIGFueSBvZiB0aGUgb3RoZXIgaW5wdXQgR1BScy4gSWYgaXQncyBu
b3QgYWxpYXNlZCB0aGVuIGl0CiAgICAgLy8gd29uJ3QgYmUgY2xvYmJlcmVkLgotICAgIHZvaWQg
ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBTdWJzcGFjZSYgc3Vi
c3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcg
c2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZh
cmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2Us
IEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRj
aEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
IShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkpLCAi
TWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAgICAgICAg
IApAQCAtMTYwNyw3ICsxNjA3LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENs
YXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZVZh
cmlhYmxlU2l6ZWRDZWxsKFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBz
dHJ1Y3R1cmUsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJS
ZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIFN1YnNw
YWNlJiBzdWJzcGFjZSA9ICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKTsKKyAgICAgICAgQ29t
cGxldGVTdWJzcGFjZSYgc3Vic3BhY2UgPSAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSk7CiAg
ICAgICAgIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQocmVzdWx0R1BSLCBzdWJzcGFjZSwgYWxs
b2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgICAg
ICBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oc3RydWN0dXJlLCByZXN1bHRHUFIsIHNj
cmF0Y2hHUFIyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0
cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFs
bG9jYXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIAog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0
b3JSZWcgPSByZWdUMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRl
cmZseUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIs
NyArNjIsNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1hCiBpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBKU0Nl
bGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhh
c0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAg
ICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHks
IGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9p
ZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlKHNpemUp
OworICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxv
Y2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3Nl
cnQpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHks
IHByb3BlcnR5Q2FwYWNpdHkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC03MCw3ICs3MCw3
IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbmkKIGlubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6dHJ5Q3JlYXRlKFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNh
cGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwg
Y29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7Ci0gICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLnRyeUFsbG9jYXRlKHNpemUpOworICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIWJhc2UpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwg
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIGlubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0g
YmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6
ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwogICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3Bl
cnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2
b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2Nh
dGUobmV3U2l6ZSk7CisgICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmICghbmV3QmFzZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkbid0IGJlIGEg
bWVtY3B5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCAr
MTE4LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJgogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdsb2JhbE9iamVj
dCgpLT5hcnJheVByb3RvVmFsdWVzRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIAotICAgIHZvaWQqIGJhY2tpbmdTdG9y
ZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRBcmd1bWVudHMua2luZCkudHJ5
QWxsb2NhdGUobWFwcGVkQXJndW1lbnRzU2l6ZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChiYWNr
aW5nU3RvcmUpOworICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2UobV9tYXBwZWRBcmd1bWVudHMua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKG1hcHBlZEFy
Z3VtZW50c1NpemUoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwog
ICAgIGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwog
ICAgIG1fbWFwcGVkQXJndW1lbnRzLnNldCh2bSwgdGhpcywgb3ZlcnJpZGVzKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rp
b24pOwogICAgICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0RXZhbEV4ZWN1
dGFibGUuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0RXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGlyZWN0RXZhbEV4ZWN1dGFibGUgZmluYWwgOiBwdWJs
aWMgRXZhbEV4ZWN1dGFibGUgewogcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxU
eXBlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICZ2bS5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOworICAgIH0KKwog
ICAgIHN0YXRpYyBEaXJlY3RFdmFsRXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIGNvbnN0
IFNvdXJjZUNvZGUmLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUs
IGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJp
YWJsZUVudmlyb25tZW50Kik7CiBwcml2YXRlOgogICAgIERpcmVjdEV2YWxFeGVjdXRhYmxlKEV4
ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZl
ZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlw
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRh
YmxlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V2YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCisgICAgCiAgICAgRXZhbENvZGVCbG9jayogY29k
ZUJsb2NrKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2V2YWxDb2RlQmxvY2suZ2V0KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJ
KHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDEwIEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgCisgICAgLy8gRm9yY2Ugc3ViY2xhc3NlcyB0
byBvdmVycmlkZSB0aGlzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0YXRpYyB2b2lk
IHN1YnNwYWNlRm9yKFZNJikgeyB9CiAgICAgICAgIAogICAgIENvZGVCbG9ja0hhc2ggaGFzaEZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIy
NDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMiBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBTY3JpcHRFeGVjdXRhYmxlIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZtLmZ1bmN0aW9u
RXhlY3V0YWJsZVNwYWNlOworICAgIH0KKwogICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUq
IGNyZWF0ZSgKICAgICAgICAgVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIAogICAgICAgICB1bnNp
Z25lZCBsYXN0TGluZSwgdW5zaWduZWQgZW5kQ29sdW1uLCBJbnRyaW5zaWMgaW50cmluc2ljKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjMsOCArMjYzLDcgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppbml0TW9kaWZp
ZQogICAgIFJFTEVBU0VfQVNTRVJUKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik7CiAK
ICAgICBpZiAoYXJnc0xlbmd0aCkgewotICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5n
aWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQp
LnRyeUFsbG9jYXRlKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7CisgICAgICAgIHZvaWQqIGJhY2tp
bmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rl
c2NyaXB0b3Iua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
Zjw4PihhcmdzTGVuZ3RoKSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQp
OwogICAgICAgICBib29sKiBtb2RpZmllZEFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PGJvb2wqPihi
YWNraW5nU3RvcmUpOwogICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5zZXQo
dm0sIHRoaXMsIG1vZGlmaWVkQXJndW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
YXJnc0xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxs
b2NhdGlvblNpemUoY2FwYWNpdHkpOwotICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOworICAgICAg
ICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVO
b25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRpcmVj
dEV2YWxFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2
ICszMSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW5kaXJlY3RFdmFsRXhlY3V0YWJs
ZSBmaW5hbCA6IHB1YmxpYyBFdmFsRXhlY3V0YWJsZSB7CiBwdWJsaWM6CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZtLmluZGlyZWN0RXZhbEV4ZWN1dGFibGVT
cGFjZTsKKyAgICB9CisKICAgICBzdGF0aWMgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZSogY3JlYXRl
KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBE
ZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRl
eHRUeXBlKTsKIHByaXZhdGU6CiAgICAgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0
VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIy
NDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQKICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7
CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29u
dGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2
b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUo
ZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdl
LCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAg
IHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwg
dmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGRlZmVycmFsQ29udGV4dCwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KCF0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgs
NyArOTgsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAg
fSBlbHNlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CiAg
ICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rv
ckxlbmd0aChpbmRleEJpYXMsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZv
aWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShk
ZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5l
U3RvcmFnZSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAg
ICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0
b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBp
ZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRPZkxp
bmVTdG9yYWdlKTsKQEAgLTM2OCw3ICszNjgsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dFNsb3dDYXNlKGNvbnN0CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAg
ICB9IGVsc2UgewogICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVk
Q2FwYWNpdHkpKTsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6ZSk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChuZXdT
aXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAg
ICBpZiAoIW5ld0FsbG9jQmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
bmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyAr
MjM3LDkgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZShWTSYgdgogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
QnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIHZlY3Rv
ckxlbmd0aEhpbnQpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
b3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKAorICAgICAgICAgICAgQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksCisgICAgICAgICAgICBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBv
dXRPZkxpbmVTdG9yYWdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29u
dGV4dDo6CiAgICAgICAgIHZvaWQqIHRlbXA7CiAgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9m
KGxlbmd0aCwgZWxlbWVudFNpemUpOwogICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgICAg
dGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVs
bHB0ciwgc2l6ZSk7CisgICAgICAgICAgICB0ZW1wID0gdm0ucHJpbWl0aXZlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgICAgIGlmICghdGVtcCkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogY2xhc3MgQ29weVZp
c2l0b3I7CiBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dDsKIGNsYXNzIEV4ZWNTdGF0ZTsKQEAgLTUw
LDExICs1MSw2IEBAIGNsYXNzIFByb3BlcnR5TmFtZTsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5
OwogY2xhc3MgU3RydWN0dXJlOwogCi1lbnVtIGNsYXNzIEFsbG9jYXRpb25GYWlsdXJlTW9kZSB7
Ci0gICAgU2hvdWxkQXNzZXJ0T25GYWlsdXJlLAotICAgIFNob3VsZE5vdEFzc2VydE9uRmFpbHVy
ZQotfTsKLQogZW51bSBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlIHsKICAgICBI
YXNBcmcsCiAgICAgRG9lc05vdEhhdmVBcmcKQEAgLTg2LDggKzgyLDggQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCogdHJ5QWxsb2NhdGVDZQogY2xhc3MgSlNDZWxsIDogcHVibGljIEhlYXBD
ZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSlNWYWx1ZTsKICAgICBmcmllbmQgY2xhc3MgTWFya2Vk
QmxvY2s7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlLCBH
Q0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlPgotICAgIGZyaWVuZCB2b2lkKiB0cnlBbGxvY2F0
ZUNlbGxIZWxwZXIoSGVhcCYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIGZyaWVuZCB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIo
SGVhcCYsIHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUp
OwogCiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
MDsKQEAgLTk4LDcgKzk0LDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBSZWZlciB0byBTdWJz
cGFjZSBieSByZWZlcmVuY2UuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Njk4OAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0
YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mKTsKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mKTsKIAogICAgIHN0YXRpYyBKU0NlbGwqIHNlZW5NdWx0aXBs
ZUNhbGxlZU9iamVjdHMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oc3RhdGljX2Nh
c3Q8dWludHB0cl90PigxKSk7IH0KIApAQCAtMzIwLDcgKzMxNiw3IEBAIGlubGluZSBUbyBqc0R5
bmFtaWNDYXN0KFZNJiB2bSwgSlNWYWx1ZSAKIC8vIEZJWE1FOiBSZWZlciB0byBTdWJzcGFjZSBi
eSByZWZlcmVuY2UuCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2OTg4CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotaW5saW5lIFN1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCitpbmxpbmUgYXV0byBzdWJzcGFjZUZvcihWTSYgdm0pCiB7CiAgICAgcmV0
dXJuIFR5cGU6OnRlbXBsYXRlIHN1YnNwYWNlRm9yPFR5cGU+KHZtKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIy
NDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTM1LDMwICsxMzUsMjEgQEAgQUxXQVlTX0lOTElORSBWTSYgRXhl
Y1N0YXRlOjp2bSgpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotU3Vi
c3BhY2UqIEpTQ2VsbDo6c3Vic3BhY2VGb3IoVk0mIHZtKQorQ29tcGxldGVTdWJzcGFjZSogSlND
ZWxsOjpzdWJzcGFjZUZvcihWTSYgdm0pCiB7CiAgICAgaWYgKENlbGxUeXBlOjpuZWVkc0Rlc3Ry
dWN0aW9uKQogICAgICAgICByZXR1cm4gJnZtLmRlc3RydWN0aWJsZUNlbGxTcGFjZTsKICAgICBy
ZXR1cm4gJnZtLmNlbGxTcGFjZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlIG1vZGUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2UgZGVmZXJyYWxD
b250ZXh0QXJnUHJlc2VuY2U+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhl
bHBlcihIZWFwJiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXpl
X3Qgc2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFs
bG9jYXRlQ2VsbEhlbHBlcihIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQog
ewogICAgIEFTU0VSVChkZWZlcnJhbENvbnRleHQgfHwgIURpc2FsbG93R0M6OmlzSW5FZmZlY3RP
bkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAgICBK
U0NlbGwqIHJlc3VsdDsKLSAgICBpZiAobW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNo
b3VsZEFzc2VydE9uRmFpbHVyZSkgewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250ZXh0
QXJnUHJlc2VuY2UgPT0gR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQotICAg
ICAgICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgp
KS0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3RhdGlj
X2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlKHNpemUp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250ZXh0QXJnUHJl
c2VuY2UgPT0gR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQotICAgICAgICAg
ICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+dHJ5
QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3RhdGljX2Nh
c3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPnRyeUFsbG9jYXRlKHNpemUp
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQorICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
c3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZl
cnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7CisgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCAmJiAhcmVzdWx0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICBBU1NFUlQoIWhlYXAudm0o
KS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CiAgICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXpp
bmdPYmplY3RDbGFzcyhUOjppbmZvKCkpOwpAQCAtMTcwLDI1ICsxNjEsMjUgQEAgQUxXQVlTX0lO
TElORSB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZv
aWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4g
dHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkQXNz
ZXJ0T25GYWlsdXJlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpEb2VzTm90SGF2ZUFy
Zz4oaGVhcCwgbnVsbHB0ciwgc2l6ZSk7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBl
cjxUPihoZWFwLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkKiB0cnlBbGxvY2F0ZUNlbGwoSGVhcCYg
aGVhcCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxU
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNob3VsZE5vdEFzc2VydE9uRmFpbHVyZSwgR0NEZWZl
cnJhbENvbnRleHRBcmdQcmVzZW5zZTo6RG9lc05vdEhhdmVBcmc+KGhlYXAsIG51bGxwdHIsIHNp
emUpOworICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VD4oaGVhcCwgc2l6ZSwgbnVs
bHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwLCBHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ5QWxs
b2NhdGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkQXNzZXJ0T25G
YWlsdXJlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpIYXNBcmc+KGhlYXAsIGRlZmVy
cmFsQ29udGV4dCwgc2l6ZSk7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxUPiho
ZWFwLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbChIZWFw
JiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkK
IHsKLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZTo6U2hvdWxkTm90QXNzZXJ0T25GYWlsdXJlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNl
bnNlOjpIYXNBcmc+KGhlYXAsIGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7CisgICAgcmV0dXJuIHRy
eUFsbG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFwLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiB9CiAKIGlubGluZSBib29sIEpTQ2VsbDo6
aXNPYmplY3QoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
ZXN0cnVjdGlibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuICZ2bS5kZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3Bw
OjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgiCisKKyNp
bmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3Bh
Y2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVy
YXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8SlNEZXN0cnVjdGlibGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxl
LmRlc3Ryb3koY2VsbCk7CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxv
Y2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5l
ZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNl
KCkKK3sKK30KKwordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAg
ICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5j
KCkpOworfQorCit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0m
IHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDExICsyNCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJK
U0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaCIKIAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDIxICs0MiwyMSBAQCBzdHJ1Y3QgRGVzdHJveUZ1bmMg
ewogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZTo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhl
YXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5h
bWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6
OkpTQ2VsbCksIGFsbG9jYXRvcikKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpK
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5cGUoQWxs
b2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsK
IH0KIAotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UoKQorSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6On5KU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVl
TGlzdCogZnJlZUxpc3QpCit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlz
dCkKIHsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERl
c3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUo
ZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit2b2lkIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewog
ICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaDoyMjQ1MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdWJz
cGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGln
bmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNE
ZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSgpOworICAgIAorICAgIHZvaWQgZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXN0
cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSA6
IHB1YmxpYyBTdWJzcGFjZSB7CitjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZSA6IHB1YmxpYyBIZWFwQ2VsbFR5cGUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRF
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3Ry
dWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1
YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKCk7CiAgICAgCiAgICAgdm9pZCBm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuaCIKLQotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBEZXN0cm95RnVuYyB7Ci0gICAgQUxX
QVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAg
ewotICAgICAgICBzdGF0aWNfY2FzdDxKU0Rlc3RydWN0aWJsZU9iamVjdCo+KGNlbGwpLT5jbGFz
c0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKLSAgICB9Ci19OwotCi19IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKLQotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFs
bG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFs
bG9jYXRvcikKLXsKLX0KLQotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxp
c3QqIGZyZWVMaXN0KQotewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShm
cmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Ci19Ci0KLXZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVu
YygpKHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSA6IHB1YmxpYyBTdWJz
cGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYs
IEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3Zl
cnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lv
biAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZp
cm9ubWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEpTTGV4aWNh
bEVudmlyb25tZW50IDogcHVibGljIEpTU3kKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAg
IHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0
ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm4gJnZtLmpz
VmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9u
IDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0
aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAg
cmV0dXJuICZ2bS5zZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFw
Q2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1
MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5jcHA6MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMg
eworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dCo+KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9
Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBu
YW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAg
OiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rp
b24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgp
Cit7Cit9CisKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hT
d2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sK
KyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lG
dW5jKCkpOworfQorCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVz
dHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxs
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5o
IgorI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCIKIAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIK
LSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQz
LDIxICs0MiwyMSBAQCBzdHJ1Y3QgRGVzdHJveUZ1bmMgewogCiB9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKIAotSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxv
Y2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxv
Y2F0b3IpCitKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0
b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQog
Ci1KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UoKQorSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6
fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit2b2lkIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
IGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlz
aFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAK
LXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwg
SlNDZWxsKiBjZWxsKQordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
OjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAgIERlc3Ryb3lGdW5jKCkodm0s
IGNlbGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aAkocmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNw
YWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhl
YXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7CisgICAgCisgICAgdm9p
ZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDE0ICsyNSwxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlN1YnNwYWNlLmgi
CisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xh
c3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSA6IHB1YmxpYyBIZWFwQ2Vs
bFR5cGUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdFN1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lk
IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwog
ICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Uu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3Bh
Y2VJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3Qg
RGVzdHJveUZ1bmMgewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlND
ZWxsKiBjZWxsKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdCo+KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShj
ZWxsKTsKLSAgICB9Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3Bh
Y2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxv
Y2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5l
ZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RTdWJzcGFjZSgpCi17Ci19Ci0KLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBm
cmVlTGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxp
c3QsIERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVu
YygpKHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpOwotICAgIAotICAgIHZvaWQgZmlu
aXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShy
ZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAvLyBXZSBz
cGVjaWFsaXplIHRoZSBzdHJpbmcgc3Vic3BhY2UgdG8gZ2V0IHRoZSBmYXN0ZXN0IHBvc3NpYmxl
IHN3ZWVwLiBUaGlzIHdvdWxkbid0IGJlCiAgICAgLy8gbmVjZXNzYXJ5IGlmIEpTU3RyaW5nIGRp
ZG4ndCBoYXZlIGEgZGVzdHJ1Y3Rvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KLSAgICBzdGF0
aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJp
bmdTcGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwOjIyNDUz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU1N0cmluZ1N1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgewor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsKS0+SlNTdHJpbmc6
On5KU1N0cmluZygpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitK
U1N0cmluZ1N1YnNwYWNlOjpKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVh
cCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFt
ZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6
SlNDZWxsKSwgYWxsb2NhdG9yKQoreworfQorCitKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdT
dWJzcGFjZSgpCit7Cit9CisKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgaGFu
ZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsK
K30KKwordm9pZCBKU1N0cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxs
KQoreworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2Vs
bFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSlNTdHJpbmdTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkpTU3RyaW5nSGVhcENlbGxUeXBlLmgi
CiAKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC00MywyMSArNDIsMjEgQEAgc3RydWN0IERlc3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCiAKLUpTU3RyaW5nU3Vic3BhY2U6OkpTU3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBu
YW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAg
OiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rp
b24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU1N0cmluZ0hlYXBDZWxsVHlwZTo6
SlNTdHJpbmdIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJp
YnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKLUpTU3Ry
aW5nU3Vic3BhY2U6On5KU1N0cmluZ1N1YnNwYWNlKCkKK0pTU3RyaW5nSGVhcENlbGxUeXBlOjp+
SlNTdHJpbmdIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0
KQordm9pZCBKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6Okhh
bmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3
ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUu
ZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsK
IH0KIAotdm9pZCBKU1N0cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxs
KQordm9pZCBKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2Vs
bCkKIHsKICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAkocmV2
aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z1N1YnNwYWNlLmg6MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTU3Ry
aW5nU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTU3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU3RyaW5nU3Vi
c3BhY2UoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
LCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92
ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAkocmV2aXNp
b24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFw
Q2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTU3RyaW5nU3Vic3BhY2UgOiBwdWJsaWMgU3Vi
c3BhY2UgeworY2xhc3MgSlNTdHJpbmdIZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBl
IHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZ1N1YnNwYWNlKENTdHJp
bmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNTdHJpbmdIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFs
IH5KU1N0cmluZ0hlYXBDZWxsVHlwZSgpOwogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95
KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1N0cmluZ1N1
YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAotICAgIHsKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsKS0+SlNTdHJpbmc6On5KU1N0cmluZygp
OwotICAgIH0KLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1KU1N0cmluZ1N1YnNw
YWNlOjpKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxs
b2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxs
b2NhdG9yKQotewotfQotCi1KU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCi17
Ci19Ci0KLXZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6Okhh
bmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3
ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBK
U1N0cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQotewotICAgIERl
c3Ryb3lGdW5jKCkodm0sIGNlbGwpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAko
cmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdTdWJzcGFjZS5oCShub25leGlzdGVudCkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlN1YnNwYWNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU1N0cmluZ1N1YnNw
YWNlIDogcHVibGljIFN1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7
Ci0gICAgCi0gICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxp
c3QqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEyIEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIFNjcmlwdEV4ZWN1dGFibGUgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1t
b3J0YWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KKyAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiAmdm0u
bW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKKyAgICB9CisKICAgICBzdGF0aWMgTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7
CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjI0
OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIsMTIgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoVk0mLCBSZWY8SklUQ29kZT4mJiBj
YWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBSZWY8SklUQ29kZT4mJiBjb25zdHJ1
Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIEludHJpbnNpYywgY29uc3QgRE9N
SklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4K
KyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAg
ICAgIHJldHVybiAmdm0ubmF0aXZlRXhlY3V0YWJsZVNwYWNlOworICAgIH0KIAogICAgIENvZGVC
bG9ja0hhc2ggaGFzaEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9n
cmFtRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMiBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRhYmxlIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJ
c0ltbW9ydGFsOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+CisgICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4g
JnZtLnByb2dyYW1FeGVjdXRhYmxlU3BhY2U7CisgICAgfQorCiAgICAgc3RhdGljIFByb2dyYW1F
eGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UpCiAgICAgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlz
aW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIEFMV0FZU19JTkxJTkUg
SlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0
aWFsaXplZCA9IGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVy
ZSk7Ci0gICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRy
eUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSk7CisgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6
UmV0dXJuTnVsbCk7CiAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjI0
OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVz
dHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIyNDkzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUg
IkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCisjaW5jbHVk
ZSAiRGlyZWN0RXZhbEV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5oIgpAQCAt
NDcsNiArNDgsNyBAQAogI2luY2x1ZGUgIkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJGdW5jdGlvbkNv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAi
R0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVk
ZSAiR2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCkBAIC01Nyw2ICs1OSw3IEBACiAj
aW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJJbmRpcmVjdEV2YWxF
eGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKQEAgLTY0LDYgKzY3LDcgQEAKICNp
bmNsdWRlICJKU0FQSVZhbHVlV3JhcHBlci5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaCIKICNpbmNsdWRlICJKU0ZpeGVkQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKQEAgLTczLDI0ICs3Nywz
MCBAQAogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZl
cnJlZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgorI2luY2x1ZGUg
IkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJKU1Nj
cmlwdEZldGNoUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIkpTU2NyaXB0RmV0Y2hlci5oIgogI2lu
Y2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpT
U291cmNlQ29kZS5oIgorI2luY2x1ZGUgIkpTU3RyaW5nSGVhcENlbGxUeXBlLmgiCiAjaW5jbHVk
ZSAiSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseS5oIgor
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRl
ICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxleGVy
LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTWluaW11bVJlc2VydmVkWm9uZVNp
emUuaCIKICNpbmNsdWRlICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiTW9k
dWxlUHJvZ3JhbUV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJOYXRpdmVFeGVjdXRhYmxlLmgiCiAj
aW5jbHVkZSAiTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNp
bmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVk
ZSAiUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlByb2dyYW1FeGVjdXRhYmxlLmgiCiAj
aW5jbHVkZSAiUHJvbWlzZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhh
c2hUYWJsZS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCkBAIC0xNzEsMTggKzE4MSwzMyBA
QCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBmYXN0TWFs
bG9jQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I+KCkpCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5p
cXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OlByaW1pdGl2ZSkp
CiAgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxHaWdhY2Fn
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpKU1ZhbHVlKSkKLSAgICAsIHByaW1p
dGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnki
LCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBD
ZWxsOjpBdXhpbGlhcnkpLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAs
IGpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEF1eGlsaWFy
eSIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVh
cENlbGw6OkF1eGlsaWFyeSksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAs
IGNlbGxTcGFjZSgiSlNDZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVl
ZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQo
KSkKLSAgICAsIGpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBKU0Nl
bGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhl
YXBDZWxsOjpKU0NlbGwpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBk
ZXN0cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBKU0NlbGwiLCBoZWFwLCBBbGxvY2F0
b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFs
bG9jQWxsb2NhdG9yLmdldCgpKQotICAgICwgc3RyaW5nU3BhY2UoIkpTU3RyaW5nIiwgaGVhcCwg
ZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIGRlc3RydWN0aWJsZU9iamVjdFNwYWNl
KCJKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkp
Ci0gICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiRWFnZXJseSBTd2Vw
dCBKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkp
Ci0gICAgLCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlKCJKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3BhY2UiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgYXV4
aWxpYXJ5SGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBlPihBbGxvY2F0
b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkp
KSkKKyAgICAsIGNlbGxIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+
KEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpT
Q2VsbCkpKQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5p
cXVlPEhlYXBDZWxsVHlwZT4oQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBI
ZWFwQ2VsbDo6SlNDZWxsKSkpCisgICAgLCBzdHJpbmdIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3Vu
aXF1ZTxKU1N0cmluZ0hlYXBDZWxsVHlwZT4oKSkKKyAgICAsIGRlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlPigpKQorICAgICwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoc3RkOjpt
YWtlX3VuaXF1ZTxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlPigpKQogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UoIkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0
KCkpCisgICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5p
cXVlPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU+KCkpCiAjZW5kaWYKKyAgICAs
IHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhp
bGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0KCksIHByaW1pdGl2ZUdpZ2Fj
YWdlQWxsb2NhdG9yLmdldCgpKQorICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2Uo
IkpTVmFsdWUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBl
LmdldCgpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBjZWxsU3BhY2Uo
IkpTQ2VsbCIsIGhlYXAsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0
b3IuZ2V0KCkpCisgICAgLCBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2UoIkpTVmFsdWUgR2lnYWNh
Z2UgSlNDZWxsIiwgaGVhcCwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwganNWYWx1ZUdpZ2FjYWdl
QWxsb2NhdG9yLmdldCgpKQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGli
bGUgSlNDZWxsIiwgaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFz
dE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIHN0cmluZ1NwYWNlKCJKU1N0cmluZyIsIGhl
YXAsIHN0cmluZ0hlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkK
KyAgICAsIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhl
YXAsIGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9j
YXRvci5nZXQoKSkKKyAgICAsIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJF
YWdlcmx5IFN3ZXB0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgZGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwg
c2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSgiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNw
YWNlIiwgaGVhcCwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIGZh
c3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICwg
d2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSgiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlIiwg
aGVhcCwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NB
bGxvY2F0b3IuZ2V0KCkpCisjZW5kaWYKKyAgICAsIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBO
YXRpdmVFeGVjdXRhYmxlKQorICAgICwgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09fU1VC
U1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBEaXJl
Y3RFdmFsRXhlY3V0YWJsZSkKKyAgICAsIGluZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09f
U1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJ
bmRpcmVjdEV2YWxFeGVjdXRhYmxlKQorICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwg
RnVuY3Rpb25FeGVjdXRhYmxlKQorICAgICwgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSBJ
U09fU1VCU1BBQ0VfSU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgp
LCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSkKKyAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQo
KSwgUHJvZ3JhbUV4ZWN1dGFibGUpCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50
RGF0YSgwKQogICAgICwgdG9wRW50cnlGcmFtZShudWxscHRyKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKKyNp
bmNsdWRlICJDb21wbGV0ZVN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5o
IgogI2luY2x1ZGUgIkNvbnRyb2xGbG93UHJvZmlsZXIuaCIKICNpbmNsdWRlICJEYXRlSW5zdGFu
Y2VDYWNoZS5oIgpAQCAtMzksMjAgKzQwLDE2IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkludHJpbnNpYy5oIgor
I2luY2x1ZGUgIklzb1N1YnNwYWNlLmgiCiAjaW5jbHVkZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2Uu
aCIKICNpbmNsdWRlICJKU0xvY2suaCIKLSNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UuaCIKLSNpbmNsdWRlICJKU1N0cmluZ1N1YnNwYWNlLmgiCi0jaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiTWljcm90YXNrLmgiCiAjaW5jbHVkZSAiTnVtZXJpY1N0
cmluZ3MuaCIKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAjaW5j
bHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29y
ZC5oIgogI2luY2x1ZGUgIlZNVHJhcHMuaCIKQEAgLTEwOCw5ICsxMDUsMTMgQEAgY2xhc3MgSGVh
cFByb2ZpbGVyOwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEludGVycHJldGVyOwogY2xhc3Mg
SlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbjsKK2NsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKIGNs
YXNzIEpTUnVuTG9vcFRpbWVyOworY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBD
ZWxsVHlwZTsKK2NsYXNzIEpTU3RyaW5nSGVhcENlbGxUeXBlOworY2xhc3MgSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CkBAIC0y
OTAsOSArMjkxLDE5IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmFzdE1hbGxvY0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3I+IGZhc3RNYWxsb2NBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gcHJpbWl0aXZlR2lnYWNhZ2VB
bGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcj4ganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEhl
YXBDZWxsVHlwZT4gYXV4aWxpYXJ5SGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxI
ZWFwQ2VsbFR5cGU+IGNlbGxIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBD
ZWxsVHlwZT4gZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SlNTdHJpbmdIZWFwQ2VsbFR5cGU+IHN0cmluZ0hlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU+IGRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdEhlYXBDZWxsVHlwZT4gc2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU7
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlw
ZTsKKyNlbmRpZgogICAgIAotICAgIFN1YnNwYWNlIHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2U7IC8vIFR5cGVkIGFycmF5cywgc3RyaW5ncywgYml0dmVjdG9ycywgZXRjIGdvIGhlcmUu
Ci0gICAgU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIEJ1dHRlcmZs
aWVzLCBhcnJheXMgb2YgSlNWYWx1ZXMsIGV0YyBnbyBoZXJlLgorICAgIENvbXBsZXRlU3Vic3Bh
Y2UgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gVHlwZWQgYXJyYXlzLCBzdHJp
bmdzLCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVyZS4KKyAgICBDb21wbGV0ZVN1YnNwYWNlIGpzVmFs
dWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBCdXR0ZXJmbGllcywgYXJyYXlzIG9mIEpTVmFs
dWVzLCBldGMgZ28gaGVyZS4KIAogICAgIC8vIFdlIG1ha2UgY3Jvc3MtY3V0dGluZyBhc3N1bXB0
aW9ucyBhYm91dCB0eXBlZCBhcnJheXMgYmVpbmcgaW4gdGhlIHByaW1pdGl2ZSBHaWdhY2FnZSBh
bmQgYnV0dGVyZmxpZXMKICAgICAvLyBiZWluZyBpbiB0aGUgSlNWYWx1ZSBnaWdhY2FnZS4gRm9y
IHNvbWUgdHlwZXMsIGl0J3Mgc3VwZXIgb2J2aW91cyB3aGVyZSB0aGV5IHNob3VsZCBnbywgYW5k
IHNvIHdlCkBAIC0zMDAsNyArMzExLDcgQEAgcHVibGljOgogICAgIC8vIGNvbnN0YW50IHNvbWV3
aGVyZS4KICAgICAvLyBGSVhNRTogTWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIGlmIGV2ZXJ5b25l
IGFic3RyYWN0ZWQgdGhpcz8KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc1MjQ4Ci0gICAgQUxXQVlTX0lOTElORSBTdWJzcGFjZSYgZ2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZShHaWdhY2FnZTo6S2luZCBraW5kKQorICAgIEFMV0FZU19JTkxJTkUgQ29tcGxl
dGVTdWJzcGFjZSYgZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShHaWdhY2FnZTo6S2luZCBraW5kKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgR2lnYWNhZ2U6OlBy
aW1pdGl2ZToKQEAgLTMxNSwxNiArMzI2LDIzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
Ly8gV2hlbmV2ZXIgcG9zc2libGUsIHVzZSBzdWJzcGFjZUZvcjxDZWxsVHlwZT4odm0pIHRvIGdl
dCBvbmUgb2YgdGhlc2Ugc3Vic3BhY2VzLgotICAgIFN1YnNwYWNlIGNlbGxTcGFjZTsKLSAgICBT
dWJzcGFjZSBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7Ci0gICAgU3Vic3BhY2UgZGVzdHJ1Y3Rp
YmxlQ2VsbFNwYWNlOwotICAgIEpTU3RyaW5nU3Vic3BhY2Ugc3RyaW5nU3BhY2U7Ci0gICAgSlNE
ZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSBkZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKLSAgICBK
U0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVj
dFNwYWNlOwotICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSBzZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2UgY2VsbFNwYWNlOworICAg
IENvbXBsZXRlU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlOworICAgIENvbXBsZXRl
U3Vic3BhY2UgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2Ugc3Ry
aW5nU3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSBkZXN0cnVjdGlibGVPYmplY3RTcGFjZTsK
KyAgICBDb21wbGV0ZVN1YnNwYWNlIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNl
OworICAgIENvbXBsZXRlU3Vic3BhY2Ugc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZTsKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSB3ZWJBc3Nl
bWJseUNvZGVCbG9ja1NwYWNlOwogI2VuZGlmCisgICAgCisgICAgSXNvU3Vic3BhY2UgbmF0aXZl
RXhlY3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIGRpcmVjdEV2YWxFeGVjdXRhYmxlU3Bh
Y2U7CisgICAgSXNvU3Vic3BhY2UgaW5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOworICAgIElz
b1N1YnNwYWNlIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIG1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgcHJvZ3JhbUV4ZWN1dGFi
bGVTcGFjZTsKIAogICAgIFZNVHlwZSB2bVR5cGU7CiAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0
YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIHJldHVybiAmdm0ud2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQko
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuY3BwOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJN
YXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBEZXN0cm95RnVuYyB7CisgICAg
QUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0Cisg
ICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8SlNXZWJBc3NlbWJseUNv
ZGVCbG9jaz46OnZhbHVlLCAiT3RoZXJ3aXNlLCB0aGlzIGNvZGUgd291bGQgbm90IGJlIGNvcnJl
Y3QuIik7CisgICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluZm8oKS0+bWV0aG9kVGFi
bGUuZGVzdHJveShjZWxsKTsKKyAgICB9Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
KworSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KiBhbGxvY2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1
dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9
CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZSgpCit7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
OjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVl
TGlzdCkKK3sKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3Qs
IERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZt
LCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAko
cmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE0
ICsyNCwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlLmgiCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDcsMjEgKzQ2LDIxIEBAIHN0cnVjdCBEZXN0cm95
RnVuYyB7CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2U6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3RyaW5nIG5hbWUs
IEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1
YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwg
SGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFw
Q2VsbFR5cGU6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVh
cENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6
OkpTQ2VsbCkpCiB7CiB9CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6fkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSgpCiB7CiB9CiAKLXZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3ZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
aGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25v
d2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNo
U3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAot
dm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0Nl
bGwqIGNlbGwpCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OmRlc3Ry
b3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAy
MjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZS5oOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVk
ZSAiU3Vic3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IqKTsKKyAgICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2UoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBG
cmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJy
aWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCShyZXZpc2lv
biAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNCBA
QAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNp
bmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitjbGFzcyBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlIDogcHVibGljIEhlYXBDZWxsVHlwZSB7CiBw
dWJsaWM6Ci0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwg
SGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICB2aXJ0dWFsIH5KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UoKTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlKCk7CisgICAgdmlydHVhbCB+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlw
ZSgpOwogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZy
ZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNDkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCIKLQotI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3Bh
Y2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVy
YXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2ZpbmFsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+Ojp2YWx1ZSwgIk90aGVy
d2lzZSwgdGhpcyBjb2RlIHdvdWxkIG5vdCBiZSBjb3JyZWN0LiIpOwotICAgICAgICBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrOjppbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7Ci0gICAg
fQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwg
SGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vi
c3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBI
ZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQotewotfQotCi1KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2U6On5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKQotewotfQotCi12
b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZp
bmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKLX0KLQot
dm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0Nl
bGwqIGNlbGwpCi17Ci0gICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCShub25leGlz
dGVudCkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQot
I2luY2x1ZGUgIlN1YnNwYWNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgewotcHVibGljOgotICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGln
bmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgdmlydHVhbCB+SlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlKCk7Ci0gICAgCi0gICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFu
ZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwq
KSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseU1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IEJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0aWMg
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgLy8gV2UgaG9sZCBvbnRvIGEg
bG90IG9mIG1lbW9yeSwgc28gaXQgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UgdG8gYmUgc3dlcHQgZWFn
ZXJseS4KICAgICAgICAgcmV0dXJuICZ2bS5lYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RT
cGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTExLTE3ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR0Mgc2hvdWxkIHN1cHBv
cnQgaXNvaGVhcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3OTI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4KKyAgICAgICAgCisgICAg
ICAgIEFkb3B0aW5nIGNoYW5nZXMgaW4gSlNDIFN1YnNwYWNlIEFQSS4KKworICAgICAgICAqIEZv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRDb25zdHJhaW50
U3Vic3BhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6Z2xvYmFsT2JqZWN0T3V0cHV0Q29uc3Ry
YWludFN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0YSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNWTUNs
aWVudERhdGE6Om91dHB1dENvbnN0cmFpbnRTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZN
Q2xpZW50RGF0YTo6Z2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRl
SGVhZGVyKToKKwogMjAxNy0xMS0xNiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgW1BheW1lbnQgUmVxdWVzdF0gVXBkYXRlIGZlYXR1cmUgc3RhdHVzIHRvICJTdXBw
b3J0ZWQgSW4gUHJldmlldyIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuY3BwCShyZXZpc2lvbiAyMjQ5
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMTIgQEAgSlNET01XaW5kb3cmIEpTRE9NT2JqZWN0Ojpk
b21XaW5kb3coKSBjbwogICAgIHJldHVybiAqZG9tV2luZG93OwogfQogCi1TdWJzcGFjZSogb3V0
cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKFZNJiB2bSkKK0NvbXBsZXRlU3Vic3BhY2UqIG91dHB1
dENvbnN0cmFpbnRTdWJzcGFjZUZvcihWTSYgdm0pCiB7CiAgICAgcmV0dXJuICZzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5vdXRwdXRDb25zdHJhaW50U3BhY2Uo
KTsKIH0KIAotU3Vic3BhY2UqIGdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZv
cihWTSYgdm0pCitDb21wbGV0ZVN1YnNwYWNlKiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50
U3Vic3BhY2VGb3IoVk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKS0+Z2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNl
KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuaAko
cmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFw
cGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDggQEAgcHJvdGVjdGVkOgogICAgIH0K
IH07CiAKLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3Vic3BhY2UqIG91dHB1dENvbnN0cmFpbnRTdWJz
cGFjZUZvcihKU0M6OlZNJik7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OlN1YnNwYWNlKiBnbG9iYWxP
YmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlNDOjpWTSYpOworV0VCQ09SRV9FWFBP
UlQgSlNDOjpDb21wbGV0ZVN1YnNwYWNlKiBvdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlND
OjpWTSYpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpDb21wbGV0ZVN1YnNwYWNlKiBnbG9iYWxPYmpl
Y3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlNDOjpWTSYpOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBJbXBsZW1lbnRhdGlvbkNsYXNzPiBjbGFzcyBKU0RPTVdyYXBwZXIgOiBwdWJsaWMgSlNE
T01PYmplY3QgewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8aGVhcC9NYXJrZWRCbG9ja0lubGluZXMu
aD4KICNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvVmlz
aXRpbmdUaW1lb3V0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0uaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogCkBAIC00NCw4ICs0Niw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBK
U1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQogICAgIDogbV9idWlsdGluRnVu
Y3Rpb25zKHZtKQogICAgICwgbV9idWlsdGluTmFtZXMoJnZtKQotICAgICwgbV9vdXRwdXRDb25z
dHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhl
YXAsIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBtX2dsb2JhbE9iamVjdE91
dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcvIE91dHB1dCBDb25z
dHJhaW50Iiwgdm0uaGVhcCwgdm0uZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIG1f
b3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIgdy8gT3V0cHV0IENvbnN0cmFp
bnQiLCB2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIHZt
LmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBtX2dsb2JhbE9iamVjdE91dHB1dENv
bnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcvIE91dHB1dCBDb25zdHJhaW50
Iiwgdm0uaGVhcCwgdm0uc2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCks
IHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHJldmlzaW9uIDIy
NDkzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZUJ1
aWx0aW5OYW1lcyYgYnVpbHRpbk5hbWVzKCkgeyByZXR1cm4gbV9idWlsdGluTmFtZXM7IH0KICAg
ICBKU0J1aWx0aW5GdW5jdGlvbnMmIGJ1aWx0aW5GdW5jdGlvbnMoKSB7IHJldHVybiBtX2J1aWx0
aW5GdW5jdGlvbnM7IH0KICAgICAKLSAgICBKU0M6OlN1YnNwYWNlJiBvdXRwdXRDb25zdHJhaW50
U3BhY2UoKSB7IHJldHVybiBtX291dHB1dENvbnN0cmFpbnRTcGFjZTsgfQotICAgIEpTQzo6U3Vi
c3BhY2UmIGdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgpIHsgcmV0dXJuIG1fZ2xv
YmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlOyB9CisgICAgSlNDOjpDb21wbGV0ZVN1YnNw
YWNlJiBvdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBtX291dHB1dENvbnN0cmFpbnRT
cGFjZTsgfQorICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSYgZ2xvYmFsT2JqZWN0T3V0cHV0Q29u
c3RyYWludFNwYWNlKCkgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Bh
Y2U7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFj
aE91dHB1dENvbnN0cmFpbnRTcGFjZShjb25zdCBGdW5jJiBmdW5jKQpAQCAtNzYsOCArNzYsOCBA
QCBwcml2YXRlOgogICAgIEpTQnVpbHRpbkZ1bmN0aW9ucyBtX2J1aWx0aW5GdW5jdGlvbnM7CiAg
ICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyBtX2J1aWx0aW5OYW1lczsKICAgICAKLSAgICBKU0M6OkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UgbV9vdXRwdXRDb25zdHJhaW50U3BhY2U7Ci0gICAg
SlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UgbV9nbG9iYWxPYmplY3RPdXRw
dXRDb25zdHJhaW50U3BhY2U7CisgICAgSlNDOjpDb21wbGV0ZVN1YnNwYWNlIG1fb3V0cHV0Q29u
c3RyYWludFNwYWNlOworICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSBtX2dsb2JhbE9iamVjdE91
dHB1dENvbnN0cmFpbnRTcGFjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjczNSw3ICsyNzM1LDcgQEAg
c3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRoaXMganVzdCBjYWxscyB2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0
aGlzLgogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2
aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOwog
ICAgICAgICAgICAgbXkgJHN1YnNwYWNlRnVuYyA9IElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZh
Y2UpID8gImdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvciIgOiAib3V0cHV0
Q29uc3RyYWludFN1YnNwYWNlRm9yIjsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0YXRpYyBKU0M6OlN1YnNwYWNlKiBzdWJzcGFjZUZv
cihKU0M6OlZNJiB2bSkgeyByZXR1cm4gJHN1YnNwYWNlRnVuYyh2bSk7IH1cbiIpOworICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RhdGlj
IEpTQzo6Q29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pIHsgcmV0dXJu
ICRzdWJzcGFjZUZ1bmModm0pOyB9XG4iKTsKICAgICAgICAgfQogICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327343</attachid>
            <date>2017-11-19 08:12:55 -0800</date>
            <delta_ts>2017-11-19 09:15:16 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>209071</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0OTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNy0xMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBzdXBwb3J0IGlzb2hlYXBzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZXhwYW5kcyB0aGUgcG93ZXIgb2YgdGhl
IFN1YnNwYWNlIEFQSSBpbiBKU0M6CisgICAgICAgIAorICAgICAgICAtIEV2ZXJ5dGhpbmcgYXNz
b2NpYXRlZCB3aXRoIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIG9iamVjdHMgaXMgbm93IHBhcnQg
b2YgdGhlIEhlYXBDZWxsVHlwZSBjbGFzcy4KKyAgICAgICAgICBXZSBoYXZlIGRpZmZlcmVudCBI
ZWFwQ2VsbFR5cGVzIGZvciBkaWZmZXJlbnQgZGVzdHJ1Y3Rpb24gc3RyYXRlZ2llcy4gQW55IFN1
YnNwYWNlIGNhbiB1c2UgYW55CisgICAgICAgICAgSGVhcENlbGxUeXBlOyB0aGVzZSBhcmUgb3J0
aG9nb25hbCB0aGluZ3MuCisgICAgICAgIAorICAgICAgICAtIFRoZXJlIGFyZSBub3cgdHdvIHZh
cmlhbnRzIG9mIFN1YnNwYWNlOiBDb21wbGV0ZVN1YnNwYWNlLCB3aGljaCBjYW4gYWxsb2NhdGUg
YW55IHNpemUgb2JqZWN0cyB1c2luZworICAgICAgICAgIGFueSBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOyBhbmQgSXNvU3Vic3BhY2UsIHdoaWNoIGNhbiBhbGxvY2F0ZSBqdXN0IG9uZSBzaXplIG9m
IG9iamVjdCBhbmQgdXNlcyBhCisgICAgICAgICAgc3BlY2lhbCB2aXJ0dWFsIG1lbW9yeSBwb29s
IGZvciB0aGF0IHB1cnBvc2UuIExpa2UgYm1hbGxvYydzIElzb0hlYXAsIElzb1N1YnNwYWNlIGhv
YXJkcyB2aXJ0dWFsCisgICAgICAgICAgcGFnZXMgYnV0IHJlbGVhc2VzIHRoZSBwaHlzaWNhbCBw
YWdlcyBhcyBwYXJ0IG9mIHRoZSByZXNwZWN0aXZlIGFsbG9jYXRvcidzIHNjYXZlbmdpbmcgcG9s
aWN5CisgICAgICAgICAgKHRoZSBTY2F2ZW5nZXIgaW4gYm1hbGxvYyBmb3IgSXNvSGVhcCBhbmQg
dGhlIGluY3JlbWVudGFsIHN3ZWVwIGFuZCBmdWxsIHN3ZWVwIGluIFJpcHRpZGUgZm9yCisgICAg
ICAgICAgSXNvU3Vic3BhY2UpLgorICAgICAgICAKKyAgICAgICAgU28gZmFyLCB0aGlzIHBhdGNo
IGp1c3QgcHV0cyBzdWJ0eXBlcyBvZiBFeGVjdXRhYmxlQmFzZSBpbiBJc29TdWJzcGFjZXMuIElm
IGl0IHdvcmtzLCB3ZSBjYW4gdXNlIGl0CisgICAgICAgIGZvciBtb3JlIHRoaW5ncy4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUv
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjppbml0aWFsaXplUHJvZmlsZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlUmF3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxv
Y2F0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9j
YXRvckZvclNpemUpOgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyQWxsb2NhdG9y
KToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJTdWJzcGFj
ZSk6CisgICAgICAgICogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg6CisgICAgICAgIChK
U0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZpcnN0QWxsb2NhdG9yIGNvbnN0KToKKyAgICAg
ICAgKiBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFw
L0NvbXBsZXRlU3Vic3BhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJz
cGFjZTo6Q29tcGxldGVTdWJzcGFjZSk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6
On5Db21wbGV0ZVN1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxs
b2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUpOgor
ICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgorICAg
ICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KToKKyAgICAgICAg
KEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVTbG93KToKKyAgICAgICAgKEpTQzo6Q29t
cGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KToKKyAgICAgICAgKiBoZWFwL0NvbXBsZXRl
U3Vic3BhY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6Om9mZnNl
dE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXApOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNl
OjphbGxvY2F0b3JGb3JTaXplU3RlcCk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvck5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAvSGVhcENlbGxUeXBlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBlKToKKyAg
ICAgICAgKEpTQzo6SGVhcENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpTQzo6
SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6
ZGVzdHJveSk6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbFR5cGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkhlYXBDZWxsVHlwZTo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogaGVhcC9J
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oklzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3I6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+SXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcik6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlQWxpZ25lZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OmZyZWVBbGlnbmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6
SXNvU3Vic3BhY2U6On5Jc29TdWJzcGFjZSk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjph
bGxvY2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9u
VmlydHVhbCk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0ZSk6CisgICAgICAg
IChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6
Ok1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjpzZXRTdWJzcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGVTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZUltcGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6bmV4dEFsbG9jYXRvcklu
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6c2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik6CisgICAgICAg
ICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAgICAg
ICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRT
cGFjZTo6YWRkTWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6
CisgICAgICAgICogaGVhcC9TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpT
dWJzcGFjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjppbml0aWFsaXplKToKKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRl
c3Ryb3kpOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24pOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNwYWNlOjphbGxvY2F0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjp0cnlBbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3Vic3BhY2U6OmFsbG9jYXRlU2xvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNw
YWNlOjp0cnlBbGxvY2F0ZVNsb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6
ZGlkQWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAg
ICAgKEpTQzo6U3Vic3BhY2U6OmhlYXBDZWxsVHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6OlN1
YnNwYWNlOjpuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpTdWJzcGFjZTo6c2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0
ZXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2l6ZVN0
ZXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6dHJ5QWxsb2NhdG9yRm9yKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmFsbG9jYXRvckZvcik6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25ld19vYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnRyeUNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0Fy
cmF5UmlnaHQpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyk6CisgICAgICAgICogcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpz
dWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGVCYXNlLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpzdWJzcGFjZUZv
cik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDoKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3RlZCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVj
dGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQpOgorICAgICAgICAqIHJ1bnRpbWUvSlND
ZWxsLmg6CisgICAgICAgIChKU0M6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pT
Q2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzdWJzcGFjZUZvcik6CisgICAg
ICAgIChKU0M6OnRyeUFsbG9jYXRlQ2VsbEhlbHBlcik6CisgICAgICAgIChKU0M6OmFsbG9jYXRl
Q2VsbCk6CisgICAgICAgIChKU0M6OnRyeUFsbG9jYXRlQ2VsbCk6CisgICAgICAgICogcnVudGlt
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcC4KKyAgICAgICAgKEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlKToKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6
On5KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgIChKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgIChKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2U6On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2UuaC4KKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaDoKKyAgICAgICAgKEpTQzo6SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN1YnNw
YWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6c3Vic3BhY2VGb3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHAuCisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxU
eXBlOjp+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgIChK
U0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKToK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5oLgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnN1YnNwYWNlRm9yKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAuCisgICAgICAg
IChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjpKU1N0cmluZ0hlYXBDZWxsVHlwZSk6CisgICAg
ICAgIChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjp+SlNTdHJpbmdIZWFwQ2VsbFR5cGUpOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXApOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpT
U3RyaW5nU3Vic3BhY2U6OkpTU3RyaW5nU3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICogcnVu
dGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmguCisgICAgICAgICogcnVudGltZS9KU1N0
cmluZ1N1YnNwYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nU3Vi
c3BhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRh
YmxlLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisgICAgICAgICog
cnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmg6CisgICAg
ICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06OmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAu
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxs
VHlwZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6
OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpzdWJzcGFjZUZvcik6
CisKIDIwMTctMTEtMTYgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBmZWF0dXJlIGRlZmluZSBmb3IgYWx0ZXJuYXRpdmUgcHJlc2VudGF0aW9uIGJ1dHRv
biBlbGVtZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjQ5
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTQ3MCw2ICs0NzAsNyBAQCBoZWFwL0NlbGxDb250YWluZXIuY3BwCiBoZWFwL0NvZGVCbG9j
a1NldC5jcHAKIGhlYXAvQ29sbGVjdGlvblNjb3BlLmNwcAogaGVhcC9Db2xsZWN0b3JQaGFzZS5j
cHAKK2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAKIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
CiBoZWFwL0RlZmVyR0MuY3BwCiBoZWFwL0Rlc3RydWN0aW9uTW9kZS5jcHAKQEAgLTQ4NiwxMiAr
NDg3LDE1IEBAIGhlYXAvSGFuZGxlU2V0LmNwcAogaGVhcC9IYW5kbGVTdGFjay5jcHAKIGhlYXAv
SGVhcC5jcHAKIGhlYXAvSGVhcENlbGwuY3BwCitoZWFwL0hlYXBDZWxsVHlwZS5jcHAKIGhlYXAv
SGVhcEZpbmFsaXplckNhbGxiYWNrLmNwcAogaGVhcC9IZWFwSGVscGVyUG9vbC5jcHAKIGhlYXAv
SGVhcFByb2ZpbGVyLmNwcAogaGVhcC9IZWFwU25hcHNob3QuY3BwCiBoZWFwL0hlYXBTbmFwc2hv
dEJ1aWxkZXIuY3BwCiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKK2hlYXAvSXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5jcHAKK2hlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0dWJS
b3V0aW5lU2V0LmNwcAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3BwCiBoZWFwL01hY2hpbmVTdGFj
a01hcmtlci5jcHAKQEAgLTc3Miw3ICs3NzYsNyBAQCBydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uY3BwCiBydW50aW1lL0pTRGF0YVZpZXcuY3BwCiBydW50aW1lL0pTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwCiBydW50aW1lL0pTRGF0ZU1hdGguY3BwCi1ydW50aW1lL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCitydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmNwcAogcnVudGltZS9KU0ZpeGVkQXJyYXkuY3BwCiBydW50aW1lL0pTRnVuY3Rp
b24uY3BwCiBydW50aW1lL0pTR2VuZXJhdG9yRnVuY3Rpb24uY3BwCkBAIC04MDcsMTQgKzgxMSwx
NCBAQCBydW50aW1lL0pTU2NvcGUuY3BwCiBydW50aW1lL0pTU2NyaXB0RmV0Y2hlci5jcHAKIHJ1
bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuY3BwCiBydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QuY3BwCi1ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZS5jcHAKK3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAK
IHJ1bnRpbWUvSlNTZXQuY3BwCiBydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCiBydW50aW1lL0pT
U291cmNlQ29kZS5jcHAKIHJ1bnRpbWUvSlNTdHJpbmcuY3BwCiBydW50aW1lL0pTU3RyaW5nSXRl
cmF0b3IuY3BwCiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAotcnVudGltZS9KU1N0cmluZ1N1
YnNwYWNlLmNwcAorcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAKIHJ1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAKIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAog
cnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCkBAIC05NzEsNyArOTc1LDcgQEAg
d2FzbS9qcy9KU1RvV2FzbS5jcHAKIHdhc20vanMvSlNUb1dhc20uaAogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAotd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCit3YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJy
b3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKIHdhc20vanMvSlNXZWJB
c3NlbWJseUxpbmtFcnJvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEzLDcgKzMxMyw3
IEBACiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIw
MDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2
QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZp
b3VzU3BpbGxzLmggKi87IH07CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0
aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi87IH07Ci0JCTBGNEY4Mjg4MUUy
RkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUyRkZE
REIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjRGODI4ODFFMkZG
REUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJG
RkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGODI4
QzFFMzFCOTc2MDA3NTE4NEMgLyogU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4MjhB
MUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJl
clN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi87
IH07CiAJCTBGNTUxM0E2MUQ1QTY4MkMwMEMzMkJEOCAvKiBGcmVlTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTEzQTUxRDVBNjgyQTAwQzMy
QkQ4IC8qIEZyZWVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTQwMCw4ICs0MDAsOCBAQAogCQkwRjdERjEzNTFFMjk3MERDMDA5NTk1MUIg
LyogTWFya2VkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjdERjEzMDFFMjk3MEQ1MDA5NTk1MUIgLyogTWFya2VkU3BhY2VJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3REYxMzcxRTI5NzBFMTAwOTU5NTFCIC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMjFFMjk3MEQ1MDA5NTk1MUIgLyog
U3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjdERjEzODFFMjk3MEU0MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMzFFMjk3MEQ1
MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3REYxM0MxRTI5NzExMzAwOTU5NTFCIC8qIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJs
ZU9iamVjdFN1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEY3REYxM0YxRTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTNF
MUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3REYxM0MxRTI5NzExMzAwOTU5NTFC
IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyog
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyog
SlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxs
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGN0RGMTQ2MUUyQkVGNkEwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjE0NTFFMkJF
RjY4MDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0Y5ODhDMUQ5NTk2QzgwMEY0RjEy
RSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBE
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLzsgfTsKIAkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NDAsNiAr
NTQwLDExIEBACiAJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJD
QzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTgxNzQ4MzBBMjAwN0Iz
QzFCIC8qIERGR1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLzsg
fTsKIAkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U5MTc0ODk2
QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFs
bG9jYXRpb25GYWlsdXJlTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJl
TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRENFMTIyMUZBRTg1OEMwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTFGMUZBRTg1ODcwMDZGMzkw
MSAvKiBIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkRDRTEyQTFGQUZBODVGMDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFj
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0Ux
MjgxRkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTEyRDFGQUZCNEU1MDA2RjM5
MDEgLyogSXNvU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRENFMTJCMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTMyMUZC
MTFEQTQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEzMDFGQjExRDlEMDA2RjM5
MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcC5oICovOyB9OwogCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEZERjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIzS2lu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjY3
RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICovOyB9OwpAQCAtMTA5OSw3ICsxMTA0LDcg
QEAKIAkJNzlEQUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURBRTI3OTFFMDND
ODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMgLyog
SGFzT3duUHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2Fj
aGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUVFMEMwMDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4NTAw
MDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrSGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUYxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxG
bHVzaEluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUY4RkMxRDFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5z
ZXJ0aW9uUGhhc2UuaCAqLzsgfTsKIAkJNzlGQzhBMDgxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1Jl
Z2lzdGVyZWRTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdSZWdpc3RlcmVkU3RydWN0
dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAv
KiBXYXNtRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTIyNzAsOCArMjI3NSw4IEBACiAJCTBGNERFMUQwMUM0RDc2NEIwMDRENkMxMSAv
KiBCM09yaWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNPcmlnaW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyog
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjRGODI4NTFFMkZGRERCMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAv
KiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRGODI4NjFFMkZGRERCMDA3NTE4
NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEY4Mjg5MUUzMUI5NzEwMDc1
MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEY4MjhBMUUzMUI5
NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwQUYzQjE5M0U4QjM5
MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBwYXRoID0gZGZnL0RG
R1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjQxMywxMCArMjQxOCwxMCBAQAogCQkwRjdERjEzMTFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vic3Bh
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Vic3BhY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdERjEzMjFFMjk3MEQ1MDA5NTk1MUIg
LyogU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Vic3BhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3REYxMzMxRTI5NzBENTAwOTU5NTFC
IC8qIFN1YnNwYWNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dWJzcGFjZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxMzkx
RTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGN0RGMTNBMUUyOTcxMEUw
MDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3Ry
aW5nU3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
dHJpbmdTdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGN0RGMTNF
MUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nU3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3REYxMzkxRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ0hlYXBDZWxsVHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0RGMTNFMUUyQUZDNEIwMDk1OTUx
QiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAv
KiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmll
ckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY2Niw2
ICsyNjcxLDE1IEBACiAJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXb3JrbGlzdC5jcHA7
IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3QuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNFOTE3NDg5NkM3MDA3QjND
MUIgLyogQ29uY3VycmVudEpTTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb25jdXJyZW50SlNMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENF
MTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRENFMTFGMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENF
MTIwMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0Ux
MjcxRkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29tcGxldGVTdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRENFMTI4MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbXBsZXRlU3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElzb1N1YnNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTJDMUZB
RkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJc29T
dWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTJGMUZCMTFE
OUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
Lmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5l
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1ODEsOCArMzU5NSw4IEBACiAJ
CTc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc093blByb3BlcnR5Q2FjaGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlh
YmxlRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmFyaWFibGVFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlRW52aXJvbm1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOyBwYXRoID0ganMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJz
cGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUVGRDQ4MTFFQkMwNDVDMDBG
M0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RG
RUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmg7
IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
TWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OUY4RkMxRDFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUZDOEEwNzFFMzJFOUYwMDBEODhG
MEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdSZWdpc3RlcmVkU3RydWN0dXJlLmg7IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJl
ZFN0cnVjdHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ4Niw2ICs1NTAw
LDcgQEAKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2Nh
dGluZ1Njb3BlLmggKi8sCisJCQkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRp
b25GYWlsdXJlTW9kZS5oICovLAogCQkJCTBGOTYzMDM1MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxv
Y2F0b3JBdHRyaWJ1dGVzLmNwcCAqLywKIAkJCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyog
QWxsb2NhdG9yQXR0cmlidXRlcy5oICovLAogCQkJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAv
KiBDZWxsQ29udGFpbmVyLmNwcCAqLywKQEAgLTU1MDAsNiArNTUxNSw4IEBACiAJCQkJMEZBNzYy
MDExREI5MjQyMzAwQjdBMkZEIC8qIENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUU1
MUU0M0QzNDcwMDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5jcHAgKi8sCiAJCQkJMEZEMEU1RTYx
RTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmggKi8sCisJCQkJMEZEQ0UxMjcxRkFG
QTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuY3BwICovLAorCQkJCTBGRENFMTI4MUZB
RkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8sCiAJCQkJMTQ2QjE0REIxMkVC
NUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFGMjEy
RUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKIAkJCQkwRjdERjEyRjFF
Mjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKQEAgLTU1NTAsNiAr
NTU2Nyw4IEBACiAJCQkJREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBDZWxsLmNwcCAq
LywKIAkJCQlEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAqLywKIAkJCQkw
RjA3MEE0NDFENTQzQTg5MDA2RTcyMzIgLyogSGVhcENlbGxJbmxpbmVzLmggKi8sCisJCQkJMEZE
Q0UxMjAxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJMEZEQ0Ux
MUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovLAogCQkJCTBGMENBRUZEMUVD
NERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suY3BwICovLAogCQkJCTBGMENB
RUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAqLywKIAkJCQkw
RjMyQkQwRTFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuY3BwICovLApAQCAtNTU2
Niw2ICs1NTg1LDEwIEBACiAJCQkJMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGls
LmggKi8sCiAJCQkJQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBl
ci5jcHAgKi8sCiAJCQkJQzI1RjhCQ0MxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dl
ZXBlci5oICovLAorCQkJCTBGRENFMTJGMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAorCQkJCTBGRENFMTJDMUZBRkI0REUwMDZGMzkw
MSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCisJCQkJMEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8q
IElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lU2V0LmNwcCAqLywKIAkJCQkwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklU
U3R1YlJvdXRpbmVTZXQuaCAqLywKIAkJCQkwRjA3MEE0NTFENTQzQTg5MDA2RTcyMzIgLyogTGFy
Z2VBbGxvY2F0aW9uLmNwcCAqLywKQEAgLTY1MDcsOCArNjUzMCw4IEBACiAJCQkJOTc4OEZDMjIx
NDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhGQzIzMTQ3MUFE
MEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2
Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCi0JCQkJMEY3REYxMzkxRTI5NzEwRTAw
OTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovLAotCQkJCTBGN0RG
MTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmggKi8s
CisJCQkJMEY3REYxMzkxRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQlBN0I0QUNBRTE0ODRDOUNFMDBC
MzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCAqLywKIAkJCQk3OTg5Mzc3NjFEQ0FCNTczMDBGOEQ0
RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLywKIAkJCQk3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0RkIg
LyogSlNGaXhlZEFycmF5LmggKi8sCkBAIC02NTkzLDggKzY2MTYsOCBAQAogCQkJCUUzOEQwNjBC
MUY4RTgxNDEwMDY0OUNGMiAvKiBKU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oICovLAogCQkJCTBG
OTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAq
LywKIAkJCQkwRjkxOUQwRjE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oICovLAotCQkJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovLAotCQkJCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0
QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCAqLywKKwkJCQkwRjRGODI4
NTFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5jcHAgKi8sCisJCQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQlBNzI5OUQ5QjE3RDEyODM3MDA1RjVG
RjkgLyogSlNTZXQuY3BwICovLAogCQkJCUE3Mjk5RDlDMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1Nl
dC5oICovLAogCQkJCUE3OTBERDY5MTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmNw
cCAqLywKQEAgLTY2MDksOCArNjYzMiw4IEBACiAJCQkJNzBFQzBFQkQxQUEwRDdEQTAwQjZBQUZB
IC8qIEpTU3RyaW5nSXRlcmF0b3IuaCAqLywKIAkJCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYg
LyogSlNTdHJpbmdKb2luZXIuY3BwICovLAogCQkJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAv
KiBKU1N0cmluZ0pvaW5lci5oICovLAotCQkJCTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAvKiBK
U1N0cmluZ1N1YnNwYWNlLmNwcCAqLywKLQkJCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIgLyog
SlNTdHJpbmdTdWJzcGFjZS5oICovLAorCQkJCTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAvKiBK
U1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFC
IC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmggKi8sCiAJCQkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0
RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovLAogCQkJCTBGOTE5RDBBMTU3RUUwOUQw
MDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJNzBFQ0E2MDAxQUZEQkVB
MjAwNDQ5NzM5IC8qIEpTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgKi8sCkBAIC03Nzg2LDggKzc4
MDksOCBAQAogCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5Lmgg
Ki8sCiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suY3BwICovLAogCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggKi8sCi0JCQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8sCi0JCQkJNzlFRkQ0ODIxRUJDMDQ1QzAwRjNE
RkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oICovLAorCQkJCTc5RUZENDgx
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNw
cCAqLywKKwkJCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9ja0hlYXBDZWxsVHlwZS5oICovLAogCQkJCUFEMkZDQkE2MURCNThEQTQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJCQlBRDJGQ0JBNzFEQjU4REE0MDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oICovLAogCQkJCTc5NkZCNDM5MURG
RjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovLApAQCAtNzk5OCw2ICs4
MDIxLDcgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBB
Uk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENFMTMyMUZCMTFEQTQwMDZGMzkw
MSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgz
MzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJO
ZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTgwNDksNiArODA3Myw3IEBA
CiAJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkwMSAvKiBJc29TdWJz
cGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEMxQkYwMjc2QzAwMTND
ODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5MTlCNzgwMUUwMzU1
OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtODU5MCw2ICs4NjE1
LDcgQEAKIAkJCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk1MUMwMjRBMjgwMDI0ODFFMiAvKiBHZW5l
cmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5NzFD
MDI0QTI5MDAyNDgxRTIgLyogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5OTFDMDI0QTI5MDAyNDgxRTIgLyogR2VuZXJhdG9y
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5RDFDMDI0QTU2MDAyNDgxRTIg
LyogR2VuZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTkx
QUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLApAQCAt
ODc3Myw3ICs4Nzk5LDcgQEAKIAkJCQk5OTZCNzMxQzFCREEwOEREMDAzMzFCODQgLyogSlNEYXRh
Vmlld1Byb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3ODgwMTQxMTQ3MUFEOTIw
MDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQz
MkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU2
MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUz
QzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC04ODI2LDYgKzg4NTIsNyBAQAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBK
U01vZHVsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEOTcyMjc1MkRDNTQ0NTlC
OTEyNUI1MzkgLyogSlNNb2R1bGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMThDQkMx
MUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5REE0QTcxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9k
dWxlUmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQxRDFCOTAxM0MzMDAzNDZCNTIg
LyogSlNOYXRpdmVTdGRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTg4NTAsNyArODg3
Nyw3IEBACiAJCQkJRTMyMDFDMUQxRjhFODIzNjAwNzZBMDMyIC8qIEpTU2NyaXB0RmV0Y2hQYXJh
bWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAxMUQgLyog
SlNTY3JpcHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1N0YzMzJD
MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8q
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3Mjk5RDlFMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1NldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc5MERENzAxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJERkNCMkJCRTkwRjQxMzQ5RTFCMEJFRCAvKiBKU1NvdXJjZUNvZGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtODg2Miw3ICs4ODg5LDcgQEAKIAkJCQlCQzE4QzQyODBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI5MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZkNGLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTI4RDRB
ODE3N0I3MUM4MDAwN0ZBM0MgLyogSlNTdHJpbmdSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEY3REYxM0YxRTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENl
bGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRFN0QgLyog
SlNTeW1ib2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQ0E2MDYxQUZEQkVB
MjAwNDQ5NzM5IC8qIEpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QUQ1QzM2RUExRjc1QUQ2QTAwMEJDQUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywKQEAg
LTg4OTAsNyArODkxNyw3IEBACiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vh
a1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpT
V2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5
RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKLQkJCQk3OUVGRDQ4
NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTMxREI1
OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTc5NkZCNDNBMURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTUxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjIzLDYgKzkyNTAsNyBAQAogCQkJ
CTBGRkI2QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJENERFQzE5ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkRDRTEyMjFGQUU4NThDMDA2RjM5MDEgLyogSGVhcENlbGxU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyogVHlw
ZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVk
aXM4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVk
aXM4Nl9kZWNvZGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NTUsNyArOTU1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFsbG9jYXRp
bmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplKTsK
KyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikgewog
ICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlzIGNhc2Ugd291bGQgc3VjayEKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpCiAgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5IDw9IEpTRmluYWxP
YmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5saW5lQ2FwYWNpdHkpOwotICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uY2VsbFNwYWNlLmFsbG9jYXRvckZvcihhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5jZWxsU3Bh
Y2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpBc3NlcnQpOwogCiAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2YgZXh0cmEgaW5saW5l
IGNhcGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFzcy4KICAgICBpZiAoYWxsb2NhdG9y
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMzAsNyArNDMz
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAg
ICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6
ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+
YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFs
bG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6QXNzZXJ0KTsKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9y
UHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBhbGxvY2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBz
dG9yYWdlR1BSKTsKICAgICAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZSkpIHsKKyAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkp
IHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBhbGxv
Y2F0b3IsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAg
CkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3
T2JqZQogICAgIH0KIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxs
b2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
clB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3Nl
cnQpOwogICAgIGlmIChhbGxvY2F0b3JQdHIpIHsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKGFsbG9jYXRvclB0ciksIHNjcmF0Y2hHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKQEAgLTQy
NDksNyArNDI0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QK
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIE1hcmtlZEFsbG9jYXRvciogbWFya2VkQWxs
b2NhdG9yID0gc3Vic3BhY2VGb3I8SlNTdHJpbmc+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9y
KHNpemVvZihKU1JvcGVTdHJpbmcpKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1hcmtlZEFsbG9j
YXRvciA9IHN1YnNwYWNlRm9yPEpTU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNz
ZXJ0KTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXJrZWRBbGxvY2F0b3IpOwogICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihtYXJrZWRBbGxvY2F0b3IpLCBhbGxvY2F0b3JHUFIpOwogICAgIGVt
aXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIG1hcmtlZEFsbG9jYXRvciwgYWxsb2NhdG9yR1BS
LCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQudm0o
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTg0
MjcsNyArODQyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AK
ICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVv
ZihKU1ZhbHVlKTsKIAotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0o
KS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpOworICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ3Miw3
ICs4NDcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAg
IHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKICAgICBB
U1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dG9yRm9yKG5ld1NpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQu
dm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVh
bChuZXdTaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICBpZiAoIWFs
bG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsMTIgKzEyNCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKICNkZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAg
ICAgbWFjcm8oQXJyYXlTdG9yYWdlX3ZlY3RvciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIFwKKyAgICBtYWNybyhDb21wbGV0ZVN1
YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFs
bG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihNYXJrZWRBbGxvY2F0b3IqKSkgXAogICAgIG1h
Y3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTTGV4aWNhbEVudmly
b25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCAwLCBzaXplb2YoV3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmliZXJzLCBK
U1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJp
bmc+KSkgXAogICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVyZmxvd1N0b3JhZ2UsIFNjb3Bl
ZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpIFwKLSAgICBtYWNybyhTdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgU3Vic3BhY2U6
Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKE1hcmtlZEFsbG9jYXRvciop
KSBcCiAgICAgbWFjcm8oV3JpdGVCYXJyaWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCAwLCBzaXpl
b2YoSlNDZWxsKikpIFwKICAgICBtYWNybyhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkg
XAogICAgIG1hY3JvKGNoYXJhY3RlcnMxNiwgMCwgc2l6ZW9mKFVDaGFyKSkgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NjkzLDcgKzU2OTMsNyBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZv
cmUoc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3Ioc2l6ZW9m
KEpTUm9wZVN0cmluZykpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGFsbG9jYXRvcik7CiAgICAgICAgIAogICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKApAQCAtOTUyNSw3ICs5NTI1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VG
b3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7Cisg
ICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VG
b3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgY2VsbEFsbG9jYXRvcik7CiAKICAgICAgICAgICAg
ICAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSk7CkBAIC0xMDUyMSw3ICsxMDUyMSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMg
KiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
dm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZUluQnl0
ZXMpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtKCkuanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplSW5CeXRlcywg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICBMVmFsdWUgc3RhcnRPZlN0
b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHNs
b3dQYXRoKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFu
Y2hvcigKICAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRl
cyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwpAQCAtMTE2NjUs
NyArMTE2NjUsNyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAg
ICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKS0+YWxsb2NhdG9yRm9yKHNp
emUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENs
YXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQu
Y29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsK
ICAgICB9CiAgICAgCkBAIC0xMTY4MiwxMCArMTE2ODIsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIC8vIFRyeSB0byBkbyBzb21lIGNvbnN0YW50LWZvbGRpbmcgaGVyZS4KICAgICAg
ICAgaWYgKHN1YnNwYWNlLT5oYXNJbnRQdHIoKSAmJiBzaXplLT5oYXNJbnRQdHIoKSkgewotICAg
ICAgICAgICAgU3Vic3BhY2UqIGFjdHVhbFN1YnNwYWNlID0gYml0d2lzZV9jYXN0PFN1YnNwYWNl
Kj4oc3Vic3BhY2UtPmFzSW50UHRyKCkpOworICAgICAgICAgICAgQ29tcGxldGVTdWJzcGFjZSog
YWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxldGVTdWJzcGFjZSo+KHN1YnNwYWNl
LT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBhY3R1YWxTaXplID0gc2l6ZS0+YXNJ
bnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1
YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+YWxsb2NhdG9yRm9yKGFjdHVhbFNpemUpOwor
ICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJz
cGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OkFzc2VydCk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdC
bG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKQEAgLTExNzE1LDExICsxMTcxNSwxMSBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoCiAgICAgICAgICAg
ICBtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5TdWJzcGFjZV9hbGxv
Y2F0b3JGb3JTaXplU3RlcCwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3Bh
Y2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0
LnN1YihzaXplQ2xhc3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwogICAgIH0KICAgICAKLSAg
ICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXpl
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShDb21w
bGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9vdXQuY29uc3RJbnRQ
dHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgIH0KQEAgLTExNzQ1LDcgKzExNzQ1
LDcgQEAgcHJpdmF0ZToKICAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUuZ2V0KCktPmlubGluZUNhcGFj
aXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9y
PEpTRmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOworICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmpl
Y3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSWYg
dGhlIGFsbG9jYXRvciBpcyBudWxsLCB3ZSBjb3VsZCBzaW1wbHkgZW1pdCBhIG5vcm1hbCBDIGNh
bGwgdG8gdGhlIGFsbG9jYXRvcgogICAgICAgICAvLyBpbnN0ZWFkIG9mIHB1dHRpbmcgaXQgb24g
dGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKIAorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKIG5hbWVzcGFjZSBKU0MgeyAKIAogQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCkBAIC0zNiw2ICszOSw0MSBA
QCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+QWxpZ25lZE1lbW9yeUFsCiB7CiB9CiAKK3ZvaWQg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci0+bmV4dEFsbG9j
YXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICAKKyAgICBpZiAoIW1fZmlyc3RB
bGxvY2F0b3IpIHsKKyAgICAgICAgZm9yIChTdWJzcGFjZSogc3Vic3BhY2UgPSBtX2ZpcnN0U3Vi
c3BhY2U7IHN1YnNwYWNlOyBzdWJzcGFjZSA9IHN1YnNwYWNlLT5uZXh0U3Vic3BhY2VJbkFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IoKSkKKyAgICAgICAgICAgIHN1YnNwYWNlLT5kaWRDcmVhdGVGaXJz
dEFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fbGFzdEFsbG9jYXRvcik7CisgICAgICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7
CisgICAgICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fbGFzdEFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9jYXRv
cjsKK30KKworLy8gRklYTUU6IFdlIHVzZSB0aGlzIGlkaW9tIGEgbG90LiBXZSBzaG91bGQgY29t
ZSB1cCB3aXRoIGEgY2xldmVyIHRlbXBsYXRlIGZvciB0aGlzIGtpbmQgb2YKKy8vIHNpbmdseS1s
aW5rZWQgbGlzdCwgd2hlcmUgZWFjaCBlbGVtZW50IG1heSBiZSBvbiBtdWx0aXBsZSBsaXN0cy4K
K3ZvaWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJTdWJzcGFjZShTdWJzcGFjZSog
c3Vic3BhY2UpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIXN1YnNwYWNlLT5uZXh0U3Vic3BhY2VJ
bkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7CisgICAgCisgICAgaWYgKCFtX2ZpcnN0U3Vic3Bh
Y2UpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFzdFN1YnNwYWNlKTsKKyAgICAgICAg
bV9maXJzdFN1YnNwYWNlID0gc3Vic3BhY2U7CisgICAgICAgIG1fbGFzdFN1YnNwYWNlID0gc3Vi
c3BhY2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2xhc3RTdWJzcGFjZS0+c2V0
TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKHN1YnNwYWNlKTsKKyAgICBtX2xh
c3RTdWJzcGFjZSA9IHN1YnNwYWNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIE1hcmtlZEFsbG9jYXRvcjsKK2NsYXNzIFN1YnNw
YWNlOworCiBjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKQEAgLTQwLDYgKzQzLDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZnJlZUFs
aWduZWRNZW1vcnkodm9pZCopID0gMDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0ID0gMDsKKworICAgIHZvaWQgcmVnaXN0ZXJBbGxvY2F0b3IoTWFya2Vk
QWxsb2NhdG9yKik7CisgICAgTWFya2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlyc3RBbGxvY2F0b3I7IH0KKworICAgIHZvaWQgcmVnaXN0ZXJTdWJzcGFj
ZShTdWJzcGFjZSopOworCitwcml2YXRlOgorICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJzdEFs
bG9jYXRvciB7IG51bGxwdHIgfTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFzdEFsbG9jYXRv
ciB7IG51bGxwdHIgfTsKKyAgICBTdWJzcGFjZSogbV9maXJzdFN1YnNwYWNlIHsgbnVsbHB0ciB9
OworICAgIFN1YnNwYWNlKiBtX2xhc3RTdWJzcGFjZSB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlv
bkZhaWx1cmVNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlIHsKKyAgICBBc3NlcnQsCisgICAgUmV0dXJuTnVsbAorfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRl
U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bXBsZXRlU3Vic3BhY2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJN
YXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJQcmV2ZW50Q29sbGVjdGlvblNjb3BlLmgi
CisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitDb21w
bGV0ZVN1YnNwYWNlOjpDb21wbGV0ZVN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwg
SGVhcENlbGxUeXBlKiBoZWFwQ2VsbFR5cGUsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwKQoreworICAgIGlu
aXRpYWxpemUoaGVhcENlbGxUeXBlLCBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzOyBpLS07KQorICAgICAgICBt
X2FsbG9jYXRvckZvclNpemVTdGVwW2ldID0gbnVsbHB0cjsKK30KKworQ29tcGxldGVTdWJzcGFj
ZTo6fkNvbXBsZXRlU3Vic3BhY2UoKQoreworfQorCitNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRl
U3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
IGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemUs
IGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoc2l6
ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFs
KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworfQorCit2b2lkKiBDb21wbGV0
ZVN1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkK
K3sKKyAgICB2b2lkICpyZXN1bHQ7CisgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJl
dHVybk51bGwpKQorICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFs
Q29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gYWxsb2Nh
dGVTbG93KHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK01hcmtlZEFsbG9jYXRvciogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9y
Rm9yU2xvdyhzaXplX3Qgc2l6ZSkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBNYXJrZWRTcGFjZTo6
c2l6ZUNsYXNzVG9JbmRleChzaXplKTsKKyAgICBzaXplX3Qgc2l6ZUNsYXNzID0gTWFya2VkU3Bh
Y2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdOworICAgIGlmICghc2l6ZUNsYXNzKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHdyaXR0ZW4gaW4g
c3VjaCBhIHdheSB0aGF0IGl0J3MgT0sgZm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAgaGVy
ZSBpZiB0aGV5IHdhbnQKKyAgICAvLyB0byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21lIGFs
bG9jYXRvciB0aGF0IGhhZG4ndCBiZWVuIHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJseS0K
KyAgICAvLyBqdXN0LWFzLWdvb2Qgc29sdXRpb24gd291bGQgYmUgdG8gcmV0dXJuIG51bGwgaWYg
d2UncmUgaW4gdGhlIEpJVCBzaW5jZSB0aGUgSklUIHRyZWF0cyBudWxsCisgICAgLy8gYWxsb2Nh
dG9yIGFzICJwbGVhc2UgYWx3YXlzIHRha2UgdGhlIHNsb3cgcGF0aCIuIEJ1dCwgdGhhdCBjb3Vs
ZCBsZWFkIHRvIHBlcmZvcm1hbmNlCisgICAgLy8gc3VycHJpc2VzIGFuZCB0aGUgYWxnb3JpdGht
IGhlcmUgaXMgcHJldHR5IGVhc3kuIE9ubHkgdGhpcyBjb2RlIGhhcyB0byBob2xkIHRoZSBsb2Nr
LCB0bworICAgIC8vIHByZXZlbnQgc2ltdWx0YW5lb3VzbHkgTWFya2VkQWxsb2NhdG9yIGNyZWF0
aW9ucyBmcm9tIG11bHRpcGxlIHRocmVhZHMuIFRoaXMgY29kZSBlbnN1cmVzCisgICAgLy8gdGhh
dCBhbnkgImZvckVhY2hBbGxvY2F0b3IiIHRyYXZlcnNhbHMgd2lsbCBvbmx5IHNlZSB0aGlzIGFs
bG9jYXRvciBhZnRlciBpdCdzIGluaXRpYWxpemVkCisgICAgLy8gZW5vdWdoOiBpdCB3aWxsIGhh
dmUgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmFsbG9jYXRvckxvY2soKSk7
CisgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXpl
U3RlcFtpbmRleF0pCisgICAgICAgIHJldHVybiBhbGxvY2F0b3I7CisKKyAgICBpZiAoZmFsc2Up
CisgICAgICAgIGRhdGFMb2coIkNyZWF0aW5nIG1hcmtlZCBhbGxvY2F0b3IgZm9yICIsIG1fbmFt
ZSwgIiwgIiwgbV9hdHRyaWJ1dGVzLCAiLCAiLCBzaXplQ2xhc3MsICIuXG4iKTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWFya2VkQWxsb2NhdG9yPiB1bmlxdWVBbGxvY2F0b3IgPQorICAgICAgICBz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtlZEFsbG9jYXRvcj4obV9zcGFjZS5oZWFwKCksIHNpemVDbGFz
cyk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB1bmlxdWVBbGxvY2F0b3IuZ2V0
KCk7CisgICAgbV9hbGxvY2F0b3JzLmFwcGVuZChXVEZNb3ZlKHVuaXF1ZUFsbG9jYXRvcikpOwor
ICAgIGFsbG9jYXRvci0+c2V0U3Vic3BhY2UodGhpcyk7CisgICAgbV9zcGFjZS5hZGRNYXJrZWRB
bGxvY2F0b3IobG9ja2VyLCBhbGxvY2F0b3IpOworICAgIGluZGV4ID0gTWFya2VkU3BhY2U6OnNp
emVDbGFzc1RvSW5kZXgoc2l6ZUNsYXNzKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChN
YXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF0gIT0gc2l6ZUNsYXNzKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRl
eF0gPSBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAgICBpZiAoIWluZGV4LS0pCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9ySW5TdWJz
cGFjZShtX2ZpcnN0QWxsb2NhdG9yKTsKKyAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPnJl
Z2lzdGVyQWxsb2NhdG9yKGFsbG9jYXRvcik7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
KyAgICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOworICAgIHJldHVybiBhbGxvY2F0b3I7
Cit9CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhzaXplX3Qgc2l6ZSwg
R0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
IGZhaWx1cmVNb2RlKQoreworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhzaXpl
LCBkZWZlcnJhbENvbnRleHQpOworICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OkFzc2VydCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNs
b3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCit7Cisg
ICAgc2FuaXRpemVTdGFja0ZvclZNKG1fc3BhY2UuaGVhcCgpLT52bSgpKTsKKyAgICAKKyAgICBp
ZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT5hbGxv
Y2F0ZShkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7
CisgICAgCisgICAgaWYgKHNpemUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkK
KyAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKKyAgICAgICAg
ZGF0YUxvZygiRkFUQUw6IGF0dGFtcHRpbmcgdG8gYWxsb2NhdGUgc21hbGwgb2JqZWN0IHVzaW5n
IGxhcmdlIGFsbG9jYXRpb24uXG4iKTsKKyAgICAgICAgZGF0YUxvZygiUmVxdWVzdGVkIGFsbG9j
YXRpb24gc2l6ZTogIiwgc2l6ZSwgIlxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIG1fc3BhY2UuaGVhcCgpLT5jb2xsZWN0SWZOZWNl
c3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgCisgICAgc2l6ZSA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRTcGFjZTo6c2l6ZVN0ZXA+KHNpemUpOworICAgIExhcmdl
QWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCptX3Nw
YWNlLm1faGVhcCwgc2l6ZSwgdGhpcyk7CisgICAgaWYgKCFhbGxvY2F0aW9uKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBtX3NwYWNlLm1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBl
bmQoYWxsb2NhdGlvbik7CisgICAgbV9zcGFjZS5tX2hlYXAtPmRpZEFsbG9jYXRlKHNpemUpOwor
ICAgIG1fc3BhY2UubV9jYXBhY2l0eSArPSBzaXplOworICAgIAorICAgIG1fbGFyZ2VBbGxvY2F0
aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7CisgICAgICAgIAorICAgIHJldHVybiBhbGxvY2F0aW9u
LT5jZWxsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIENvbXBsZXRlU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2Ugewor
cHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBsZXRlU3Vic3BhY2UoQ1N0cmluZyBu
YW1lLCBIZWFwJiwgSGVhcENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21wbGV0ZVN1YnNwYWNlKCk7CisKKyAgICAvLyBJbiBzb21l
IGNvZGUgcGF0aHMsIHdlIG5lZWQgaXQgdG8gYmUgYSBjb21waWxlIGVycm9yIHRvIGNhbGwgdGhl
IHZpcnR1YWwgdmVyc2lvbiBvZiBvbmUgb2YKKyAgICAvLyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQn
cyB3aHkgd2UgZG8gZmluYWwgbWV0aG9kcyB0aGUgb2xkIHNjaG9vbCB3YXkuCisgICAgCisgICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUpIG92ZXJyaWRlOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yTm9uVmlydHVh
bChzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgCisgICAgdm9pZCogYWxsb2Nh
dGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3Zl
cnJpZGU7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNp
emVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb21wbGV0ZVN1YnNwYWNlLCBtX2FsbG9jYXRvckZvclNpemVT
dGVwKTsgfQorICAgIAorICAgIE1hcmtlZEFsbG9jYXRvcioqIGFsbG9jYXRvckZvclNpemVTdGVw
KCkgeyByZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0KKworcHJpdmF0ZToKKyAg
ICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvclNsb3coc2l6ZV90KTsKKyAgICAKKyAgICAv
LyBUaGVzZSBzbG93IHBhdGhzIGFyZSBjb25jZXJuZWQgd2l0aCBsYXJnZSBhbGxvY2F0aW9ucyBh
bmQgYWxsb2NhdG9yIGNyZWF0aW9uLgorICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhzaXplX3QsIEdD
RGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiB0cnlB
bGxvY2F0ZVNsb3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCopOworICAgIAorICAgIHN0ZDo6
YXJyYXk8TWFya2VkQWxsb2NhdG9yKiwgTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzPiBtX2Fs
bG9jYXRvckZvclNpemVTdGVwOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWFya2VkQWxs
b2NhdG9yPj4gbV9hbGxvY2F0b3JzOworfTsKKworQUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0
b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBpZiAoc2l6ZSA8PSBN
YXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiByZXN1
bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4
KHNpemUpXTsKKyAgICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6UmV0dXJuTnVsbCB8fCByZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICByZXR1cm4gYWxsb2NhdG9yRm9yU2xvdyhzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKKy8vIFdyaXRpbmcgaXQgdGhpcyB3YXkgZW5z
dXJlcyB0aGF0IHdoZW4geW91IHBhc3MgdGhpcyBhcyBhIGZ1bmN0b3IsIHRoZSBjYWxsZWUgaXMg
c3BlY2lhbGl6ZWQgZm9yCisvLyB0aGlzIGNhbGxiYWNrLiBJZiB5b3Ugd3JvdGUgdGhpcyBhcyBh
IG5vcm1hbCBmdW5jdGlvbiB0aGVuIHRoZSBjYWxsZWUgd291bGQgYmUgc3BlY2lhbGl6ZWQgZm9y
CisvLyB0aGUgZnVuY3Rpb24ncyB0eXBlIGFuZCBpdCB3b3VsZCBoYXZlIGluZGlyZWN0IGNhbGxz
IHRvIHRoYXQgZnVuY3Rpb24uIEFuZCB1bmxpa2UgYSBsYW1iZGEsIGl0J3MKKy8vIHBvc3NpYmxl
IHRvIG1hcmsgdGhpcyBBTFdBWVNfSU5MSU5FLgorc3RydWN0IERlc3Ryb3lGdW5jIHsKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYgdm0sIEpTQ2VsbCogY2VsbCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChjZWxsLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgQVNT
RVJUKGNlbGwtPmlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCk7CisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOworICAg
ICAgICBNZXRob2RUYWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8t
Pm1ldGhvZFRhYmxlLmRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3koY2VsbCk7CisgICAgfQorfTsK
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0hlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBl
KEFsbG9jYXRvckF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IG1fYXR0cmlidXRlcyhhdHRy
aWJ1dGVzKQoreworfQorCitIZWFwQ2VsbFR5cGU6On5IZWFwQ2VsbFR5cGUoKQoreworfQorCit2
b2lkIEhlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxvY2ss
IEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBibG9jay5maW5pc2hTd2VlcEtub3dpbmdIZWFw
Q2VsbFR5cGUoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEhlYXBDZWxsVHlw
ZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZt
LCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgSGVhcENlbGxUeXBlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwQ2Vs
bFR5cGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5IZWFwQ2VsbFR5cGUoKTsKKworICAgIGNvbnN0IEFsbG9j
YXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7
IH0KKworICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBpcyB0byBzcGVjaWFs
aXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24ndAorICAgIC8vIGJl
IGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBjYWxsIE1hcmtlZEJs
b2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CisKKyAgICAvLyBUaGVzZSBn
ZXQgY2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFZN
JiwgSlNDZWxsKik7CisKK3ByaXZhdGU6CisgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJp
YnV0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6SXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcigpCit7Cit9CisKK0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6On5Jc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKCkKK3sKK30KKwordm9pZCogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVBbGlnbmVkTWVtb3J5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQor
eworICAgIC8vIFNpbmNlIHRoaXMgaXMgZGVzaWduZWQgc3BlY2lhbGx5IGZvciBJc29TdWJzcGFj
ZSwgd2Uga25vdyB0aGF0IHdlIHdpbGwgb25seSBiZSBhc2tlZCB0bworICAgIC8vIGFsbG9jYXRl
IE1hcmtlZEJsb2Nrcy4KKyAgICBSRUxFQVNFX0FTU0VSVChhbGlnbm1lbnQgPT0gTWFya2VkQmxv
Y2s6OmJsb2NrU2l6ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSBNYXJrZWRCbG9jazo6
YmxvY2tTaXplKTsKKyAgICAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgCisgICAgbV9maXJzdFVuY29tbWl0dGVkID0gbV9jb21taXR0ZWQuZmluZEJpdChtX2ZpcnN0
VW5jb21taXR0ZWQsIGZhbHNlKTsKKyAgICBpZiAobV9maXJzdFVuY29tbWl0dGVkIDwgbV9ibG9j
a3Muc2l6ZSgpKSB7CisgICAgICAgIG1fY29tbWl0dGVkW21fZmlyc3RVbmNvbW1pdHRlZF0gPSB0
cnVlOworICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2Jsb2Nrc1ttX2ZpcnN0VW5jb21taXR0ZWRd
OworICAgICAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KHJlc3VsdCwgTWFya2VkQmxvY2s6OmJsb2Nr
U2l6ZSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICB2b2lkKiByZXN1bHQgPSBmYXN0QWxpZ25lZE1hbGxvYyhNYXJrZWRCbG9jazo6YmxvY2tT
aXplLCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1fYmxv
Y2tzLnNpemUoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQocmVzdWx0KTsKKyAgICBtX2Jsb2NrSW5k
aWNlcy5hZGQocmVzdWx0LCBpbmRleCk7CisgICAgaWYgKG1fYmxvY2tzLmNhcGFjaXR5KCkgIT0g
bV9jb21taXR0ZWQuc2l6ZSgpKQorICAgICAgICBtX2NvbW1pdHRlZC5yZXNpemUobV9ibG9ja3Mu
Y2FwYWNpdHkoKSk7CisgICAgbV9jb21taXR0ZWRbaW5kZXhdID0gdHJ1ZTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZyZWVBbGlnbmVk
TWVtb3J5KHZvaWQqIGJhc2VQdHIpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworICAgIAorICAgIGF1dG8gaXRlciA9IG1fYmxvY2tJbmRpY2VzLmZpbmQoYmFzZVB0cik7
CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtX2Jsb2NrSW5kaWNlcy5lbmQoKSk7CisgICAg
dW5zaWduZWQgaW5kZXggPSBpdGVyLT52YWx1ZTsKKyAgICBtX2NvbW1pdHRlZFtpbmRleF0gPSBm
YWxzZTsKKyAgICBtX2ZpcnN0VW5jb21taXR0ZWQgPSBzdGQ6Om1pbihpbmRleCwgbV9maXJzdFVu
Y29tbWl0dGVkKTsKKyAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXQoYmFzZVB0ciwgTWFya2VkQmxv
Y2s6OmJsb2NrU2l6ZSk7Cit9CisKK3ZvaWQgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiSXNvKCIsIFJhd1Bv
aW50ZXIodGhpcyksICIpIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvciA6IHB1YmxpYyBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7
CisgICAgfklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKTsKKworICAgIHZvaWQqIHRyeUFsbG9j
YXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKikgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBMb2Nr
IG1fbG9jazsKKyAgICBWZWN0b3I8dm9pZCo+IG1fYmxvY2tzOworICAgIEhhc2hNYXA8dm9pZCos
IHVuc2lnbmVkPiBtX2Jsb2NrSW5kaWNlczsKKyAgICBGYXN0Qml0VmVjdG9yIG1fY29tbWl0dGVk
OworICAgIHVuc2lnbmVkIG1fZmlyc3RVbmNvbW1pdHRlZCB7IDAgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3Bh
Y2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJc29TdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiSXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK0lzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhl
YXAsIEhlYXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBzaXplX3Qgc2l6ZSkKKyAgICA6IFN1YnNw
YWNlKG5hbWUsIGhlYXApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYWxsb2NhdG9yKCZo
ZWFwLCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0b21TaXplPihzaXpl
KSkKKyAgICAsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPElz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCit7CisgICAgaW5pdGlhbGl6ZShoZWFwQ2VsbFR5
cGUsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5nZXQoKSk7CisKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKKyAgICBtX2FsbG9jYXRvci5z
ZXRTdWJzcGFjZSh0aGlzKTsKKyAgICBtX3NwYWNlLmFkZE1hcmtlZEFsbG9jYXRvcihsb2NrZXIs
ICZtX2FsbG9jYXRvcik7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlckFs
bG9jYXRvcigmbV9hbGxvY2F0b3IpOworICAgIG1fZmlyc3RBbGxvY2F0b3IgPSAmbV9hbGxvY2F0
b3I7Cit9CisKK0lzb1N1YnNwYWNlOjp+SXNvU3Vic3BhY2UoKQoreworfQorCitNYXJrZWRBbGxv
Y2F0b3IqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmly
dHVhbChzaXplLCBmYWlsdXJlTW9kZSk7Cit9CisKK01hcmtlZEFsbG9jYXRvciogSXNvU3Vic3Bh
Y2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7CisgICAg
cmV0dXJuICZtX2FsbG9jYXRvcjsKK30KKwordm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlKHNp
emVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVh
bChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogSXNvU3Vi
c3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKKyAgICB2b2lkKiByZXN1
bHQgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1
ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yOworCitjbGFzcyBJc29TdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Citw
dWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBI
ZWFwJiwgSGVhcENlbGxUeXBlKiwgc2l6ZV90IHNpemUpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5Jc29TdWJzcGFjZSgpOworCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisKKyAg
ICB2b2lkKiBhbGxvY2F0ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0
ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRl
eHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CisKK3ByaXZhdGU6CisgICAg
c2l6ZV90IG1fc2l6ZTsKKyAgICBNYXJrZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+IG1faXNvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjsKK307CisKKyNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcENl
bGxUeXBlLCB0eXBlKSAoIklzb2xhdGVkICIgI3R5cGUgIiBTcGFjZSIsIChoZWFwKSwgKGhlYXBD
ZWxsVHlwZSksIHNpemVvZih0eXBlKSkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNp
b24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTcgKzQxLDIxIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBzdGF0aWMgY29uc3RleHByIGJvb2wgdHJhZGVEZXN0cnVjdG9yQmxvY2tzID0gdHJ1ZTsKIAot
TWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaGVhcCwgU3Vic3BhY2UqIHN1
YnNwYWNlLCBzaXplX3QgY2VsbFNpemUpCitNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRv
cihIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCiAgICAgOiBtX2ZyZWVMaXN0KGNlbGxTaXpl
KQogICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDApCiAg
ICAgLCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCi0gICAgLCBt
X2F0dHJpYnV0ZXMoc3Vic3BhY2UtPmF0dHJpYnV0ZXMoKSkKICAgICAsIG1faGVhcChoZWFwKQot
ICAgICwgbV9zdWJzcGFjZShzdWJzcGFjZSkKIHsKIH0KIAordm9pZCBNYXJrZWRBbGxvY2F0b3I6
OnNldFN1YnNwYWNlKFN1YnNwYWNlKiBzdWJzcGFjZSkKK3sKKyAgICBtX2F0dHJpYnV0ZXMgPSBz
dWJzcGFjZS0+YXR0cmlidXRlcygpOworICAgIG1fc3Vic3BhY2UgPSBzdWJzcGFjZTsKK30KKwog
Ym9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQogewogICAg
IHVuc2lnbmVkIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKQEAgLTE3NSwxOSArMTc5LDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZG9UZQogICAgICAgICBhbGxv
Y2F0aW9uQ291bnQgPSAwOwogfQogCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICBib29sIGNy
YXNoT25GYWlsdXJlID0gdHJ1ZTsKLSAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZUltcGwoZGVm
ZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7Ci19Ci0KLXZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
KQotewotICAgIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBmYWxzZTsKLSAgICByZXR1cm4gYWxsb2Nh
dGVTbG93Q2FzZUltcGwoZGVmZXJyYWxDb250ZXh0LCBjcmFzaE9uRmFpbHVyZSk7Ci19Ci0KLXZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUltcGwoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgYm9vbCBjcmFzaE9uRmFpbHVyZSkKK3ZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250
ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIEFTU0VSVChtX2hlYXAtPnZt
KCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwpAQCAtMjA0LDExICsxOTYsOCBA
QCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJCiAgICAgCiAgICAgLy8g
R29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBjYWxsYmFjayBhbmQgbm93IHRoaXMg
YWxsb2NhdG9yIGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBvbmx5CiAgICAgLy8gaGFwcGVucyB3
aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmplY3QgYSBjYWxsYmFjayBpbnRvIHRo
ZSBHQydzIGZpbmFsaXphdGlvbi4KLSAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QmxvY2spKSB7
Ci0gICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkKLSAgICAgICAgICAgIHJldHVybiBhbGxvY2F0
ZShkZWZlcnJhbENvbnRleHQpOwotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGUoZGVmZXJyYWxD
b250ZXh0KTsKLSAgICB9CisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJsb2NrKSkKKyAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOwogICAgIAog
ICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKICAgICAK
QEAgLTIxNyw3ICsyMDYsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nh
c2VJCiAgICAgCiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSB0cnlBbGxvY2F0ZUJs
b2NrKCk7CiAgICAgaWYgKCFibG9jaykgewotICAgICAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCisg
ICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1
cmVNb2RlLmgiCiAjaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkZy
ZWVMaXN0LmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKQEAgLTY3LDEzICs2OCwxNyBAQCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyMTIxCiAKIGNsYXNzIE1hcmtlZEFsbG9jYXRvciB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTWFya2VkQWxsb2NhdG9yKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZyZWVMaXN0KCk7CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CiAKLSAgICBNYXJrZWRBbGxvY2F0
b3IoSGVhcCosIFN1YnNwYWNlKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0
b3IoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAgdm9pZCBzZXRTdWJzcGFjZShTdWJzcGFj
ZSopOwogICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICB2b2lkIHByZXBhcmVG
b3JBbGxvY2F0aW9uKCk7CiAgICAgdm9pZCBzdG9wQWxsb2NhdGluZygpOwpAQCAtOTAsOCArOTUs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0Rlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb247IH0KICAgICBEZXN0
cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVz
dHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2luZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQotICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxD
b250ZXh0KiA9IG51bGxwdHIpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250
ZXh0KiA9IG51bGxwdHIpOworICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFw
OyB9CiAKICAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25z
dDsKQEAgLTEzNiw5ICsxNDAsMTEgQEAgcHVibGljOgogICAgIAogICAgIE1hcmtlZEFsbG9jYXRv
ciogbmV4dEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvcjsgfQogICAg
IE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluU3Vic3BhY2UoKSBjb25zdCB7IHJldHVy
biBtX25leHRBbGxvY2F0b3JJblN1YnNwYWNlOyB9CisgICAgTWFya2VkQWxsb2NhdG9yKiBuZXh0
QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0
QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9CiAgICAgCiAgICAgdm9pZCBzZXRO
ZXh0QWxsb2NhdG9yKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRv
ciA9IGFsbG9jYXRvcjsgfQogICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluU3Vic3BhY2UoTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSA9IGFs
bG9jYXRvcjsgfQorICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3JJbkFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KICAgICAKICAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKTsKICAgICAKQEAgLTE1NSw5ICsxNjEsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxD
b250ZXh0Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2Fz
ZShHQ0RlZmVycmFsQ29udGV4dCopOwotICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKEdD
RGVmZXJyYWxDb250ZXh0KiwgYm9vbCBjcmFzaE9uRmFpbHVyZSk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3Qo
KTsKICAgICB2b2lkKiB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CiAgICAgTWFya2Vk
QmxvY2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwpAQCAtMTkyLDEwICsxOTYsMTEgQEAg
cHJpdmF0ZToKICAgICBBbGxvY2F0b3JBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICAvLyBG
SVhNRTogQWxsIG9mIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSByZWZlcmVuY2VzLgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5ODgKLSAgICBIZWFw
KiBtX2hlYXA7Ci0gICAgU3Vic3BhY2UqIG1fc3Vic3BhY2U7CisgICAgSGVhcCogbV9oZWFwIHsg
bnVsbHB0ciB9OworICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlIHsgbnVsbHB0ciB9OwogICAgIE1h
cmtlZEFsbG9jYXRvciogbV9uZXh0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIE1hcmtlZEFs
bG9jYXRvciogbV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZSB7IG51bGxwdHIgfTsKKyAgICBNYXJr
ZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51
bGxwdHIgfTsKIH07CiAKIGlubGluZSBwdHJkaWZmX3QgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMjEgKzM1LDEyIEBAIGlubGluZSBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlz
dGUKICAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwq
Pih0YXJnZXQpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCitBTFdBWVNfSU5M
SU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAg
IHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAogICAgICAgICBbJl0gKCkgLT4gSGVhcENlbGwq
IHsKICAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZtKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4odHJ5QWxsb2NhdGVTbG93Q2FzZShk
ZWZlcnJhbENvbnRleHQpKTsKLSAgICAgICAgfSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250
ZXh0KQotewotICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAotICAgICAgICBbJl0gKCkg
LT4gSGVhcENlbGwqIHsKLSAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZt
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVT
bG93Q2FzZShkZWZlcnJhbENvbnRleHQpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9k
ZSkpOwogICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBpcyB0byBiZSBjYWxsZWQgYnkgU3Vic3Bh
Y2UuCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotICAgICAgICB2b2lk
IGZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiwgY29uc3QgRGVzdHJveUZ1bmMm
KTsKKyAgICAgICAgdm9pZCBmaW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoRnJlZUxpc3Qq
LCBjb25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB1bnN3ZWVwV2l0
aE5vTmV3bHlBbGxvY2F0ZWQoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjI0OTM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNp
YWxpemVkU3dlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShGcmVlTGlzdCogZnJl
ZUxpc3QsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykKK3ZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKEZyZWVMaXN0KiBmcmVlTGlz
dCwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQogewogICAgIFN3ZWVwTW9kZSBzd2Vl
cE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVwVG9GcmVlTGlzdCA6IFN3ZWVwT25seTsKICAgICBTd2Vl
cERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUgPSB0aGlzLT5zd2VlcERlc3RydWN0aW9u
TW9kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNw
cAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsOSArMTMyLDEwIEBAIGNvbnN0IFZlY3Rv
cjxzaXplX3Q+JiBzaXplQ2xhc3NlcygpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8v
IE1hbnVhbGx5IGluamVjdCBzaXplIGNsYXNzZXMgZm9yIG9iamVjdHMgd2Uga25vdyB3aWxsIGJl
IGFsbG9jYXRlZCBpbiBoaWdoIHZvbHVtZS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgb2Yg
dGhlc2UgdGhpbmdzIHNob3VsZCBoYXZlIElzb1N1YnNwYWNlcy4KKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk4NzYKICAgICAgICAgICAg
IGFkZChzaXplb2YoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpKTsKICAgICAgICAgICAgIGFk
ZChzaXplb2YoVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykpOwotICAgICAgICAgICAgYWRkKHNp
emVvZihGdW5jdGlvbkV4ZWN1dGFibGUpKTsKICAgICAgICAgICAgIGFkZChzaXplb2YoRnVuY3Rp
b25Db2RlQmxvY2spKTsKICAgICAgICAgICAgIGFkZChzaXplb2YoSlNTdHJpbmcpKTsKICAgICAg
ICAgICAgIGFkZChzaXplb2YoSlNGdW5jdGlvbikpOwpAQCAtNTUxLDEwICs1NTIsOCBAQCB2b2lk
IE1hcmtlZFNwYWNlOjpkdW1wQml0cyhQcmludFN0cmVhbSYgCiAgICAgICAgIH0pOwogfQogCi1N
YXJrZWRBbGxvY2F0b3IqIE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoCi0gICAgY29u
c3QgQWJzdHJhY3RMb2NrZXImLCBTdWJzcGFjZSogc3Vic3BhY2UsIHNpemVfdCBzaXplQ2xhc3Mp
Cit2b2lkIE1hcmtlZFNwYWNlOjphZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKLSAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9IG1fYmFnT2ZBbGxvY2F0b3JzLmFkZChoZWFwKCksIHN1YnNwYWNlLCBzaXpl
Q2xhc3MpOwogICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvcihudWxscHRyKTsKICAgICAK
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwpAQCAtNTYyLDE0ICs1NjEsMTAgQEAgTWFya2Vk
QWxsb2NhdG9yKiBNYXJrZWRTcGFjZTo6YWRkTWFya2VkQQogICAgIGlmICghbV9maXJzdEFsbG9j
YXRvcikgewogICAgICAgICBtX2ZpcnN0QWxsb2NhdG9yID0gYWxsb2NhdG9yOwogICAgICAgICBt
X2xhc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7Ci0gICAgICAgIGZvciAoU3Vic3BhY2UqIHN1YnNw
YWNlIDogbV9zdWJzcGFjZXMpCi0gICAgICAgICAgICBzdWJzcGFjZS0+ZGlkQ3JlYXRlRmlyc3RB
bGxvY2F0b3IoYWxsb2NhdG9yKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2xhc3RBbGxvY2F0
b3ItPnNldE5leHRBbGxvY2F0b3IoYWxsb2NhdG9yKTsKICAgICAgICAgbV9sYXN0QWxsb2NhdG9y
ID0gYWxsb2NhdG9yOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gYWxsb2NhdG9yOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBI
ZWFwSXRlcmF0aW9uU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0xNTgs
NyArMTU5LDcgQEAgcHVibGljOgogICAgIE1hcmtlZEFsbG9jYXRvciogZmlyc3RBbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBtX2ZpcnN0QWxsb2NhdG9yOyB9CiAgICAgCiAgICAgTG9jayYgYWxs
b2NhdG9yTG9jaygpIHsgcmV0dXJuIG1fYWxsb2NhdG9yTG9jazsgfQotICAgIE1hcmtlZEFsbG9j
YXRvciogYWRkTWFya2VkQWxsb2NhdG9yKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgU3Vic3BhY2Uq
LCBzaXplX3QgY2VsbFNpemUpOworICAgIHZvaWQgYWRkTWFya2VkQWxsb2NhdG9yKGNvbnN0IEFi
c3RyYWN0TG9ja2VyJiwgTWFya2VkQWxsb2NhdG9yKik7CiAgICAgCiAgICAgLy8gV2hlbiB0aGlz
IGlzIHRydWUgaXQgbWVhbnMgdGhhdCB3ZSBoYXZlIGZsaXBwZWQgYnV0IHRoZSBtYXJrIGJpdHMg
aGF2ZW4ndCBjb252ZXJnZWQgeWV0LgogICAgIGJvb2wgaXNNYXJraW5nKCkgY29uc3QgeyByZXR1
cm4gbV9pc01hcmtpbmc7IH0KQEAgLTE2OCwxNCArMTY5LDEyIEBAIHB1YmxpYzoKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgc3RkOjphcnJheTxzaXplX3QsIG51bVNpemVDbGFzc2VzPiBz
X3NpemVDbGFzc0ZvclNpemVTdGVwOwogICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
Q29tcGxldGVTdWJzcGFjZTsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYWtTZXQ7CiAgICAg
ZnJpZW5kIGNsYXNzIFN1YnNwYWNlOwogICAgIAotICAgIHZvaWQqIGFsbG9jYXRlU2xvdyhTdWJz
cGFjZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0
ZVNsb3coU3Vic3BhY2UmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0KICAgICAvLyBV
c2UgdGhpcyB2ZXJzaW9uIHdoZW4gY2FsbGluZyBmcm9tIHdpdGhpbiB0aGUgR0Mgd2hlcmUgd2Ug
a25vdyB0aGF0IHRoZSBhbGxvY2F0b3JzCiAgICAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gc3RvcHBl
ZC4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hMaXZlQ2VsbChj
b25zdCBGdW5jdG9yJik7CkBAIC0yMTAsNyArMjA5LDYgQEAgcHJpdmF0ZToKICAgICBTZW50aW5l
bExpbmtlZExpc3Q8V2Vha1NldCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8V2Vha1NldD4+IG1fbmV3
QWN0aXZlV2Vha1NldHM7CiAKICAgICBMb2NrIG1fYWxsb2NhdG9yTG9jazsKLSAgICBCYWc8TWFy
a2VkQWxsb2NhdG9yPiBtX2JhZ09mQWxsb2NhdG9yczsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1f
Zmlyc3RBbGxvY2F0b3IgeyBudWxscHRyIH07CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2xhc3RB
bGxvY2F0b3IgeyBudWxscHRyIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAKKyNpbmNsdWRlICJBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKQEAgLTM0LDQ1ICszNiwyMyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotbmFtZXNwYWNlIHsKLQotLy8gV3JpdGluZyBpdCB0aGlzIHdheSBlbnN1cmVz
IHRoYXQgd2hlbiB5b3UgcGFzcyB0aGlzIGFzIGEgZnVuY3RvciwgdGhlIGNhbGxlZSBpcyBzcGVj
aWFsaXplZCBmb3IKLS8vIHRoaXMgY2FsbGJhY2suIElmIHlvdSB3cm90ZSB0aGlzIGFzIGEgbm9y
bWFsIGZ1bmN0aW9uIHRoZW4gdGhlIGNhbGxlZSB3b3VsZCBiZSBzcGVjaWFsaXplZCBmb3IKLS8v
IHRoZSBmdW5jdGlvbidzIHR5cGUgYW5kIGl0IHdvdWxkIGhhdmUgaW5kaXJlY3QgY2FsbHMgdG8g
dGhhdCBmdW5jdGlvbi4gQW5kIHVubGlrZSBhIGxhbWJkYSwgaXQncwotLy8gcG9zc2libGUgdG8g
bWFyayB0aGlzIEFMV0FZU19JTkxJTkUuCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiB2bSwgSlNDZWxsKiBjZWxsKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGNlbGwtPnN0cnVjdHVyZUlEKCkpOwotICAgICAgICBBU1NFUlQo
Y2VsbC0+aW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKTsKLSAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCk7Ci0gICAgICAg
IE1ldGhvZFRhYmxlOjpEZXN0cm95RnVuY3Rpb25QdHIgZGVzdHJveSA9IGNsYXNzSW5mby0+bWV0
aG9kVGFibGUuZGVzdHJveTsKLSAgICAgICAgZGVzdHJveShjZWxsKTsKLSAgICB9Ci19OwotCi19
IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotU3Vic3BhY2U6OlN1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQorU3Vic3BhY2U6OlN1YnNwYWNl
KENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCkKICAgICA6IG1fc3BhY2UoaGVhcC5vYmplY3RTcGFj
ZSgpKQogICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykK
LSAgICAsIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcihhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQot
ICAgICwgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24obV9zcGFjZS5maXJzdEFsbG9jYXRv
cigpKQotewotICAgIC8vIEl0J3MgcmVtb3RlbHkgcG9zc2libGUgdGhhdCB3ZSdyZSBHQ2luZyBy
aWdodCBub3cgZXZlbiBpZiB0aGUgY2xpZW50IGlzIGNhcmVmdWwgdG8gb25seQotICAgIC8vIGNy
ZWF0ZSBzdWJzcGFjZXMgcmlnaHQgYWZ0ZXIgVk0gY3JlYXRpb24sIHNpbmNlIGNvbGxlY3RDb250
aW51b3VzbHkgKGFuZCBwcm9iYWJseSBvdGhlcgotICAgIC8vIHRoaW5ncykgY291bGQgY2F1c2Ug
YSBHQyB0byBiZSBsYXVuY2hlZCBhdCBwcmV0dHkgbXVjaCBhbnkgdGltZSBhbmQgaXQncyBub3Qg
MTAwJSBvYnZpb3VzCi0gICAgLy8gdGhhdCBhbGwgY2xpZW50cyB3b3VsZCBiZSBhYmxlIHRvIGVu
c3VyZSB0aGF0IHRoZXJlIGFyZSB6ZXJvIHNhZmVwb2ludHMgYmV0d2VlbiB3aGVuIHRoZXkKLSAg
ICAvLyBjcmVhdGUgVk0gYW5kIHdoZW4gdGhleSBkbyB0aGlzLiBQcmV2ZW50aW5nIEdDIHdoaWxl
IHdlJ3JlIGNyZWF0aW5nIHRoZSBTdWJzcGFjZSBlbnN1cmVzCi0gICAgLy8gdGhhdCB3ZSBkb24n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHdoZXRoZXIgaXQncyBPSyBmb3IgdGhlIEdDIHRvIGV2ZXIg
c2VlIGEgYnJhbmQgbmV3Ci0gICAgLy8gc3Vic3BhY2UuCit7Cit9CisKK3ZvaWQgU3Vic3BhY2U6
OmluaXRpYWxpemUoSGVhcENlbGxUeXBlKiBoZWFwQ2VsbFR5cGUsIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpCit7CisgICAgbV9hdHRyaWJ1dGVzID0gaGVh
cENlbGxUeXBlLT5hdHRyaWJ1dGVzKCk7CisgICAgbV9oZWFwQ2VsbFR5cGUgPSBoZWFwQ2VsbFR5
cGU7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yID0gYWxpZ25lZE1lbW9yeUFsbG9jYXRv
cjsKKyAgICBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxpZ25lZE1lbW9yeUFs
bG9jYXRvci0+Zmlyc3RBbGxvY2F0b3IoKTsKKworICAgIEhlYXAmIGhlYXAgPSAqbV9zcGFjZS5o
ZWFwKCk7CiAgICAgUHJldmVudENvbGxlY3Rpb25TY29wZSBwcmV2ZW50Q29sbGVjdGlvblNjb3Bl
KGhlYXApOwogICAgIGhlYXAub2JqZWN0U3BhY2UoKS5tX3N1YnNwYWNlcy5hcHBlbmQodGhpcyk7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlczsg
aS0tOykKLSAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpXSA9IG51bGxwdHI7CisgICAg
bV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlclN1YnNwYWNlKHRoaXMpOwogfQogCiBT
dWJzcGFjZTo6flN1YnNwYWNlKCkKQEAgLTgxLDYwICs2MSwxMiBAQCBTdWJzcGFjZTo6flN1YnNw
YWNlKCkKIAogdm9pZCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
YmxvY2ssIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICBibG9jay5maW5pc2hTd2VlcEtub3dp
bmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgbV9oZWFwQ2VsbFR5cGUt
PmZpbmlzaFN3ZWVwKGJsb2NrLCBmcmVlTGlzdCk7CiB9CiAKIHZvaWQgU3Vic3BhY2U6OmRlc3Ry
b3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCiB7Ci0gICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7
Ci19Ci0KLS8vIFRoZSByZWFzb24gd2h5IHdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gYWxsb2NhdGUg
YW5kIHRyeUFsbG9jYXRlIGlzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YKLS8vIGNoZWNrcyBv
biB0aGUgYWxsb2NhdGlvbiBwYXRoIGluIGJvdGggY2FzZXMuIExpa2V3aXNlLCB0aGUgcmVhc29u
IHdoeSB3ZSBoYXZlIG92ZXJsb2FkcyB3aXRoIGFuZAotLy8gd2l0aG91dCBkZWZlcnJhbENvbnRl
eHQgaXMgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBjb2RlIGZvciBjYWxsaW5nIGFsbG9jYXRl
IHdoZW4geW91IGRvbid0Ci0vLyBuZWVkIHRoZSBkZWZlcnJhbENvbnRleHQuCi12b2lkKiBTdWJz
cGFjZTo6YWxsb2NhdGUoc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlm
IChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKLSAg
ICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZSgpOwotICAgIGVsc2UKLSAgICAgICAg
cmVzdWx0ID0gYWxsb2NhdGVTbG93KG51bGxwdHIsIHNpemUpOwotICAgIGRpZEFsbG9jYXRlKHJl
c3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OmFsbG9jYXRl
KEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQotewotICAg
IHZvaWQgKnJlc3VsdDsKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlB
bGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUo
ZGVmZXJyYWxDb250ZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlU2xv
dyhkZWZlcnJhbENvbnRleHQsIHNpemUpOwotICAgIGRpZEFsbG9jYXRlKHJlc3VsdCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRyeUFsbG9jYXRlKHNpemVfdCBz
aXplKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRv
ci0+dHJ5QWxsb2NhdGUoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRl
U2xvdyhudWxscHRyLCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZShHQ0RlZmVycmFsQ29u
dGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQ7
Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNp
emUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPnRyeUFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coZGVmZXJy
YWxDb250ZXh0LCBzaXplKTsKLSAgICBkaWRBbGxvY2F0ZShyZXN1bHQpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgbV9oZWFwQ2VsbFR5cGUtPmRlc3Ryb3kodm0sIGNlbGwpOwogfQogCiB2b2lk
IFN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCkBAIC0xNDQsMTA0ICs3NiwxNyBAQCB2
b2lkIFN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCiAgICAgICAgICAgICBhbGxvY2F0
b3IucHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICAgICAgfSk7CiAKLSAgICBtX2FsbG9jYXRv
ckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fc3BhY2UuZmlyc3RBbGxvY2F0b3IoKTsKKyAgICBtX2Fs
bG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+Zmly
c3RBbGxvY2F0b3IoKTsKIH0KIAogTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vic3BhY2U6OmZpbmRF
bXB0eUJsb2NrVG9TdGVhbCgpCiB7Ci0gICAgZm9yICg7IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxv
Y2F0aW9uOyBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbiA9IG1fYWxsb2NhdG9yRm9yRW1w
dHlBbGxvY2F0aW9uLT5uZXh0QWxsb2NhdG9yKCkpIHsKLSAgICAgICAgU3Vic3BhY2UqIG90aGVy
U3Vic3BhY2UgPSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+c3Vic3BhY2UoKTsKLSAg
ICAgICAgaWYgKG90aGVyU3Vic3BhY2UtPmFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSAhPSBhbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCisg
ICAgZm9yICg7IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uOyBtX2FsbG9jYXRvckZvckVt
cHR5QWxsb2NhdGlvbiA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5uZXh0QWxsb2Nh
dG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpIHsKICAgICAgICAgaWYgKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPmZpbmRFbXB0
eUJsb2NrVG9TdGVhbCgpKQogICAgICAgICAgICAgcmV0dXJuIGJsb2NrOwogICAgIH0KICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFjZTo6YWxsb2NhdG9y
Rm9yU2xvdyhzaXplX3Qgc2l6ZSkKLXsKLSAgICBzaXplX3QgaW5kZXggPSBNYXJrZWRTcGFjZTo6
c2l6ZUNsYXNzVG9JbmRleChzaXplKTsKLSAgICBzaXplX3Qgc2l6ZUNsYXNzID0gTWFya2VkU3Bh
Y2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdOwotICAgIGlmICghc2l6ZUNsYXNzKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICAvLyBUaGlzIGlzIHdyaXR0ZW4gaW4g
c3VjaCBhIHdheSB0aGF0IGl0J3MgT0sgZm9yIHRoZSBKSVQgdGhyZWFkcyB0byBlbmQgdXAgaGVy
ZSBpZiB0aGV5IHdhbnQKLSAgICAvLyB0byBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBzb21lIGFs
bG9jYXRvciB0aGF0IGhhZG4ndCBiZWVuIHVzZWQgeWV0LiBOb3RlIHRoYXQgYSBwb3NzaWJseS0K
LSAgICAvLyBqdXN0LWFzLWdvb2Qgc29sdXRpb24gd291bGQgYmUgdG8gcmV0dXJuIG51bGwgaWYg
d2UncmUgaW4gdGhlIEpJVCBzaW5jZSB0aGUgSklUIHRyZWF0cyBudWxsCi0gICAgLy8gYWxsb2Nh
dG9yIGFzICJwbGVhc2UgYWx3YXlzIHRha2UgdGhlIHNsb3cgcGF0aCIuIEJ1dCwgdGhhdCBjb3Vs
ZCBsZWFkIHRvIHBlcmZvcm1hbmNlCi0gICAgLy8gc3VycHJpc2VzIGFuZCB0aGUgYWxnb3JpdGht
IGhlcmUgaXMgcHJldHR5IGVhc3kuIE9ubHkgdGhpcyBjb2RlIGhhcyB0byBob2xkIHRoZSBsb2Nr
LCB0bwotICAgIC8vIHByZXZlbnQgc2ltdWx0YW5lb3VzbHkgTWFya2VkQWxsb2NhdG9yIGNyZWF0
aW9ucyBmcm9tIG11bHRpcGxlIHRocmVhZHMuIFRoaXMgY29kZSBlbnN1cmVzCi0gICAgLy8gdGhh
dCBhbnkgImZvckVhY2hBbGxvY2F0b3IiIHRyYXZlcnNhbHMgd2lsbCBvbmx5IHNlZSB0aGlzIGFs
bG9jYXRvciBhZnRlciBpdCdzIGluaXRpYWxpemVkCi0gICAgLy8gZW5vdWdoOiBpdCB3aWxsIGhh
dmUgCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmFsbG9jYXRvckxvY2soKSk7
Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JGb3JTaXpl
U3RlcFtpbmRleF0pCi0gICAgICAgIHJldHVybiBhbGxvY2F0b3I7Ci0KLSAgICBpZiAoZmFsc2Up
Ci0gICAgICAgIGRhdGFMb2coIkNyZWF0aW5nIG1hcmtlZCBhbGxvY2F0b3IgZm9yICIsIG1fbmFt
ZSwgIiwgIiwgbV9hdHRyaWJ1dGVzLCAiLCAiLCBzaXplQ2xhc3MsICIuXG4iKTsKLSAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fc3BhY2UuYWRkTWFya2VkQWxsb2NhdG9yKGxvY2tl
ciwgdGhpcywgc2l6ZUNsYXNzKTsKLSAgICBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NU
b0luZGV4KHNpemVDbGFzcyk7Ci0gICAgZm9yICg7OykgewotICAgICAgICBpZiAoTWFya2VkU3Bh
Y2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFzcykKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdID0gYWxs
b2NhdG9yOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpbmRleC0tKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvckluU3Vic3BhY2UobV9m
aXJzdEFsbG9jYXRvcik7Ci0gICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICBtX2ZpcnN0
QWxsb2NhdG9yID0gYWxsb2NhdG9yOwotICAgIHJldHVybiBhbGxvY2F0b3I7Ci19Ci0KLXZvaWQq
IFN1YnNwYWNlOjphbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KGRl
ZmVycmFsQ29udGV4dCwgc2l6ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQotewotICAgIHNhbml0
aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7Ci0gICAgCi0gICAgaWYgKE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXR1
cm4gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQpOwotICAgIAotICAgIGlm
IChzaXplIDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9mZigpCi0gICAgICAgICYmIHNp
emUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7Ci0gICAgICAgIGRhdGFMb2coIkZBVEFM
OiBhdHRhbXB0aW5nIHRvIGFsbG9jYXRlIHNtYWxsIG9iamVjdCB1c2luZyBsYXJnZSBhbGxvY2F0
aW9uLlxuIik7Ci0gICAgICAgIGRhdGFMb2coIlJlcXVlc3RlZCBhbGxvY2F0aW9uIHNpemU6ICIs
IHNpemUsICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLSAgICAKLSAgICBtX3NwYWNlLmhlYXAoKS0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihk
ZWZlcnJhbENvbnRleHQpOwotICAgIAotICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Y8TWFya2VkU3BhY2U6OnNpemVTdGVwPihzaXplKTsKLSAgICBMYXJnZUFsbG9jYXRpb24qIGFs
bG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgqbV9zcGFjZS5tX2hlYXAsIHNp
emUsIHRoaXMpOwotICAgIGlmICghYWxsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgCi0gICAgbV9zcGFjZS5tX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24p
OwotICAgIG1fc3BhY2UubV9oZWFwLT5kaWRBbGxvY2F0ZShzaXplKTsKLSAgICBtX3NwYWNlLm1f
Y2FwYWNpdHkgKz0gc2l6ZTsKLSAgICAKLSAgICBtX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFs
bG9jYXRpb24pOwotICAgICAgICAKLSAgICByZXR1cm4gYWxsb2NhdGlvbi0+Y2VsbCgpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgU3Vic3BhY2U6OmRpZEFsbG9jYXRlKHZvaWQqIHB0cikKLXsK
LSAgICBVTlVTRURfUEFSQU0ocHRyKTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIHVzZWZ1bCBmb3Ig
bG9nZ2luZyBhbGxvY2F0aW9ucywgb3IgZG9pbmcgb3RoZXIga2luZHMgb2YgZGVidWdnaW5nIGhh
Y2tzLiBKdXN0IG1ha2UKLSAgICAvLyBzdXJlIHlvdSBKU0NfZm9yY2VHQ1Nsb3dQYXRocz10cnVl
LgotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCiAjaW5jbHVkZSAi
TWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KQEAgLTMyLDQ0ICszMywzMCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CitjbGFzcyBIZWFwQ2VsbFR5cGU7CiAKIC8vIFRo
ZSBpZGVhIG9mIHN1YnNwYWNlcyBpcyB0aGF0IHlvdSBjYW4gcHJvdmlkZSBzb21lIGN1c3RvbSBi
ZWhhdmlvciBmb3IgeW91ciBvYmplY3RzIGlmIHlvdQogLy8gYWxsb2NhdGUgdGhlbSBmcm9tIGEg
Y3VzdG9tIFN1YnNwYWNlIGluIHdoaWNoIHlvdSBvdmVycmlkZSBzb21lIG9mIHRoZSB2aXJ0dWFs
IG1ldGhvZHMuIFRoaXMKLS8vIGNsYXNzIGlzIHRoZSBiYXNlY2xhc3Mgb2YgU3Vic3BhY2VzIGFu
ZCBpdCBwcm92aWRlcyBhIHJlYXNvbmFibGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgd2hlcmUK
LS8vIHN3ZWVwaW5nIGFzc3VtZXMgaW1tb3J0YWwgc3RydWN0dXJlLiBUaGUgY29tbW9uIHdheXMg
b2Ygb3ZlcnJpZGluZyB0aGlzIGFyZToKLS8vCi0vLyAtIFByb3ZpZGUgY3VzdG9taXplZCBkZXN0
cnVjdG9yIGJlaGF2aW9yLiBZb3UgY2FuIGNoYW5nZSBob3cgdGhlIGRlc3RydWN0b3IgaXMgY2Fs
bGVkLiBZb3UgY2FuCi0vLyAgIGFsc28gc3BlY2lhbGl6ZSB0aGUgZGVzdHJ1Y3RvciBjYWxsIGlu
IHRoZSBsb29wLgotLy8KLS8vIC0gVXNlIHRoZSBTdWJzcGFjZSBhcyBhIHF1aWNrIHdheSB0byBp
dGVyYXRlIGFsbCBvZiB0aGUgb2JqZWN0cyBpbiB0aGF0IHN1YnNwYWNlLgorLy8gY2xhc3MgaXMg
dGhlIGJhc2VjbGFzcyBvZiBTdWJzcGFjZXMuIFVzdWFsbHkgeW91IHdpbGwgdXNlIGVpdGhlciBT
dWJzcGFjZSBvciBGaXhlZFNpemVTdWJzcGFjZS4KIGNsYXNzIFN1YnNwYWNlIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTdWJzcGFjZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBI
ZWFwJiwgQWxsb2NhdG9yQXR0cmlidXRlcywgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflN1YnNwYWNlKCk7Ci0gICAgCisKICAgICBjb25zdCBj
aGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lLmRhdGEoKTsgfQogICAgIE1hcmtlZFNw
YWNlJiBzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2U7IH0KICAgICAKICAgICBjb25zdCBB
bGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzOyB9CisgICAgSGVhcENlbGxUeXBlKiBoZWFwQ2VsbFR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2hlYXBDZWxsVHlwZTsgfQogICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0K
ICAgICAKLSAgICAvLyBUaGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lh
bGl6ZSB0aGUgc3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKLSAgICAvLyBi
ZSBjYWxsZWQgZm9yIG5vLWRlc3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJrZWRC
bG9jazo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UuCi0gICAgdmlydHVhbCB2b2lkIGZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopOwotICAgIAotICAgIC8vIFRo
ZXNlIGdldCBjYWxsZWQgZm9yIGxhcmdlIG9iamVjdHMuCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3koVk0mLCBKU0NlbGwqKTsKLSAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqIHRyeUFsbG9jYXRv
ckZvcihzaXplX3QpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCk7
Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIHNp
emVfdCk7Ci0gICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGUoc2l6
ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShHQ0RlZmVycmFs
Q29udGV4dCosIHNpemVfdCk7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFu
ZGxlJiwgRnJlZUxpc3QqKTsKKyAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsKKworICAg
IHZpcnR1YWwgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpID0gMDsKICAgICAKICAgICB2
b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgCkBAIC05Niw0OCArODMsMjUgQEAgcHVi
bGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoTGl2ZUNl
bGwoY29uc3QgRnVuYyYpOwogICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBbGxv
Y2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdWJzcGFjZSwgbV9h
bGxvY2F0b3JGb3JTaXplU3RlcCk7IH0KLSAgICAKLSAgICBNYXJrZWRBbGxvY2F0b3IqKiBhbGxv
Y2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9
CisgICAgU3Vic3BhY2UqIG5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOyB9Cisg
ICAgdm9pZCBzZXROZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoU3Vic3BhY2Uq
IHN1YnNwYWNlKSB7IG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yID0gc3Vi
c3BhY2U7IH0KIAotcHJpdmF0ZToKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvclNs
b3coc2l6ZV90KTsKLSAgICAKLSAgICAvLyBUaGVzZSBzbG93IHBhdGhzIGFyZSBjb25jZXJuZWQg
d2l0aCBsYXJnZSBhbGxvY2F0aW9ucyBhbmQgYWxsb2NhdG9yIGNyZWF0aW9uLgotICAgIHZvaWQq
IGFsbG9jYXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5
QWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLSAgICAKLSAgICB2b2lk
IGRpZEFsbG9jYXRlKHZvaWQqKTsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGluaXRpYWxpemUoSGVh
cENlbGxUeXBlKiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwogICAgIAogICAgIE1hcmtlZFNw
YWNlJiBtX3NwYWNlOwogICAgIAogICAgIENTdHJpbmcgbV9uYW1lOwogICAgIEFsbG9jYXRvckF0
dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworCisgICAgSGVhcENlbGxUeXBlKiBtX2hlYXBDZWxsVHlw
ZSB7IG51bGxwdHIgfTsKKyAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBtX2FsaWduZWRNZW1v
cnlBbGxvY2F0b3IgeyBudWxscHRyIH07CiAgICAgCi0gICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciogbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwotICAgIAotICAgIHN0ZDo6YXJyYXk8TWFya2Vk
QWxsb2NhdG9yKiwgTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzPiBtX2FsbG9jYXRvckZvclNp
emVTdGVwOwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRvciB7IG51bGxwdHIg
fTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uIHsg
bnVsbHB0ciB9OyAvLyBVc2VzIHRoZSBNYXJrZWRTcGFjZSBsaW5rZWQgbGlzdCBvZiBibG9ja3Mu
CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PExhcmdlQWxsb2NhdGlvbiwgQmFzaWNSYXdTZW50aW5l
bE5vZGU8TGFyZ2VBbGxvY2F0aW9uPj4gbV9sYXJnZUFsbG9jYXRpb25zOworICAgIFN1YnNwYWNl
KiBtX25leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKIH07
CiAKLUFMV0FZU19JTkxJTkUgTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdG9y
Rm9yKHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1
dG9mZikKLSAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbTWFya2VkU3BhY2U6
OnNpemVDbGFzc1RvSW5kZXgoc2l6ZSldOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1BTFdB
WVNfSU5MSU5FIE1hcmtlZEFsbG9jYXRvciogU3Vic3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3Qg
c2l6ZSkKLXsKLSAgICBpZiAoc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsKLSAg
ICAgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogcmVzdWx0ID0gbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV0pCi0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICByZXR1cm4gYWxsb2NhdG9yRm9yU2xvdyhzaXplKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIy
NDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1NzIsNyArMTU3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgVk0mIHZt
LCBHUFJSZWcgcmVzdWx0R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFnZVR5cGUg
c3RvcmFnZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIs
IEp1bXBMaXN0JiBzbG93UGF0aCwgc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pLT5hbGxvY2F0
b3JGb3Ioc2l6ZSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICBpZiAoIWFsbG9jYXRvcikgewogICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNTg5LDcgKzE1ODksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gYWxsb2NhdGlvblNpemUg
Y2FuIGJlIGFsaWFzZWQgd2l0aCBhbnkgb2YgdGhlIG90aGVyIGlucHV0IEdQUnMuIElmIGl0J3Mg
bm90IGFsaWFzZWQgdGhlbiBpdAogICAgIC8vIHdvbid0IGJlIGNsb2JiZXJlZC4KLSAgICB2b2lk
IGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgU3Vic3BhY2UmIHN1
YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVn
IHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCisgICAgdm9pZCBlbWl0QWxsb2NhdGVW
YXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNl
LCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0
Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewogICAgICAgICBzdGF0aWNfYXNzZXJ0
KCEoTWFya2VkU3BhY2U6OnNpemVTdGVwICYgKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAtIDEpKSwg
Ik1hcmtlZFNwYWNlOjpzaXplU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogICAgICAg
ICAKQEAgLTE2MDcsNyArMTYwNyw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
bGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+CiAgICAgdm9pZCBlbWl0QWxsb2NhdGVW
YXJpYWJsZVNpemVkQ2VsbChWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUg
c3RydWN0dXJlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BS
UmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCiAgICAgewotICAgICAgICBTdWJz
cGFjZSYgc3Vic3BhY2UgPSAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSk7CisgICAgICAgIENv
bXBsZXRlU3Vic3BhY2UmIHN1YnNwYWNlID0gKnN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0pOwog
ICAgICAgICBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKHJlc3VsdEdQUiwgc3Vic3BhY2UsIGFs
bG9jYXRpb25TaXplLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICAg
ICAgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZvKHN0cnVjdHVyZSwgcmVzdWx0R1BSLCBz
Y3JhdGNoR1BSMik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24KIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5z
dHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0Ojph
bGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5h
bGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAK
ICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2Nh
dG9yUmVnID0gcmVnVDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDcgKzYyLDcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBCdXR0ZXJmbHk6Om9wdGltYQogaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKFZNJiB2bSwgSlND
ZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewog
ICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZv
aWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZShzaXpl
KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNz
ZXJ0KTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2UsIHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNzAsNyArNzAs
NyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pCiBpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OnRyeUNyZWF0ZShWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBwcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIs
IGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKQogewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS50cnlBbGxvY2F0ZShzaXplKTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYgKCFiYXNlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKGJhc2Us
IHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKQEAgLTE1MCw3ICsxNTAsNyBAQCBpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpCiAgICAgdm9pZCogdGhlQmFzZSA9
IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNp
emUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9w
ZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAg
dm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9j
YXRlKG5ld1NpemUpOworICAgIHZvaWQqIG5ld0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwobmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIW5ld0Jhc2UpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSBh
IG1lbWNweS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDgg
KzExOCw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyhWTSYKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0KCksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9iYWxPYmpl
Y3QoKS0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICAKLSAgICB2b2lkKiBiYWNraW5nU3Rv
cmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbWFwcGVkQXJndW1lbnRzLmtpbmQpLnRy
eUFsbG9jYXRlKG1hcHBlZEFyZ3VtZW50c1NpemUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYmFj
a2luZ1N0b3JlKTsKKyAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFy
eVNwYWNlKG1fbWFwcGVkQXJndW1lbnRzLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbChtYXBwZWRB
cmd1bWVudHNTaXplKCksIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsK
ICAgICBib29sKiBvdmVycmlkZXMgPSBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsK
ICAgICBtX21hcHBlZEFyZ3VtZW50cy5zZXQodm0sIHRoaXMsIG92ZXJyaWRlcyk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9sZW5ndGg7IGktLTspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24gMjI0OTM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICAKIHB1YmxpYzoKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZt
KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0
aW9uKTsKICAgICAgICAgcmV0dXJuICZ2bS5qc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEV2YWxFeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIERpcmVjdEV2YWxFeGVjdXRhYmxlIGZpbmFsIDogcHVi
bGljIEV2YWxFeGVjdXRhYmxlIHsKIHB1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7
CisgICAgICAgIHJldHVybiAmdm0uZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsKKyAgICB9CisK
ICAgICBzdGF0aWMgRGlyZWN0RXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBjb25z
dCBTb3VyY2VDb2RlJiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBl
LCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSwgY29uc3QgVmFy
aWFibGVFbnZpcm9ubWVudCopOwogcHJpdmF0ZToKICAgICBEaXJlY3RFdmFsRXhlY3V0YWJsZShF
eGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2
ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5
cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0
YWJsZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyAr
MzcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQorICAgIAogICAgIEV2YWxDb2RlQmxvY2sqIGNv
ZGVCbG9jaygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ldmFsQ29kZUJsb2NrLmdldCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5o
CShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSwxMCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIAorICAgIC8vIEZvcmNlIHN1YmNsYXNzZXMg
dG8gb3ZlcnJpZGUgdGhpcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdGF0aWMgdm9p
ZCBzdWJzcGFjZUZvcihWTSYpIHsgfQogICAgICAgICAKICAgICBDb2RlQmxvY2tIYXNoIGhhc2hG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
MjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTIgQEAgcHVibGljOgogICAgIHR5cGVk
ZWYgU2NyaXB0RXhlY3V0YWJsZSBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgorICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZ2bS5mdW5jdGlv
bkV4ZWN1dGFibGVTcGFjZTsKKyAgICB9CisKICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxl
KiBjcmVhdGUoCiAgICAgICAgIFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlLCAKICAgICAgICAgdW5z
aWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIGVuZENvbHVtbiwgSW50cmluc2ljIGludHJpbnNpYykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYzLDggKzI2Myw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1vZGlm
aWUKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOwog
CiAgICAgaWYgKGFyZ3NMZW5ndGgpIHsKLSAgICAgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0u
Z2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5raW5k
KS50cnlBbGxvY2F0ZShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8OD4oYXJnc0xlbmd0aCkpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChiYWNraW5nU3RvcmUpOworICAgICAgICB2b2lkKiBiYWNr
aW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNE
ZXNjcmlwdG9yLmtpbmQpLmFsbG9jYXRlTm9uVmlydHVhbChXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Y8OD4oYXJnc0xlbmd0aCksIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0
KTsKICAgICAgICAgYm9vbCogbW9kaWZpZWRBcmd1bWVudHMgPSBzdGF0aWNfY2FzdDxib29sKj4o
YmFja2luZ1N0b3JlKTsKICAgICAgICAgbV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iuc2V0
KHZtLCB0aGlzLCBtb2RpZmllZEFyZ3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGFyZ3NMZW5ndGg7IGktLTspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
YXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hNYXBCdWZmZXI6OmFs
bG9jYXRpb25TaXplKGNhcGFjaXR5KTsKLSAgICAgICAgdm9pZCogZGF0YSA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsKKyAgICAg
ICAgdm9pZCogZGF0YSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRl
Tm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kaXJl
Y3RFdmFsRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NiArMzEsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEluZGlyZWN0RXZhbEV4ZWN1dGFi
bGUgZmluYWwgOiBwdWJsaWMgRXZhbEV4ZWN1dGFibGUgewogcHVibGljOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZ2bS5pbmRpcmVjdEV2YWxFeGVjdXRhYmxl
U3BhY2U7CisgICAgfQorCiAgICAgc3RhdGljIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUqIGNyZWF0
ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwg
RGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250
ZXh0VHlwZSk7CiBwcml2YXRlOgogICAgIEluZGlyZWN0RXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRl
KiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4
dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRUeXBlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAy
MjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkCiAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSkp
OwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IEJ1dHRlcmZseTo6b3B0aW1hbENv
bnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAg
dm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRl
KGRlZmVycmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFn
ZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAg
ICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVO
b25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUs
IHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmIChVTkxJS0VM
WSghdGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5
ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAgLTk4
LDcgKzk4LDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAogICAg
IH0gZWxzZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbmRleEJpYXMgPSAwOwog
ICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBBcnJheVN0b3JhZ2U6Om9wdGltYWxWZWN0
b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2
b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUo
ZGVmZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGlu
ZVN0b3JhZ2UsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSk7Cisg
ICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxv
Y2F0ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVT
dG9yYWdlLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksIGRlZmVy
cmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAg
aWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIGluZGV4Qmlhcywgb3V0T2ZM
aW5lU3RvcmFnZSk7CkBAIC0zNjgsNyArMzY4LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnRTbG93Q2FzZShjb25zdAogICAgICAgICBhbGxvY2F0ZWROZXdTdG9yYWdlID0gZmFsc2U7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6
ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJl
ZENhcGFjaXR5KSk7Ci0gICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG5ld1NpemUpOworICAgICAgICBuZXdBbGxvY0Jhc2Ug
PSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwobmV3
U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAg
ICAgaWYgKCFuZXdBbGxvY0Jhc2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcg
KzIzNyw5IEBAIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGUoVk0mIHYKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc3RydWN0dXJlLCB2ZWN0
b3JMZW5ndGhIaW50KTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1
eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG51bGxwdHIsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbCgKKyAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLAorICAgICAgICAgICAgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwg
b3V0T2ZMaW5lU3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNv
bnRleHQ6OgogICAgICAgICB2b2lkKiB0ZW1wOwogICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVP
ZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKICAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgICAg
IHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKG51
bGxwdHIsIHNpemUpOworICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgICAgICBpZiAoIXRlbXApCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIENvcHlW
aXNpdG9yOwogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CiBjbGFzcyBFeGVjU3RhdGU7CkBAIC01
MCwxMSArNTEsNiBAQCBjbGFzcyBQcm9wZXJ0eU5hbWU7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJh
eTsKIGNsYXNzIFN0cnVjdHVyZTsKIAotZW51bSBjbGFzcyBBbGxvY2F0aW9uRmFpbHVyZU1vZGUg
ewotICAgIFNob3VsZEFzc2VydE9uRmFpbHVyZSwKLSAgICBTaG91bGROb3RBc3NlcnRPbkZhaWx1
cmUKLX07Ci0KIGVudW0gY2xhc3MgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZSB7CiAgICAg
SGFzQXJnLAogICAgIERvZXNOb3RIYXZlQXJnCkBAIC04Niw4ICs4Miw4IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQqIHRyeUFsbG9jYXRlQ2UKIGNsYXNzIEpTQ2VsbCA6IHB1YmxpYyBIZWFw
Q2VsbCB7CiAgICAgZnJpZW5kIGNsYXNzIEpTVmFsdWU7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtl
ZEJsb2NrOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSwg
R0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZT4KLSAgICBmcmllbmQgdm9pZCogdHJ5QWxsb2Nh
dGVDZWxsSGVscGVyKEhlYXAmLCBHQ0RlZmVycmFsQ29udGV4dCosIHNpemVfdCk7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBmcmllbmQgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVy
KEhlYXAmLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
KTsKIAogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IDA7CkBAIC05OCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogUmVmZXIgdG8gU3Vi
c3BhY2UgYnkgcmVmZXJlbmNlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjY5ODgKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBz
dGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJik7CisgICAgc3RhdGljIENvbXBsZXRlU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJik7CiAKICAgICBzdGF0aWMgSlNDZWxsKiBzZWVuTXVsdGlw
bGVDYWxsZWVPYmplY3RzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMSkpOyB9CiAKQEAgLTMyMCw3ICszMTYsNyBAQCBpbmxpbmUgVG8ganNE
eW5hbWljQ2FzdChWTSYgdm0sIEpTVmFsdWUgCiAvLyBGSVhNRTogUmVmZXIgdG8gU3Vic3BhY2Ug
YnkgcmVmZXJlbmNlLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2Njk4OAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLWlubGluZSBTdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoVk0mIHZtKQoraW5saW5lIGF1dG8gc3Vic3BhY2VGb3IoVk0mIHZtKQogewogICAgIHJl
dHVybiBUeXBlOjp0ZW1wbGF0ZSBzdWJzcGFjZUZvcjxUeXBlPih2bSk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAy
MjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNSwzMCArMTM1LDIxIEBAIEFMV0FZU19JTkxJTkUgVk0mIEV4
ZWNTdGF0ZTo6dm0oKSBjb25zdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLVN1
YnNwYWNlKiBKU0NlbGw6OnN1YnNwYWNlRm9yKFZNJiB2bSkKK0NvbXBsZXRlU3Vic3BhY2UqIEpT
Q2VsbDo6c3Vic3BhY2VGb3IoVk0mIHZtKQogewogICAgIGlmIChDZWxsVHlwZTo6bmVlZHNEZXN0
cnVjdGlvbikKICAgICAgICAgcmV0dXJuICZ2bS5kZXN0cnVjdGlibGVDZWxsU3BhY2U7CiAgICAg
cmV0dXJuICZ2bS5jZWxsU3BhY2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBtb2RlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlIGRlZmVycmFs
Q29udGV4dEFyZ1ByZXNlbmNlPgotQUxXQVlTX0lOTElORSB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxI
ZWxwZXIoSGVhcCYgaGVhcCwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6
ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkKiB0cnlB
bGxvY2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkK
IHsKICAgICBBU1NFUlQoZGVmZXJyYWxDb250ZXh0IHx8ICFEaXNhbGxvd0dDOjppc0luRWZmZWN0
T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChzaXplID49IHNpemVvZihUKSk7Ci0gICAg
SlNDZWxsKiByZXN1bHQ7Ci0gICAgaWYgKG1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpT
aG91bGRBc3NlcnRPbkZhaWx1cmUpIHsKLSAgICAgICAgcmVzdWx0ID0gKGRlZmVycmFsQ29udGV4
dEFyZ1ByZXNlbmNlID09IEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZykKLSAg
ICAgICAgICAgID8gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0o
KSktPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgc2l6ZSkpCi0gICAgICAgICAgICA6IHN0YXRp
Y19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxvY2F0ZShzaXpl
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gKGRlZmVycmFsQ29udGV4dEFyZ1By
ZXNlbmNlID09IEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZykKLSAgICAgICAg
ICAgID8gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPnRy
eUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgc2l6ZSkpCi0gICAgICAgICAgICA6IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT50cnlBbGxvY2F0ZShzaXpl
KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KKyAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+
KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgZGVm
ZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSkpOworICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwgJiYgIXJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAgQVNTRVJUKCFoZWFwLnZt
KCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwogICAgIGhlYXAudm0oKS0+c2V0SW5pdGlhbGl6
aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygpKTsKQEAgLTE3MCwyNSArMTYxLDI1IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGUKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2
b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJu
IHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNob3VsZEFz
c2VydE9uRmFpbHVyZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6RG9lc05vdEhhdmVB
cmc+KGhlYXAsIG51bGxwdHIsIHNpemUpOworICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxw
ZXI8VD4oaGVhcCwgc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCogdHJ5QWxsb2NhdGVDZWxsKEhlYXAm
IGhlYXAsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8
VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGROb3RBc3NlcnRPbkZhaWx1cmUsIEdDRGVm
ZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6OkRvZXNOb3RIYXZlQXJnPihoZWFwLCBudWxscHRyLCBz
aXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAsIHNpemUsIG51
bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIHRyeUFs
bG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNob3VsZEFzc2VydE9u
RmFpbHVyZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnPihoZWFwLCBkZWZl
cnJhbENvbnRleHQsIHNpemUpOworICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VD4o
aGVhcCwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2Vy
dCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkKiB0cnlBbGxvY2F0ZUNlbGwoSGVh
cCYgaGVhcCwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUp
CiB7Ci0gICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OlNob3VsZE5vdEFzc2VydE9uRmFpbHVyZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVz
ZW5zZTo6SGFzQXJnPihoZWFwLCBkZWZlcnJhbENvbnRleHQsIHNpemUpOworICAgIHJldHVybiB0
cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VD4oaGVhcCwgc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogfQogCiBpbmxpbmUgYm9vbCBKU0NlbGw6
OmlzT2JqZWN0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiAmdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNw
cDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oIgorCisj
aW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNw
YWNlIHsKKworc3RydWN0IERlc3Ryb3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3Bl
cmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19j
YXN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Kj4oY2VsbCktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJs
ZS5kZXN0cm95KGNlbGwpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
CitKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxs
b2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhO
ZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQoreworfQorCitK
U0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjp+SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFj
ZSgpCit7Cit9CisKK3ZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7Cisg
ICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVu
YygpKTsKK30KKwordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlLmgiCiAKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC00MywyMSArNDIsMjEgQEAgc3RydWN0IERlc3Ryb3lGdW5j
IHsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBo
ZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShu
YW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxs
OjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFs
bG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7
CiB9CiAKLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlKCkKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjp+SlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJl
ZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6
ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxp
c3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBE
ZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBl
KGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQordm9pZCBKU0Rlc3RydWN0
aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmg6MjI0NTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3Vi
c3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVz
dHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0NTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2Ug
OiBwdWJsaWMgU3Vic3BhY2UgeworY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU0Rl
c3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0
dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOwogICAgIAogICAgIHZvaWQg
ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAotICAg
IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNEZXN0cnVjdGlibGVPYmplY3QqPihjZWxsKS0+Y2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCi0KLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBB
bGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBh
bGxvY2F0b3IpCi17Ci19Ci0KLUpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlKCkKLXsKLX0KLQotdm9pZCBKU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVM
aXN0KiBmcmVlTGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uo
ZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgRGVzdHJveUZ1
bmMoKSh2bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVP
YmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vi
c3BhY2UgewotcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciop
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2UoKTsKLSAgICAKLSAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
LCBGcmVlTGlzdCopIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92
ZXJyaWRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNp
b24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52
aXJvbm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBKU0xleGlj
YWxFbnZpcm9ubWVudCA6IHB1YmxpYyBKU1N5CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAg
ICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxl
dGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIUNlbGxUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKTsKICAgICAgICAgcmV0dXJuICZ2bS5q
c1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lv
biAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3Rh
dGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IHJldHVybiAmdm0uc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0
NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2UuY3BwOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IERlc3Ryb3lGdW5j
IHsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7CisgICAg
fQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RTdWJzcGFjZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcg
bmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQorICAg
IDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0
aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQoreworfQorCitKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Uo
KQoreworfQorCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7
CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95
RnVuYygpKTsKK30KKwordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmRl
c3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2Vs
bCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMCBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Uu
aCIKKyNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgiCiAK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00
MywyMSArNDIsMjEgQEAgc3RydWN0IERlc3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCiAKLUpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6SlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxs
b2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxs
b2NhdG9yKQorSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6SlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5cGUoQWxsb2Nh
dG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsKIH0K
IAotSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdFN1YnNwYWNlKCkKK0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6
On5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCkKIHsKIH0KIAotdm9pZCBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxl
JiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBL
bm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5p
c2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQog
Ci12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0s
IEpTQ2VsbCogY2VsbCkKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKIHsKICAgICBEZXN0cm95RnVuYygpKHZt
LCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmgJKHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmg6MjI0NTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdWJz
cGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBI
ZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZp
cnR1YWwgfkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpOworICAgIAorICAgIHZv
aWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5
cGUuaAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxNCArMjUsMTQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJTdWJzcGFjZS5o
IgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3Mg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK2Ns
YXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENl
bGxUeXBlIHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFs
IH5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKCk7CiAgICAgCiAgICAgdm9p
ZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIgotCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1YnNw
YWNlSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIHsKLQotc3RydWN0
IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpT
Q2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0YXRpY19jYXN0PEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3ko
Y2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxs
b2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhO
ZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQotewotfQotCi1K
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCog
ZnJlZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVM
aXN0LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgRGVzdHJveUZ1
bmMoKSh2bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU3Vic3BhY2Uu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYs
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFs
IH5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoKTsKLSAgICAKLSAgICB2b2lkIGZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwotICAg
IHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAko
cmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgLy8gV2Ug
c3BlY2lhbGl6ZSB0aGUgc3RyaW5nIHN1YnNwYWNlIHRvIGdldCB0aGUgZmFzdGVzdCBwb3NzaWJs
ZSBzd2VlcC4gVGhpcyB3b3VsZG4ndCBiZQogICAgIC8vIG5lY2Vzc2FyeSBpZiBKU1N0cmluZyBk
aWRuJ3QgaGF2ZSBhIGRlc3RydWN0b3IuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWU+Ci0gICAgc3Rh
dGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENvbXBsZXRlU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0uc3Ry
aW5nU3BhY2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmdIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQkoZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcDoyMjQ1
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNTdHJpbmdTdWJzcGFjZS5oIgorCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IERlc3Ryb3lGdW5jIHsK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29u
c3QKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbCktPkpTU3RyaW5n
Ojp+SlNTdHJpbmcoKTsKKyAgICB9Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwor
SlNTdHJpbmdTdWJzcGFjZTo6SlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhl
YXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICA6IFN1YnNwYWNlKG5h
bWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6
OkpTQ2VsbCksIGFsbG9jYXRvcikKK3sKK30KKworSlNTdHJpbmdTdWJzcGFjZTo6fkpTU3RyaW5n
U3Vic3BhY2UoKQoreworfQorCit2b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAgIGhh
bmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7
Cit9CisKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENl
bGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkpTU3RyaW5nU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU1N0cmluZ0hlYXBDZWxsVHlwZS5o
IgogCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtNDMsMjEgKzQyLDIxIEBAIHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQogCi1KU1N0cmluZ1N1YnNwYWNlOjpKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcg
bmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAg
IDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0
aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQorSlNTdHJpbmdIZWFwQ2VsbFR5cGU6
OkpTU3RyaW5nSGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRy
aWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCi1KU1N0
cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCitKU1N0cmluZ0hlYXBDZWxsVHlwZTo6
fkpTU3RyaW5nSGVhcENlbGxUeXBlKCkKIHsKIH0KIAotdm9pZCBKU1N0cmluZ1N1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlz
dCkKK3ZvaWQgSlNTdHJpbmdIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpI
YW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRsZS5maW5pc2hT
d2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxl
LmZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7
CiB9CiAKLXZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2Vs
bCkKK3ZvaWQgSlNTdHJpbmdIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNl
bGwpCiB7CiAgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgJKHJl
dmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdTdWJzcGFjZS5oOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1N0
cmluZ1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1
YnNwYWNlKCk7CisgICAgCisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxl
JiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBv
dmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgJKHJldmlz
aW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVh
cENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1N0cmluZ1N1YnNwYWNlIDogcHVibGljIFN1
YnNwYWNlIHsKK2NsYXNzIEpTU3RyaW5nSGVhcENlbGxUeXBlIDogcHVibGljIEhlYXBDZWxsVHlw
ZSB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShDU3Ry
aW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB+SlNTdHJpbmdTdWJzcGFjZSgpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTU3RyaW5nSGVhcENlbGxUeXBlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB+SlNTdHJpbmdIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lkIGZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCShub25l
eGlzdGVudCkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNTdHJpbmdT
dWJzcGFjZS5oIgotCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotbmFtZXNwYWNlIHsKLQotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbCktPkpTU3RyaW5nOjp+SlNTdHJpbmco
KTsKLSAgICB9Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNTdHJpbmdTdWJz
cGFjZTo6SlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFs
bG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFs
bG9jYXRvcikKLXsKLX0KLQotSlNTdHJpbmdTdWJzcGFjZTo6fkpTU3RyaW5nU3Vic3BhY2UoKQot
ewotfQotCi12b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpI
YW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQotewotICAgIGhhbmRsZS5maW5pc2hT
d2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Ci19Ci0KLXZvaWQg
SlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBE
ZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJ
KHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNTdHJpbmdTdWJz
cGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTdHJpbmdTdWJzcGFjZSgp
OwotICAgIAotICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVM
aXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lv
biAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMiBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRhYmxlIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+CisgICAgc3RhdGljIElz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZt
Lm1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2U7CisgICAgfQorCiAgICAgc3RhdGljIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYp
OwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIy
NDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDYgKzQyLDEyIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKFZNJiwgUmVmPEpJVENvZGU+JiYg
Y2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgUmVmPEpJVENvZGU+JiYgY29uc3Ry
dWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERP
TUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+
CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAg
ICAgICByZXR1cm4gJnZtLm5hdGl2ZUV4ZWN1dGFibGVTcGFjZTsKKyAgICB9CiAKICAgICBDb2Rl
QmxvY2tIYXNoIGhhc2hGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCkgY29uc3Q7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUu
aAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
Z3JhbUV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTIgQEAgcHVibGlj
OgogICAgIHR5cGVkZWYgU2NyaXB0RXhlY3V0YWJsZSBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJl
SXNJbW1vcnRhbDsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgorICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICZ2bS5wcm9ncmFtRXhlY3V0YWJsZVNwYWNlOworICAgIH0KKwogICAgIHN0YXRpYyBQcm9ncmFt
RXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlKQogICAgIHsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZp
c2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBBTFdBWVNfSU5MSU5F
IEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKICAgICBib29sIGNyZWF0ZVVuaW5p
dGlhbGl6ZWQgPSBnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1
cmUpOwotICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50
cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpOworICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhp
bGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwpOwogICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0
ZW1wLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDIy
NDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUNlbGxUeXBlOjpuZWVkc0Rl
c3RydWN0aW9uKTsKICAgICAgICAgcmV0dXJuICZ2bS5qc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMjQ5MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRl
ICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2luY2x1
ZGUgIkRpcmVjdEV2YWxFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAj
aW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQmxvY2suaCIKQEAg
LTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUg
IkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1
ZGUgIkdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgpAQCAtNTcsNiArNTksNyBAQAog
I2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgi
CiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCisjaW5jbHVkZSAiSW5kaXJlY3RFdmFs
RXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkluZmVycmVkVHlwZVRhYmxlLmgiCiAjaW5jbHVkZSAi
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCkBAIC02NCw2ICs2Nyw3IEBACiAj
aW5jbHVkZSAiSlNBUElWYWx1ZVdyYXBwZXIuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmgiCiAjaW5jbHVkZSAiSlNGaXhlZEFycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCkBAIC03MywyNCArNzcs
MzAgQEAKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVm
ZXJyZWQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKKyNpbmNsdWRl
ICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgiCiAjaW5jbHVkZSAiSlNT
Y3JpcHRGZXRjaFBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJKU1NjcmlwdEZldGNoZXIuaCIKICNp
bmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJK
U1NvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJKU1N0cmluZ0hlYXBDZWxsVHlwZS5oIgogI2luY2x1
ZGUgIkpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgiCiAjaW5jbHVk
ZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMZXhl
ci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk1pbmltdW1SZXNlcnZlZFpvbmVT
aXplLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIk1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiTmF0aXZlRXhlY3V0YWJsZS5oIgog
I2luY2x1ZGUgIk5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbC5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCiAj
aW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1
ZGUgIlByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJQcm9ncmFtRXhlY3V0YWJsZS5oIgog
I2luY2x1ZGUgIlByb21pc2VEZWZlcnJlZFRpbWVyLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXBI
YXNoVGFibGUuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgpAQCAtMTcxLDE4ICsxODEsMzMg
QEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgZmFzdE1h
bGxvY0FsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yPigpKQogICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtlX3Vu
aXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpQcmltaXRpdmUp
KQogICAgICwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8R2lnYWNh
Z2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6SlNWYWx1ZSkpCi0gICAgLCBwcmlt
aXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJQcmltaXRpdmUgR2lnYWNhZ2UgQXV4aWxpYXJ5
IiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFw
Q2VsbDo6QXV4aWxpYXJ5KSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCi0gICAg
LCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBBdXhpbGlh
cnkiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhl
YXBDZWxsOjpBdXhpbGlhcnkpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCi0gICAg
LCBjZWxsU3BhY2UoIkpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5l
ZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0
KCkpCi0gICAgLCBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgSlND
ZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBI
ZWFwQ2VsbDo6SlNDZWxsKSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQotICAgICwg
ZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlNDZWxsIiwgaGVhcCwgQWxsb2Nh
dG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgZmFzdE1h
bGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIHN0cmluZ1NwYWNlKCJKU1N0cmluZyIsIGhlYXAs
IGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFj
ZSgiSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgp
KQotICAgICwgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVhZ2VybHkgU3dl
cHQgSlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgp
KQotICAgICwgc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSgiSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdFNwYWNlIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIGF1
eGlsaWFyeUhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxsVHlwZT4oQWxsb2Nh
dG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxpYXJ5
KSkpCisgICAgLCBjZWxsSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBl
PihBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpKSkKKyAgICAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3Vu
aXF1ZTxIZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwg
SGVhcENlbGw6OkpTQ2VsbCkpKQorICAgICwgc3RyaW5nSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91
bmlxdWU8SlNTdHJpbmdIZWFwQ2VsbFR5cGU+KCkpCisgICAgLCBkZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZT4oKSkKKyAgICAsIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0ZDo6
bWFrZV91bmlxdWU8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZT4oKSkKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlKCJK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdl
dCgpKQorICAgICwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3Vu
aXF1ZTxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlPigpKQogI2VuZGlmCisgICAg
LCBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlKCJQcmltaXRpdmUgR2lnYWNhZ2UgQXV4
aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBwcmltaXRpdmVHaWdh
Y2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
KCJKU1ZhbHVlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIGF1eGlsaWFyeUhlYXBDZWxsVHlw
ZS5nZXQoKSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQorICAgICwgY2VsbFNwYWNl
KCJKU0NlbGwiLCBoZWFwLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQorICAgICwganNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlKCJKU1ZhbHVlIEdpZ2Fj
YWdlIEpTQ2VsbCIsIGhlYXAsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIGpzVmFsdWVHaWdhY2Fn
ZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGRlc3RydWN0aWJsZUNlbGxTcGFjZSgiRGVzdHJ1Y3Rp
YmxlIEpTQ2VsbCIsIGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIGZh
c3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBzdHJpbmdTcGFjZSgiSlNTdHJpbmciLCBo
ZWFwLCBzdHJpbmdIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkp
CisgICAgLCBkZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiSlNEZXN0cnVjdGlibGVPYmplY3QiLCBo
ZWFwLCBkZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxv
Y2F0b3IuZ2V0KCkpCisgICAgLCBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZSgi
RWFnZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGRlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAs
IHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UoIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
cGFjZSIsIGhlYXAsIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBm
YXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAs
IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UoIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSIs
IGhlYXAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9j
QWxsb2NhdG9yLmdldCgpKQorI2VuZGlmCisgICAgLCBuYXRpdmVFeGVjdXRhYmxlU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwg
TmF0aXZlRXhlY3V0YWJsZSkKKyAgICAsIGRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNPX1NV
QlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRGly
ZWN0RXZhbEV4ZWN1dGFibGUpCisgICAgLCBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2UgSVNP
X1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwg
SW5kaXJlY3RFdmFsRXhlY3V0YWJsZSkKKyAgICAsIGZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNlIElT
T19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCks
IEZ1bmN0aW9uRXhlY3V0YWJsZSkKKyAgICAsIG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3BhY2Ug
SVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQo
KSwgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUpCisgICAgLCBwcm9ncmFtRXhlY3V0YWJsZVNwYWNl
IElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0
KCksIFByb2dyYW1FeGVjdXRhYmxlKQogICAgICwgdm1UeXBlKHZtVHlwZSkKICAgICAsIGNsaWVu
dERhdGEoMCkKICAgICAsIHRvcEVudHJ5RnJhbWUobnVsbHB0cikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQ2FsbERhdGEuaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisj
aW5jbHVkZSAiQ29tcGxldGVTdWJzcGFjZS5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2su
aCIKICNpbmNsdWRlICJDb250cm9sRmxvd1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiRGF0ZUluc3Rh
bmNlQ2FjaGUuaCIKQEAgLTM5LDIwICs0MCwxNiBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIK
KyNpbmNsdWRlICJJc29TdWJzcGFjZS5oIgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNl
LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCi0jaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlLmgiCi0jaW5jbHVkZSAiSlNTdHJpbmdTdWJzcGFjZS5oIgotI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgogI2luY2x1ZGUgIk51bWVyaWNT
dHJpbmdzLmgiCiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKLSNpbmNsdWRlICJTdWJzcGFjZS5oIgogI2lu
Y2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNv
cmQuaCIKICNpbmNsdWRlICJWTVRyYXBzLmgiCkBAIC0xMDgsOSArMTA1LDEzIEBAIGNsYXNzIEhl
YXBQcm9maWxlcjsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBJbnRlcnByZXRlcjsKIGNsYXNz
IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb247CitjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNPYmplY3Q7CiBj
bGFzcyBKU1J1bkxvb3BUaW1lcjsKK2NsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFw
Q2VsbFR5cGU7CitjbGFzcyBKU1N0cmluZ0hlYXBDZWxsVHlwZTsKK2NsYXNzIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU7CiBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwpAQCAt
MjkwLDkgKzI5MSwxOSBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZhc3RNYWxsb2NB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBmYXN0TWFsbG9jQWxsb2NhdG9yOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+IHByaW1pdGl2ZUdpZ2FjYWdl
QWxsb2NhdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I+IGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxI
ZWFwQ2VsbFR5cGU+IGF1eGlsaWFyeUhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SGVhcENlbGxUeXBlPiBjZWxsSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFw
Q2VsbFR5cGU+IGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEpTU3RyaW5nSGVhcENlbGxUeXBlPiBzdHJpbmdIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlPiBkZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RIZWFwQ2VsbFR5cGU+IHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBl
OworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGU7CisjZW5kaWYKICAgICAKLSAgICBTdWJzcGFjZSBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlOyAvLyBUeXBlZCBhcnJheXMsIHN0cmluZ3MsIGJpdHZlY3RvcnMsIGV0YyBnbyBoZXJl
LgotICAgIFN1YnNwYWNlIGpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBCdXR0ZXJm
bGllcywgYXJyYXlzIG9mIEpTVmFsdWVzLCBldGMgZ28gaGVyZS4KKyAgICBDb21wbGV0ZVN1YnNw
YWNlIHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIFR5cGVkIGFycmF5cywgc3Ry
aW5ncywgYml0dmVjdG9ycywgZXRjIGdvIGhlcmUuCisgICAgQ29tcGxldGVTdWJzcGFjZSBqc1Zh
bHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gQnV0dGVyZmxpZXMsIGFycmF5cyBvZiBKU1Zh
bHVlcywgZXRjIGdvIGhlcmUuCiAKICAgICAvLyBXZSBtYWtlIGNyb3NzLWN1dHRpbmcgYXNzdW1w
dGlvbnMgYWJvdXQgdHlwZWQgYXJyYXlzIGJlaW5nIGluIHRoZSBwcmltaXRpdmUgR2lnYWNhZ2Ug
YW5kIGJ1dHRlcmZsaWVzCiAgICAgLy8gYmVpbmcgaW4gdGhlIEpTVmFsdWUgZ2lnYWNhZ2UuIEZv
ciBzb21lIHR5cGVzLCBpdCdzIHN1cGVyIG9idmlvdXMgd2hlcmUgdGhleSBzaG91bGQgZ28sIGFu
ZCBzbyB3ZQpAQCAtMzAwLDcgKzMxMSw3IEBAIHB1YmxpYzoKICAgICAvLyBjb25zdGFudCBzb21l
d2hlcmUuCiAgICAgLy8gRklYTUU6IE1heWJlIGl0IHdvdWxkIGJlIGJldHRlciBpZiBldmVyeW9u
ZSBhYnN0cmFjdGVkIHRoaXM/CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTI0OAotICAgIEFMV0FZU19JTkxJTkUgU3Vic3BhY2UmIGdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UoR2lnYWNhZ2U6OktpbmQga2luZCkKKyAgICBBTFdBWVNfSU5MSU5FIENvbXBs
ZXRlU3Vic3BhY2UmIGdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoR2lnYWNhZ2U6OktpbmQga2luZCkK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNlIEdpZ2FjYWdlOjpQ
cmltaXRpdmU6CkBAIC0zMTUsMTYgKzMyNiwyMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IC8vIFdoZW5ldmVyIHBvc3NpYmxlLCB1c2Ugc3Vic3BhY2VGb3I8Q2VsbFR5cGU+KHZtKSB0byBn
ZXQgb25lIG9mIHRoZXNlIHN1YnNwYWNlcy4KLSAgICBTdWJzcGFjZSBjZWxsU3BhY2U7Ci0gICAg
U3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlOwotICAgIFN1YnNwYWNlIGRlc3RydWN0
aWJsZUNlbGxTcGFjZTsKLSAgICBKU1N0cmluZ1N1YnNwYWNlIHN0cmluZ1NwYWNlOwotICAgIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7Ci0gICAg
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmpl
Y3RTcGFjZTsKLSAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Ugc2VnbWVudGVk
VmFyaWFibGVPYmplY3RTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIGNlbGxTcGFjZTsKKyAg
ICBDb21wbGV0ZVN1YnNwYWNlIGpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKKyAgICBDb21wbGV0
ZVN1YnNwYWNlIGRlc3RydWN0aWJsZUNlbGxTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIHN0
cmluZ1NwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2UgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7
CisgICAgQ29tcGxldGVTdWJzcGFjZSBlYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFj
ZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2U7CiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZSB3ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2Ugd2ViQXNz
ZW1ibHlDb2RlQmxvY2tTcGFjZTsKICNlbmRpZgorICAgIAorICAgIElzb1N1YnNwYWNlIG5hdGl2
ZUV4ZWN1dGFibGVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBkaXJlY3RFdmFsRXhlY3V0YWJsZVNw
YWNlOworICAgIElzb1N1YnNwYWNlIGluZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsKKyAgICBJ
c29TdWJzcGFjZSBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBtb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIHByb2dyYW1FeGVjdXRh
YmxlU3BhY2U7CiAKICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENsaWVudERhdGEqIGNsaWVudERh
dGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAg
IHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAg
ICAgICByZXR1cm4gJnZtLndlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2U7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDUzNikJ
KGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlLmNwcDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
TWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsPEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2s+Ojp2YWx1ZSwgIk90aGVyd2lzZSwgdGhpcyBjb2RlIHdvdWxkIG5vdCBiZSBjb3Jy
ZWN0LiIpOworICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrOjppbmZvKCktPm1ldGhvZFRh
YmxlLmRlc3Ryb3koY2VsbCk7CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciogYWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmli
dXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQorewor
fQorCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UoKQoreworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJl
ZUxpc3QpCit7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0
LCBEZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMoKSh2
bSwgY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJ
KHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
NCArMjQsMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVC
bG9ja0hlYXBDZWxsVHlwZS5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ3LDIxICs0NiwyMSBAQCBzdHJ1Y3QgRGVzdHJv
eUZ1bmMgewogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCkKKyAgICA6IEhl
YXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxs
OjpKU0NlbGwpKQogewogfQogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKQorSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoKQogewogfQogCi12
b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit2b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
IGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlz
aFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAK
LXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlND
ZWxsKiBjZWxsKQordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOjpkZXN0
cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24g
MjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuaDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKik7CisgICAgdmlydHVhbCB+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlKCk7CisgICAgCisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwg
RnJlZUxpc3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVy
cmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFT
U0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaAkocmV2aXNp
b24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNCArMjcsMTQg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisj
aW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xhc3MgSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSA6IHB1YmxpYyBIZWFwQ2VsbFR5cGUgewog
cHVibGljOgotICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3RyaW5nIG5hbWUs
IEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgdmlydHVhbCB+SlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlKCk7CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZSgpOworICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGUoKTsKICAgICAKICAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBG
cmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJy
aWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ5
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UuY3BwCShub25leGlzdGVudCkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgiCi0KLSNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgot
I2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNw
YWNlIHsKLQotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgb3Bl
cmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19maW5hbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPjo6dmFsdWUsICJPdGhl
cndpc2UsIHRoaXMgY29kZSB3b3VsZCBub3QgYmUgY29ycmVjdC4iKTsKLSAgICAgICAgSlNXZWJB
c3NlbWJseUNvZGVCbG9jazo6aW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KGNlbGwpOwotICAg
IH0KLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2U6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3RyaW5nIG5hbWUs
IEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1
YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwg
SGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKLXsKLX0KLQotSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCkKLXsKLX0KLQot
dm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJs
b2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQotewotICAgIGhhbmRsZS5m
aW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Ci19Ci0K
LXZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlND
ZWxsKiBjZWxsKQotewotICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0K
LSNpbmNsdWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKLXB1YmxpYzoKLSAg
ICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvciopOwotICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6Okhh
bmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxs
Kikgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9i
amVjdCBCYXNlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGlj
IFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENvbXBsZXRlU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIC8vIFdlIGhvbGQgb250byBh
IGxvdCBvZiBtZW1vcnksIHNvIGl0IG1ha2VzIGEgbG90IG9mIHNlbnNlIHRvIGJlIHN3ZXB0IGVh
Z2VybHkuCiAgICAgICAgIHJldHVybiAmdm0uZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0
U3BhY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxNy0xMS0xNyAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdDIHNob3VsZCBzdXBw
b3J0IGlzb2hlYXBzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzkyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBuZXcgYmVoYXZpb3IuCisgICAgICAgIAorICAg
ICAgICBBZG9wdGluZyBjaGFuZ2VzIGluIEpTQyBTdWJzcGFjZSBBUEkuCisKKyAgICAgICAgKiBG
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0Q29uc3RyYWlu
dFN1YnNwYWNlRm9yKToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbE9iamVjdE91dHB1dENvbnN0
cmFpbnRTdWJzcGFjZUZvcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmg6
CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1D
bGllbnREYXRhOjpvdXRwdXRDb25zdHJhaW50U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNW
TUNsaWVudERhdGE6Omdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZUhlYWRlcik6CisKIDIwMTctMTEtMTYgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgog
CiAgICAgICAgIFtQYXltZW50IFJlcXVlc3RdIFVwZGF0ZSBmZWF0dXJlIHN0YXR1cyB0byAiU3Vw
cG9ydGVkIEluIFByZXZpZXciCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKyNwcmFnbWEgb25jZQorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKyNwcmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcAkocmV2aXNpb24gMjI0
OTM1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIEpTRE9NV2luZG93JiBKU0RPTU9iamVjdDo6
ZG9tV2luZG93KCkgY28KICAgICByZXR1cm4gKmRvbVdpbmRvdzsKIH0KIAotU3Vic3BhY2UqIG91
dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvcihWTSYgdm0pCitDb21wbGV0ZVN1YnNwYWNlKiBvdXRw
dXRDb25zdHJhaW50U3Vic3BhY2VGb3IoVk0mIHZtKQogewogICAgIHJldHVybiAmc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+b3V0cHV0Q29uc3RyYWludFNwYWNl
KCk7CiB9CiAKLVN1YnNwYWNlKiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VG
b3IoVk0mIHZtKQorQ29tcGxldGVTdWJzcGFjZSogZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWlu
dFN1YnNwYWNlRm9yKFZNJiB2bSkKIHsKICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSktPmdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFj
ZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmgJ
KHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3Jh
cHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4IEBAIHByb3RlY3RlZDoKICAgICB9
CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBKU0M6OlN1YnNwYWNlKiBvdXRwdXRDb25zdHJhaW50U3Vi
c3BhY2VGb3IoSlNDOjpWTSYpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpTdWJzcGFjZSogZ2xvYmFs
T2JqZWN0T3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKEpTQzo6Vk0mKTsKK1dFQkNPUkVfRVhQ
T1JUIEpTQzo6Q29tcGxldGVTdWJzcGFjZSogb3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKEpT
Qzo6Vk0mKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6Q29tcGxldGVTdWJzcGFjZSogZ2xvYmFsT2Jq
ZWN0T3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKEpTQzo6Vk0mKTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgSW1wbGVtZW50YXRpb25DbGFzcz4gY2xhc3MgSlNET01XcmFwcGVyIDogcHVibGljIEpT
RE9NT2JqZWN0IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPGhlYXAvTWFya2VkQmxvY2tJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1Zp
c2l0aW5nVGltZW91dC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KIApAQCAtNDQsOCArNDYsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
SlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2bSkKICAgICA6IG1fYnVpbHRpbkZ1
bmN0aW9ucyh2bSkKICAgICAsIG1fYnVpbHRpbk5hbWVzKCZ2bSkKLSAgICAsIG1fb3V0cHV0Q29u
c3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIgdy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5o
ZWFwLCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQotICAgICwgbV9nbG9iYWxPYmplY3RP
dXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBPdXRwdXQgQ29u
c3RyYWludCIsIHZtLmhlYXAsIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBt
X291dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBXcmFwcGVyIHcvIE91dHB1dCBDb25zdHJh
aW50Iiwgdm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCB2
bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgbV9nbG9iYWxPYmplY3RPdXRwdXRD
b25zdHJhaW50U3BhY2UoIldlYkNvcmUgR2xvYmFsIE9iamVjdCB3LyBPdXRwdXQgQ29uc3RyYWlu
dCIsIHZtLmhlYXAsIHZtLnNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgp
LCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAy
MjQ5MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIFdlYkNvcmVC
dWlsdGluTmFtZXMmIGJ1aWx0aW5OYW1lcygpIHsgcmV0dXJuIG1fYnVpbHRpbk5hbWVzOyB9CiAg
ICAgSlNCdWlsdGluRnVuY3Rpb25zJiBidWlsdGluRnVuY3Rpb25zKCkgeyByZXR1cm4gbV9idWls
dGluRnVuY3Rpb25zOyB9CiAgICAgCi0gICAgSlNDOjpTdWJzcGFjZSYgb3V0cHV0Q29uc3RyYWlu
dFNwYWNlKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2U7IH0KLSAgICBKU0M6OlN1
YnNwYWNlJiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBtX2ds
b2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZTsgfQorICAgIEpTQzo6Q29tcGxldGVTdWJz
cGFjZSYgb3V0cHV0Q29uc3RyYWludFNwYWNlKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50
U3BhY2U7IH0KKyAgICBKU0M6OkNvbXBsZXRlU3Vic3BhY2UmIGdsb2JhbE9iamVjdE91dHB1dENv
bnN0cmFpbnRTcGFjZSgpIHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNw
YWNlOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVh
Y2hPdXRwdXRDb25zdHJhaW50U3BhY2UoY29uc3QgRnVuYyYgZnVuYykKQEAgLTc2LDggKzc2LDgg
QEAgcHJpdmF0ZToKICAgICBKU0J1aWx0aW5GdW5jdGlvbnMgbV9idWlsdGluRnVuY3Rpb25zOwog
ICAgIFdlYkNvcmVCdWlsdGluTmFtZXMgbV9idWlsdGluTmFtZXM7CiAgICAgCi0gICAgSlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlOwotICAg
IEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlIG1fZ2xvYmFsT2JqZWN0T3V0
cHV0Q29uc3RyYWludFNwYWNlOworICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSBtX291dHB1dENv
bnN0cmFpbnRTcGFjZTsKKyAgICBKU0M6OkNvbXBsZXRlU3Vic3BhY2UgbV9nbG9iYWxPYmplY3RP
dXRwdXRDb25zdHJhaW50U3BhY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3MzUsNyArMjczNSw3IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgIyB0aGlzIGp1c3QgY2FsbHMgdmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQg
dGhpcy4KICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQg
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7XG4iKTsK
ICAgICAgICAgICAgIG15ICRzdWJzcGFjZUZ1bmMgPSBJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJm
YWNlKSA/ICJnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IiIDogIm91dHB1
dENvbnN0cmFpbnRTdWJzcGFjZUZvciI7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lPiBzdGF0aWMgSlNDOjpTdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pIHsgcmV0dXJuICRzdWJzcGFjZUZ1bmModm0pOyB9XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0YXRp
YyBKU0M6OkNvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKSB7IHJldHVy
biAkc3Vic3BhY2VGdW5jKHZtKTsgfVxuIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327344</attachid>
            <date>2017-11-19 09:15:16 -0800</date>
            <delta_ts>2017-11-25 18:37:03 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>215472</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0OTc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNy0xMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBzdXBwb3J0IGlzb2hlYXBzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZXhwYW5kcyB0aGUgcG93ZXIgb2YgdGhl
IFN1YnNwYWNlIEFQSSBpbiBKU0M6CisgICAgICAgIAorICAgICAgICAtIEV2ZXJ5dGhpbmcgYXNz
b2NpYXRlZCB3aXRoIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIG9iamVjdHMgaXMgbm93IHBhcnQg
b2YgdGhlIEhlYXBDZWxsVHlwZSBjbGFzcy4KKyAgICAgICAgICBXZSBoYXZlIGRpZmZlcmVudCBI
ZWFwQ2VsbFR5cGVzIGZvciBkaWZmZXJlbnQgZGVzdHJ1Y3Rpb24gc3RyYXRlZ2llcy4gQW55IFN1
YnNwYWNlIGNhbiB1c2UgYW55CisgICAgICAgICAgSGVhcENlbGxUeXBlOyB0aGVzZSBhcmUgb3J0
aG9nb25hbCB0aGluZ3MuCisgICAgICAgIAorICAgICAgICAtIFRoZXJlIGFyZSBub3cgdHdvIHZh
cmlhbnRzIG9mIFN1YnNwYWNlOiBDb21wbGV0ZVN1YnNwYWNlLCB3aGljaCBjYW4gYWxsb2NhdGUg
YW55IHNpemUgb2JqZWN0cyB1c2luZworICAgICAgICAgIGFueSBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOyBhbmQgSXNvU3Vic3BhY2UsIHdoaWNoIGNhbiBhbGxvY2F0ZSBqdXN0IG9uZSBzaXplIG9m
IG9iamVjdCBhbmQgdXNlcyBhCisgICAgICAgICAgc3BlY2lhbCB2aXJ0dWFsIG1lbW9yeSBwb29s
IGZvciB0aGF0IHB1cnBvc2UuIExpa2UgYm1hbGxvYydzIElzb0hlYXAsIElzb1N1YnNwYWNlIGhv
YXJkcyB2aXJ0dWFsCisgICAgICAgICAgcGFnZXMgYnV0IHJlbGVhc2VzIHRoZSBwaHlzaWNhbCBw
YWdlcyBhcyBwYXJ0IG9mIHRoZSByZXNwZWN0aXZlIGFsbG9jYXRvcidzIHNjYXZlbmdpbmcgcG9s
aWN5CisgICAgICAgICAgKHRoZSBTY2F2ZW5nZXIgaW4gYm1hbGxvYyBmb3IgSXNvSGVhcCBhbmQg
dGhlIGluY3JlbWVudGFsIHN3ZWVwIGFuZCBmdWxsIHN3ZWVwIGluIFJpcHRpZGUgZm9yCisgICAg
ICAgICAgSXNvU3Vic3BhY2UpLgorICAgICAgICAKKyAgICAgICAgU28gZmFyLCB0aGlzIHBhdGNo
IGp1c3QgcHV0cyBzdWJ0eXBlcyBvZiBFeGVjdXRhYmxlQmFzZSBpbiBJc29TdWJzcGFjZXMuIElm
IGl0IHdvcmtzLCB3ZSBjYW4gdXNlIGl0CisgICAgICAgIGZvciBtb3JlIHRoaW5ncy4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUv
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjppbml0aWFsaXplUHJvZmlsZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlUmF3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxv
Y2F0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9j
YXRvckZvclNpemUpOgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyQWxsb2NhdG9y
KToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJTdWJzcGFj
ZSk6CisgICAgICAgICogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg6CisgICAgICAgIChK
U0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZpcnN0QWxsb2NhdG9yIGNvbnN0KToKKyAgICAg
ICAgKiBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFw
L0NvbXBsZXRlU3Vic3BhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJz
cGFjZTo6Q29tcGxldGVTdWJzcGFjZSk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6
On5Db21wbGV0ZVN1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxs
b2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUpOgor
ICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgorICAg
ICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KToKKyAgICAgICAg
KEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVTbG93KToKKyAgICAgICAgKEpTQzo6Q29t
cGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KToKKyAgICAgICAgKiBoZWFwL0NvbXBsZXRl
U3Vic3BhY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6Om9mZnNl
dE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXApOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNl
OjphbGxvY2F0b3JGb3JTaXplU3RlcCk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvck5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAvSGVhcENlbGxUeXBlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBlKToKKyAg
ICAgICAgKEpTQzo6SGVhcENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpTQzo6
SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6
ZGVzdHJveSk6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbFR5cGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkhlYXBDZWxsVHlwZTo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogaGVhcC9J
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oklzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3I6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+SXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcik6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlQWxpZ25lZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OmZyZWVBbGlnbmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6
SXNvU3Vic3BhY2U6On5Jc29TdWJzcGFjZSk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjph
bGxvY2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9u
VmlydHVhbCk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0ZSk6CisgICAgICAg
IChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6
Ok1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjpzZXRTdWJzcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGVTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZUltcGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6bmV4dEFsbG9jYXRvcklu
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6c2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik6CisgICAgICAg
ICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAgICAg
ICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRT
cGFjZTo6YWRkTWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6
CisgICAgICAgICogaGVhcC9TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpT
dWJzcGFjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjppbml0aWFsaXplKToKKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRl
c3Ryb3kpOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24pOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNwYWNlOjphbGxvY2F0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjp0cnlBbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3Vic3BhY2U6OmFsbG9jYXRlU2xvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNw
YWNlOjp0cnlBbGxvY2F0ZVNsb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6
ZGlkQWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAg
ICAgKEpTQzo6U3Vic3BhY2U6OmhlYXBDZWxsVHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6OlN1
YnNwYWNlOjpuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpTdWJzcGFjZTo6c2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0
ZXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2l6ZVN0
ZXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6dHJ5QWxsb2NhdG9yRm9yKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmFsbG9jYXRvckZvcik6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25ld19vYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnRyeUNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0Fy
cmF5UmlnaHQpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyk6CisgICAgICAgICogcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpz
dWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGVCYXNlLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpzdWJzcGFjZUZv
cik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDoKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3RlZCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVj
dGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQpOgorICAgICAgICAqIHJ1bnRpbWUvSlND
ZWxsLmg6CisgICAgICAgIChKU0M6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pT
Q2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzdWJzcGFjZUZvcik6CisgICAg
ICAgIChKU0M6OnRyeUFsbG9jYXRlQ2VsbEhlbHBlcik6CisgICAgICAgIChKU0M6OmFsbG9jYXRl
Q2VsbCk6CisgICAgICAgIChKU0M6OnRyeUFsbG9jYXRlQ2VsbCk6CisgICAgICAgICogcnVudGlt
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcC4KKyAgICAgICAgKEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlKToKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6
On5KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgIChKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgIChKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2U6On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2UuaC4KKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaDoKKyAgICAgICAgKEpTQzo6SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN1YnNw
YWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6c3Vic3BhY2VGb3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHAuCisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxU
eXBlOjp+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgIChK
U0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKToK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5oLgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnN1YnNwYWNlRm9yKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAuCisgICAgICAg
IChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjpKU1N0cmluZ0hlYXBDZWxsVHlwZSk6CisgICAg
ICAgIChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjp+SlNTdHJpbmdIZWFwQ2VsbFR5cGUpOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXApOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpT
U3RyaW5nU3Vic3BhY2U6OkpTU3RyaW5nU3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICogcnVu
dGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmguCisgICAgICAgICogcnVudGltZS9KU1N0
cmluZ1N1YnNwYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nU3Vi
c3BhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRh
YmxlLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisgICAgICAgICog
cnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmg6CisgICAg
ICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06OmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAu
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxs
VHlwZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6
OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpzdWJzcGFjZUZvcik6
CisKIDIwMTctMTEtMTYgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBmZWF0dXJlIGRlZmluZSBmb3IgYWx0ZXJuYXRpdmUgcHJlc2VudGF0aW9uIGJ1dHRv
biBlbGVtZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjQ5
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTQ3MCw2ICs0NzAsNyBAQCBoZWFwL0NlbGxDb250YWluZXIuY3BwCiBoZWFwL0NvZGVCbG9j
a1NldC5jcHAKIGhlYXAvQ29sbGVjdGlvblNjb3BlLmNwcAogaGVhcC9Db2xsZWN0b3JQaGFzZS5j
cHAKK2hlYXAvQ29tcGxldGVTdWJzcGFjZS5jcHAKIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
CiBoZWFwL0RlZmVyR0MuY3BwCiBoZWFwL0Rlc3RydWN0aW9uTW9kZS5jcHAKQEAgLTQ4NiwxMiAr
NDg3LDE1IEBAIGhlYXAvSGFuZGxlU2V0LmNwcAogaGVhcC9IYW5kbGVTdGFjay5jcHAKIGhlYXAv
SGVhcC5jcHAKIGhlYXAvSGVhcENlbGwuY3BwCitoZWFwL0hlYXBDZWxsVHlwZS5jcHAKIGhlYXAv
SGVhcEZpbmFsaXplckNhbGxiYWNrLmNwcAogaGVhcC9IZWFwSGVscGVyUG9vbC5jcHAKIGhlYXAv
SGVhcFByb2ZpbGVyLmNwcAogaGVhcC9IZWFwU25hcHNob3QuY3BwCiBoZWFwL0hlYXBTbmFwc2hv
dEJ1aWxkZXIuY3BwCiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKK2hlYXAvSXNvQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvci5jcHAKK2hlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0dWJS
b3V0aW5lU2V0LmNwcAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3BwCiBoZWFwL01hY2hpbmVTdGFj
a01hcmtlci5jcHAKQEAgLTc3Miw3ICs3NzYsNyBAQCBydW50aW1lL0pTQ3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb24uY3BwCiBydW50aW1lL0pTRGF0YVZpZXcuY3BwCiBydW50aW1lL0pTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwCiBydW50aW1lL0pTRGF0ZU1hdGguY3BwCi1ydW50aW1lL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCitydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmNwcAogcnVudGltZS9KU0ZpeGVkQXJyYXkuY3BwCiBydW50aW1lL0pTRnVuY3Rp
b24uY3BwCiBydW50aW1lL0pTR2VuZXJhdG9yRnVuY3Rpb24uY3BwCkBAIC04MDcsMTQgKzgxMSwx
NCBAQCBydW50aW1lL0pTU2NvcGUuY3BwCiBydW50aW1lL0pTU2NyaXB0RmV0Y2hlci5jcHAKIHJ1
bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuY3BwCiBydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QuY3BwCi1ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZS5jcHAKK3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAK
IHJ1bnRpbWUvSlNTZXQuY3BwCiBydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCiBydW50aW1lL0pT
U291cmNlQ29kZS5jcHAKIHJ1bnRpbWUvSlNTdHJpbmcuY3BwCiBydW50aW1lL0pTU3RyaW5nSXRl
cmF0b3IuY3BwCiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAotcnVudGltZS9KU1N0cmluZ1N1
YnNwYWNlLmNwcAorcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAKIHJ1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAKIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAog
cnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCkBAIC05NzEsNyArOTc1LDcgQEAg
d2FzbS9qcy9KU1RvV2FzbS5jcHAKIHdhc20vanMvSlNUb1dhc20uaAogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcAotd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCit3YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJy
b3IuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKIHdhc20vanMvSlNXZWJB
c3NlbWJseUxpbmtFcnJvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEzLDcgKzMxMyw3
IEBACiAJCTBGNEM5MTY2MUMyOUY0RjIwMDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEM5MTY1MUMyOUY0RjIw
MDQzNDFBNiAvKiBCM09yaWdpbkR1bXAuaCAqLzsgfTsKIAkJMEY0REUxQ0YxQzRDMUI1NDAwNEQ2
QzExIC8qIEFpckZpeE9idmlvdXNTcGlsbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNERFMUNEMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZp
b3VzU3BpbGxzLmggKi87IH07CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0
aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi87IH07Ci0JCTBGNEY4Mjg4MUUy
RkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUyRkZE
REIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjRGODI4ODFFMkZG
REUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RjgyODYxRTJG
RkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjRGODI4
QzFFMzFCOTc2MDA3NTE4NEMgLyogU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4MjhB
MUUzMUI5NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5o
ICovOyB9OwogCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJl
clN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi87
IH07CiAJCTBGNTUxM0E2MUQ1QTY4MkMwMEMzMkJEOCAvKiBGcmVlTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTEzQTUxRDVBNjgyQTAwQzMy
QkQ4IC8qIEZyZWVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTQwMCw4ICs0MDAsOCBAQAogCQkwRjdERjEzNTFFMjk3MERDMDA5NTk1MUIg
LyogTWFya2VkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjdERjEzMDFFMjk3MEQ1MDA5NTk1MUIgLyogTWFya2VkU3BhY2VJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3REYxMzcxRTI5NzBFMTAwOTU5NTFCIC8qIFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMjFFMjk3MEQ1MDA5NTk1MUIgLyog
U3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjdERjEzODFFMjk3MEU0MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzMzFFMjk3MEQ1
MDA5NTk1MUIgLyogU3Vic3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3REYxM0MxRTI5NzExMzAwOTU5NTFCIC8qIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGN0RGMTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJs
ZU9iamVjdFN1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEY3REYxM0YxRTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0RGMTNF
MUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3REYxM0MxRTI5NzExMzAwOTU5NTFC
IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyog
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyog
SlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxs
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGN0RGMTQ2MUUyQkVGNkEwMDk1OTUxQiAvKiBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjE0NTFFMkJF
RjY4MDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0Y5ODhDMUQ5NTk2QzgwMEY0RjEy
RSAvKiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0Y5ODhBMUQ5NTk2QzMwMEY0RjEyRSAvKiBE
RkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuaCAqLzsgfTsKIAkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NDAsNiAr
NTQwLDExIEBACiAJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJD
QzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTgxNzQ4MzBBMjAwN0Iz
QzFCIC8qIERGR1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLzsg
fTsKIAkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0U5MTc0ODk2
QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFs
bG9jYXRpb25GYWlsdXJlTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJl
TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRENFMTIyMUZBRTg1OEMwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTFGMUZBRTg1ODcwMDZGMzkw
MSAvKiBIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkRDRTEyQTFGQUZBODVGMDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFj
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQ0Ux
MjgxRkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTEyRDFGQUZCNEU1MDA2RjM5
MDEgLyogSXNvU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRENFMTJCMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRENFMTMyMUZC
MTFEQTQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEzMDFGQjExRDlEMDA2RjM5
MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcC5oICovOyB9OwogCQkwRkRFODdGQzFERkU2RTUxMDA2NEMzOTAgLyogU3Bh
Y2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZERTg3RkIxREZFNkU1MDAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0
b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEZERjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIzS2lu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjY3
RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICovOyB9OwpAQCAtMTA5OSw3ICsxMTA0LDcg
QEAKIAkJNzlEQUUyN0ExRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURBRTI3OTFFMDND
ODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMgLyog
SGFzT3duUHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2Fj
aGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
OUVFMEMwMDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4NTAw
MDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrSGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUYxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxG
bHVzaEluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUY4RkMxRDFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5z
ZXJ0aW9uUGhhc2UuaCAqLzsgfTsKIAkJNzlGQzhBMDgxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1Jl
Z2lzdGVyZWRTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5RkM4QTA3MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdSZWdpc3RlcmVkU3RydWN0
dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAv
KiBXYXNtRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTIyNzAsOCArMjI3NSw4IEBACiAJCTBGNERFMUQwMUM0RDc2NEIwMDRENkMxMSAv
KiBCM09yaWdpbkR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNPcmlnaW5EdW1wLmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luRHVtcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyog
REZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjRGODI4NTFFMkZGRERCMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAv
KiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjRGODI4NjFFMkZGRERCMDA3NTE4
NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEY4Mjg5MUUzMUI5NzEwMDc1
MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEY4MjhBMUUzMUI5
NzEwMDc1MTg0QyAvKiBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUwQUYzQjE5M0U4QjM5
MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBwYXRoID0gZGZnL0RG
R1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjQxMywxMCArMjQxOCwxMCBAQAogCQkwRjdERjEzMTFFMjk3MEQ1MDA5NTk1MUIgLyogU3Vic3Bh
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Vic3BhY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdERjEzMjFFMjk3MEQ1MDA5NTk1MUIg
LyogU3Vic3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Vic3BhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3REYxMzMxRTI5NzBENTAwOTU5NTFC
IC8qIFN1YnNwYWNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dWJzcGFjZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxMzkx
RTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGN0RGMTNBMUUyOTcxMEUw
MDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3REYxM0QxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3Ry
aW5nU3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
dHJpbmdTdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGN0RGMTNF
MUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nU3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3REYxMzkxRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ0hlYXBDZWxsVHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0RGMTNFMUUyQUZDNEIwMDk1OTUx
QiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjdERjE0NTFFMkJFRjY4MDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0Y5ODg5MUQ5NTk2QzMwMEY0RjEyRSAv
KiBERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmll
ckNsdXN0ZXJpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY2Niw2
ICsyNjcxLDE1IEBACiAJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXb3JrbGlzdC5jcHA7
IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkRCMkNFNjE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV29ya2xpc3QuaDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNFOTE3NDg5NkM3MDA3QjND
MUIgLyogQ29uY3VycmVudEpTTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb25jdXJyZW50SlNMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENF
MTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRENFMTFGMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENF
MTIwMUZBRTg1ODcwMDZGMzkwMSAvKiBIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0Ux
MjcxRkFGQTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29tcGxldGVTdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRENFMTI4MUZBRkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbXBsZXRlU3Vic3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8qIElzb1N1YnNwYWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElzb1N1YnNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTJDMUZB
RkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJc29T
dWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTJGMUZCMTFE
OUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkIyMTY2NkVFRDUwMEM1NUZFRiAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBwYXRoID0gZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
Lmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5l
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDZWxsQ29udGFpbmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1ODEsOCArMzU5NSw4IEBACiAJ
CTc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc093blByb3BlcnR5Q2FjaGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlh
YmxlRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmFyaWFibGVFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlRW52aXJvbm1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOyBwYXRoID0ganMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJz
cGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUVGRDQ4MTFFQkMwNDVDMDBG
M0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RG
RUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmg7
IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
TWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OUY4RkMxRDFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUZDOEEwNzFFMzJFOUYwMDBEODhG
MEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdSZWdpc3RlcmVkU3RydWN0dXJlLmg7IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJl
ZFN0cnVjdHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ4Niw2ICs1NTAw
LDcgQEAKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2Nh
dGluZ1Njb3BlLmggKi8sCisJCQkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRp
b25GYWlsdXJlTW9kZS5oICovLAogCQkJCTBGOTYzMDM1MUQ0MTkyQzMwMDU2MDlEOSAvKiBBbGxv
Y2F0b3JBdHRyaWJ1dGVzLmNwcCAqLywKIAkJCQkwRjk2MzAzNjFENDE5MkMzMDA1NjA5RDkgLyog
QWxsb2NhdG9yQXR0cmlidXRlcy5oICovLAogCQkJCTBGREU4N0Y4MURGRDBDNkQwMDY0QzM5MCAv
KiBDZWxsQ29udGFpbmVyLmNwcCAqLywKQEAgLTU1MDAsNiArNTUxNSw4IEBACiAJCQkJMEZBNzYy
MDExREI5MjQyMzAwQjdBMkZEIC8qIENvbGxlY3Rpb25TY29wZS5oICovLAogCQkJCTBGRDBFNUU1
MUU0M0QzNDcwMDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5jcHAgKi8sCiAJCQkJMEZEMEU1RTYx
RTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmggKi8sCisJCQkJMEZEQ0UxMjcxRkFG
QTg1OTAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuY3BwICovLAorCQkJCTBGRENFMTI4MUZB
RkE4NTkwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi8sCiAJCQkJMTQ2QjE0REIxMkVC
NUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlEQUFGMjEy
RUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKIAkJCQkwRjdERjEyRjFF
Mjk3MEQ1MDA5NTk1MUIgLyogQ29uc3RyYWludFZvbGF0aWxpdHkuaCAqLywKQEAgLTU1NTAsNiAr
NTU2Nyw4IEBACiAJCQkJREMzRDJCMEIxRDM0Mzc2RTAwQkE5MThDIC8qIEhlYXBDZWxsLmNwcCAq
LywKIAkJCQlEQzNEMkIwOTFEMzQzMTYxMDBCQTkxOEMgLyogSGVhcENlbGwuaCAqLywKIAkJCQkw
RjA3MEE0NDFENTQzQTg5MDA2RTcyMzIgLyogSGVhcENlbGxJbmxpbmVzLmggKi8sCisJCQkJMEZE
Q0UxMjAxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJMEZEQ0Ux
MUYxRkFFODU4NzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oICovLAogCQkJCTBGMENBRUZEMUVD
NERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suY3BwICovLAogCQkJCTBGMENB
RUZFMUVDNERBODUwMDk3MEQxMiAvKiBIZWFwRmluYWxpemVyQ2FsbGJhY2suaCAqLywKIAkJCQkw
RjMyQkQwRTFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuY3BwICovLApAQCAtNTU2
Niw2ICs1NTg1LDEwIEBACiAJCQkJMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGls
LmggKi8sCiAJCQkJQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBl
ci5jcHAgKi8sCiAJCQkJQzI1RjhCQ0MxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dl
ZXBlci5oICovLAorCQkJCTBGRENFMTJGMUZCMTFEOUQwMDZGMzkwMSAvKiBJc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRkRDRTEzMDFGQjExRDlEMDA2RjM5MDEgLyogSXNv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAorCQkJCTBGRENFMTJDMUZBRkI0REUwMDZGMzkw
MSAvKiBJc29TdWJzcGFjZS5jcHAgKi8sCisJCQkJMEZEQ0UxMkIxRkFGQjRERTAwNkYzOTAxIC8q
IElzb1N1YnNwYWNlLmggKi8sCiAJCQkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lU2V0LmNwcCAqLywKIAkJCQkwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklU
U3R1YlJvdXRpbmVTZXQuaCAqLywKIAkJCQkwRjA3MEE0NTFENTQzQTg5MDA2RTcyMzIgLyogTGFy
Z2VBbGxvY2F0aW9uLmNwcCAqLywKQEAgLTY1MDcsOCArNjUzMCw4IEBACiAJCQkJOTc4OEZDMjIx
NDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhGQzIzMTQ3MUFE
MEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2
Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCi0JCQkJMEY3REYxMzkxRTI5NzEwRTAw
OTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovLAotCQkJCTBGN0RG
MTNBMUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmggKi8s
CisJCQkJMEY3REYxMzkxRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmNwcCAqLywKKwkJCQkwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQlBN0I0QUNBRTE0ODRDOUNFMDBC
MzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCAqLywKIAkJCQk3OTg5Mzc3NjFEQ0FCNTczMDBGOEQ0
RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLywKIAkJCQk3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0RkIg
LyogSlNGaXhlZEFycmF5LmggKi8sCkBAIC02NTkzLDggKzY2MTYsOCBAQAogCQkJCUUzOEQwNjBC
MUY4RTgxNDEwMDY0OUNGMiAvKiBKU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oICovLAogCQkJCTBG
OTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAq
LywKIAkJCQkwRjkxOUQwRjE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oICovLAotCQkJCTBGNEY4Mjg1MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwICovLAotCQkJCTBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0
QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCAqLywKKwkJCQkwRjRGODI4
NTFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5jcHAgKi8sCisJCQkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQlBNzI5OUQ5QjE3RDEyODM3MDA1RjVG
RjkgLyogSlNTZXQuY3BwICovLAogCQkJCUE3Mjk5RDlDMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1Nl
dC5oICovLAogCQkJCUE3OTBERDY5MTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmNw
cCAqLywKQEAgLTY2MDksOCArNjYzMiw4IEBACiAJCQkJNzBFQzBFQkQxQUEwRDdEQTAwQjZBQUZB
IC8qIEpTU3RyaW5nSXRlcmF0b3IuaCAqLywKIAkJCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYg
LyogSlNTdHJpbmdKb2luZXIuY3BwICovLAogCQkJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAv
KiBKU1N0cmluZ0pvaW5lci5oICovLAotCQkJCTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAvKiBK
U1N0cmluZ1N1YnNwYWNlLmNwcCAqLywKLQkJCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIgLyog
SlNTdHJpbmdTdWJzcGFjZS5oICovLAorCQkJCTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAvKiBK
U1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFC
IC8qIEpTU3RyaW5nSGVhcENlbGxUeXBlLmggKi8sCiAJCQkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0
RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovLAogCQkJCTBGOTE5RDBBMTU3RUUwOUQw
MDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJNzBFQ0E2MDAxQUZEQkVB
MjAwNDQ5NzM5IC8qIEpTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgKi8sCkBAIC03Nzg2LDggKzc4
MDksOCBAQAogCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5Lmgg
Ki8sCiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2suY3BwICovLAogCQkJCUFEOUU4NTJFMUU4QTBDNkUwMDhERTM5RSAvKiBKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmggKi8sCi0JCQkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAgKi8sCi0JCQkJNzlFRkQ0ODIxRUJDMDQ1QzAwRjNE
RkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oICovLAorCQkJCTc5RUZENDgx
MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNw
cCAqLywKKwkJCQk3OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVC
bG9ja0hlYXBDZWxsVHlwZS5oICovLAogCQkJCUFEMkZDQkE2MURCNThEQTQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcCAqLywKIAkJCQlBRDJGQ0JBNzFEQjU4REE0MDBC
M0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oICovLAogCQkJCTc5NkZCNDM5MURG
RjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovLApAQCAtNzk5OCw2ICs4
MDIxLDcgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBB
Uk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENFMTMyMUZCMTFEQTQwMDZGMzkw
MSAvKiBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgz
MzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdBOEFGMzUxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZDOTlENTE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJO
ZXV0ZXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTgwNDksNiArODA3Myw3IEBA
CiAJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENFMTJEMUZBRkI0RTUwMDZGMzkwMSAvKiBJc29TdWJz
cGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMEMxQkYwMjc2QzAwMTND
ODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTc5MTlCNzgwMUUwMzU1
OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtODU5MCw2ICs4NjE1
LDcgQEAKIAkJCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSBpbiBIZWFkZXJzICovLAogCQkJCTcwQjc5MTk1MUMwMjRBMjgwMDI0ODFFMiAvKiBHZW5l
cmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5NzFD
MDI0QTI5MDAyNDgxRTIgLyogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5OTFDMDI0QTI5MDAyNDgxRTIgLyogR2VuZXJhdG9y
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5RDFDMDI0QTU2MDAyNDgxRTIg
LyogR2VuZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTkx
QUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLApAQCAt
ODc3Myw3ICs4Nzk5LDcgQEAKIAkJCQk5OTZCNzMxQzFCREEwOEREMDAzMzFCODQgLyogSlNEYXRh
Vmlld1Byb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3ODgwMTQxMTQ3MUFEOTIw
MDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQz
MkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjdERjEzQzFFMjk3MTEzMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU2
MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUz
QzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC04ODI2LDYgKzg4NTIsNyBAQAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBK
U01vZHVsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEOTcyMjc1MkRDNTQ0NTlC
OTEyNUI1MzkgLyogSlNNb2R1bGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMThDQkMx
MUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZEQ0UxMUMxRkFFNjIwOTAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5REE0QTcxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9k
dWxlUmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQxRDFCOTAxM0MzMDAzNDZCNTIg
LyogSlNOYXRpdmVTdGRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTg4NTAsNyArODg3
Nyw3IEBACiAJCQkJRTMyMDFDMUQxRjhFODIzNjAwNzZBMDMyIC8qIEpTU2NyaXB0RmV0Y2hQYXJh
bWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAxMUQgLyog
SlNTY3JpcHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1N0YzMzJD
MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8q
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3Mjk5RDlFMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1NldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc5MERENzAxODJGNDk5NzAwNTg4ODA3IC8qIEpTU2V0SXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJERkNCMkJCRTkwRjQxMzQ5RTFCMEJFRCAvKiBKU1NvdXJjZUNvZGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtODg2Miw3ICs4ODg5LDcgQEAKIAkJCQlCQzE4QzQyODBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI5MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZkNGLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTI4RDRB
ODE3N0I3MUM4MDAwN0ZBM0MgLyogSlNTdHJpbmdSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRjdERjEzRjFFMkFGQzREMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEY3REYxM0YxRTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENl
bGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRFN0QgLyog
SlNTeW1ib2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQ0E2MDYxQUZEQkVB
MjAwNDQ5NzM5IC8qIEpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QUQ1QzM2RUExRjc1QUQ2QTAwMEJDQUFGIC8qIEpTVG9XYXNtLmggaW4gSGVhZGVycyAqLywKQEAg
LTg4OTAsNyArODkxNyw3IEBACiAJCQkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vh
a1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpT
V2ViQXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOUU4NTJGMUU4QTBDN0MwMDhERTM5
RSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKLQkJCQk3OUVGRDQ4
NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3OUVGRDQ4NDFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTMxREI1
OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTc5NkZCNDNBMURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRTUxREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjIzLDYgKzkyNTAsNyBAQAogCQkJ
CTBGRkI2QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJENERFQzE5ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkRDRTEyMjFGQUU4NThDMDA2RjM5MDEgLyogSGVhcENlbGxU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyogVHlw
ZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVk
aXM4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVk
aXM4Nl9kZWNvZGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NTUsNyArOTU1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKIAogICAgICAgICAgICAgaWYgKGFsbG9jYXRp
bmdJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplKTsK
KyAgICAgICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWFsbG9jYXRvcikgewog
ICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlzIGNhc2Ugd291bGQgc3VjayEKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpCiAgICAgQVNTRVJUKGlubGluZUNhcGFjaXR5IDw9IEpTRmluYWxP
YmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5saW5lQ2FwYWNpdHkpOwotICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uY2VsbFNwYWNlLmFsbG9jYXRvckZvcihhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5jZWxsU3Bh
Y2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpBc3NlcnQpOwogCiAgICAgLy8gVGFrZSBhZHZhbnRhZ2Ugb2YgZXh0cmEgaW5saW5l
IGNhcGFjaXR5IGF2YWlsYWJsZSBpbiB0aGUgc2l6ZSBjbGFzcy4KICAgICBpZiAoYWxsb2NhdG9y
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMzAsNyArNDMz
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAg
ICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6
ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+
YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFs
bG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6QXNzZXJ0KTsKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9y
UHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBhbGxvY2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBz
dG9yYWdlR1BSKTsKICAgICAKICAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoTWFya2VkQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZSkpIHsKKyAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkp
IHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgICAgIG1faml0LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBhbGxv
Y2F0b3IsIHNjcmF0Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAg
CkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3
T2JqZQogICAgIH0KIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxs
b2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
clB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3Nl
cnQpOwogICAgIGlmIChhbGxvY2F0b3JQdHIpIHsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKGFsbG9jYXRvclB0ciksIHNjcmF0Y2hHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKQEAgLTQy
NDksNyArNDI0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QK
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIE1hcmtlZEFsbG9jYXRvciogbWFya2VkQWxs
b2NhdG9yID0gc3Vic3BhY2VGb3I8SlNTdHJpbmc+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9y
KHNpemVvZihKU1JvcGVTdHJpbmcpKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1hcmtlZEFsbG9j
YXRvciA9IHN1YnNwYWNlRm9yPEpTU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNz
ZXJ0KTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXJrZWRBbGxvY2F0b3IpOwogICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihtYXJrZWRBbGxvY2F0b3IpLCBhbGxvY2F0b3JHUFIpOwogICAgIGVt
aXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIG1hcmtlZEFsbG9jYXRvciwgYWxsb2NhdG9yR1BS
LCBUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQudm0o
KS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTg0
MjcsNyArODQyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AK
ICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVv
ZihKU1ZhbHVlKTsKIAotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0o
KS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpOworICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ3Miw3
ICs4NDcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAg
IHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKICAgICBB
U1NFUlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dG9yRm9yKG5ld1NpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQu
dm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVh
bChuZXdTaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICBpZiAoIWFs
bG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsMTIgKzEyNCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKICNkZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAg
ICAgbWFjcm8oQXJyYXlTdG9yYWdlX3ZlY3RvciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIFwKKyAgICBtYWNybyhDb21wbGV0ZVN1
YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFs
bG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihNYXJrZWRBbGxvY2F0b3IqKSkgXAogICAgIG1h
Y3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTTGV4aWNhbEVudmly
b25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCAwLCBzaXplb2YoV3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmliZXJzLCBK
U1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJp
bmc+KSkgXAogICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVyZmxvd1N0b3JhZ2UsIFNjb3Bl
ZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpIFwKLSAgICBtYWNybyhTdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgU3Vic3BhY2U6
Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKE1hcmtlZEFsbG9jYXRvciop
KSBcCiAgICAgbWFjcm8oV3JpdGVCYXJyaWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCAwLCBzaXpl
b2YoSlNDZWxsKikpIFwKICAgICBtYWNybyhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkg
XAogICAgIG1hY3JvKGNoYXJhY3RlcnMxNiwgMCwgc2l6ZW9mKFVDaGFyKSkgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NjkzLDcgKzU2OTMsNyBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZv
cmUoc2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3Ioc2l6ZW9m
KEpTUm9wZVN0cmluZykpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6
ZW9mKEpTUm9wZVN0cmluZyksIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGFsbG9jYXRvcik7CiAgICAgICAgIAogICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKApAQCAtOTUyNSw3ICs5NTI1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSB8fCBoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkgewogICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VG
b3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7Cisg
ICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VG
b3I8SlNGaW5hbE9iamVjdD4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgY2VsbEFsbG9jYXRvcik7CiAKICAgICAgICAgICAg
ICAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSk7CkBAIC0xMDUyMSw3ICsxMDUyMSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMg
KiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0g
dm0oKS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZUluQnl0
ZXMpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtKCkuanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplSW5CeXRlcywg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICBMVmFsdWUgc3RhcnRPZlN0
b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHNs
b3dQYXRoKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFu
Y2hvcigKICAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRl
cyArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwpAQCAtMTE2NjUs
NyArMTE2NjUsNyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAg
ICAgc2l6ZV90IHNpemUsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSgpKS0+YWxsb2NhdG9yRm9yKHNp
emUpOworICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENs
YXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQu
Y29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsK
ICAgICB9CiAgICAgCkBAIC0xMTY4MiwxMCArMTE2ODIsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIC8vIFRyeSB0byBkbyBzb21lIGNvbnN0YW50LWZvbGRpbmcgaGVyZS4KICAgICAg
ICAgaWYgKHN1YnNwYWNlLT5oYXNJbnRQdHIoKSAmJiBzaXplLT5oYXNJbnRQdHIoKSkgewotICAg
ICAgICAgICAgU3Vic3BhY2UqIGFjdHVhbFN1YnNwYWNlID0gYml0d2lzZV9jYXN0PFN1YnNwYWNl
Kj4oc3Vic3BhY2UtPmFzSW50UHRyKCkpOworICAgICAgICAgICAgQ29tcGxldGVTdWJzcGFjZSog
YWN0dWFsU3Vic3BhY2UgPSBiaXR3aXNlX2Nhc3Q8Q29tcGxldGVTdWJzcGFjZSo+KHN1YnNwYWNl
LT5hc0ludFB0cigpKTsKICAgICAgICAgICAgIHNpemVfdCBhY3R1YWxTaXplID0gc2l6ZS0+YXNJ
bnRQdHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1
YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+YWxsb2NhdG9yRm9yKGFjdHVhbFNpemUpOwor
ICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJz
cGFjZS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OkFzc2VydCk7CiAgICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdC
bG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKQEAgLTExNzE1LDExICsxMTcxNSwxMSBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoCiAgICAgICAgICAg
ICBtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5TdWJzcGFjZV9hbGxv
Y2F0b3JGb3JTaXplU3RlcCwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3Bh
Y2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0
LnN1YihzaXplQ2xhc3NJbmRleCwgbV9vdXQuaW50UHRyT25lKSkpOwogICAgIH0KICAgICAKLSAg
ICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXpl
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShDb21w
bGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9vdXQuY29uc3RJbnRQ
dHIoJnN1YnNwYWNlKSwgc2l6ZSwgc2xvd1BhdGgpOwogICAgIH0KQEAgLTExNzQ1LDcgKzExNzQ1
LDcgQEAgcHJpdmF0ZToKICAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoUmVnaXN0ZXJlZFN0cnVj
dHVyZSBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUuZ2V0KCktPmlubGluZUNhcGFj
aXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9y
PEpTRmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOworICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmpl
Y3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSWYg
dGhlIGFsbG9jYXRvciBpcyBudWxsLCB3ZSBjb3VsZCBzaW1wbHkgZW1pdCBhIG5vcm1hbCBDIGNh
bGwgdG8gdGhlIGFsbG9jYXRvcgogICAgICAgICAvLyBpbnN0ZWFkIG9mIHB1dHRpbmcgaXQgb24g
dGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKIAorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5o
IgorI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKIG5hbWVzcGFjZSBKU0MgeyAKIAogQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCkBAIC0zNiw2ICszOSwyNCBA
QCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+QWxpZ25lZE1lbW9yeUFsCiB7CiB9CiAKK3ZvaWQg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci0+bmV4dEFsbG9j
YXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpKTsKKyAgICAKKyAgICBpZiAobV9hbGxvY2F0
b3JzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKFN1YnNwYWNlKiBzdWJzcGFjZSA9IG1fc3Vi
c3BhY2VzLmZpcnN0KCk7IHN1YnNwYWNlOyBzdWJzcGFjZSA9IHN1YnNwYWNlLT5uZXh0U3Vic3Bh
Y2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkKKyAgICAgICAgICAgIHN1YnNwYWNlLT5kaWRD
cmVhdGVGaXJzdEFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIH0KKyAgICAKKyAgICBtX2FsbG9j
YXRvcnMuYXBwZW5kKHN0ZDo6bWVtX2ZuKCZNYXJrZWRBbGxvY2F0b3I6OnNldE5leHRBbGxvY2F0
b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IpLCBhbGxvY2F0b3IpOworfQorCit2b2lkIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKCFzdWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKCkpOworICAgIG1fc3Vic3BhY2VzLmFwcGVuZChzdGQ6Om1lbV9mbigmU3Vi
c3BhY2U6OnNldE5leHRTdWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciksIHN1YnNwYWNl
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI0
OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvU2luZ2x5TGlua2VkTGlz
dFdpdGhUYWlsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBNYXJrZWRBbGxvY2F0b3I7
CitjbGFzcyBTdWJzcGFjZTsKKwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CkBAIC00MCw2ICs0NCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGZyZWVBbGlnbmVkTWVtb3J5KHZvaWQqKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHJlZ2lzdGVyQWxs
b2NhdG9yKE1hcmtlZEFsbG9jYXRvciopOworICAgIE1hcmtlZEFsbG9jYXRvciogZmlyc3RBbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBtX2FsbG9jYXRvcnMuZmlyc3QoKTsgfQorCisgICAgdm9p
ZCByZWdpc3RlclN1YnNwYWNlKFN1YnNwYWNlKik7CisKK3ByaXZhdGU6CisgICAgU2luZ2x5TGlu
a2VkTGlzdFdpdGhUYWlsPE1hcmtlZEFsbG9jYXRvcj4gbV9hbGxvY2F0b3JzOworICAgIFNpbmds
eUxpbmtlZExpc3RXaXRoVGFpbDxTdWJzcGFjZT4gbV9zdWJzcGFjZXM7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25G
YWlsdXJlTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Fs
bG9jYXRpb25GYWlsdXJlTW9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSB7CisgICAgQXNzZXJ0LAorICAgIFJldHVybk51bGwKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1
YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21w
bGV0ZVN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFy
a2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgor
I2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ29tcGxl
dGVTdWJzcGFjZTo6Q29tcGxldGVTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEhl
YXBDZWxsVHlwZSogaGVhcENlbGxUeXBlLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKK3sKKyAgICBpbml0
aWFsaXplKGhlYXBDZWxsVHlwZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CisgICAgZm9yIChz
aXplX3QgaSA9IE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKKyAgICAgICAgbV9h
bGxvY2F0b3JGb3JTaXplU3RlcFtpXSA9IG51bGxwdHI7Cit9CisKK0NvbXBsZXRlU3Vic3BhY2U6
On5Db21wbGV0ZVN1YnNwYWNlKCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0ZVN1
YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBm
YWlsdXJlTW9kZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBm
YWlsdXJlTW9kZSk7Cit9CisKK3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlKHNpemVf
dCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbChz
aXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogQ29tcGxldGVT
dWJzcGFjZTo6YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4
dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7
CisgICAgdm9pZCAqcmVzdWx0OworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1
cm5OdWxsKSkKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENv
bnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRl
U2xvdyhzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitNYXJrZWRBbGxvY2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZv
clNsb3coc2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNp
emVDbGFzc1RvSW5kZXgoc2l6ZSk7CisgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtlZFNwYWNl
OjpzX3NpemVDbGFzc0ZvclNpemVTdGVwW2luZGV4XTsKKyAgICBpZiAoIXNpemVDbGFzcykKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgLy8gVGhpcyBpcyB3cml0dGVuIGluIHN1
Y2ggYSB3YXkgdGhhdCBpdCdzIE9LIGZvciB0aGUgSklUIHRocmVhZHMgdG8gZW5kIHVwIGhlcmUg
aWYgdGhleSB3YW50CisgICAgLy8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgc29tZSBhbGxv
Y2F0b3IgdGhhdCBoYWRuJ3QgYmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0IGEgcG9zc2libHktCisg
ICAgLy8ganVzdC1hcy1nb29kIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxsIGlmIHdl
J3JlIGluIHRoZSBKSVQgc2luY2UgdGhlIEpJVCB0cmVhdHMgbnVsbAorICAgIC8vIGFsbG9jYXRv
ciBhcyAicGxlYXNlIGFsd2F5cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQgY291bGQg
bGVhZCB0byBwZXJmb3JtYW5jZQorICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29yaXRobSBo
ZXJlIGlzIHByZXR0eSBlYXN5LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUgbG9jaywg
dG8KKyAgICAvLyBwcmV2ZW50IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBjcmVhdGlv
bnMgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcworICAgIC8vIHRoYXQg
YW55ICJmb3JFYWNoQWxsb2NhdG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxv
Y2F0b3IgYWZ0ZXIgaXQncyBpbml0aWFsaXplZAorICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZl
IAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2NrKCkpOwor
ICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0
ZXBbaW5kZXhdKQorICAgICAgICByZXR1cm4gYWxsb2NhdG9yOworCisgICAgaWYgKGZhbHNlKQor
ICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBtX25hbWUs
ICIsICIsIG1fYXR0cmlidXRlcywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7CisgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtlZEFsbG9jYXRvcj4gdW5pcXVlQWxsb2NhdG9yID0KKyAgICAgICAgc3Rk
OjptYWtlX3VuaXF1ZTxNYXJrZWRBbGxvY2F0b3I+KG1fc3BhY2UuaGVhcCgpLCBzaXplQ2xhc3Mp
OworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdW5pcXVlQWxsb2NhdG9yLmdldCgp
OworICAgIG1fYWxsb2NhdG9ycy5hcHBlbmQoV1RGTW92ZSh1bmlxdWVBbGxvY2F0b3IpKTsKKyAg
ICBhbGxvY2F0b3ItPnNldFN1YnNwYWNlKHRoaXMpOworICAgIG1fc3BhY2UuYWRkTWFya2VkQWxs
b2NhdG9yKGxvY2tlciwgYWxsb2NhdG9yKTsKKyAgICBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXpl
Q2xhc3NUb0luZGV4KHNpemVDbGFzcyk7CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoTWFy
a2VkU3BhY2U6OnNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFzcykKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhd
ID0gYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgaWYgKCFpbmRleC0tKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvckluU3Vic3Bh
Y2UobV9maXJzdEFsbG9jYXRvcik7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdp
c3RlckFsbG9jYXRvcihhbGxvY2F0b3IpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKKyAgICByZXR1cm4gYWxsb2NhdG9yOwor
fQorCit2b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdD
RGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBm
YWlsdXJlTW9kZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coc2l6ZSwg
ZGVmZXJyYWxDb250ZXh0KTsKKyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpBc3NlcnQpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93
KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQoreworICAg
IHNhbml0aXplU3RhY2tGb3JWTShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7CisgICAgCisgICAgaWYg
KE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6QXNzZXJ0KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2Nh
dGUoZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwor
ICAgIAorICAgIGlmIChzaXplIDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9mZigpCisg
ICAgICAgICYmIHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CisgICAgICAgIGRh
dGFMb2coIkZBVEFMOiBhdHRhbXB0aW5nIHRvIGFsbG9jYXRlIHNtYWxsIG9iamVjdCB1c2luZyBs
YXJnZSBhbGxvY2F0aW9uLlxuIik7CisgICAgICAgIGRhdGFMb2coIlJlcXVlc3RlZCBhbGxvY2F0
aW9uIHNpemU6ICIsIHNpemUsICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX3NwYWNlLmhlYXAoKS0+Y29sbGVjdElmTmVjZXNz
YXJ5T3JEZWZlcihkZWZlcnJhbENvbnRleHQpOworICAgIAorICAgIHNpemUgPSBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8TWFya2VkU3BhY2U6OnNpemVTdGVwPihzaXplKTsKKyAgICBMYXJnZUFs
bG9jYXRpb24qIGFsbG9jYXRpb24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgqbV9zcGFj
ZS5tX2hlYXAsIHNpemUsIHRoaXMpOworICAgIGlmICghYWxsb2NhdGlvbikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgCisgICAgbV9zcGFjZS5tX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5k
KGFsbG9jYXRpb24pOworICAgIG1fc3BhY2UubV9oZWFwLT5kaWRBbGxvY2F0ZShzaXplKTsKKyAg
ICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKKyAgICAKKyAgICBtX2xhcmdlQWxsb2NhdGlv
bnMuYXBwZW5kKGFsbG9jYXRpb24pOworICAgICAgICAKKyAgICByZXR1cm4gYWxsb2NhdGlvbi0+
Y2VsbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvbXBsZXRlU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1
YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb21wbGV0ZVN1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYsIEhlYXBDZWxsVHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB+Q29tcGxldGVTdWJzcGFjZSgpOworCisgICAgLy8gSW4gc29tZSBj
b2RlIHBhdGhzLCB3ZSBuZWVkIGl0IHRvIGJlIGEgY29tcGlsZSBlcnJvciB0byBjYWxsIHRoZSB2
aXJ0dWFsIHZlcnNpb24gb2Ygb25lIG9mCisgICAgLy8gdGhlc2UgZnVuY3Rpb25zLiBUaGF0J3Mg
d2h5IHdlIGRvIGZpbmFsIG1ldGhvZHMgdGhlIG9sZCBzY2hvb2wgd2F5LgorICAgIAorICAgIE1h
cmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
KSBvdmVycmlkZTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvck5vblZpcnR1YWwo
c2l6ZV90LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIAorICAgIHZvaWQqIGFsbG9jYXRl
KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJy
aWRlOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXpl
X3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29tcGxldGVTdWJzcGFjZSwgbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cCk7IH0KKyAgICAKKyAgICBNYXJrZWRBbGxvY2F0b3IqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgp
IHsgcmV0dXJuICZtX2FsbG9jYXRvckZvclNpemVTdGVwWzBdOyB9CisKK3ByaXZhdGU6CisgICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JTbG93KHNpemVfdCk7CisgICAgCisgICAgLy8g
VGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2VybmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlvbnMgYW5k
IGFsbG9jYXRvciBjcmVhdGlvbi4KKyAgICB2b2lkKiBhbGxvY2F0ZVNsb3coc2l6ZV90LCBHQ0Rl
ZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgdm9pZCogdHJ5QWxs
b2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICAKKyAgICBzdGQ6OmFy
cmF5PE1hcmtlZEFsbG9jYXRvciosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxv
Y2F0b3JGb3JTaXplU3RlcDsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFsbG9j
YXRvcj4+IG1fYWxsb2NhdG9yczsKK307CisKK0FMV0FZU19JTkxJTkUgTWFya2VkQWxsb2NhdG9y
KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgaWYgKHNpemUgPD0gTWFy
a2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogcmVzdWx0
ID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChz
aXplKV07CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OlJldHVybk51bGwgfHwgcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIGFsbG9jYXRvckZvclNsb3coc2l6ZSk7CisgICAgfQorICAgIHJldHVybiBudWxs
cHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCisKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCisvLyBXcml0aW5nIGl0IHRoaXMgd2F5IGVuc3Vy
ZXMgdGhhdCB3aGVuIHlvdSBwYXNzIHRoaXMgYXMgYSBmdW5jdG9yLCB0aGUgY2FsbGVlIGlzIHNw
ZWNpYWxpemVkIGZvcgorLy8gdGhpcyBjYWxsYmFjay4gSWYgeW91IHdyb3RlIHRoaXMgYXMgYSBu
b3JtYWwgZnVuY3Rpb24gdGhlbiB0aGUgY2FsbGVlIHdvdWxkIGJlIHNwZWNpYWxpemVkIGZvcgor
Ly8gdGhlIGZ1bmN0aW9uJ3MgdHlwZSBhbmQgaXQgd291bGQgaGF2ZSBpbmRpcmVjdCBjYWxscyB0
byB0aGF0IGZ1bmN0aW9uLiBBbmQgdW5saWtlIGEgbGFtYmRhLCBpdCdzCisvLyBwb3NzaWJsZSB0
byBtYXJrIHRoaXMgQUxXQVlTX0lOTElORS4KK3N0cnVjdCBEZXN0cm95RnVuYyB7CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoY2VsbC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgIEFTU0VS
VChjZWxsLT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpOworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAgICAg
ICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5t
ZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0cm95KGNlbGwpOworICAgIH0KK307CisK
K30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitIZWFwQ2VsbFR5cGU6OkhlYXBDZWxsVHlwZShB
bGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBtX2F0dHJpYnV0ZXMoYXR0cmli
dXRlcykKK3sKK30KKworSGVhcENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKCkKK3sKK30KKwordm9p
ZCBIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBG
cmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5nSGVhcENl
bGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBIZWFwQ2VsbFR5cGU6
OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMoKSh2bSwg
Y2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEhlYXBDZWxsVHlwZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGVhcENlbGxU
eXBlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRlcyk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdmlydHVhbCB+SGVhcENlbGxUeXBlKCk7CisKKyAgICBjb25zdCBBbGxvY2F0
b3JBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9
CisKKyAgICAvLyBUaGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lhbGl6
ZSB0aGUgc3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKKyAgICAvLyBiZSBj
YWxsZWQgZm9yIG5vLWRlc3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJrZWRCbG9j
azo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UuCisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFN3
ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopOworCisgICAgLy8gVGhlc2UgZ2V0
IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShWTSYs
IEpTQ2VsbCopOworCitwcml2YXRlOgorICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1
dGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IoKQoreworfQorCitJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+SXNvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQqIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlQWxpZ25lZE1lbW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sK
KyAgICAvLyBTaW5jZSB0aGlzIGlzIGRlc2lnbmVkIHNwZWNpYWxseSBmb3IgSXNvU3Vic3BhY2Us
IHdlIGtub3cgdGhhdCB3ZSB3aWxsIG9ubHkgYmUgYXNrZWQgdG8KKyAgICAvLyBhbGxvY2F0ZSBN
YXJrZWRCbG9ja3MuCisgICAgUkVMRUFTRV9BU1NFUlQoYWxpZ25tZW50ID09IE1hcmtlZEJsb2Nr
OjpibG9ja1NpemUpOworICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gTWFya2VkQmxvY2s6OmJs
b2NrU2l6ZSk7CisgICAgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
IAorICAgIG1fZmlyc3RVbmNvbW1pdHRlZCA9IG1fY29tbWl0dGVkLmZpbmRCaXQobV9maXJzdFVu
Y29tbWl0dGVkLCBmYWxzZSk7CisgICAgaWYgKG1fZmlyc3RVbmNvbW1pdHRlZCA8IG1fYmxvY2tz
LnNpemUoKSkgeworICAgICAgICBtX2NvbW1pdHRlZFttX2ZpcnN0VW5jb21taXR0ZWRdID0gdHJ1
ZTsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gbV9ibG9ja3NbbV9maXJzdFVuY29tbWl0dGVkXTsK
KyAgICAgICAgT1NBbGxvY2F0b3I6OmNvbW1pdChyZXN1bHQsIE1hcmtlZEJsb2NrOjpibG9ja1Np
emUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgdm9pZCogcmVzdWx0ID0gZmFzdEFsaWduZWRNYWxsb2MoTWFya2VkQmxvY2s6OmJsb2NrU2l6
ZSwgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2Jsb2Nr
cy5zaXplKCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKHJlc3VsdCk7CisgICAgbV9ibG9ja0luZGlj
ZXMuYWRkKHJlc3VsdCwgaW5kZXgpOworICAgIGlmIChtX2Jsb2Nrcy5jYXBhY2l0eSgpICE9IG1f
Y29tbWl0dGVkLnNpemUoKSkKKyAgICAgICAgbV9jb21taXR0ZWQucmVzaXplKG1fYmxvY2tzLmNh
cGFjaXR5KCkpOworICAgIG1fY29tbWl0dGVkW2luZGV4XSA9IHRydWU7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQWxpZ25lZE1l
bW9yeSh2b2lkKiBiYXNlUHRyKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAKKyAgICBhdXRvIGl0ZXIgPSBtX2Jsb2NrSW5kaWNlcy5maW5kKGJhc2VQdHIpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbV9ibG9ja0luZGljZXMuZW5kKCkpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gaXRlci0+dmFsdWU7CisgICAgbV9jb21taXR0ZWRbaW5kZXhdID0gZmFs
c2U7CisgICAgbV9maXJzdFVuY29tbWl0dGVkID0gc3RkOjptaW4oaW5kZXgsIG1fZmlyc3RVbmNv
bW1pdHRlZCk7CisgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0KGJhc2VQdHIsIE1hcmtlZEJsb2Nr
OjpibG9ja1NpemUpOworfQorCit2b2lkIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIklzbygiLCBSYXdQb2lu
dGVyKHRoaXMpLCAiKSIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IgOiBwdWJsaWMgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOwor
ICAgIH5Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CisKKyAgICB2b2lkKiB0cnlBbGxvY2F0
ZUFsaWduZWRNZW1vcnkoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZnJlZUFsaWduZWRNZW1vcnkodm9pZCopIG92ZXJyaWRlOworCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgTG9jayBt
X2xvY2s7CisgICAgVmVjdG9yPHZvaWQqPiBtX2Jsb2NrczsKKyAgICBIYXNoTWFwPHZvaWQqLCB1
bnNpZ25lZD4gbV9ibG9ja0luZGljZXM7CisgICAgRmFzdEJpdFZlY3RvciBtX2NvbW1pdHRlZDsK
KyAgICB1bnNpZ25lZCBtX2ZpcnN0VW5jb21taXR0ZWQgeyAwIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJz
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSXNvU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIklzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3IuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFw
LCBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgc2l6ZV90IHNpemUpCisgICAgOiBTdWJzcGFj
ZShuYW1lLCBoZWFwKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2FsbG9jYXRvcigmaGVh
cCwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkp
CisgICAgLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQoreworICAgIGluaXRpYWxpemUoaGVhcENlbGxUeXBl
LCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuZ2V0KCkpOworCisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX3NwYWNlLmFsbG9jYXRvckxvY2soKSk7CisgICAgbV9hbGxvY2F0b3Iuc2V0
U3Vic3BhY2UodGhpcyk7CisgICAgbV9zcGFjZS5hZGRNYXJrZWRBbGxvY2F0b3IobG9ja2VyLCAm
bV9hbGxvY2F0b3IpOworICAgIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJBbGxv
Y2F0b3IoJm1fYWxsb2NhdG9yKTsKKyAgICBtX2ZpcnN0QWxsb2NhdG9yID0gJm1fYWxsb2NhdG9y
OworfQorCitJc29TdWJzcGFjZTo6fklzb1N1YnNwYWNlKCkKK3sKK30KKworTWFya2VkQWxsb2Nh
dG9yKiBJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1
YWwoc2l6ZSwgZmFpbHVyZU1vZGUpOworfQorCitNYXJrZWRBbGxvY2F0b3IqIElzb1N1YnNwYWNl
OjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSB0aGlzLT5zaXplKCkpOworICAgIHJl
dHVybiAmbV9hbGxvY2F0b3I7Cit9CisKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShzaXpl
X3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZh
aWx1cmVNb2RlIGZhaWx1cmVNb2RlKQoreworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwo
c2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cit9CisKK3ZvaWQqIElzb1N1YnNw
YWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChzaXplID09IHRoaXMtPnNpemUoKSk7CisgICAgdm9pZCogcmVzdWx0
ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRl
ICJTdWJzcGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSXNvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjsKKworY2xhc3MgSXNvU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVi
bGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIElzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVh
cCYsIEhlYXBDZWxsVHlwZSosIHNpemVfdCBzaXplKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+
SXNvU3Vic3BhY2UoKTsKKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworCisgICAg
dm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWls
dXJlTW9kZSkgb3ZlcnJpZGU7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVO
b25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOworCitwcml2YXRlOgorICAgIHNp
emVfdCBtX3NpemU7CisgICAgTWFya2VkQWxsb2NhdG9yIG1fYWxsb2NhdG9yOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBtX2lzb0FsaWduZWRNZW1vcnlB
bGxvY2F0b3I7Cit9OworCisjZGVmaW5lIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBDZWxs
VHlwZSwgdHlwZSkgKCJJc29sYXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcCksIChoZWFwQ2Vs
bFR5cGUpLCBzaXplb2YodHlwZSkpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9u
IDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE3ICs0MSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
c3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWRlRGVzdHJ1Y3RvckJsb2NrcyA9IHRydWU7CiAKLU1h
cmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIFN1YnNwYWNlKiBzdWJz
cGFjZSwgc2l6ZV90IGNlbGxTaXplKQorTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3Io
SGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQogICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkK
ICAgICAsIG1fY3VycmVudEJsb2NrKDApCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQogICAg
ICwgbV9jZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQotICAgICwgbV9h
dHRyaWJ1dGVzKHN1YnNwYWNlLT5hdHRyaWJ1dGVzKCkpCiAgICAgLCBtX2hlYXAoaGVhcCkKLSAg
ICAsIG1fc3Vic3BhY2Uoc3Vic3BhY2UpCiB7CiB9CiAKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpz
ZXRTdWJzcGFjZShTdWJzcGFjZSogc3Vic3BhY2UpCit7CisgICAgbV9hdHRyaWJ1dGVzID0gc3Vi
c3BhY2UtPmF0dHJpYnV0ZXMoKTsKKyAgICBtX3N1YnNwYWNlID0gc3Vic3BhY2U7Cit9CisKIGJv
b2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKIHsKICAgICB1
bnNpZ25lZCBpdGVyc1NpbmNlTGFzdFRpbWVDaGVjayA9IDA7CkBAIC0xNzUsMTkgKzE3OSw3IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGUKICAgICAgICAgYWxsb2Nh
dGlvbkNvdW50ID0gMDsKIH0KIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dD
YXNlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCi17Ci0gICAgYm9vbCBjcmFz
aE9uRmFpbHVyZSA9IHRydWU7Ci0gICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGRlZmVy
cmFsQ29udGV4dCwgY3Jhc2hPbkZhaWx1cmUpOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkK
LXsKLSAgICBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7Ci0gICAgcmV0dXJuIGFsbG9jYXRl
U2xvd0Nhc2VJbXBsKGRlZmVycmFsQ29udGV4dCwgY3Jhc2hPbkZhaWx1cmUpOwotfQotCi12b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJbXBsKEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQsIGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit2b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFN1cGVyU2FtcGxl
clNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICBBU1NFUlQobV9oZWFwLT52bSgp
LT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKQEAgLTIwNCwxMSArMTk2LDggQEAg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIAogICAgIC8vIEdv
b2Z5IGNvcm5lciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2FsbGJhY2sgYW5kIG5vdyB0aGlzIGFs
bG9jYXRvciBoYXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25seQogICAgIC8vIGhhcHBlbnMgd2hl
biBydW5uaW5nIFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0IGEgY2FsbGJhY2sgaW50byB0aGUg
R0MncyBmaW5hbGl6YXRpb24uCi0gICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJsb2NrKSkgewot
ICAgICAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpCi0gICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUo
ZGVmZXJyYWxDb250ZXh0KTsKLSAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlKGRlZmVycmFsQ29u
dGV4dCk7Ci0gICAgfQorICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCisgICAgICAg
IHJldHVybiBhbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKICAgICAKICAg
ICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CiAgICAgCkBA
IC0yMTcsNyArMjA2LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNl
SQogICAgIAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9j
aygpOwogICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAg
ICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJl
TW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJGcmVl
TGlzdC5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCkBAIC02NywxMyArNjgsMTcgQEAgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MjEyMQogCiBjbGFzcyBNYXJrZWRBbGxvY2F0b3IgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKE1hcmtlZEFsbG9jYXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisgICAgCiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAog
cHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlzdCgpOwogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwogCi0gICAgTWFya2VkQWxsb2NhdG9y
KEhlYXAqLCBTdWJzcGFjZSosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9y
KEhlYXAqLCBzaXplX3QgY2VsbFNpemUpOworICAgIHZvaWQgc2V0U3Vic3BhY2UoU3Vic3BhY2Uq
KTsKICAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9y
QWxsb2NhdGlvbigpOwogICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKQEAgLTkwLDggKzk1LDcg
QEAgcHVibGljOgogICAgIGJvb2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAgRGVzdHJ1
Y3Rpb25Nb2RlIGRlc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3Ry
dWN0aW9uOyB9CiAgICAgSGVhcENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZXMuY2VsbEtpbmQ7IH0KLSAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29u
dGV4dCogPSBudWxscHRyKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4
dCogPSBudWxscHRyKTsKKyAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSk7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsg
fQogCiAgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7
CkBAIC0xMzYsOSArMTQwLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBNYXJrZWRBbGxvY2F0b3Iq
IG5leHRBbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3I7IH0KICAgICBN
YXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3JJblN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4g
bV9uZXh0QWxsb2NhdG9ySW5TdWJzcGFjZTsgfQorICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFs
bG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFs
bG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgfQogICAgIAogICAgIHZvaWQgc2V0TmV4
dEFsbG9jYXRvcihNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3Ig
PSBhbGxvY2F0b3I7IH0KICAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yKSB7IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxv
Y2F0b3I7IH0KKyAgICB2b2lkIHNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yID0gYWxsb2NhdG9yOyB9CiAgICAgCiAgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCk7CiAgICAgCkBAIC0xNTUsOSArMTYxLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29u
dGV4dCopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2Uo
R0NEZWZlcnJhbENvbnRleHQqKTsKLSAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0Rl
ZmVycmFsQ29udGV4dCosIGJvb2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7
CiAgICAgdm9pZCogdHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIHRyeUFsbG9jYXRlQmxvY2soKTsKQEAgLTE5MiwxMCArMTk2LDExIEBAIHBy
aXZhdGU6CiAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8gRklY
TUU6IEFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4Ci0gICAgSGVhcCog
bV9oZWFwOwotICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlOworICAgIEhlYXAqIG1faGVhcCB7IG51
bGxwdHIgfTsKKyAgICBTdWJzcGFjZSogbV9zdWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBNYXJr
ZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9jYXRvciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxv
Y2F0b3IqIG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgeyBudWxscHRyIH07CisgICAgTWFya2Vk
QWxsb2NhdG9yKiBtX25leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxs
cHRyIH07CiB9OwogCiBpbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZG
cmVlTGlzdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDIxICszNSwxMiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3Rl
CiAgICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4o
dGFyZ2V0KSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQorQUxXQVlTX0lOTElO
RSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICBy
ZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7
CiAgICAgICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVm
ZXJyYWxDb250ZXh0KSk7Ci0gICAgICAgIH0pOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCkKLXsKLSAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+
IEhlYXBDZWxsKiB7Ci0gICAgICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xv
d0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUp
KTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1Ymxp
YzoKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaXMgdG8gYmUgY2FsbGVkIGJ5IFN1YnNwYWNl
LgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgdm9pZCBm
aW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShGcmVlTGlzdCosIGNvbnN0IERlc3Ryb3lGdW5jJik7
CisgICAgICAgIHZvaWQgZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKEZyZWVMaXN0Kiwg
Y29uc3QgRGVzdHJveUZ1bmMmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgdW5zd2VlcFdpdGhO
b05ld2x5QWxsb2NhdGVkKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFs
aXplZFN3ZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXN0cm95RnVuYz4KLXZvaWQgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJlZUxpc3QqIGZyZWVM
aXN0LCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShGcmVlTGlzdCogZnJlZUxpc3Qs
IGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykKIHsKICAgICBTd2VlcE1vZGUgc3dlZXBN
b2RlID0gZnJlZUxpc3QgPyBTd2VlcFRvRnJlZUxpc3QgOiBTd2VlcE9ubHk7CiAgICAgU3dlZXBE
ZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlID0gdGhpcy0+c3dlZXBEZXN0cnVjdGlvbk1v
ZGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJ
KHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDkgKzEzMiwxMCBAQCBjb25zdCBWZWN0b3I8
c2l6ZV90PiYgc2l6ZUNsYXNzZXMoKQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBN
YW51YWxseSBpbmplY3Qgc2l6ZSBjbGFzc2VzIGZvciBvYmplY3RzIHdlIGtub3cgd2lsbCBiZSBh
bGxvY2F0ZWQgaW4gaGlnaCB2b2x1bWUuCisgICAgICAgICAgICAvLyBGSVhNRTogQWxsIG9mIHRo
ZXNlIHRoaW5ncyBzaG91bGQgaGF2ZSBJc29TdWJzcGFjZXMuCisgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5ODc2CiAgICAgICAgICAgICBh
ZGQoc2l6ZW9mKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKSk7CiAgICAgICAgICAgICBhZGQo
c2l6ZW9mKFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spKTsKLSAgICAgICAgICAgIGFkZChzaXpl
b2YoRnVuY3Rpb25FeGVjdXRhYmxlKSk7CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKEZ1bmN0aW9u
Q29kZUJsb2NrKSk7CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKEpTU3RyaW5nKSk7CiAgICAgICAg
ICAgICBhZGQoc2l6ZW9mKEpTRnVuY3Rpb24pKTsKQEAgLTU1MSwyNSArNTUyLDEzIEBAIHZvaWQg
TWFya2VkU3BhY2U6OmR1bXBCaXRzKFByaW50U3RyZWFtJiAKICAgICAgICAgfSk7CiB9CiAKLU1h
cmtlZEFsbG9jYXRvciogTWFya2VkU3BhY2U6OmFkZE1hcmtlZEFsbG9jYXRvcigKLSAgICBjb25z
dCBBYnN0cmFjdExvY2tlciYsIFN1YnNwYWNlKiBzdWJzcGFjZSwgc2l6ZV90IHNpemVDbGFzcykK
K3ZvaWQgTWFya2VkU3BhY2U6OmFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tl
ciYsIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yKQogewotICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gbV9iYWdPZkFsbG9jYXRvcnMuYWRkKGhlYXAoKSwgc3Vic3BhY2UsIHNpemVD
bGFzcyk7CiAgICAgYWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9yKG51bGxwdHIpOwogICAgIAog
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAKLSAgICBpZiAoIW1fZmlyc3RBbGxvY2F0b3Ip
IHsKLSAgICAgICAgbV9maXJzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICAgICAgbV9sYXN0
QWxsb2NhdG9yID0gYWxsb2NhdG9yOwotICAgICAgICBmb3IgKFN1YnNwYWNlKiBzdWJzcGFjZSA6
IG1fc3Vic3BhY2VzKQotICAgICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0ZUZpcnN0QWxsb2Nh
dG9yKGFsbG9jYXRvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9sYXN0QWxsb2NhdG9yLT5z
ZXROZXh0QWxsb2NhdG9yKGFsbG9jYXRvcik7Ci0gICAgICAgIG1fbGFzdEFsbG9jYXRvciA9IGFs
bG9jYXRvcjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGFsbG9jYXRvcjsKKyAgICBtX2FsbG9j
YXRvcnMuYXBwZW5kKHN0ZDo6bWVtX2ZuKCZNYXJrZWRBbGxvY2F0b3I6OnNldE5leHRBbGxvY2F0
b3IpLCBhbGxvY2F0b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTAgKzMyLDEyIEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KKyNp
bmNsdWRlIDx3dGYvU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNs
YXNzIEhlYXA7CiBjbGFzcyBIZWFwSXRlcmF0aW9uU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkBAIC0xNTUsMTAgKzE1NywxMCBAQCBwdWJsaWM6CiAgICAgTGFyZ2VBbGxvY2F0
aW9uKiogbGFyZ2VBbGxvY2F0aW9uc0ZvclRoaXNDb2xsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1
cm4gbV9sYXJnZUFsbG9jYXRpb25zRm9yVGhpc0NvbGxlY3Rpb25FbmQ7IH0KICAgICB1bnNpZ25l
ZCBsYXJnZUFsbG9jYXRpb25zRm9yVGhpc0NvbGxlY3Rpb25TaXplKCkgY29uc3QgeyByZXR1cm4g
bV9sYXJnZUFsbG9jYXRpb25zRm9yVGhpc0NvbGxlY3Rpb25TaXplOyB9CiAgICAgCi0gICAgTWFy
a2VkQWxsb2NhdG9yKiBmaXJzdEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RBbGxv
Y2F0b3I7IH0KKyAgICBNYXJrZWRBbGxvY2F0b3IqIGZpcnN0QWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGxvY2F0b3JzLmZpcnN0KCk7IH0KICAgICAKICAgICBMb2NrJiBhbGxvY2F0b3JM
b2NrKCkgeyByZXR1cm4gbV9hbGxvY2F0b3JMb2NrOyB9Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBh
ZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBTdWJzcGFjZSosIHNpemVf
dCBjZWxsU2l6ZSk7CisgICAgdm9pZCBhZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBNYXJrZWRBbGxvY2F0b3IqKTsKICAgICAKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1
ZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0
IGNvbnZlcmdlZCB5ZXQuCiAgICAgYm9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lz
TWFya2luZzsgfQpAQCAtMTY4LDE0ICsxNzAsMTIgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBzdGQ6OmFycmF5PHNpemVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNs
YXNzRm9yU2l6ZVN0ZXA7CiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb21wbGV0
ZVN1YnNwYWNlOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAg
ZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3MgV2Vha1NldDsKICAgICBmcmllbmQg
Y2xhc3MgU3Vic3BhY2U7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KFN1YnNwYWNlJiwg
R0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhT
dWJzcGFjZSYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLQogICAgIC8vIFVzZSB0aGlz
IHZlcnNpb24gd2hlbiBjYWxsaW5nIGZyb20gd2l0aGluIHRoZSBHQyB3aGVyZSB3ZSBrbm93IHRo
YXQgdGhlIGFsbG9jYXRvcnMKICAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkLgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1
bmN0b3ImKTsKQEAgLTIxMCw5ICsyMTAsNyBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlua2Vk
TGlzdDxXZWFrU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxXZWFrU2V0Pj4gbV9uZXdBY3RpdmVX
ZWFrU2V0czsKIAogICAgIExvY2sgbV9hbGxvY2F0b3JMb2NrOwotICAgIEJhZzxNYXJrZWRBbGxv
Y2F0b3I+IG1fYmFnT2ZBbGxvY2F0b3JzOwotICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJzdEFs
bG9jYXRvciB7IG51bGxwdHIgfTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFzdEFsbG9jYXRv
ciB7IG51bGxwdHIgfTsKKyAgICBTaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWw8TWFya2VkQWxsb2Nh
dG9yPiBtX2FsbG9jYXRvcnM7CiAKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogfTsK
QEAgLTIyOSw3ICsyMjcsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZv
aWQgCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQgTWFya2VkU3BhY2U6OmZvckVh
Y2hBbGxvY2F0b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBmb3IgKE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yID0gbV9maXJzdEFsbG9jYXRvcjsgYWxsb2NhdG9yOyBhbGxvY2F0
b3IgPSBhbGxvY2F0b3ItPm5leHRBbGxvY2F0b3IoKSkgeworICAgIGZvciAoTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvcnMuZmlyc3QoKTsgYWxsb2NhdG9yOyBhbGxvY2F0
b3IgPSBhbGxvY2F0b3ItPm5leHRBbGxvY2F0b3IoKSkgewogICAgICAgICBpZiAoZnVuY3Rvcigq
YWxsb2NhdG9yKSA9PSBJdGVyYXRpb25TdGF0dXM6OkRvbmUpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2
aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU3Vic3BhY2UuaCIKIAorI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
SW5saW5lcy5oIgpAQCAtMzQsNDUgKzM2LDIzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1uYW1l
c3BhY2UgewotCi0vLyBXcml0aW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdCB3aGVuIHlvdSBw
YXNzIHRoaXMgYXMgYSBmdW5jdG9yLCB0aGUgY2FsbGVlIGlzIHNwZWNpYWxpemVkIGZvcgotLy8g
dGhpcyBjYWxsYmFjay4gSWYgeW91IHdyb3RlIHRoaXMgYXMgYSBub3JtYWwgZnVuY3Rpb24gdGhl
biB0aGUgY2FsbGVlIHdvdWxkIGJlIHNwZWNpYWxpemVkIGZvcgotLy8gdGhlIGZ1bmN0aW9uJ3Mg
dHlwZSBhbmQgaXQgd291bGQgaGF2ZSBpbmRpcmVjdCBjYWxscyB0byB0aGF0IGZ1bmN0aW9uLiBB
bmQgdW5saWtlIGEgbGFtYmRhLCBpdCdzCi0vLyBwb3NzaWJsZSB0byBtYXJrIHRoaXMgQUxXQVlT
X0lOTElORS4KLXN0cnVjdCBEZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG9w
ZXJhdG9yKCkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoY2VsbC0+c3RydWN0dXJlSUQoKSk7Ci0gICAgICAgIEFTU0VSVChjZWxsLT5pbmxpbmVUeXBl
RmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKLSAgICAgICAgTWV0aG9kVGFibGU6OkRl
c3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5kZXN0cm95
OwotICAgICAgICBkZXN0cm95KGNlbGwpOwotICAgIH0KLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQotCi1TdWJzcGFjZTo6U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBB
bGxvY2F0b3JBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFs
aWduZWRNZW1vcnlBbGxvY2F0b3IpCitTdWJzcGFjZTo6U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBI
ZWFwJiBoZWFwKQogICAgIDogbV9zcGFjZShoZWFwLm9iamVjdFNwYWNlKCkpCiAgICAgLCBtX25h
bWUobmFtZSkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9hbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpCi0gICAgLCBtX2FsbG9jYXRv
ckZvckVtcHR5QWxsb2NhdGlvbihtX3NwYWNlLmZpcnN0QWxsb2NhdG9yKCkpCi17Ci0gICAgLy8g
SXQncyByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHdlJ3JlIEdDaW5nIHJpZ2h0IG5vdyBldmVuIGlm
IHRoZSBjbGllbnQgaXMgY2FyZWZ1bCB0byBvbmx5Ci0gICAgLy8gY3JlYXRlIHN1YnNwYWNlcyBy
aWdodCBhZnRlciBWTSBjcmVhdGlvbiwgc2luY2UgY29sbGVjdENvbnRpbnVvdXNseSAoYW5kIHBy
b2JhYmx5IG90aGVyCi0gICAgLy8gdGhpbmdzKSBjb3VsZCBjYXVzZSBhIEdDIHRvIGJlIGxhdW5j
aGVkIGF0IHByZXR0eSBtdWNoIGFueSB0aW1lIGFuZCBpdCdzIG5vdCAxMDAlIG9idmlvdXMKLSAg
ICAvLyB0aGF0IGFsbCBjbGllbnRzIHdvdWxkIGJlIGFibGUgdG8gZW5zdXJlIHRoYXQgdGhlcmUg
YXJlIHplcm8gc2FmZXBvaW50cyBiZXR3ZWVuIHdoZW4gdGhleQotICAgIC8vIGNyZWF0ZSBWTSBh
bmQgd2hlbiB0aGV5IGRvIHRoaXMuIFByZXZlbnRpbmcgR0Mgd2hpbGUgd2UncmUgY3JlYXRpbmcg
dGhlIFN1YnNwYWNlIGVuc3VyZXMKLSAgICAvLyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkg
YWJvdXQgd2hldGhlciBpdCdzIE9LIGZvciB0aGUgR0MgdG8gZXZlciBzZWUgYSBicmFuZCBuZXcK
LSAgICAvLyBzdWJzcGFjZS4KK3sKK30KKwordm9pZCBTdWJzcGFjZTo6aW5pdGlhbGl6ZShIZWFw
Q2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1l
bW9yeUFsbG9jYXRvcikKK3sKKyAgICBtX2F0dHJpYnV0ZXMgPSBoZWFwQ2VsbFR5cGUtPmF0dHJp
YnV0ZXMoKTsKKyAgICBtX2hlYXBDZWxsVHlwZSA9IGhlYXBDZWxsVHlwZTsKKyAgICBtX2FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IgPSBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworICAgIG1fYWxsb2Nh
dG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5maXJzdEFs
bG9jYXRvcigpOworCisgICAgSGVhcCYgaGVhcCA9ICptX3NwYWNlLmhlYXAoKTsKICAgICBQcmV2
ZW50Q29sbGVjdGlvblNjb3BlIHByZXZlbnRDb2xsZWN0aW9uU2NvcGUoaGVhcCk7CiAgICAgaGVh
cC5vYmplY3RTcGFjZSgpLm1fc3Vic3BhY2VzLmFwcGVuZCh0aGlzKTsKLSAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzOyBpLS07KQotICAgICAgICBt
X2FsbG9jYXRvckZvclNpemVTdGVwW2ldID0gbnVsbHB0cjsKKyAgICBtX2FsaWduZWRNZW1vcnlB
bGxvY2F0b3ItPnJlZ2lzdGVyU3Vic3BhY2UodGhpcyk7CiB9CiAKIFN1YnNwYWNlOjp+U3Vic3Bh
Y2UoKQpAQCAtODEsNjAgKzYxLDEyIEBAIFN1YnNwYWNlOjp+U3Vic3BhY2UoKQogCiB2b2lkIFN1
YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9jaywgRnJlZUxpc3Qq
IGZyZWVMaXN0KQogewotICAgIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVM
aXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBtX2hlYXBDZWxsVHlwZS0+ZmluaXNoU3dlZXAoYmxv
Y2ssIGZyZWVMaXN0KTsKIH0KIAogdm9pZCBTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2Vs
bCogY2VsbCkKIHsKLSAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKLX0KLQotLy8gVGhlIHJl
YXNvbiB3aHkgd2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbGxvY2F0ZSBhbmQgdHJ5QWxsb2NhdGUg
aXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZgotLy8gY2hlY2tzIG9uIHRoZSBhbGxvY2F0aW9u
IHBhdGggaW4gYm90aCBjYXNlcy4gTGlrZXdpc2UsIHRoZSByZWFzb24gd2h5IHdlIGhhdmUgb3Zl
cmxvYWRzIHdpdGggYW5kCi0vLyB3aXRob3V0IGRlZmVycmFsQ29udGV4dCBpcyB0byBtaW5pbWl6
ZSB0aGUgYW1vdW50IG9mIGNvZGUgZm9yIGNhbGxpbmcgYWxsb2NhdGUgd2hlbiB5b3UgZG9uJ3QK
LS8vIG5lZWQgdGhlIGRlZmVycmFsQ29udGV4dC4KLXZvaWQqIFN1YnNwYWNlOjphbGxvY2F0ZShz
aXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gdHJ5QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBh
bGxvY2F0b3ItPmFsbG9jYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0
ZVNsb3cobnVsbHB0ciwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRl
eHQqIGRlZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCAqcmVzdWx0Owot
ICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZvcihzaXpl
KSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQp
OwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KGRlZmVycmFsQ29udGV4
dCwgc2l6ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkKiBTdWJzcGFjZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNpemUpCi17Ci0gICAgdm9p
ZCogcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9j
YXRvckZvcihzaXplKSkKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZSgp
OwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KG51bGxwdHIsIHNp
emUpOwotICAgIGRpZEFsbG9jYXRlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCogU3Vic3BhY2U6OnRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENv
bnRleHQsIHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJl
c3VsdCA9IGFsbG9jYXRvci0+dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKLSAgICBlbHNl
Ci0gICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhkZWZlcnJhbENvbnRleHQsIHNpemUp
OwotICAgIGRpZEFsbG9jYXRlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2hl
YXBDZWxsVHlwZS0+ZGVzdHJveSh2bSwgY2VsbCk7CiB9CiAKIHZvaWQgU3Vic3BhY2U6OnByZXBh
cmVGb3JBbGxvY2F0aW9uKCkKQEAgLTE0NCwxMDQgKzc2LDE3IEBAIHZvaWQgU3Vic3BhY2U6OnBy
ZXBhcmVGb3JBbGxvY2F0aW9uKCkKICAgICAgICAgICAgIGFsbG9jYXRvci5wcmVwYXJlRm9yQWxs
b2NhdGlvbigpOwogICAgICAgICB9KTsKIAotICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0
aW9uID0gbV9zcGFjZS5maXJzdEFsbG9jYXRvcigpOworICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlB
bGxvY2F0aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5maXJzdEFsbG9jYXRvcigpOwog
fQogCiBNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFs
KCkKIHsKLSAgICBmb3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb247IG1fYWxsb2Nh
dG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPm5l
eHRBbGxvY2F0b3IoKSkgewotICAgICAgICBTdWJzcGFjZSogb3RoZXJTdWJzcGFjZSA9IG1fYWxs
b2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uLT5zdWJzcGFjZSgpOwotICAgICAgICBpZiAob3RoZXJT
dWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpICE9IGFsaWduZWRNZW1vcnlBbGxvY2F0
b3IoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKyAgICBmb3IgKDsgbV9hbGxv
Y2F0b3JGb3JFbXB0eUFsbG9jYXRpb247IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0g
bV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPm5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKSkgewogICAgICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sg
PSBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlvbi0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkp
CiAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwog
fQogCi1NYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBz
aXplKQotewotICAgIHNpemVfdCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4
KHNpemUpOwotICAgIHNpemVfdCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NG
b3JTaXplU3RlcFtpbmRleF07Ci0gICAgaWYgKCFzaXplQ2xhc3MpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIAotICAgIC8vIFRoaXMgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQg
aXQncyBPSyBmb3IgdGhlIEpJVCB0aHJlYWRzIHRvIGVuZCB1cCBoZXJlIGlmIHRoZXkgd2FudAot
ICAgIC8vIHRvIGdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIHNvbWUgYWxsb2NhdG9yIHRoYXQgaGFk
bid0IGJlZW4gdXNlZCB5ZXQuIE5vdGUgdGhhdCBhIHBvc3NpYmx5LQotICAgIC8vIGp1c3QtYXMt
Z29vZCBzb2x1dGlvbiB3b3VsZCBiZSB0byByZXR1cm4gbnVsbCBpZiB3ZSdyZSBpbiB0aGUgSklU
IHNpbmNlIHRoZSBKSVQgdHJlYXRzIG51bGwKLSAgICAvLyBhbGxvY2F0b3IgYXMgInBsZWFzZSBh
bHdheXMgdGFrZSB0aGUgc2xvdyBwYXRoIi4gQnV0LCB0aGF0IGNvdWxkIGxlYWQgdG8gcGVyZm9y
bWFuY2UKLSAgICAvLyBzdXJwcmlzZXMgYW5kIHRoZSBhbGdvcml0aG0gaGVyZSBpcyBwcmV0dHkg
ZWFzeS4gT25seSB0aGlzIGNvZGUgaGFzIHRvIGhvbGQgdGhlIGxvY2ssIHRvCi0gICAgLy8gcHJl
dmVudCBzaW11bHRhbmVvdXNseSBNYXJrZWRBbGxvY2F0b3IgY3JlYXRpb25zIGZyb20gbXVsdGlw
bGUgdGhyZWFkcy4gVGhpcyBjb2RlIGVuc3VyZXMKLSAgICAvLyB0aGF0IGFueSAiZm9yRWFjaEFs
bG9jYXRvciIgdHJhdmVyc2FscyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2NhdG9yIGFmdGVyIGl0
J3MgaW5pdGlhbGl6ZWQKLSAgICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAKLSAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fc3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKLSAgICBpZiAoTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkKLSAg
ICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKLQotICAgIGlmIChmYWxzZSkKLSAgICAgICAgZGF0YUxv
ZygiQ3JlYXRpbmcgbWFya2VkIGFsbG9jYXRvciBmb3IgIiwgbV9uYW1lLCAiLCAiLCBtX2F0dHJp
YnV0ZXMsICIsICIsIHNpemVDbGFzcywgIi5cbiIpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yID0gbV9zcGFjZS5hZGRNYXJrZWRBbGxvY2F0b3IobG9ja2VyLCB0aGlzLCBzaXplQ2xh
c3MpOwotICAgIGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZUNsYXNz
KTsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NG
b3JTaXplU3RlcFtpbmRleF0gIT0gc2l6ZUNsYXNzKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0gPSBhbGxvY2F0b3I7Ci0gICAgICAg
IAotICAgICAgICBpZiAoIWluZGV4LS0pCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
YWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9ySW5TdWJzcGFjZShtX2ZpcnN0QWxsb2NhdG9yKTsK
LSAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxv
Y2F0b3I7Ci0gICAgcmV0dXJuIGFsbG9jYXRvcjsKLX0KLQotdm9pZCogU3Vic3BhY2U6OmFsbG9j
YXRlU2xvdyhHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkK
LXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBz
aXplKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXZvaWQqIFN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqIGRl
ZmVycmFsQ29udGV4dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgc2FuaXRpemVTdGFja0ZvclZNKG1f
c3BhY2UuaGVhcCgpLT52bSgpKTsKLSAgICAKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSBhbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJldHVybiBhbGxvY2F0b3ItPnRy
eUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgCi0gICAgaWYgKHNpemUgPD0gT3B0aW9u
czo6bGFyZ2VBbGxvY2F0aW9uQ3V0b2ZmKCkKLSAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFj
ZTo6bGFyZ2VDdXRvZmYpIHsKLSAgICAgICAgZGF0YUxvZygiRkFUQUw6IGF0dGFtcHRpbmcgdG8g
YWxsb2NhdGUgc21hbGwgb2JqZWN0IHVzaW5nIGxhcmdlIGFsbG9jYXRpb24uXG4iKTsKLSAgICAg
ICAgZGF0YUxvZygiUmVxdWVzdGVkIGFsbG9jYXRpb24gc2l6ZTogIiwgc2l6ZSwgIlxuIik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIG1f
c3BhY2UuaGVhcCgpLT5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7
Ci0gICAgCi0gICAgc2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRTcGFjZTo6
c2l6ZVN0ZXA+KHNpemUpOwotICAgIExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IExhcmdl
QWxsb2NhdGlvbjo6dHJ5Q3JlYXRlKCptX3NwYWNlLm1faGVhcCwgc2l6ZSwgdGhpcyk7Ci0gICAg
aWYgKCFhbGxvY2F0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBtX3Nw
YWNlLm1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7Ci0gICAgbV9zcGFjZS5t
X2hlYXAtPmRpZEFsbG9jYXRlKHNpemUpOwotICAgIG1fc3BhY2UubV9jYXBhY2l0eSArPSBzaXpl
OwotICAgIAotICAgIG1fbGFyZ2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7Ci0gICAg
ICAgIAotICAgIHJldHVybiBhbGxvY2F0aW9uLT5jZWxsKCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBTdWJzcGFjZTo6ZGlkQWxsb2NhdGUodm9pZCogcHRyKQotewotICAgIFVOVVNFRF9QQVJB
TShwdHIpOwotICAgIAotICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciBsb2dnaW5nIGFsbG9jYXRp
b25zLCBvciBkb2luZyBvdGhlciBraW5kcyBvZiBkZWJ1Z2dpbmcgaGFja3MuIEp1c3QgbWFrZQot
ICAgIC8vIHN1cmUgeW91IEpTQ19mb3JjZUdDU2xvd1BhdGhzPXRydWUuCi19Ci0KIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJl
dmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgog
I2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpA
QCAtMzIsNDQgKzMzLDMwIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjsKK2NsYXNzIEhlYXBDZWxsVHlwZTsKIAogLy8gVGhlIGlkZWEgb2Ygc3Vic3Bh
Y2VzIGlzIHRoYXQgeW91IGNhbiBwcm92aWRlIHNvbWUgY3VzdG9tIGJlaGF2aW9yIGZvciB5b3Vy
IG9iamVjdHMgaWYgeW91CiAvLyBhbGxvY2F0ZSB0aGVtIGZyb20gYSBjdXN0b20gU3Vic3BhY2Ug
aW4gd2hpY2ggeW91IG92ZXJyaWRlIHNvbWUgb2YgdGhlIHZpcnR1YWwgbWV0aG9kcy4gVGhpcwot
Ly8gY2xhc3MgaXMgdGhlIGJhc2VjbGFzcyBvZiBTdWJzcGFjZXMgYW5kIGl0IHByb3ZpZGVzIGEg
cmVhc29uYWJsZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCB3aGVyZQotLy8gc3dlZXBpbmcgYXNz
dW1lcyBpbW1vcnRhbCBzdHJ1Y3R1cmUuIFRoZSBjb21tb24gd2F5cyBvZiBvdmVycmlkaW5nIHRo
aXMgYXJlOgotLy8KLS8vIC0gUHJvdmlkZSBjdXN0b21pemVkIGRlc3RydWN0b3IgYmVoYXZpb3Iu
IFlvdSBjYW4gY2hhbmdlIGhvdyB0aGUgZGVzdHJ1Y3RvciBpcyBjYWxsZWQuIFlvdSBjYW4KLS8v
ICAgYWxzbyBzcGVjaWFsaXplIHRoZSBkZXN0cnVjdG9yIGNhbGwgaW4gdGhlIGxvb3AuCi0vLwot
Ly8gLSBVc2UgdGhlIFN1YnNwYWNlIGFzIGEgcXVpY2sgd2F5IHRvIGl0ZXJhdGUgYWxsIG9mIHRo
ZSBvYmplY3RzIGluIHRoYXQgc3Vic3BhY2UuCisvLyBjbGFzcyBpcyB0aGUgYmFzZWNsYXNzIG9m
IFN1YnNwYWNlcy4gVXN1YWxseSB5b3Ugd2lsbCB1c2UgZWl0aGVyIFN1YnNwYWNlIG9yIEZpeGVk
U2l6ZVN1YnNwYWNlLgogY2xhc3MgU3Vic3BhY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFN1YnNwYWNlKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGxvY2F0b3JB
dHRyaWJ1dGVzLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCB+U3Vic3BhY2UoKTsKLSAgICAKKwogICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWUuZGF0YSgpOyB9CiAgICAgTWFya2VkU3BhY2UmIHNwYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9zcGFjZTsgfQogICAgIAogICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0
ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBIZWFw
Q2VsbFR5cGUqIGhlYXBDZWxsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcENlbGxUeXBlOyB9
CiAgICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsgfQogICAgIAotICAgIC8vIFRo
ZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBpcyB0byBzcGVjaWFsaXplIHRoZSBzd2VlcCBm
b3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24ndAotICAgIC8vIGJlIGNhbGxlZCBmb3Igbm8t
ZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBjYWxsIE1hcmtlZEJsb2NrOjpmaW5pc2hTd2Vl
cEtub3dpbmdTdWJzcGFjZS4KLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7Ci0gICAgCi0gICAgLy8gVGhlc2UgZ2V0IGNhbGxlZCBm
b3IgbGFyZ2Ugb2JqZWN0cy4KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCop
OwotICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciogdHJ5QWxsb2NhdG9yRm9yKHNpemVfdCk7Ci0g
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3Ioc2l6ZV90KTsKLSAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLSAgICAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90
KTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCop
OworICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOworCisgICAgdmlydHVhbCBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCos
IEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgPSAwOwogICAgIAogICAgIHZvaWQgcHJlcGFyZUZvckFs
bG9jYXRpb24oKTsKICAgICAKQEAgLTk2LDQ4ICs4MywyNSBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7
CiAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVw
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN1YnNwYWNlLCBtX2FsbG9jYXRvckZvclNpemVT
dGVwKTsgfQotICAgIAotICAgIE1hcmtlZEFsbG9jYXRvcioqIGFsbG9jYXRvckZvclNpemVTdGVw
KCkgeyByZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0KKyAgICBTdWJzcGFjZSog
bmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3I7IH0KKyAgICB2b2lkIHNldE5leHRT
dWJzcGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9u
ZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgPSBzdWJzcGFjZTsgfQogCi1wcml2
YXRlOgotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwotICAg
IAotICAgIC8vIFRoZXNlIHNsb3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9j
YXRpb25zIGFuZCBhbGxvY2F0b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KEdD
RGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZVNsb3coR0NE
ZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOwotICAgIAotICAgIHZvaWQgZGlkQWxsb2NhdGUodm9p
ZCopOworcHJvdGVjdGVkOgorICAgIHZvaWQgaW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUqLCBBbGln
bmVkTWVtb3J5QWxsb2NhdG9yKik7CiAgICAgCiAgICAgTWFya2VkU3BhY2UmIG1fc3BhY2U7CiAg
ICAgCiAgICAgQ1N0cmluZyBtX25hbWU7CiAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJp
YnV0ZXM7CisKKyAgICBIZWFwQ2VsbFR5cGUqIG1faGVhcENlbGxUeXBlIHsgbnVsbHB0ciB9Owor
ICAgIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51
bGxwdHIgfTsKICAgICAKLSAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBtX2FsaWduZWRNZW1v
cnlBbGxvY2F0b3I7Ci0gICAgCi0gICAgc3RkOjphcnJheTxNYXJrZWRBbGxvY2F0b3IqLCBNYXJr
ZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CiAgICAgTWFy
a2VkQWxsb2NhdG9yKiBtX2ZpcnN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIE1hcmtlZEFs
bG9jYXRvciogbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24geyBudWxscHRyIH07IC8vIFVz
ZXMgdGhlIE1hcmtlZFNwYWNlIGxpbmtlZCBsaXN0IG9mIGJsb2Nrcy4KICAgICBTZW50aW5lbExp
bmtlZExpc3Q8TGFyZ2VBbGxvY2F0aW9uLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMYXJnZUFsbG9j
YXRpb24+PiBtX2xhcmdlQWxsb2NhdGlvbnM7CisgICAgU3Vic3BhY2UqIG1fbmV4dFN1YnNwYWNl
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogfTsKIAotQUxXQVlTX0lOTElO
RSBNYXJrZWRBbGxvY2F0b3IqIFN1YnNwYWNlOjp0cnlBbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUp
Ci17Ci0gICAgaWYgKHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKQotICAgICAgICBy
ZXR1cm4gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRl
eChzaXplKV07Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUFMV0FZU19JTkxJTkUgTWFya2Vk
QWxsb2NhdG9yKiBTdWJzcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplKQotewotICAgIGlm
IChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewotICAgICAgICBpZiAoTWFya2Vk
QWxsb2NhdG9yKiByZXN1bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNwYWNlOjpz
aXplQ2xhc3NUb0luZGV4KHNpemUpXSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIHJldHVybiBhbGxvY2F0b3JGb3JTbG93KHNpemUpOwotICAgIH0KLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTU3Miw3ICsxNTcyLDcgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1bHRH
UFIsIFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBHUFJSZWcg
c2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQ
YXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZvcihzaXplKTsKKyAg
ICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+
KHZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6
OkFzc2VydCk7CiAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1ODksNyArMTU4OSw3
IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBhbGxvY2F0aW9uU2l6ZSBjYW4gYmUgYWxpYXNlZCB3
aXRoIGFueSBvZiB0aGUgb3RoZXIgaW5wdXQgR1BScy4gSWYgaXQncyBub3QgYWxpYXNlZCB0aGVu
IGl0CiAgICAgLy8gd29uJ3QgYmUgY2xvYmJlcmVkLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFy
aWFibGVTaXplZChHUFJSZWcgcmVzdWx0R1BSLCBTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBh
bGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1
bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BS
UmVnIHJlc3VsdEdQUiwgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0
aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0
JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6
c2l6ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnNpemVTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnNp
emVTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAgICAgICAgIApAQCAtMTYwNyw3ICsx
NjA3LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5h
bWUgU3RydWN0dXJlVHlwZT4KICAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxs
KFZNJiB2bSwgR1BSUmVnIHJlc3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJl
ZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIs
IEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIFN1YnNwYWNlJiBzdWJzcGFjZSA9
ICpzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKTsKKyAgICAgICAgQ29tcGxldGVTdWJzcGFjZSYg
c3Vic3BhY2UgPSAqc3Vic3BhY2VGb3I8Q2xhc3NUeXBlPih2bSk7CiAgICAgICAgIGVtaXRBbGxv
Y2F0ZVZhcmlhYmxlU2l6ZWQocmVzdWx0R1BSLCBzdWJzcGFjZSwgYWxsb2NhdGlvblNpemUsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOwogICAgICAgICBlbWl0U3RvcmVTdHJ1
Y3R1cmVXaXRoVHlwZUluZm8oc3RydWN0dXJlLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIyKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlz
aW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAg
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvcihhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIAogICAgIFJlZ2lzdGVySUQg
cmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1hCiBpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgc2l6ZV90IHNpemUg
PSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVh
ZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgdm9pZCogYmFzZSA9IHZtLmpz
VmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlKHNpemUpOworICAgIHZvaWQqIGJh
c2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwo
c2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgIEJ1dHRl
cmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC03MCw3ICs3MCw3IEBAIGlubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbmkKIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6dHJ5Q3JlYXRlKFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdI
ZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
CiB7CiAgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0g
ICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9j
YXRlKHNpemUpOworICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd0FycmF5UmkKICAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0
eUNhcGFjaXR5KTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNh
cGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OwogICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRy
dWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBuZXdCYXNlID0g
dm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobmV3U2l6ZSk7Cisg
ICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRlTm9uVmlydHVhbChuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJl
dHVybk51bGwpOwogICAgIGlmICghbmV3QmFzZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkbid0IGJlIGEgbWVtY3B5LgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3Bw
CShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDcgQEAgdm9pZCBE
aXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJgogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y2FsbGVlLCBtX2NhbGxlZS5nZXQoKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdsb2JhbE9iamVjdCgpLT5hcnJheVByb3Rv
VmFsdWVzRnVuY3Rpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkpOwogICAgIAotICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRBcmd1bWVudHMua2luZCkudHJ5QWxsb2NhdGUobWFwcGVk
QXJndW1lbnRzU2l6ZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChiYWNraW5nU3RvcmUpOworICAg
IHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tYXBwZWRB
cmd1bWVudHMua2luZCkuYWxsb2NhdGVOb25WaXJ0dWFsKG1hcHBlZEFyZ3VtZW50c1NpemUoKSwg
bnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgIGJvb2wqIG92ZXJy
aWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwogICAgIG1fbWFwcGVkQXJn
dW1lbnRzLnNldCh2bSwgdGhpcywgb3ZlcnJpZGVzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2xlbmd0aDsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsNyBAQCBwcml2YXRlOgogICAgIAogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0
YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwogICAgICAgICBy
ZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEV2YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0RXZhbEV4ZWN1dGFibGUuaAkocmV2aXNp
b24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0RXZhbEV4
ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgRGlyZWN0RXZhbEV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgRXZhbEV4ZWN1dGFi
bGUgewogcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgorICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICZ2bS5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOworICAgIH0KKwogICAgIHN0YXRpYyBEaXJl
Y3RFdmFsRXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBi
b29sIGlzSW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1
bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50
Kik7CiBwcml2YXRlOgogICAgIERpcmVjdEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0
IFNvdXJjZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBi
b29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FdmFsRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwotCisgICAgCiAgICAgRXZhbENvZGVCbG9jayogY29kZUJsb2NrKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBtX2V2YWxDb2RlQmxvY2suZ2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJKHJldmlzaW9uIDIyNDkz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25z
dCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CisgICAgCisgICAgLy8gRm9yY2Ugc3ViY2xhc3NlcyB0byBvdmVycmlkZSB0aGlz
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0YXRpYyB2b2lkIHN1YnNwYWNlRm9yKFZN
JikgeyB9CiAgICAgICAgIAogICAgIENvZGVCbG9ja0hhc2ggaGFzaEZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw2ICszOCwxMiBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRh
YmxlIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihW
TSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZtLmZ1bmN0aW9uRXhlY3V0YWJsZVNwYWNl
OworICAgIH0KKwogICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZSgKICAgICAg
ICAgVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIAogICAgICAgICB1bnNpZ25lZCBsYXN0TGluZSwg
dW5zaWduZWQgZW5kQ29sdW1uLCBJbnRyaW5zaWMgaW50cmluc2ljKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsOCArMjYzLDcg
QEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppbml0TW9kaWZpZQogICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcik7CiAKICAgICBpZiAoYXJnc0xl
bmd0aCkgewotICAgICAgICB2b2lkKiBiYWNraW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFy
eVNwYWNlKG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLmtpbmQpLnRyeUFsbG9jYXRlKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3RoKSk7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGJhY2tpbmdTdG9yZSk7CisgICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iua2luZCku
YWxsb2NhdGVOb25WaXJ0dWFsKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjw4PihhcmdzTGVuZ3Ro
KSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgICAgICBib29s
KiBtb2RpZmllZEFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwog
ICAgICAgICBtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5zZXQodm0sIHRoaXMsIG1vZGlm
aWVkQXJndW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJnc0xlbmd0aDsgaS0t
OykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAko
cmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1h
cEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
c2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2Fw
YWNpdHkpOwotICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5
U3BhY2UudHJ5QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOworICAgICAgICB2b2lkKiBkYXRhID0g
dm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKGFsbG9j
YXRpb25TaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwog
ICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRpcmVjdEV2YWxFeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGlyZWN0RXZhbEV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZSBmaW5hbCA6IHB1Ymxp
YyBFdmFsRXhlY3V0YWJsZSB7CiBwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgewor
ICAgICAgICByZXR1cm4gJnZtLmluZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsKKyAgICB9CisK
ICAgICBzdGF0aWMgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIGNv
bnN0IFNvdXJjZUNvZGUmLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5
cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRUeXBlKTsKIHByaXZh
dGU6CiAgICAgSW5kaXJlY3RFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VD
b2RlJiwgYm9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fy
cm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw3IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAg
ICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKSk7CiAKICAgICAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRpbWFsQ29udGlndW91c1ZlY3Rvckxl
bmd0aChzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0u
anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0
LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JM
ZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIHZvaWQqIHRlbXAgPSB2
bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZy
b21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3JhZ2UpOwpAQCAtOTgsNyArOTgsNyBAQCBKU0Fy
cmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4QmlhcyA9IDA7CiAgICAgICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCA9IEFycmF5U3RvcmFnZTo6b3B0aW1hbFZlY3Rvckxlbmd0aChpbmRleEJp
YXMsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2bS5q
c1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRleHQs
IEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpKTsKKyAgICAgICAgdm9pZCogdGVt
cCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChC
dXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRl
bXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAg
LTM2OCw3ICszNjgsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKGNvbnN0
CiAgICAgICAgIGFsbG9jYXRlZE5ld1N0b3JhZ2UgPSBmYWxzZTsKICAgICB9IGVsc2UgewogICAg
ICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2Fw
YWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKLSAg
ICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5
QWxsb2NhdGUobmV3U2l6ZSk7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IHZtLmpzVmFsdWVHaWdh
Y2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChuZXdTaXplLCBudWxscHRyLCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoIW5ld0FsbG9j
QmFzZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFj
aXR5ID0gZGVzaXJlZENhcGFjaXR5OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDkgQEAgaW5saW5l
IEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZShWTSYgdgogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gQnV0dGVyZmx5OjpvcHRp
bWFsQ29udGlndW91c1ZlY3Rvckxlbmd0aChzdHJ1Y3R1cmUsIHZlY3Rvckxlbmd0aEhpbnQpOwot
ICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5
QWxsb2NhdGUobnVsbHB0ciwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lU3RvcmFn
ZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAg
ICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVO
b25WaXJ0dWFsKAorICAgICAgICAgICAgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5l
U3RvcmFnZSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksCisg
ICAgICAgICAgICBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwog
ICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
YnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCBvdXRPZkxpbmVTdG9yYWdl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyAr
NjYsNyBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgICAg
IHZvaWQqIHRlbXA7CiAgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVu
dFNpemUpOwogICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1p
dGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUobnVsbHB0ciwgc2l6ZSk7Cisg
ICAgICAgICAgICB0ZW1wID0gdm0ucHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxv
Y2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1
cm5OdWxsKTsKICAgICAgICAgICAgIGlmICghdGVtcCkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0gZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogY2xhc3MgQ29weVZpc2l0b3I7CiBjbGFzcyBH
Q0RlZmVycmFsQ29udGV4dDsKIGNsYXNzIEV4ZWNTdGF0ZTsKQEAgLTUwLDExICs1MSw2IEBAIGNs
YXNzIFByb3BlcnR5TmFtZTsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogY2xhc3MgU3RydWN0
dXJlOwogCi1lbnVtIGNsYXNzIEFsbG9jYXRpb25GYWlsdXJlTW9kZSB7Ci0gICAgU2hvdWxkQXNz
ZXJ0T25GYWlsdXJlLAotICAgIFNob3VsZE5vdEFzc2VydE9uRmFpbHVyZQotfTsKLQogZW51bSBj
bGFzcyBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlIHsKICAgICBIYXNBcmcsCiAgICAgRG9l
c05vdEhhdmVBcmcKQEAgLTg2LDggKzgyLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCog
dHJ5QWxsb2NhdGVDZQogY2xhc3MgSlNDZWxsIDogcHVibGljIEhlYXBDZWxsIHsKICAgICBmcmll
bmQgY2xhc3MgSlNWYWx1ZTsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlLCBHQ0RlZmVycmFsQ29udGV4
dEFyZ1ByZXNlbnNlPgotICAgIGZyaWVuZCB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIoSGVh
cCYsIEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIGZyaWVuZCB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIoSGVhcCYsIHNpemVfdCwg
R0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOwogCiBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gMDsKQEAgLTk4LDcgKzk0
LDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBSZWZlciB0byBTdWJzcGFjZSBieSByZWZlcmVu
Y2UuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4
OAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mKTsKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mKTsKIAogICAgIHN0YXRpYyBKU0NlbGwqIHNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMo
KSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pigx
KSk7IH0KIApAQCAtMzIwLDcgKzMxNiw3IEBAIGlubGluZSBUbyBqc0R5bmFtaWNDYXN0KFZNJiB2
bSwgSlNWYWx1ZSAKIC8vIEZJWE1FOiBSZWZlciB0byBTdWJzcGFjZSBieSByZWZlcmVuY2UuCiAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgotaW5saW5lIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCitp
bmxpbmUgYXV0byBzdWJzcGFjZUZvcihWTSYgdm0pCiB7CiAgICAgcmV0dXJuIFR5cGU6OnRlbXBs
YXRlIHN1YnNwYWNlRm9yPFR5cGU+KHZtKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTM1LDMwICsxMzUsMjEgQEAgQUxXQVlTX0lOTElORSBWTSYgRXhlY1N0YXRlOjp2bSgpIGNv
bnN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotU3Vic3BhY2UqIEpTQ2VsbDo6
c3Vic3BhY2VGb3IoVk0mIHZtKQorQ29tcGxldGVTdWJzcGFjZSogSlNDZWxsOjpzdWJzcGFjZUZv
cihWTSYgdm0pCiB7CiAgICAgaWYgKENlbGxUeXBlOjpuZWVkc0Rlc3RydWN0aW9uKQogICAgICAg
ICByZXR1cm4gJnZtLmRlc3RydWN0aWJsZUNlbGxTcGFjZTsKICAgICByZXR1cm4gJnZtLmNlbGxT
cGFjZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIG1v
ZGUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2UgZGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vu
Y2U+Ci1BTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcihIZWFwJiBoZWFw
LCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5FIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBl
cihIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIEFTU0VSVChk
ZWZlcnJhbENvbnRleHQgfHwgIURpc2FsbG93R0M6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQo
KSk7CiAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAgICBKU0NlbGwqIHJlc3VsdDsK
LSAgICBpZiAobW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlNob3VsZEFzc2VydE9uRmFp
bHVyZSkgewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250ZXh0QXJnUHJlc2VuY2UgPT0g
R0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQotICAgICAgICAgICAgPyBzdGF0
aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+YWxsb2NhdGUoZGVm
ZXJyYWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
c3Vic3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPmFsbG9jYXRlKHNpemUpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICByZXN1bHQgPSAoZGVmZXJyYWxDb250ZXh0QXJnUHJlc2VuY2UgPT0gR0NEZWZl
cnJhbENvbnRleHRBcmdQcmVzZW5zZTo6SGFzQXJnKQotICAgICAgICAgICAgPyBzdGF0aWNfY2Fz
dDxKU0NlbGwqPihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+dHJ5QWxsb2NhdGUoZGVmZXJy
YWxDb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vi
c3BhY2VGb3I8VD4oKmhlYXAudm0oKSktPnRyeUFsbG9jYXRlKHNpemUpKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQor
ICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oc3Vic3BhY2VGb3I8VD4o
KmhlYXAudm0oKSktPmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZlcnJhbENvbnRleHQsIGZh
aWx1cmVNb2RlKSk7CisgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6UmV0dXJuTnVsbCAmJiAhcmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICNpZiBF
TkFCTEUoR0NfVkFMSURBVElPTikKICAgICBBU1NFUlQoIWhlYXAudm0oKS0+aXNJbml0aWFsaXpp
bmdPYmplY3QoKSk7CiAgICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcyhU
OjppbmZvKCkpOwpAQCAtMTcwLDI1ICsxNjEsMjUgQEAgQUxXQVlTX0lOTElORSB2b2lkKiB0cnlB
bGxvY2F0ZUNlbGxIZWxwZQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQqIGFsbG9jYXRlQ2Vs
bChIZWFwJiBoZWFwLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxs
SGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkQXNzZXJ0T25GYWlsdXJlLCBH
Q0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpEb2VzTm90SGF2ZUFyZz4oaGVhcCwgbnVsbHB0
ciwgc2l6ZSk7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFwLCBzaXpl
LCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiB2b2lkKiB0cnlBbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCwgc2l6ZV90IHNp
emUpCiB7Ci0gICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxULCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlNob3VsZE5vdEFzc2VydE9uRmFpbHVyZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQ
cmVzZW5zZTo6RG9lc05vdEhhdmVBcmc+KGhlYXAsIG51bGxwdHIsIHNpemUpOworICAgIHJldHVy
biB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VD4oaGVhcCwgc2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlv
bkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZv
aWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVy
PFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkQXNzZXJ0T25GYWlsdXJlLCBHQ0RlZmVy
cmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpIYXNBcmc+KGhlYXAsIGRlZmVycmFsQ29udGV4dCwgc2l6
ZSk7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFwLCBzaXplLCBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwLCBHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4g
dHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkTm90
QXNzZXJ0T25GYWlsdXJlLCBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpIYXNBcmc+KGhl
YXAsIGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7CisgICAgcmV0dXJuIHRyeUFsbG9jYXRlQ2VsbEhl
bHBlcjxUPihoZWFwLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6UmV0dXJuTnVsbCk7CiB9CiAKIGlubGluZSBib29sIEpTQ2VsbDo6aXNPYmplY3QoKSBjb25z
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdC5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0
aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5kZXN0
cnVjdGlibGVPYmplY3RTcGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwOjIyNDUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgiCisKKyNpbmNsdWRlICJNYXJrZWRC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3Bh
Y2VJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3Qg
RGVzdHJveUZ1bmMgeworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlND
ZWxsKiBjZWxsKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNEZXN0cnVjdGli
bGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7
CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2U6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2U6On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCkKK3sKK30KKwordm9p
ZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6
SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBoYW5kbGUuZmluaXNo
U3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lk
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNl
bGwpCit7CisgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lv
biAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMCBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuaCIKIAogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTQzLDIxICs0MiwyMSBAQCBzdHJ1Y3QgRGVzdHJveUZ1bmMgewogCiB9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKIAotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9j
YXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9j
YXRvcikKK0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRl
cyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsKIH0KIAotSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKQorSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6On5KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6Zmlu
aXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3Qp
Cit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICBoYW5k
bGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwor
ICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIERlc3Ry
b3lGdW5jKCkpOwogfQogCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ry
b3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAgIERlc3Ryb3lGdW5j
KCkodm0sIGNlbGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCShy
ZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTdWJzcGFjZS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSA6IHB1Ymxp
YyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZSgpOworICAgIAorICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6Okhh
bmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxs
Kikgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRl
ICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFj
ZSB7CitjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSA6IHB1YmxpYyBIZWFw
Q2VsbFR5cGUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlKCk7CiAgICAgCiAgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3ko
Vk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3Bw
CShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rl
c3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDY2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCIK
LQotI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5h
bWVzcGFjZSB7Ci0KLXN0cnVjdCBEZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lk
IG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0
aWNfY2FzdDxKU0Rlc3RydWN0aWJsZU9iamVjdCo+KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9k
VGFibGUuZGVzdHJveShjZWxsKTsKLSAgICB9Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKLQotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Iq
IGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0
ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKLXsKLX0K
LQotSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2UoKQotewotfQotCi12b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQot
ewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJv
eUZ1bmMoKSk7Ci19Ci0KLXZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJv
eShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgJ
KHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3Ry
aW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSgpOwotICAgIAot
ICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEpTTGV4aWNhbEVudmlyb25tZW50IDog
cHVibGljIEpTU3kKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogcHVi
bGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6
Om5lZWRzRGVzdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNl
bGxTcGFjZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KLSAgICBzdGF0
aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZS5jcHA6MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxv
Y2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpLT5jbGFz
c0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9Cit9OworCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFw
LCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1l
LCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpCit7Cit9CisKK3ZvaWQg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBoYW5kbGUuZmlu
aXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2
b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCIKIAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJz
cGFjZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDIxICs0MiwyMSBAQCBz
dHJ1Y3QgRGVzdHJveUZ1bmMgewogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBh
bGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVz
KE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCitKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
SGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVzKE5l
ZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCi1KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Uo
KQorSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6fkpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKQogewogfQogCi12b2lkIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxl
LCBGcmVlTGlzdCogZnJlZUxpc3QpCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFw
Q2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxp
c3QqIGZyZWVMaXN0KQogewotICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShm
cmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ0hl
YXBDZWxsVHlwZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKLXZvaWQgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQor
dm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpkZXN0cm95KFZNJiB2
bSwgSlNDZWxsKiBjZWxsKQogewogICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0
NTM2KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2UuaDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UgOiBw
dWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7CisgICAgCisgICAgdm9pZCBmaW5pc2hTd2VlcChN
YXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlc3Ry
b3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAy
MjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNCBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSGVh
cENlbGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xhc3MgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSA6IHB1YmxpYyBIZWFwQ2VsbFR5cGUgewogcHVibGlj
OgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBD
ZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lkIGZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShub25leGlzdGVu
dCkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25z
dAotICAgIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+
KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKLSAgICB9Ci19
OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBT
dWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgpCi17
Ci19Ci0KLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKLXsKLSAg
ICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5j
KCkpOwotfQotCi12b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJv
eShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsKLSAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZS5oCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTdWJzcGFjZS5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlIDogcHVibGlj
IFN1YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFs
bG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZSgpOwotICAgIAotICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KFZN
JiwgSlNDZWxsKikgb3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAyMjQ5MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAvLyBXZSBzcGVjaWFsaXplIHRoZSBz
dHJpbmcgc3Vic3BhY2UgdG8gZ2V0IHRoZSBmYXN0ZXN0IHBvc3NpYmxlIHN3ZWVwLiBUaGlzIHdv
dWxkbid0IGJlCiAgICAgLy8gbmVjZXNzYXJ5IGlmIEpTU3RyaW5nIGRpZG4ndCBoYXZlIGEgZGVz
dHJ1Y3Rvci4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VG
b3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2bS5zdHJpbmdTcGFjZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwOjIyNDUzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1N0cmluZ1N1YnNw
YWNlLmgiCisKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRGVzdHJveUZ1bmMgeworICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsKS0+SlNTdHJpbmc6On5KU1N0cmluZygpOwor
ICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitKU1N0cmluZ1N1YnNwYWNl
OjpKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciogYWxsb2NhdG9yKQorICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2Nh
dG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2Nh
dG9yKQoreworfQorCitKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCit7Cit9
CisKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVw
S25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBKU1N0
cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIERlc3Ry
b3lGdW5jKCkodm0sIGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxU
eXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQs
MTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNTdHJpbmdTdWJz
cGFjZS5oIgorI2luY2x1ZGUgIkpTU3RyaW5nSGVhcENlbGxUeXBlLmgiCiAKICNpbmNsdWRlICJN
YXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
U3Vic3BhY2VJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MywyMSArNDIsMjEg
QEAgc3RydWN0IERlc3Ryb3lGdW5jIHsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUpT
U3RyaW5nU3Vic3BhY2U6OkpTU3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFw
LCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1l
LCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpK
U0NlbGwpLCBhbGxvY2F0b3IpCitKU1N0cmluZ0hlYXBDZWxsVHlwZTo6SlNTdHJpbmdIZWFwQ2Vs
bFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0
cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKLUpTU3RyaW5nU3Vic3BhY2U6On5K
U1N0cmluZ1N1YnNwYWNlKCkKK0pTU3RyaW5nSGVhcENlbGxUeXBlOjp+SlNTdHJpbmdIZWFwQ2Vs
bFR5cGUoKQogewogfQogCi12b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtl
ZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU1N0cmlu
Z0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBG
cmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNw
YWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93
aW5nSGVhcENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU1N0
cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQordm9pZCBKU1N0cmlu
Z0hlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKIHsKICAgICBEZXN0
cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0NTM2KQko
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmg6MjI0
NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3Vi
c3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTU3RyaW5nU3Vic3BhY2UgOiBw
dWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU3RyaW5n
U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU3RyaW5nU3Vic3BhY2UoKTsKKyAgICAK
KyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92
ZXJyaWRlOworICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAkocmV2aXNpb24gMjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbFR5cGUuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWNsYXNzIEpTU3RyaW5nU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworY2xhc3Mg
SlNTdHJpbmdIZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsKIHB1YmxpYzoKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYs
IEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFs
IH5KU1N0cmluZ1N1YnNwYWNlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdIZWFw
Q2VsbFR5cGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ0hlYXBD
ZWxsVHlwZSgpOwogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikg
b3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1
YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1N0cmluZ1N1YnNwYWNlLmgiCi0KLSNp
bmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0j
aW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3Bh
Y2UgewotCi1zdHJ1Y3QgRGVzdHJveUZ1bmMgewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVy
YXRvcigpKFZNJiwgSlNDZWxsKiBjZWxsKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Nh
c3Q8SlNTdHJpbmcqPihjZWxsKS0+SlNTdHJpbmc6On5KU1N0cmluZygpOwotICAgIH0KLX07Ci0K
LX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1KU1N0cmluZ1N1YnNwYWNlOjpKU1N0cmluZ1N1
YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciog
YWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRl
cyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQotewotfQot
Ci1KU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCi17Ci19Ci0KLXZvaWQgSlNT
dHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBG
cmVlTGlzdCogZnJlZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNw
YWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1N0cmluZ1N1YnNwYWNl
OjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQotewotICAgIERlc3Ryb3lGdW5jKCkodm0s
IGNlbGwpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkocmV2aXNpb24gMjI0OTM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCShu
b25leGlzdGVudCkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlN1YnNwYWNlLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU1N0cmluZ1N1YnNwYWNlIDogcHVibGljIFN1
YnNwYWNlIHsKLXB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZ1N1YnNwYWNl
KENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7Ci0gICAgCi0gICAgdm9p
ZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQ
cm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEyIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFNjcmlw
dEV4ZWN1dGFibGUgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiAmdm0ubW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGVTcGFjZTsKKyAgICB9CisKICAgICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmF0aXZlRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBOYXRp
dmVFeGVjdXRhYmxlKiBjcmVhdGUoVk0mLCBSZWY8SklUQ29kZT4mJiBjYWxsVGh1bmssIE5hdGl2
ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBSZWY8SklUQ29kZT4mJiBjb25zdHJ1Y3RUaHVuaywgTmF0aXZl
RnVuY3Rpb24gY29uc3RydWN0b3IsIEludHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUq
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KKyAgICBzdGF0aWMgSXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiAmdm0u
bmF0aXZlRXhlY3V0YWJsZVNwYWNlOworICAgIH0KIAogICAgIENvZGVCbG9ja0hhc2ggaGFzaEZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvZ3JhbUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyMjQ5
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMiBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBT
Y3JpcHRFeGVjdXRhYmxlIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gJnZtLnByb2dyYW1FeGVj
dXRhYmxlU3BhY2U7CisgICAgfQorCiAgICAgc3RhdGljIFByb2dyYW1FeGVjdXRhYmxlKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAgICAgewogICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDIyNDkzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIEFMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3Jl
YXRlVW5pbml0aWEKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1
cmUtPmdsb2JhbE9iamVjdCgpOwogICAgIGJvb2wgY3JlYXRlVW5pbml0aWFsaXplZCA9IGdsb2Jh
bE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgdm9pZCog
dGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVy
cmFsQ29udGV4dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
CisgICAgdm9pZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRlTm9uVmlydHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAg
ICAgaWYgKFVOTElLRUxZKCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY29wZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQor
ICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pOwogICAg
ICAgICByZXR1cm4gJnZtLmpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNl
dHRlci5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiRGlyZWN0RXZhbEV4
ZWN1dGFibGUuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJFcnJvcklu
c3RhbmNlLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVCbG9jay5oIgpAQCAtNDcsNiArNDgsNyBAQAog
I2luY2x1ZGUgIkZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCisj
aW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxi
YWNrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiR2lnYWNhZ2VBbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmgiCkBAIC01Nyw2ICs1OSw3IEBACiAjaW5jbHVkZSAiSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJbmNy
ZW1lbnRhbFN3ZWVwZXIuaCIKKyNpbmNsdWRlICJJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmgiCiAj
aW5jbHVkZSAiSW5mZXJyZWRUeXBlVGFibGUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgog
I2luY2x1ZGUgIkpJVENvZGUuaCIKQEAgLTY0LDYgKzY3LDcgQEAKICNpbmNsdWRlICJKU0FQSVZh
bHVlV3JhcHBlci5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCIKICNpbmNs
dWRlICJKU0ZpeGVkQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKQEAgLTczLDI0ICs3NywzMCBAQAogI2luY2x1ZGUg
IkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1
ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgorI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJKU1NjcmlwdEZldGNoUGFyYW1l
dGVycy5oIgogI2luY2x1ZGUgIkpTU2NyaXB0RmV0Y2hlci5oIgogI2luY2x1ZGUgIkpTU2V0Lmgi
CiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU291cmNlQ29kZS5oIgor
I2luY2x1ZGUgIkpTU3RyaW5nSGVhcENlbGxUeXBlLmgiCiAjaW5jbHVkZSAiSlNUZW1wbGF0ZVJl
Z2lzdHJ5S2V5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseS5oIgorI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5o
IgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxleGVyLmgiCiAjaW5jbHVkZSAi
TG9va3VwLmgiCiAjaW5jbHVkZSAiTWluaW11bVJlc2VydmVkWm9uZVNpemUuaCIKICNpbmNsdWRl
ICJNb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGUuaCIKKyNpbmNsdWRlICJOYXRpdmVFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiTmF0aXZl
U3RkRnVuY3Rpb25DZWxsLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJQYXJzZXIu
aCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIlByb2dyYW1FeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiUHJvbWlz
ZURlZmVycmVkVGltZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2lu
Y2x1ZGUgIlJlZ0V4cENhY2hlLmgiCkBAIC0xNzEsMTggKzE4MSwzMyBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBmYXN0TWFsbG9jQWxsb2NhdG9yKHN0
ZDo6bWFrZV91bmlxdWU8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCkpCiAgICAg
LCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OlByaW1pdGl2ZSkpCiAgICAgLCBqc1ZhbHVl
R2lnYWNhZ2VBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlB
bGxvY2F0b3I+KEdpZ2FjYWdlOjpKU1ZhbHVlKSkKLSAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBBbGxvY2F0
b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkp
LCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAsIGpzVmFsdWVHaWdhY2Fn
ZUF1eGlsaWFyeVNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIEFsbG9j
YXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFy
eSksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAsIGNlbGxTcGFjZSgiSlND
ZWxsIiwgaGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBI
ZWFwQ2VsbDo6SlNDZWxsKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIGpzVmFs
dWVHaWdhY2FnZUNlbGxTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBKU0NlbGwiLCBoZWFwLCBBbGxv
Y2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwp
LCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBkZXN0cnVjdGlibGVDZWxs
U3BhY2UoIkRlc3RydWN0aWJsZSBKU0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5l
ZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdl
dCgpKQotICAgICwgc3RyaW5nU3BhY2UoIkpTU3RyaW5nIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9j
YXRvci5nZXQoKSkKLSAgICAsIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJKU0Rlc3RydWN0aWJs
ZU9iamVjdCIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBlYWdlcmx5
U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZSgiRWFnZXJseSBTd2VwdCBKU0Rlc3RydWN0aWJs
ZU9iamVjdCIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0gICAgLCBzZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFNwYWNlKCJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UiLCBo
ZWFwLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgYXV4aWxpYXJ5SGVhcENlbGxU
eXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxUeXBlPihBbGxvY2F0b3JBdHRyaWJ1dGVzKERv
ZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpBdXhpbGlhcnkpKSkKKyAgICAsIGNlbGxI
ZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJp
YnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpKQorICAgICwg
ZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxsVHlw
ZT4oQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxs
KSkpCisgICAgLCBzdHJpbmdIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU1N0cmluZ0hl
YXBDZWxsVHlwZT4oKSkKKyAgICAsIGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZShzdGQ6
Om1ha2VfdW5pcXVlPEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlPigpKQorICAgICwg
c2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlPigpKQogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKLSAgICAsIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UoIkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTcGFjZSIsIGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCB3ZWJB
c3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU+KCkpCiAjZW5kaWYKKyAgICAsIHByaW1pdGl2ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBh
dXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0KCksIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdl
dCgpKQorICAgICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNh
Z2UgQXV4aWxpYXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBqc1ZhbHVl
R2lnYWNhZ2VBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBjZWxsU3BhY2UoIkpTQ2VsbCIsIGhlYXAs
IGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAg
LCBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgSlNDZWxsIiwgaGVh
cCwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgp
KQorICAgICwgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlKCJEZXN0cnVjdGlibGUgSlNDZWxsIiwgaGVh
cCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRv
ci5nZXQoKSkKKyAgICAsIHN0cmluZ1NwYWNlKCJKU1N0cmluZyIsIGhlYXAsIHN0cmluZ0hlYXBD
ZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIGRlc3RydWN0
aWJsZU9iamVjdFNwYWNlKCJKU0Rlc3RydWN0aWJsZU9iamVjdCIsIGhlYXAsIGRlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAg
ICAsIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJFYWdlcmx5IFN3ZXB0IEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
LmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgc2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTcGFjZSgiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlIiwgaGVhcCwgc2Vn
bWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0
b3IuZ2V0KCkpCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICwgd2ViQXNzZW1ibHlDb2Rl
QmxvY2tTcGFjZSgiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlIiwgaGVhcCwgd2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkp
CisjZW5kaWYKKyAgICAsIG5hdGl2ZUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBOYXRpdmVFeGVjdXRhYmxl
KQorICAgICwgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFw
LCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBEaXJlY3RFdmFsRXhlY3V0YWJs
ZSkKKyAgICAsIGluZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5JVCho
ZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBJbmRpcmVjdEV2YWxFeGVj
dXRhYmxlKQorICAgICwgZnVuY3Rpb25FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lOSVQo
aGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgRnVuY3Rpb25FeGVjdXRh
YmxlKQorICAgICwgbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBNb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZSkKKyAgICAsIHByb2dyYW1FeGVjdXRhYmxlU3BhY2UgSVNPX1NVQlNQQUNFX0lO
SVQoaGVhcCwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgUHJvZ3JhbUV4ZWN1
dGFibGUpCiAgICAgLCB2bVR5cGUodm1UeXBlKQogICAgICwgY2xpZW50RGF0YSgwKQogICAgICwg
dG9wRW50cnlGcmFtZShudWxscHRyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDYWxsRGF0YS5o
IgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKKyNpbmNsdWRlICJDb21wbGV0
ZVN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgogI2luY2x1ZGUgIkNv
bnRyb2xGbG93UHJvZmlsZXIuaCIKICNpbmNsdWRlICJEYXRlSW5zdGFuY2VDYWNoZS5oIgpAQCAt
MzksMjAgKzQwLDE2IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkludHJpbnNpYy5oIgorI2luY2x1ZGUgIklzb1N1
YnNwYWNlLmgiCiAjaW5jbHVkZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCIKICNpbmNsdWRlICJK
U0xvY2suaCIKLSNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCIK
LSNpbmNsdWRlICJKU1N0cmluZ1N1YnNwYWNlLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAj
aW5jbHVkZSAiTWljcm90YXNrLmgiCiAjaW5jbHVkZSAiTnVtZXJpY1N0cmluZ3MuaCIKICNpbmNs
dWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVDYWNoZS5oIgotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCiAjaW5jbHVkZSAiVGVtcGxhdGVS
ZWdpc3RyeUtleVRhYmxlLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUg
IlZNVHJhcHMuaCIKQEAgLTEwOCw5ICsxMDUsMTMgQEAgY2xhc3MgSGVhcFByb2ZpbGVyOwogY2xh
c3MgSWRlbnRpZmllcjsKIGNsYXNzIEludGVycHJldGVyOwogY2xhc3MgSlNDdXN0b21HZXR0ZXJT
ZXR0ZXJGdW5jdGlvbjsKK2NsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOwog
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIEpTUnVuTG9vcFRp
bWVyOworY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTsKK2NsYXNz
IEpTU3RyaW5nSGVhcENlbGxUeXBlOworY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZTsKIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7CkBAIC0yOTAsOSArMjkxLDE5IEBA
IHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3I+IGZhc3RNYWxsb2NBbGxvY2F0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdl
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3I7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4ganNWYWx1ZUdp
Z2FjYWdlQWxsb2NhdG9yOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBDZWxsVHlwZT4gYXV4
aWxpYXJ5SGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwQ2VsbFR5cGU+IGNl
bGxIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBDZWxsVHlwZT4gZGVzdHJ1
Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNTdHJpbmdIZWFw
Q2VsbFR5cGU+IHN0cmluZ0hlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU+IGRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxs
VHlwZT4gc2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU7CisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTsKKyNlbmRpZgogICAg
IAotICAgIFN1YnNwYWNlIHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIFR5cGVk
IGFycmF5cywgc3RyaW5ncywgYml0dmVjdG9ycywgZXRjIGdvIGhlcmUuCi0gICAgU3Vic3BhY2Ug
anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIEJ1dHRlcmZsaWVzLCBhcnJheXMgb2Yg
SlNWYWx1ZXMsIGV0YyBnbyBoZXJlLgorICAgIENvbXBsZXRlU3Vic3BhY2UgcHJpbWl0aXZlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gVHlwZWQgYXJyYXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3Jz
LCBldGMgZ28gaGVyZS4KKyAgICBDb21wbGV0ZVN1YnNwYWNlIGpzVmFsdWVHaWdhY2FnZUF1eGls
aWFyeVNwYWNlOyAvLyBCdXR0ZXJmbGllcywgYXJyYXlzIG9mIEpTVmFsdWVzLCBldGMgZ28gaGVy
ZS4KIAogICAgIC8vIFdlIG1ha2UgY3Jvc3MtY3V0dGluZyBhc3N1bXB0aW9ucyBhYm91dCB0eXBl
ZCBhcnJheXMgYmVpbmcgaW4gdGhlIHByaW1pdGl2ZSBHaWdhY2FnZSBhbmQgYnV0dGVyZmxpZXMK
ICAgICAvLyBiZWluZyBpbiB0aGUgSlNWYWx1ZSBnaWdhY2FnZS4gRm9yIHNvbWUgdHlwZXMsIGl0
J3Mgc3VwZXIgb2J2aW91cyB3aGVyZSB0aGV5IHNob3VsZCBnbywgYW5kIHNvIHdlCkBAIC0zMDAs
NyArMzExLDcgQEAgcHVibGljOgogICAgIC8vIGNvbnN0YW50IHNvbWV3aGVyZS4KICAgICAvLyBG
SVhNRTogTWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIGlmIGV2ZXJ5b25lIGFic3RyYWN0ZWQgdGhp
cz8KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjQ4
Ci0gICAgQUxXQVlTX0lOTElORSBTdWJzcGFjZSYgZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShHaWdh
Y2FnZTo6S2luZCBraW5kKQorICAgIEFMV0FZU19JTkxJTkUgQ29tcGxldGVTdWJzcGFjZSYgZ2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZShHaWdhY2FnZTo6S2luZCBraW5kKQogICAgIHsKICAgICAgICAg
c3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgR2lnYWNhZ2U6OlByaW1pdGl2ZToKQEAgLTMx
NSwxNiArMzI2LDIzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgLy8gV2hlbmV2ZXIgcG9z
c2libGUsIHVzZSBzdWJzcGFjZUZvcjxDZWxsVHlwZT4odm0pIHRvIGdldCBvbmUgb2YgdGhlc2Ug
c3Vic3BhY2VzLgotICAgIFN1YnNwYWNlIGNlbGxTcGFjZTsKLSAgICBTdWJzcGFjZSBqc1ZhbHVl
R2lnYWNhZ2VDZWxsU3BhY2U7Ci0gICAgU3Vic3BhY2UgZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlOwot
ICAgIEpTU3RyaW5nU3Vic3BhY2Ugc3RyaW5nU3BhY2U7Ci0gICAgSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZSBkZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKLSAgICBKU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlOwotICAgIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNw
YWNlOworICAgIENvbXBsZXRlU3Vic3BhY2UgY2VsbFNwYWNlOworICAgIENvbXBsZXRlU3Vic3Bh
Y2UganNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2UgZGVzdHJ1
Y3RpYmxlQ2VsbFNwYWNlOworICAgIENvbXBsZXRlU3Vic3BhY2Ugc3RyaW5nU3BhY2U7CisgICAg
Q29tcGxldGVTdWJzcGFjZSBkZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKKyAgICBDb21wbGV0ZVN1
YnNwYWNlIGVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlOworICAgIENvbXBsZXRl
U3Vic3BhY2Ugc2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZTsKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi0gICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlIHdlYkFzc2VtYmx5Q29k
ZUJsb2NrU3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSB3ZWJBc3NlbWJseUNvZGVCbG9ja1Nw
YWNlOwogI2VuZGlmCisgICAgCisgICAgSXNvU3Vic3BhY2UgbmF0aXZlRXhlY3V0YWJsZVNwYWNl
OworICAgIElzb1N1YnNwYWNlIGRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vi
c3BhY2UgaW5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIGZ1bmN0
aW9uRXhlY3V0YWJsZVNwYWNlOworICAgIElzb1N1YnNwYWNlIG1vZHVsZVByb2dyYW1FeGVjdXRh
YmxlU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZTsKIAogICAg
IFZNVHlwZSB2bVR5cGU7CiAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAg
c3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENvbXBsZXRl
U3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIHJldHVybiAmdm0u
d2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2KQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOjIy
NDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K25hbWVzcGFjZSB7CisKK3N0cnVjdCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2
b2lkIG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz46OnZhbHVl
LCAiT3RoZXJ3aXNlLCB0aGlzIGNvZGUgd291bGQgbm90IGJlIGNvcnJlY3QuIik7CisgICAgICAg
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxs
KTsKKyAgICB9Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlOjpKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisg
ICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1
Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCit7Cit9CisKK0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCit7
Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChN
YXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBo
YW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkp
OworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYg
dm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcAkocmV2aXNpb24gMjI0NTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
a0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE0ICsyNCwxMyBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBl
LmgiCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZEJs
b2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtNDcsMjEgKzQ2LDIxIEBAIHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQogCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFs
aWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhl
YXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2Vs
bCksIGFsbG9jYXRvcikKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFsbG9j
YXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9
CiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6fkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZSgpCitKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOjp+SlNXZWJB
c3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5k
bGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlz
dCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZy
ZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nSGVh
cENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit2b2lk
IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0Nl
bGwqIGNlbGwpCiB7CiAgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZS5oOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsK
KyAgICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKTsKKyAgICAKKyAg
ICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJy
aWRlOworICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNCBAQAogCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJIZWFwQ2Vs
bFR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlIDogcHVibGljIEhlYXBDZWxsVHlwZSB7CiBwdWJsaWM6Ci0gICAgSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IqKTsKLSAgICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vi
c3BhY2UoKTsKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCk7CisgICAg
dmlydHVhbCB+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSgpOwogICAgIAogICAg
IHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3Bh
Y2VJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgewotCi1zdHJ1Y3Qg
RGVzdHJveUZ1bmMgewotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcGVyYXRvcigpKFZNJiwgSlND
ZWxsKiBjZWxsKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zp
bmFsPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+Ojp2YWx1ZSwgIk90aGVyd2lzZSwgdGhpcyBjb2Rl
IHdvdWxkIG5vdCBiZSBjb3JyZWN0LiIpOwotICAgICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
OjppbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3koY2VsbCk7Ci0gICAgfQotfTsKLQotfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCi0KLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6SlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVh
cCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxs
KSwgYWxsb2NhdG9yKQotewotfQotCi1KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKQotewotfQotCi12b2lkIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFu
ZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCi17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2lu
Z1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0g
ICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCShub25leGlzdGVudCkKQEAgLTEsNDUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIlN1YnNw
YWNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgewotcHVibGljOgotICAgIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKik7Ci0gICAgdmlydHVhbCB+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCk7Ci0g
ICAgCi0gICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3Qq
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNZW1vcnkuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAgICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3Io
Vk0mIHZtKQogICAgIHsKICAgICAgICAgLy8gV2UgaG9sZCBvbnRvIGEgbG90IG9mIG1lbW9yeSwg
c28gaXQgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UgdG8gYmUgc3dlcHQgZWFnZXJseS4KICAgICAgICAg
cmV0dXJuICZ2bS5lYWdlcmx5U3dlcHREZXN0cnVjdGlibGVPYmplY3RTcGFjZTsKSW5kZXg6IFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMjUwMzMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI4IEBACisyMDE3LTExLTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgR0Mgc2hvdWxkIHN1cHBvcnQgaXNvaGVhcHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTI4OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgT25lIG9mIG15IGZhdm9y
aXRlIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgR0MgaXMgYSBzaW5nbHktbGlua2VkIGxpc3QgdGhh
dCBrbm93cyBpdHMgdGFpbCwgc28gdGhhdAorICAgICAgICB0aGluZ3MgZ2V0IGFkZGVkIHRvIGl0
IGF0IHRoZSBlbmQgcmF0aGVyIHRoYXQgYXQgdGhlIGJlZ2lubmluZy4gSW4gdGhpcyBwYXRjaCwg
SSB1c2UgdGhpcyB0byBwdXQKKyAgICAgICAgdGhlIHNhbWUgbm9kZSBvbiBtdWx0aXBsZSBsaXN0
cywgd2hpY2ggb3VyIGV4aXN0aW5nIGxpbmtlZCBsaXN0IHRlbXBsYXRlcyBhbHNvIGRvbid0IHN1
cHBvcnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYSBuZXcgbGlua2VkIGxpc3QgdGhh
dCBkb2VzIHRob3NlIHRoaW5nczoKKyAgICAgICAgCisgICAgICAgIC0gSXQgc3VwcG9ydHMgYXBw
ZW5kKCkuIEl0IGNvdWxkIGFsc28gc3VwcG9ydCBwcmVwZW5kKCksIGJ1dCBjdXJyZW50bHkgdGhl
cmUgaXMgbm8gbmVlZCBmb3IgaXQuCisgICAgICAgIAorICAgICAgICAtIEl0IHN1cHBvcnRzIG5v
ZGVzIHRoYXQgYXJlIG9uIG11bHRpcGxlIGxpc3RzLiBUaGUgR0MgdXNlcyBzdGQ6Om1lbV9mbigp
IHRvIGNyZWF0ZSBhIGxhbWJkYSB0aGF0IHRoZQorICAgICAgICAgIGxpc3QgdXNlcyB0byBzZXQg
bmV4dC4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHd0Zi9TaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwuaDogQWRkZWQuCisgICAgICAgIChXVEY6
OlNpbmdseUxpbmtlZExpc3RXaXRoVGFpbDo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXVEY6
OlNpbmdseUxpbmtlZExpc3RXaXRoVGFpbDo6YXBwZW5kKToKKyAgICAgICAgKFdURjo6U2luZ2x5
TGlua2VkTGlzdFdpdGhUYWlsOjpmaXJzdCBjb25zdCk6CisgICAgICAgIChXVEY6OlNpbmdseUxp
bmtlZExpc3RXaXRoVGFpbDo6bGFzdCBjb25zdCk6CisKIDIwMTctMTEtMTggIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW1dURl0gVXNlIHN5c3RlbSBl
bmRpYW5lc3MgaW5mb3JtYXRpb24gaW5zdGVhZCBvZiByZWx5aW5nIENQVSBpbmZvcm1hdGlvbgpJ
bmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MjQ5MzUpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDcgQEAKIAkJMEY0M0Q4RjAxREI1QUREQzAwMTA4RkI2
IC8qIEF1dG9tYXRpY1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
dXRvbWF0aWNUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDIx
QkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1
NzA0NDFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCdWJibGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNEQ4QzcxMUZDMUU3Q0UwMDFEMzJBQyAvKiBTaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2luZ2x5TGlua2VkTGlzdFdpdGhUYWls
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJGMTY1MUYyMzE3ODMwMDI5RDkx
RCAvKiBOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0dXJhbExvb3BzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJGMTc0MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdh
Y2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHaWdhY2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNUJGMTc1MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHaWdhY2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
OTgyLDYgKzk4Myw3IEBACiAJCQkJQThBNDczMEExNTFBODI1QjAwNDEyM0ZGIC8qIFNpbXBsZVN0
YXRzLmggKi8sCiAJCQkJNzk1MjEyMDIxRjQyNTg4ODAwQkQ2NDIxIC8qIFNpbmdsZVJvb3RHcmFw
aC5oICovLAogCQkJCUE4QTQ3MzBCMTUxQTgyNUIwMDQxMjNGRiAvKiBTaW5nbHlMaW5rZWRMaXN0
LmggKi8sCisJCQkJMEY0RDhDNzExRkMxRTdDRTAwMUQzMkFDIC8qIFNpbmdseUxpbmtlZExpc3RX
aXRoVGFpbC5oICovLAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0
ZXJIYXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFj
dGVySGFzaC5oICovLAogCQkJCUE4QTQ3MzBDMTUxQTgyNUIwMDQxMjNGRiAvKiBTaXplTGltaXRz
LmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NpbmdseUxpbmtlZExpc3RXaXRoVGFpbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NpbmdseUxpbmtlZExpc3RXaXRoVGFpbC5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1NpbmdseUxpbmtlZExpc3RXaXRoVGFp
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBTaW5nbHlMaW5rZWRMaXN0V2l0
aFRhaWwgeworcHVibGljOgorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2Zp
cnN0OyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2V0TmV4dEZ1bmM+CisgICAgdm9p
ZCBhcHBlbmQoU2V0TmV4dEZ1bmMmJiBzZXROZXh0RnVuYywgVCogbm9kZSkKKyAgICB7CisgICAg
ICAgIGlmICghbV9maXJzdCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbGFzdCk7
CisgICAgICAgICAgICBtX2ZpcnN0ID0gbm9kZTsKKyAgICAgICAgICAgIG1fbGFzdCA9IG5vZGU7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6
Zm9yd2FyZDxTZXROZXh0RnVuYz4oc2V0TmV4dEZ1bmMpKG1fbGFzdCwgbm9kZSk7CisgICAgICAg
IG1fbGFzdCA9IG5vZGU7CisgICAgfQorICAgIAorICAgIFQqIGZpcnN0KCkgY29uc3QgeyByZXR1
cm4gbV9maXJzdDsgfQorICAgIFQqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3Q7IH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgVCogbV9maXJzdCB7IG51bGxwdHIgfTsKKyAgICBUKiBtX2xhc3Qg
eyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTaW5n
bHlMaW5rZWRMaXN0V2l0aFRhaWw7CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDkzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4
IEBACisyMDE3LTExLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgR0Mgc2hvdWxkIHN1cHBvcnQgaXNvaGVhcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTI4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlv
ci4KKyAgICAgICAgCisgICAgICAgIEFkb3B0aW5nIGNoYW5nZXMgaW4gSlNDIFN1YnNwYWNlIEFQ
SS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpvdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6Z2xvYmFs
T2JqZWN0T3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdyYXBwZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpKU1ZNQ2xpZW50RGF0
YSk6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNWTUNsaWVudERhdGE6Om91dHB1dENvbnN0cmFpbnRTcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6Z2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWlu
dFNwYWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToK
KyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKwogMjAxNy0xMS0xNiAgQW5keSBFc3RlcyAgPGFl
c3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW1BheW1lbnQgUmVxdWVzdF0gVXBkYXRlIGZlYXR1
cmUgc3RhdHVzIHRvICJTdXBwb3J0ZWQgSW4gUHJldmlldyIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdt
YSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNlCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIu
Y3BwCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMTIgQEAgSlNET01XaW5k
b3cmIEpTRE9NT2JqZWN0Ojpkb21XaW5kb3coKSBjbwogICAgIHJldHVybiAqZG9tV2luZG93Owog
fQogCi1TdWJzcGFjZSogb3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKFZNJiB2bSkKK0NvbXBs
ZXRlU3Vic3BhY2UqIG91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvcihWTSYgdm0pCiB7CiAgICAg
cmV0dXJuICZzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5vdXRw
dXRDb25zdHJhaW50U3BhY2UoKTsKIH0KIAotU3Vic3BhY2UqIGdsb2JhbE9iamVjdE91dHB1dENv
bnN0cmFpbnRTdWJzcGFjZUZvcihWTSYgdm0pCitDb21wbGV0ZVN1YnNwYWNlKiBnbG9iYWxPYmpl
Y3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoVk0mIHZtKQogewogICAgIHJldHVybiAmc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+Z2xvYmFsT2JqZWN0T3V0
cHV0Q29uc3RyYWludFNwYWNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdyYXBwZXIuaAkocmV2aXNpb24gMjI0OTM1KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDggQEAg
cHJvdGVjdGVkOgogICAgIH0KIH07CiAKLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3Vic3BhY2UqIG91
dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvcihKU0M6OlZNJik7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6
OlN1YnNwYWNlKiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlNDOjpW
TSYpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpDb21wbGV0ZVN1YnNwYWNlKiBvdXRwdXRDb25zdHJh
aW50U3Vic3BhY2VGb3IoSlNDOjpWTSYpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpDb21wbGV0ZVN1
YnNwYWNlKiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlNDOjpWTSYp
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJbXBsZW1lbnRhdGlvbkNsYXNzPiBjbGFzcyBKU0RPTVdy
YXBwZXIgOiBwdWJsaWMgSlNET01PYmplY3QgewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAJKHJldmlzaW9u
IDIyNDkzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8aGVhcC9N
YXJrZWRCbG9ja0lubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1N1YnNwYWNlSW5saW5lcy5oPgog
I2luY2x1ZGUgPGhlYXAvVmlzaXRpbmdUaW1lb3V0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVk0u
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC00NCw4ICs0Niw4IEBAIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiBKU1ZNQ2xpZW50RGF0YTo6SlNWTUNsaWVudERhdGEoVk0mIHZtKQog
ICAgIDogbV9idWlsdGluRnVuY3Rpb25zKHZtKQogICAgICwgbV9idWlsdGluTmFtZXMoJnZtKQot
ICAgICwgbV9vdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgV3JhcHBlciB3LyBPdXRwdXQg
Q29uc3RyYWludCIsIHZtLmhlYXAsIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCi0gICAg
LCBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2Jq
ZWN0IHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uZmFzdE1hbGxvY0FsbG9jYXRv
ci5nZXQoKSkKKyAgICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIg
dy8gT3V0cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBtX2ds
b2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBHbG9iYWwgT2JqZWN0IHcv
IE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uc2VnbWVudGVkVmFyaWFibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuZ2V0KCksIHZtLmZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmgJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBwdWJs
aWM6CiAgICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyYgYnVpbHRpbk5hbWVzKCkgeyByZXR1cm4gbV9i
dWlsdGluTmFtZXM7IH0KICAgICBKU0J1aWx0aW5GdW5jdGlvbnMmIGJ1aWx0aW5GdW5jdGlvbnMo
KSB7IHJldHVybiBtX2J1aWx0aW5GdW5jdGlvbnM7IH0KICAgICAKLSAgICBKU0M6OlN1YnNwYWNl
JiBvdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBtX291dHB1dENvbnN0cmFpbnRTcGFj
ZTsgfQotICAgIEpTQzo6U3Vic3BhY2UmIGdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFj
ZSgpIHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlOyB9CisgICAg
SlNDOjpDb21wbGV0ZVN1YnNwYWNlJiBvdXRwdXRDb25zdHJhaW50U3BhY2UoKSB7IHJldHVybiBt
X291dHB1dENvbnN0cmFpbnRTcGFjZTsgfQorICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSYgZ2xv
YmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlKCkgeyByZXR1cm4gbV9nbG9iYWxPYmplY3RP
dXRwdXRDb25zdHJhaW50U3BhY2U7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaE91dHB1dENvbnN0cmFpbnRTcGFjZShjb25zdCBGdW5jJiBmdW5j
KQpAQCAtNzYsOCArNzYsOCBAQCBwcml2YXRlOgogICAgIEpTQnVpbHRpbkZ1bmN0aW9ucyBtX2J1
aWx0aW5GdW5jdGlvbnM7CiAgICAgV2ViQ29yZUJ1aWx0aW5OYW1lcyBtX2J1aWx0aW5OYW1lczsK
ICAgICAKLSAgICBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UgbV9vdXRwdXRDb25z
dHJhaW50U3BhY2U7Ci0gICAgSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2Ug
bV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2U7CisgICAgSlNDOjpDb21wbGV0ZVN1
YnNwYWNlIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlOworICAgIEpTQzo6Q29tcGxldGVTdWJzcGFj
ZSBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMjQ5MzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
MjczNSw3ICsyNzM1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICAjIHRoaXMg
anVzdCBjYWxscyB2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbiwgeW91IHVzdWFsbHkgZG9uJ3QgaGF2
ZSB0byB3b3JyeSBhYm91dCB0aGlzLgogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFpbnRzKEpTQ2VsbCosIEpTQzo6U2xv
dFZpc2l0b3ImKTtcbiIpOwogICAgICAgICAgICAgbXkgJHN1YnNwYWNlRnVuYyA9IElzRE9NR2xv
YmFsT2JqZWN0KCRpbnRlcmZhY2UpID8gImdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTdWJz
cGFjZUZvciIgOiAib3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yIjsKLSAgICAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0YXRpYyBKU0M6OlN1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkgeyByZXR1cm4gJHN1YnNwYWNlRnVuYyh2
bSk7IH1cbiIpOworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RhdGljIEpTQzo6Q29tcGxldGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pIHsgcmV0dXJuICRzdWJzcGFjZUZ1bmModm0pOyB9XG4iKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327580</attachid>
            <date>2017-11-25 18:37:03 -0800</date>
            <delta_ts>2017-11-28 16:15:33 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>217186</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxNy0xMS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBzdXBwb3J0IGlzb2hlYXBzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZXhwYW5kcyB0aGUgcG93ZXIgb2YgdGhl
IFN1YnNwYWNlIEFQSSBpbiBKU0M6CisgICAgICAgIAorICAgICAgICAtIEV2ZXJ5dGhpbmcgYXNz
b2NpYXRlZCB3aXRoIGRlc2NyaWJpbmcgdGhlIHR5cGVzIG9mIG9iamVjdHMgaXMgbm93IHBhcnQg
b2YgdGhlIEhlYXBDZWxsVHlwZSBjbGFzcy4KKyAgICAgICAgICBXZSBoYXZlIGRpZmZlcmVudCBI
ZWFwQ2VsbFR5cGVzIGZvciBkaWZmZXJlbnQgZGVzdHJ1Y3Rpb24gc3RyYXRlZ2llcy4gQW55IFN1
YnNwYWNlIGNhbiB1c2UgYW55CisgICAgICAgICAgSGVhcENlbGxUeXBlOyB0aGVzZSBhcmUgb3J0
aG9nb25hbCB0aGluZ3MuCisgICAgICAgIAorICAgICAgICAtIFRoZXJlIGFyZSBub3cgdHdvIHZh
cmlhbnRzIG9mIFN1YnNwYWNlOiBDb21wbGV0ZVN1YnNwYWNlLCB3aGljaCBjYW4gYWxsb2NhdGUg
YW55IHNpemUgb2JqZWN0cyB1c2luZworICAgICAgICAgIGFueSBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yOyBhbmQgSXNvU3Vic3BhY2UsIHdoaWNoIGNhbiBhbGxvY2F0ZSBqdXN0IG9uZSBzaXplIG9m
IG9iamVjdCBhbmQgdXNlcyBhCisgICAgICAgICAgc3BlY2lhbCB2aXJ0dWFsIG1lbW9yeSBwb29s
IGZvciB0aGF0IHB1cnBvc2UuIExpa2UgYm1hbGxvYydzIElzb0hlYXAsIElzb1N1YnNwYWNlIGhv
YXJkcyB2aXJ0dWFsCisgICAgICAgICAgcGFnZXMgYnV0IHJlbGVhc2VzIHRoZSBwaHlzaWNhbCBw
YWdlcyBhcyBwYXJ0IG9mIHRoZSByZXNwZWN0aXZlIGFsbG9jYXRvcidzIHNjYXZlbmdpbmcgcG9s
aWN5CisgICAgICAgICAgKHRoZSBTY2F2ZW5nZXIgaW4gYm1hbGxvYyBmb3IgSXNvSGVhcCBhbmQg
dGhlIGluY3JlbWVudGFsIHN3ZWVwIGFuZCBmdWxsIHN3ZWVwIGluIFJpcHRpZGUgZm9yCisgICAg
ICAgICAgSXNvU3Vic3BhY2UpLgorICAgICAgICAKKyAgICAgICAgU28gZmFyLCB0aGlzIHBhdGNo
IGp1c3QgcHV0cyBzdWJ0eXBlcyBvZiBFeGVjdXRhYmxlQmFzZSBpbiBJc29TdWJzcGFjZXMuIElm
IGl0IHdvcmtzLCB3ZSBjYW4gdXNlIGl0CisgICAgICAgIGZvciBtb3JlIHRoaW5ncy4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUv
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjppbml0aWFsaXplUHJvZmlsZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEFsbG9jYXRlUmF3T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoU2l6ZUltcGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjphbGxv
Y2F0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmFsbG9j
YXRvckZvclNpemUpOgorICAgICAgICAqIGhlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnJlZ2lzdGVyQWxsb2NhdG9y
KToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6cmVnaXN0ZXJTdWJzcGFj
ZSk6CisgICAgICAgICogaGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg6CisgICAgICAgIChK
U0M6OkFsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmZpcnN0QWxsb2NhdG9yIGNvbnN0KToKKyAgICAg
ICAgKiBoZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFw
L0NvbXBsZXRlU3Vic3BhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJz
cGFjZTo6Q29tcGxldGVTdWJzcGFjZSk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6
On5Db21wbGV0ZVN1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxs
b2NhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUpOgor
ICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgorICAg
ICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KToKKyAgICAgICAg
KEpTQzo6Q29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVTbG93KToKKyAgICAgICAgKEpTQzo6Q29t
cGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KToKKyAgICAgICAgKiBoZWFwL0NvbXBsZXRl
U3Vic3BhY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6Om9mZnNl
dE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXApOgorICAgICAgICAoSlNDOjpDb21wbGV0ZVN1YnNwYWNl
OjphbGxvY2F0b3JGb3JTaXplU3RlcCk6CisgICAgICAgIChKU0M6OkNvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvck5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAvSGVhcENlbGxUeXBlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6SGVhcENlbGxUeXBlKToKKyAg
ICAgICAgKEpTQzo6SGVhcENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpTQzo6
SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgIChKU0M6OkhlYXBDZWxsVHlwZTo6
ZGVzdHJveSk6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbFR5cGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkhlYXBDZWxsVHlwZTo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICogaGVhcC9J
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oklzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3I6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDOjpJc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+SXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcik6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlQWxpZ25lZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0
b3I6OmZyZWVBbGlnbmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SXNvQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvSXNvU3Vic3BhY2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SXNvU3Vic3BhY2U6Oklzb1N1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6
SXNvU3Vic3BhY2U6On5Jc29TdWJzcGFjZSk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjph
bGxvY2F0b3JGb3IpOgorICAgICAgICAoSlNDOjpJc29TdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9u
VmlydHVhbCk6CisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0ZSk6CisgICAgICAg
IChKU0M6Oklzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwpOgorICAgICAgICAqIGhlYXAv
SXNvU3Vic3BhY2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oklzb1N1YnNwYWNlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6
Ok1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjpzZXRTdWJzcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGVTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVTbG93Q2FzZUltcGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6bmV4dEFsbG9jYXRvcklu
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6c2V0TmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik6CisgICAgICAg
ICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAgICAg
ICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRT
cGFjZTo6YWRkTWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6
CisgICAgICAgICogaGVhcC9TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpT
dWJzcGFjZSk6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjppbml0aWFsaXplKToKKyAgICAgICAg
KEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmRl
c3Ryb3kpOgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6cHJlcGFyZUZvckFsbG9jYXRpb24pOgor
ICAgICAgICAoSlNDOjpTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNwYWNlOjphbGxvY2F0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjp0cnlBbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3Vic3BhY2U6OmFsbG9jYXRlU2xvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN1YnNw
YWNlOjp0cnlBbGxvY2F0ZVNsb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6
ZGlkQWxsb2NhdGUpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU3Vic3BhY2UuaDoKKyAgICAg
ICAgKEpTQzo6U3Vic3BhY2U6OmhlYXBDZWxsVHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6OlN1
YnNwYWNlOjpuZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgY29uc3QpOgorICAg
ICAgICAoSlNDOjpTdWJzcGFjZTo6c2V0TmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKToKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0
ZXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6YWxsb2NhdG9yRm9yU2l6ZVN0
ZXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdWJzcGFjZTo6dHJ5QWxsb2NhdG9yRm9yKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmFsbG9jYXRvckZvcik6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRBbGxvY2F0ZUpTT2JqZWN0V2l0aEtub3duU2l6ZSk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZCk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25ld19vYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnRyeUNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0Fy
cmF5UmlnaHQpOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyk6CisgICAgICAgICogcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1lbnRzOjpz
dWJzcGFjZUZvcik6CisgICAgICAgICogcnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGVCYXNlLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpzdWJzcGFjZUZv
cik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmluaXRNb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDoKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFibGUuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3RlZCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVj
dGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQpOgorICAgICAgICAqIHJ1bnRpbWUvSlND
ZWxsLmg6CisgICAgICAgIChKU0M6OnN1YnNwYWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pT
Q2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzdWJzcGFjZUZvcik6CisgICAg
ICAgIChKU0M6OnRyeUFsbG9jYXRlQ2VsbEhlbHBlcik6CisgICAgICAgIChKU0M6OmFsbG9jYXRl
Q2VsbCk6CisgICAgICAgIChKU0M6OnRyeUFsbG9jYXRlQ2VsbCk6CisgICAgICAgICogcnVudGlt
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdDo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcC4KKyAgICAgICAgKEpTQzo6SlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlKToKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6
On5KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgIChKU0M6OkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgIChKU0M6
OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2U6On5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2UuaC4KKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaDoKKyAgICAgICAgKEpTQzo6SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN1YnNw
YWNlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6c3Vic3BhY2VGb3IpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHAuCisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2Vs
bFR5cGUpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxU
eXBlOjp+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSk6CisgICAgICAgIChK
U0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKToK
KyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdFN1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5oLgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnN1YnNwYWNlRm9yKToKKyAg
ICAgICAgKiBydW50aW1lL0pTU3RyaW5nSGVhcENlbGxUeXBlLmNwcDogQ29waWVkIGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAuCisgICAgICAg
IChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjpKU1N0cmluZ0hlYXBDZWxsVHlwZSk6CisgICAg
ICAgIChKU0M6OkpTU3RyaW5nSGVhcENlbGxUeXBlOjp+SlNTdHJpbmdIZWFwQ2VsbFR5cGUpOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXApOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZ0hlYXBDZWxsVHlwZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpT
U3RyaW5nU3Vic3BhY2U6OkpTU3RyaW5nU3Vic3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICogcnVu
dGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmguCisgICAgICAgICogcnVudGltZS9KU1N0
cmluZ1N1YnNwYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nU3Vi
c3BhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL01vZHVsZVByb2dyYW1FeGVjdXRh
YmxlLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisgICAgICAgICog
cnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmg6CisgICAg
ICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6c3Vic3BhY2VGb3IpOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
aDoKKyAgICAgICAgKEpTQzo6Vk06OmdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UpOgorICAgICAgICAq
IHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAu
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6OkpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxs
VHlwZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6
OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBD
ZWxsVHlwZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZTo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5oLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1l
bW9yeS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5OjpzdWJzcGFjZUZvcik6
CisKIDIwMTYtMDgtMDUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IEZpeCBzb21lIG1pbm9yIHByb2JsZW1zIGluIHRoZSBTdHJpbmdJbXBsIGhlYWRlcgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00NzAsNiArNDcwLDcg
QEAgaGVhcC9DZWxsQ29udGFpbmVyLmNwcAogaGVhcC9Db2RlQmxvY2tTZXQuY3BwCiBoZWFwL0Nv
bGxlY3Rpb25TY29wZS5jcHAKIGhlYXAvQ29sbGVjdG9yUGhhc2UuY3BwCitoZWFwL0NvbXBsZXRl
U3Vic3BhY2UuY3BwCiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAogaGVhcC9EZWZlckdDLmNw
cAogaGVhcC9EZXN0cnVjdGlvbk1vZGUuY3BwCkBAIC00ODYsMTIgKzQ4NywxNSBAQCBoZWFwL0hh
bmRsZVNldC5jcHAKIGhlYXAvSGFuZGxlU3RhY2suY3BwCiBoZWFwL0hlYXAuY3BwCiBoZWFwL0hl
YXBDZWxsLmNwcAoraGVhcC9IZWFwQ2VsbFR5cGUuY3BwCiBoZWFwL0hlYXBGaW5hbGl6ZXJDYWxs
YmFjay5jcHAKIGhlYXAvSGVhcEhlbHBlclBvb2wuY3BwCiBoZWFwL0hlYXBQcm9maWxlci5jcHAK
IGhlYXAvSGVhcFNuYXBzaG90LmNwcAogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAogaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCitoZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
Y3BwCitoZWFwL0lzb1N1YnNwYWNlLmNwcAogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKIGhl
YXAvTGFyZ2VBbGxvY2F0aW9uLmNwcAogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBAIC03
NzIsNyArNzc2LDcgQEAgcnVudGltZS9KU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcAog
cnVudGltZS9KU0RhdGFWaWV3LmNwcAogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAog
cnVudGltZS9KU0RhdGVNYXRoLmNwcAotcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlLmNwcAorcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAKIHJ1
bnRpbWUvSlNGaXhlZEFycmF5LmNwcAogcnVudGltZS9KU0Z1bmN0aW9uLmNwcAogcnVudGltZS9K
U0dlbmVyYXRvckZ1bmN0aW9uLmNwcApAQCAtODA3LDE0ICs4MTEsMTQgQEAgcnVudGltZS9KU1Nj
b3BlLmNwcAogcnVudGltZS9KU1NjcmlwdEZldGNoZXIuY3BwCiBydW50aW1lL0pTU2NyaXB0RmV0
Y2hQYXJhbWV0ZXJzLmNwcAogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAot
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCitydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCiBydW50aW1lL0pTU2V0LmNw
cAogcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAogcnVudGltZS9KU1NvdXJjZUNvZGUuY3BwCiBy
dW50aW1lL0pTU3RyaW5nLmNwcAogcnVudGltZS9KU1N0cmluZ0l0ZXJhdG9yLmNwcAogcnVudGlt
ZS9KU1N0cmluZ0pvaW5lci5jcHAKLXJ1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAKK3J1bnRp
bWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwCiBydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKIHJ1bnRpbWUvSlNUeXBlZEFy
cmF5Q29uc3RydWN0b3JzLmNwcApAQCAtOTcxLDcgKzk3NSw3IEBAIHdhc20vanMvSlNUb1dhc20u
Y3BwCiB3YXNtL2pzL0pTVG9XYXNtLmgKIHdhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKIHdhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5jcHAKLXdhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlLmNwcAord2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxU
eXBlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlMaW5rRXJyb3Iu
Y3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI1MTQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxMyw3ICszMTMsNyBAQAogCQkwRjRDOTE2NjFD
MjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRDOTE2NTFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmln
aW5EdW1wLmggKi87IH07CiAJCTBGNERFMUNGMUM0QzFCNTQwMDRENkMxMSAvKiBBaXJGaXhPYnZp
b3VzU3BpbGxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjRERTFDRDFDNEMxQjU0MDA0RDZDMTEgLyogQWlyRml4T2J2aW91c1NwaWxscy5oICovOyB9
OwogCQkwRjRGMjlFMDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNEYyOURFMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3Vu
dEVzdGltYXRpb25QaGFzZS5oICovOyB9OwotCQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyog
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0RjgyODgxRTJGRkRFMDAwNzUxODRDIC8qIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0RjgyOEMxRTMxQjk3NjAwNzUxODRD
IC8qIFN0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGODI4QTFFMzFCOTcxMDA3NTE4NEMg
LyogU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLzsgfTsKIAkJMEY1MEFG
M0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MEFGM0IxOTNFOEIzOTAw
Njc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovOyB9OwogCQkwRjU1MTNBNjFE
NUE2ODJDMDBDMzJCRDggLyogRnJlZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTUxM0E1MUQ1QTY4MkEwMEMzMkJEOCAvKiBGcmVlTGlzdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MDAs
OCArNDAwLDggQEAKIAkJMEY3REYxMzUxRTI5NzBEQzAwOTU5NTFCIC8qIE1hcmtlZFNwYWNlSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
REYxMzAxRTI5NzBENTAwOTU5NTFCIC8qIE1hcmtlZFNwYWNlSW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0RGMTM3MUUyOTcwRTEw
MDk1OTUxQiAvKiBTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3REYxMzIxRTI5NzBENTAwOTU5NTFCIC8qIFN1YnNwYWNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3REYxMzgxRTI5
NzBFNDAwOTU5NTFCIC8qIFN1YnNwYWNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYxMzMxRTI5NzBENTAwOTU5NTFCIC8qIFN1YnNw
YWNlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGN0RG
MTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIg
LyogSlNTdHJpbmdTdWJzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGN0RGMTNDMUUyOTcxMTMwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJs
ZU9iamVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY3REYxM0YxRTJBRkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nSGVhcENlbGxU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdE
RjEzRTFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdERjE0NjFFMkJFRjZB
MDA5NTk1MUIgLyogTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3REYxNDUxRTJCRUY2ODAwOTU5NTFCIC8qIE1h
cmtlZEFsbG9jYXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjdGOTg4QzFEOTU5NkM4MDBGNEYxMkUgLyogREZHU3RvcmVCYXJy
aWVyQ2x1c3RlcmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjdGOTg4QTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVyQ2x1
c3RlcmluZ1BoYXNlLmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZh
bEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTQwLDYgKzU0MCwxMSBAQAogCQkwRkRC
MkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0M4MTczREE1MUUwMDdCM0Mx
QiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJD
RTYxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi87IH07CiAJCTBGREIyQ0VBMTc0
ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFOTE3NDg5NkM3MDA3QjNDMUIgLyogQ29u
Y3VycmVudEpTTG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGRENFMTFDMUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENF
MTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTEyMjFGQUU4NThD
MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTExRjFGQUU4NTg3MDA2RjM5MDEgLyogSGVhcENlbGxUeXBl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZE
Q0UxMkExRkFGQTg1RjAwNkYzOTAxIC8qIENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRENFMTI4MUZBRkE4NTkwMDZGMzkw
MSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZEQ0UxMkQxRkFGQjRFNTAwNkYzOTAxIC8qIElzb1N1YnNwYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRDRTEy
QjFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkRDRTEzMjFGQjExREE0MDA2RjM5MDEgLyog
SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEQ0UxMzAxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAq
LzsgfTsKIAkJMEZERTg3RkMxREZFNkU1MTAwNjRDMzkwIC8qIFNwYWNlVGltZU11dGF0b3JTY2hl
ZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
REU4N0ZCMURGRTZFNTAwMDY0QzM5MCAvKiBTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmggKi87
IH07CiAJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QxMUQ5QzYwODYwMDFCOTgy
NSAvKiBCM0tpbmQuaCAqLzsgfTsKQEAgLTEwOTksNyArMTEwNCw3IEBACiAJCTc5REFFMjdBMUUw
M0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdh
c21FeGNlcHRpb25UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REZD
QkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRTBDMDAxQjRBRkI4NTAw
MDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJs
ZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJz
cGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTc5RUZENDg0MUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUVGRDQ4MjFFQkMwNDVDMDBGM0RGRUEgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxs
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5RjhGQzFGMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlGOEZD
MUQxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi87
IH07CiAJCTc5RkM4QTA4MUUzMkU5RjAwMEQ4OEYwRSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUZDOEEw
NzFFMzJFOUYwMDBEODhGMEUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCQzU0N0QzMUI2OTU5QTEw
MDk1OUI1OCAvKiBXYXNtRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV2FzbUZvcm1hdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMjcwLDgg
KzIyNzUsOCBAQAogCQkwRjRERTFEMDFDNEQ3NjRCMDA0RDZDMTEgLyogQjNPcmlnaW5EdW1wLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luRHVtcC5jcHA7
IHBhdGggPSBiMy9CM09yaWdpbkR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjRGMjlERDE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3Rp
bWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjRGODI4NTFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RjgyODYxRTJGRkREQjAwNzUxODRDIC8qIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjRGODI4OTFFMzFCOTcxMDA3NTE4NEMgLyogU3RvY2hhc3Rp
Y1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRGODI4QTFFMzFCOTcxMDA3NTE4NEMgLyogU3Rv
Y2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0
cnVjdHVyZUNsb2JiZXJTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MTMsMTAgKzI0MTgsMTAg
QEAKIAkJMEY3REYxMzExRTI5NzBENTAwOTU5NTFCIC8qIFN1YnNwYWNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN1YnNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3REYxMzIxRTI5NzBENTAwOTU5NTFCIC8qIFN1YnNwYWNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YnNwYWNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGN0RGMTMzMUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZUlubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Vic3BhY2VJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGN0RGMTM5MUUyOTcxMEUwMDk1OTUxQiAv
KiBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRjdERjEzQTFFMjk3MTBFMDA5NTk1MUIgLyogSlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGN0RGMTNEMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ1N1YnNwYWNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nU3Vic3BhY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIg
LyogSlNTdHJpbmdTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1N0cmluZ1N1YnNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0RGMTM5
MUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVj
dEhlYXBDZWxsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0RGMTNB
MUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjdERjEzRDFFMkFGQzRC
MDA5NTk1MUIgLyogSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjdERjEzRTFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFw
Q2VsbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJpbmdIZWFw
Q2VsbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3REYxNDUxRTJCRUY2
ODAwOTU5NTFCIC8qIE1hcmtlZEFsbG9jYXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjdGOTg4OTFEOTU5NkMzMDBGNEYxMkUgLyogREZHU3RvcmVCYXJyaWVy
Q2x1c3RlcmluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVC
YXJyaWVyQ2x1c3RlcmluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3Rjk4OEExRDk1OTZDMzAwRjRGMTJFIC8qIERGR1N0b3JlQmFycmllckNsdXN0ZXJpbmdQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJDbHVz
dGVyaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJDbHVzdGVyaW5nUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2NjYsNiArMjY3MSwxNSBAQAogCQkw
RkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV29ya2xpc3QuY3BwOyBwYXRoID0gZGZnL0RGR1dv
cmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTYxNzQ4MzBB
MjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1dvcmtsaXN0Lmg7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRK
U0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uY3VycmVudEpTTG9j
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5
MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG9jYXRpb25G
YWlsdXJlTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTExRjFGQUU4
NTg3MDA2RjM5MDEgLyogSGVhcENlbGxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBDZWxsVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyMDFGQUU4NTg3MDA2RjM5
MDEgLyogSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBDZWxsVHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTI3MUZBRkE4NTkwMDZGMzkw
MSAvKiBDb21wbGV0ZVN1YnNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBsZXRlU3Vi
c3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyODFGQUZBODU5
MDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV0ZVN1
YnNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRENFMTJCMUZBRkI0REUw
MDZGMzkwMSAvKiBJc29TdWJzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJc29TdWJzcGFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyQzFGQUZCNERFMDA2RjM5MDEgLyog
SXNvU3Vic3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSXNvU3Vic3BhY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRDRTEyRjFGQjExRDlEMDA2RjM5MDEgLyogSXNv
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEQ0Ux
MzAxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkREQkZCMjE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQjMxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZERTg3RjgxREZEMEM2RDAwNjRDMzkwIC8qIENlbGxDb250YWluZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2VsbENvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zNTgxLDggKzM1OTUsOCBAQAogCQk3OURGQ0JEQTFEODhDNTk2
MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIYXNPd25Qcm9wZXJ0eUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc5RUUwQkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlRW52aXJvbm1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRTFCNEFGQjg1MDAw
Mzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTc5RUZENDgxMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vi
c3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc5RUZENDgyMUVC
QzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
Lmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlFRkQ0ODExRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHA7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzlFRkQ0ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oOyBwYXRoID0ganMvSlNXZWJB
c3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1h
bEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlGOEZDMUQxQjlG
RUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7
IHBhdGggPSBkZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzlGQzhBMDcxRTMyRTlGMDAwRDg4RjBFIC8qIERGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVnaXN0
ZXJlZFN0cnVjdHVyZS5oOyBwYXRoID0gZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0ODYsNiArNTUwMCw3IEBACiAJCQkJMEZFQzND
NTAxRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJ
CTBGRUMzQzUxMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8s
CiAJCQkJMEZBNzYyMEExREI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLAor
CQkJCTBGRENFMTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAq
LywKIAkJCQkwRjk2MzAzNTFENDE5MkMzMDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5j
cHAgKi8sCiAJCQkJMEY5NjMwMzYxRDQxOTJDMzAwNTYwOUQ5IC8qIEFsbG9jYXRvckF0dHJpYnV0
ZXMuaCAqLywKIAkJCQkwRkRFODdGODFERkQwQzZEMDA2NEMzOTAgLyogQ2VsbENvbnRhaW5lci5j
cHAgKi8sCkBAIC01NTAwLDYgKzU1MTUsOCBAQAogCQkJCTBGQTc2MjAxMURCOTI0MjMwMEI3QTJG
RCAvKiBDb2xsZWN0aW9uU2NvcGUuaCAqLywKIAkJCQkwRkQwRTVFNTFFNDNEMzQ3MDAwNkFCMDgg
LyogQ29sbGVjdG9yUGhhc2UuY3BwICovLAogCQkJCTBGRDBFNUU2MUU0M0QzNDcwMDA2QUIwOCAv
KiBDb2xsZWN0b3JQaGFzZS5oICovLAorCQkJCTBGRENFMTI3MUZBRkE4NTkwMDZGMzkwMSAvKiBD
b21wbGV0ZVN1YnNwYWNlLmNwcCAqLywKKwkJCQkwRkRDRTEyODFGQUZBODU5MDA2RjM5MDEgLyog
Q29tcGxldGVTdWJzcGFjZS5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8q
IENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCiAJCQkJMEY3REYxMkYxRTI5NzBENTAwOTU5NTFCIC8q
IENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCkBAIC01NTUwLDYgKzU1NjcsOCBAQAogCQkJCURD
M0QyQjBCMUQzNDM3NkUwMEJBOTE4QyAvKiBIZWFwQ2VsbC5jcHAgKi8sCiAJCQkJREMzRDJCMDkx
RDM0MzE2MTAwQkE5MThDIC8qIEhlYXBDZWxsLmggKi8sCiAJCQkJMEYwNzBBNDQxRDU0M0E4OTAw
NkU3MjMyIC8qIEhlYXBDZWxsSW5saW5lcy5oICovLAorCQkJCTBGRENFMTIwMUZBRTg1ODcwMDZG
MzkwMSAvKiBIZWFwQ2VsbFR5cGUuY3BwICovLAorCQkJCTBGRENFMTFGMUZBRTg1ODcwMDZGMzkw
MSAvKiBIZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQkwRjBDQUVGRDFFQzREQTg1MDA5NzBEMTIgLyog
SGVhcEZpbmFsaXplckNhbGxiYWNrLmNwcCAqLywKIAkJCQkwRjBDQUVGRTFFQzREQTg1MDA5NzBE
MTIgLyogSGVhcEZpbmFsaXplckNhbGxiYWNrLmggKi8sCiAJCQkJMEYzMkJEMEUxQkIzNEYxOTAw
OTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmNwcCAqLywKQEAgLTU1NjYsNiArNTU4NSwxMCBAQAog
CQkJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oICovLAogCQkJCUMyNUY4
QkNCMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovLAogCQkJCUMy
NUY4QkNDMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCAqLywKKwkJCQkw
RkRDRTEyRjFGQjExRDlEMDA2RjM5MDEgLyogSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAg
Ki8sCisJCQkJMEZEQ0UxMzAxRkIxMUQ5RDAwNkYzOTAxIC8qIElzb0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaCAqLywKKwkJCQkwRkRDRTEyQzFGQUZCNERFMDA2RjM5MDEgLyogSXNvU3Vic3BhY2Uu
Y3BwICovLAorCQkJCTBGRENFMTJCMUZBRkI0REUwMDZGMzkwMSAvKiBJc29TdWJzcGFjZS5oICov
LAogCQkJCTBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAg
Ki8sCiAJCQkJMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0Lmgg
Ki8sCiAJCQkJMEYwNzBBNDUxRDU0M0E4OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5jcHAg
Ki8sCkBAIC02NTA3LDggKzY1MzAsOCBAQAogCQkJCTk3ODhGQzIyMTQ3MUFEMEMwMDY4Q0UyRCAv
KiBKU0RhdGVNYXRoLmNwcCAqLywKIAkJCQk5Nzg4RkMyMzE0NzFBRDBDMDA2OENFMkQgLyogSlNE
YXRlTWF0aC5oICovLAogCQkJCUMyQTdGNjg3MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0
aWJsZU9iamVjdC5oICovLAotCQkJCTBGN0RGMTM5MUUyOTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcCAqLywKLQkJCQkwRjdERjEzQTFFMjk3MTBFMDA5NTk1
MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oICovLAorCQkJCTBGN0RGMTM5MUUy
OTcxMEUwMDk1OTUxQiAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAgKi8s
CisJCQkJMEY3REYxM0ExRTI5NzEwRTAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmggKi8sCiAJCQkJQTdCNEFDQUUxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0
TWFjcm9zLmggKi8sCiAJCQkJNzk4OTM3NzYxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJh
eS5jcHAgKi8sCiAJCQkJNzk4OTM3NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5o
ICovLApAQCAtNjU5Myw4ICs2NjE2LDggQEAKIAkJCQlFMzhEMDYwQjFGOEU4MTQxMDA2NDlDRjIg
LyogSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCAqLywKIAkJCQkwRjkxOUQwRTE1N0YzMzI3MDA0
QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJMEY5MTlEMEYx
NTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCAqLywKLQkJCQkw
RjRGODI4NTFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmNwcCAqLywKLQkJCQkwRjRGODI4NjFFMkZGRERCMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlLmggKi8sCisJCQkJMEY0RjgyODUxRTJGRkREQjAwNzUxODRD
IC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwICovLAorCQkJCTBG
NEY4Mjg2MUUyRkZEREIwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmggKi8sCiAJCQkJQTcyOTlEOUIxN0QxMjgzNzAwNUY1RkY5IC8qIEpTU2V0LmNwcCAq
LywKIAkJCQlBNzI5OUQ5QzE3RDEyODM3MDA1RjVGRjkgLyogSlNTZXQuaCAqLywKIAkJCQlBNzkw
REQ2OTE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5jcHAgKi8sCkBAIC02NjA5LDgg
KzY2MzIsOCBAQAogCQkJCTcwRUMwRUJEMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJh
dG9yLmggKi8sCiAJCQkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVy
LmNwcCAqLywKIAkJCQkyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIu
aCAqLywKLQkJCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdTdWJzcGFjZS5j
cHAgKi8sCi0JCQkJMEY3REYxM0UxRTJBRkM0QjAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2Uu
aCAqLywKKwkJCQkwRjdERjEzRDFFMkFGQzRCMDA5NTk1MUIgLyogSlNTdHJpbmdIZWFwQ2VsbFR5
cGUuY3BwICovLAorCQkJCTBGN0RGMTNFMUUyQUZDNEIwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBD
ZWxsVHlwZS5oICovLAogCQkJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRh
YmxlT2JqZWN0LmNwcCAqLywKIAkJCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1i
b2xUYWJsZU9iamVjdC5oICovLAogCQkJCTcwRUNBNjAwMUFGREJFQTIwMDQ0OTczOSAvKiBKU1Rl
bXBsYXRlUmVnaXN0cnlLZXkuY3BwICovLApAQCAtNzc4Niw4ICs3ODA5LDggQEAKIAkJCQlBREQw
OUFGMzFGNjI0ODJFMDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovLAogCQkJCTUzODNBQTJG
MUU2NUU4QTEwMEE1MzJGQyAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmNwcCAqLywKIAkJCQlB
RDlFODUyRTFFOEEwQzZFMDA4REUzOUUgLyogSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oICovLAot
CQkJCTc5RUZENDgxMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vi
c3BhY2UuY3BwICovLAotCQkJCTc5RUZENDgyMUVCQzA0NUMwMEYzREZFQSAvKiBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UuaCAqLywKKwkJCQk3OUVGRDQ4MTFFQkMwNDVDMDBGM0RGRUEg
LyogSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJNzlFRkQ0
ODIxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUu
aCAqLywKIAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBp
bGVFcnJvci5jcHAgKi8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3IuaCAqLywKIAkJCQk3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyog
SlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLywKQEAgLTc5OTgsNiArODAyMSw3IEBACiAJCQkJODZE
M0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2NUMwMjg1RDE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkRDRTEzMjFGQjExREE0MDA2RjM5MDEgLyogSXNvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0
M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThB
RjM1MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGQzk5RDUxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDQ5LDYgKzgwNzMsNyBAQAogCQkJCTBGRUM4NTA2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
Qzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQzg1MEExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkRDRTEyRDFGQUZCNEU1MDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTE5Qjc4MDFFMDM1NTlDMDA1QkVFRDggLyogQjND
b21waWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTg1OTAsNiArODYxNSw3IEBACiAJCQkJQzQ3MDND
RDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAq
LywKIAkJCQk3MEI3OTE5NTFDMDI0QTI4MDAyNDgxRTIgLyogR2VuZXJhdG9yRnVuY3Rpb25Db25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCNzkxOTcxQzAyNEEyOTAwMjQ4MUUyIC8q
IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkRDRTEy
QTFGQUZBODVGMDA2RjM5MDEgLyogQ29tcGxldGVTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzBCNzkxOTkxQzAyNEEyOTAwMjQ4MUUyIC8qIEdlbmVyYXRvclByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzBCNzkxOUQxQzAyNEE1NjAwMjQ4MUUyIC8qIEdlbmVyYXRvclByb3Rv
dHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDE5MUFBOTA5MTEwMEQzM0IzMyAv
KiBHZW5lcmljQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTg3NzMsNyArODc5OSw3IEBA
CiAJCQkJOTk2QjczMUMxQkRBMDhERDAwMzMxQjg0IC8qIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Nzg4MDE0MTE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRl
TWF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJBN0Y2ODgxNjA0MzJENDAwRjc2Qjk4IC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjdERjEzQzFFMjk3MTEz
MDA5NTk1MUIgLyogSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY3REYxM0MxRTI5NzExMzAwOTU5NTFCIC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM4NEVFNjFBRERCN0FEMDA1NURFMkMg
LyogSlNEb2xsYXJWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3
NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNFMDBC
MzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAtODgyNiw2ICs4ODUy
LDcgQEAKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDk3MjI3NTJEQzU0NDU5QjkxMjVCNTM5IC8qIEpTTW9k
dWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQg
LyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRENFMTFD
MUZBRTYyMDkwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTMzRThEMUQxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVu
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U09iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODUwLDcgKzg4NzcsNyBAQAogCQkJCUUzMjAx
QzFEMUY4RTgyMzYwMDc2QTAzMiAvKiBKU1NjcmlwdEZldGNoUGFyYW1ldGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNEY4Mjg4MUUyRkZE
RTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OUQ5RTE3RDEy
ODM3MDA1RjVGRjkgLyogSlNTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OTBERDcwMTgyRjQ5
OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCREZDQjJC
QkU5MEY0MTM0OUUxQjBCRUQgLyogSlNTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTg4
NjIsNyArODg4OSw3IEBACiAJCQkJQkMxOEM0MjgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5n
UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyOTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNT
dHJpbmdSZWZDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyOEQ0QTgxNzdCNzFDODAwMDdGQTND
IC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3REYxM0YxRTJB
RkM0RDAwOTU5NTFCIC8qIEpTU3RyaW5nU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
N0RGMTNGMUUyQUZDNEQwMDk1OTUxQiAvKiBKU1N0cmluZ0hlYXBDZWxsVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmpl
Y3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUNBNjA2MUFGREJFQTIwMDQ0OTczOSAvKiBKU1Rl
bXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkVBMUY3NUFENkEw
MDBCQ0FBRiAvKiBKU1RvV2FzbS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODkwLDcgKzg5MTcsNyBA
QAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2VtYmx5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRDlFODUyRjFFOEEwQzdDMDA4REUzOUUgLyogSlNXZWJBc3NlbWJs
eUNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVB
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NzlFRkQ0ODQxRUJDMDQ1QzAwRjNERkVBIC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2Vs
bFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkUzMURCNThEQUQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTZGQjQzQTFE
RkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEMkZDQkU1MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBp
biBIZWFkZXJzICovLApAQCAtOTIyMyw2ICs5MjUwLDcgQEAKIAkJCQkwRkZCNkMzOTFBRjQ4RERD
MDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDOTUyQjcxOUEy
ODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRE
RUMxOTgzMkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZEQ0UxMjIxRkFFODU4QzAwNkYzOTAxIC8qIEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyRDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5cGVTZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmggaW4g
SGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU1LDcgKzk1NSw3IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIHNp
emVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAg
ICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7CisgICAgICAgICAgICAgICAg
TWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlT
cGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQp
OwogCiAgICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2shCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlSW5saW5lcy5oCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDcgKzk5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9m
aQogICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVD
YXBhY2l0eSgpKTsKIAogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKGlubGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFs
bG9jYXRvciA9IHZtLmNlbGxTcGFjZS5hbGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOworICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uY2VsbFNwYWNlLmFsbG9jYXRvckZvck5v
blZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsK
IAogICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIGV4dHJhIGlubGluZSBjYXBhY2l0eSBhdmFpbGFi
bGUgaW4gdGhlIHNpemUgY2xhc3MuCiAgICAgaWYgKGFsbG9jYXRvcikgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTI0LDcgKzQxMjQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgICAg
ICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAg
ICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6
ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+
YWxsb2NhdG9yRm9yKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3JQdHIgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFs
bG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZTo6QXNzZXJ0KTsKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9y
UHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBhbGxvY2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMzAsNyArNDMzMCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICBzaXplX3QgYWxsb2Nh
dGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvclB0ciA9IHN1
YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yKGFsbG9j
YXRpb25TaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSBzdWJz
cGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIAogICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BS
KTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIs
IGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDAp
LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdP
YmplCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdlR1BSKTsKICAgICAK
ICAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBtX2ppdC52bSgpLT5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Io
c2l6ZSkpIHsKKyAgICAgICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQu
dm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVh
bChzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCkpIHsKICAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ICAgIG1faml0LmVtaXRBbGxvY2F0ZShzdG9yYWdlR1BSLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIs
IHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgCkBAIC0xMjUsNyArMTI1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIH0KIAogICAg
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKGlu
bGluZUNhcGFjaXR5KTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvclB0ciA9IHN1YnNw
YWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yKGFsbG9jYXRp
b25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvclB0ciA9IHN1YnNwYWNlRm9y
PEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogICAgIGlmIChhbGxv
Y2F0b3JQdHIpIHsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvclB0
ciksIHNjcmF0Y2hHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIs
IGFsbG9jYXRvclB0ciwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9y
YWdlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKQEAgLTQyNDksNyArNDI0OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOwotICAgIE1hcmtlZEFsbG9jYXRvciogbWFya2VkQWxsb2NhdG9yID0gc3Vic3BhY2VG
b3I8SlNTdHJpbmc+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9yKHNpemVvZihKU1JvcGVTdHJp
bmcpKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIG1hcmtlZEFsbG9jYXRvciA9IHN1YnNwYWNlRm9y
PEpTU3RyaW5nPigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpT
Um9wZVN0cmluZyksIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICBSRUxFQVNF
X0FTU0VSVChtYXJrZWRBbGxvY2F0b3IpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0ciht
YXJrZWRBbGxvY2F0b3IpLCBhbGxvY2F0b3JHUFIpOwogICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChy
ZXN1bHRHUFIsIG1hcmtlZEFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1tUHRyKG1f
aml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKQEAgLTg0MjcsNyArODQyNyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICAKICAgICBzaXplX3Qg
c2l6ZSA9IGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKTsKIAotICAg
IE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKHNpemUpOworICAgIE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7
CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtODQ3Miw3ICs4NDcyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIHNpemVfdCBuZXdTaXplID0g
b2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKICAgICBBU1NFUlQobmV3U2l6ZSA9PSBu
b2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSkpOwogICAgIAotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0o
KS0+anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1NpemUpOwor
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChuZXdTaXplLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAKICAgICBpZiAoIWFsbG9jYXRvciB8fCBub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTIg
KzEyMywxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKICNkZWZpbmUgRk9S
X0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAgICAgbWFjcm8oQXJyYXlTdG9y
YWdlX3ZlY3RvciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSwgc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpIFwKKyAgICBtYWNybyhDb21wbGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZv
clNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVw
KCksIHNpemVvZihNYXJrZWRBbGxvY2F0b3IqKSkgXAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50
c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSwgc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTTGV4aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlcywg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCksIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJv
cGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCAwLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5n
PikpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmliZXJzLCBKU1JvcGVTdHJpbmc6Om9mZnNl
dE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXAogICAgIG1hY3Jv
KFNjb3BlZEFyZ3VtZW50c19vdmVyZmxvd1N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b3ZlcmZs
b3dTdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKLSAgICBtYWNybyhT
dWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwgU3Vic3BhY2U6Om9mZnNldE9mQWxsb2NhdG9y
Rm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKE1hcmtlZEFsbG9jYXRvciopKSBcCiAgICAgbWFjcm8oV3Jp
dGVCYXJyaWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCAwLCBzaXplb2YoSlNDZWxsKikpIFwKICAg
ICBtYWNybyhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkgXAogICAgIG1hY3JvKGNoYXJh
Y3RlcnMxNiwgMCwgc2l6ZW9mKFVDaGFyKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NzA2LDcgKzU3MDYsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwogICAg
ICAgICAKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxK
U1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0b3JGb3Ioc2l6ZW9mKEpTUm9wZVN0cmluZykpOwor
ICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0
cmluZz4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZW9mKEpTUm9wZVN0cmluZyks
IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIGFsbG9jYXRvcik7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gYWxsb2NhdGVDZWxsKApAQCAtOTYwNyw3ICs5NjA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSB8fCBo
YXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAg
ICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRp
b25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
dm0oKSktPmFsbG9jYXRvckZvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgICAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBjZWxsQWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
dm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgY2VsbEFsbG9jYXRvcik7CiAKICAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4
aW5nSGVhZGVyID0gaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSk7CkBAIC0xMDYwMyw3ICsxMDYwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKIAogICAg
ICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSk7
Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0oKS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3Ioc2l6ZUluQnl0ZXMpOworICAgICAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplSW5CeXRlcywgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpBc3NlcnQpOwogICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhl
YXBDZWxsKG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAg
IG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRlcyArIHNpemVvZihJbmRleGlu
Z0hlYWRlcikpLCBzdGFydE9mU3RvcmFnZSkpOwpAQCAtMTE3NDcsNyArMTE3NDcsNyBAQCBwcml2
YXRlOgogICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKICAgICAgICAgc2l6ZV90IHNpemUsIFN0
cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93
UGF0aCkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSgpKS0+YWxsb2NhdG9yRm9yKHNpemUpOworICAgICAgICBNYXJr
ZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENsYXNzVHlwZT4odm0oKSktPmFs
bG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQp
OwogICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnRQdHIoYWxsb2Nh
dG9yKSwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCkBAIC0x
MTc2NCwxMCArMTE3NjQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8vIFRyeSB0
byBkbyBzb21lIGNvbnN0YW50LWZvbGRpbmcgaGVyZS4KICAgICAgICAgaWYgKHN1YnNwYWNlLT5o
YXNJbnRQdHIoKSAmJiBzaXplLT5oYXNJbnRQdHIoKSkgewotICAgICAgICAgICAgU3Vic3BhY2Uq
IGFjdHVhbFN1YnNwYWNlID0gYml0d2lzZV9jYXN0PFN1YnNwYWNlKj4oc3Vic3BhY2UtPmFzSW50
UHRyKCkpOworICAgICAgICAgICAgQ29tcGxldGVTdWJzcGFjZSogYWN0dWFsU3Vic3BhY2UgPSBi
aXR3aXNlX2Nhc3Q8Q29tcGxldGVTdWJzcGFjZSo+KHN1YnNwYWNlLT5hc0ludFB0cigpKTsKICAg
ICAgICAgICAgIHNpemVfdCBhY3R1YWxTaXplID0gc2l6ZS0+YXNJbnRQdHIoKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1
YWxTdWJzcGFjZS0+YWxsb2NhdG9yRm9yKGFjdHVhbFNpemUpOworICAgICAgICAgICAgTWFya2Vk
QWxsb2NhdG9yKiBhY3R1YWxBbGxvY2F0b3IgPSBhY3R1YWxTdWJzcGFjZS0+YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChhY3R1YWxTaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAg
ICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvcikgewogICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGlu
dWF0aW9uKTsKQEAgLTExNzk3LDExICsxMTc5NywxMSBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoCiAgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgo
Ci0gICAgICAgICAgICAgICAgbV9oZWFwcy5TdWJzcGFjZV9hbGxvY2F0b3JGb3JTaXplU3RlcCwK
KyAgICAgICAgICAgICAgICBtX2hlYXBzLkNvbXBsZXRlU3Vic3BhY2VfYWxsb2NhdG9yRm9yU2l6
ZVN0ZXAsCiAgICAgICAgICAgICAgICAgc3Vic3BhY2UsIG1fb3V0LnN1YihzaXplQ2xhc3NJbmRl
eCwgbV9vdXQuaW50UHRyT25lKSkpOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUgYWxsb2NhdG9y
Rm9yU2l6ZShTdWJzcGFjZSYgc3Vic3BhY2UsIExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93
UGF0aCkKKyAgICBMVmFsdWUgYWxsb2NhdG9yRm9yU2l6ZShDb21wbGV0ZVN1YnNwYWNlJiBzdWJz
cGFjZSwgTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFsbG9jYXRvckZvclNpemUobV9vdXQuY29uc3RJbnRQdHIoJnN1YnNwYWNlKSwgc2l6
ZSwgc2xvd1BhdGgpOwogICAgIH0KQEAgLTExODI3LDcgKzExODI3LDcgQEAgcHJpdmF0ZToKICAg
ICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUpCiAg
ICAgewogICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUuZ2V0KCktPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KHZt
KCkpLT5hbGxvY2F0b3JGb3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICBNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFz
c2VydCk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGFsbG9jYXRvciBpcyBu
dWxsLCB3ZSBjb3VsZCBzaW1wbHkgZW1pdCBhIG5vcm1hbCBDIGNhbGwgdG8gdGhlIGFsbG9jYXRv
cgogICAgICAgICAvLyBpbnN0ZWFkIG9mIHB1dHRpbmcgaXQgb24gdGhlIHNsb3cgcGF0aC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsaWduZWRNZW1vcnlB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaCIKIAorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlN1YnNw
YWNlLmgiCisKIG5hbWVzcGFjZSBKU0MgeyAKIAogQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6QWxp
Z25lZE1lbW9yeUFsbG9jYXRvcigpCkBAIC0zNiw2ICszOSwyNCBAQCBBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yOjp+QWxpZ25lZE1lbW9yeUFsCiB7CiB9CiAKK3ZvaWQgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcjo6cmVnaXN0ZXJBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci0+bmV4dEFsbG9jYXRvckluQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcigpKTsKKyAgICAKKyAgICBpZiAobV9hbGxvY2F0b3JzLmlzRW1wdHkoKSkgewor
ICAgICAgICBmb3IgKFN1YnNwYWNlKiBzdWJzcGFjZSA9IG1fc3Vic3BhY2VzLmZpcnN0KCk7IHN1
YnNwYWNlOyBzdWJzcGFjZSA9IHN1YnNwYWNlLT5uZXh0U3Vic3BhY2VJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKSkKKyAgICAgICAgICAgIHN1YnNwYWNlLT5kaWRDcmVhdGVGaXJzdEFsbG9jYXRv
cihhbGxvY2F0b3IpOworICAgIH0KKyAgICAKKyAgICBtX2FsbG9jYXRvcnMuYXBwZW5kKHN0ZDo6
bWVtX2ZuKCZNYXJrZWRBbGxvY2F0b3I6OnNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IpLCBhbGxvY2F0b3IpOworfQorCit2b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I6
OnJlZ2lzdGVyU3Vic3BhY2UoU3Vic3BhY2UqIHN1YnNwYWNlKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKCFzdWJzcGFjZS0+bmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpOwor
ICAgIG1fc3Vic3BhY2VzLmFwcGVuZChzdGQ6Om1lbV9mbigmU3Vic3BhY2U6OnNldE5leHRTdWJz
cGFjZUluQWxpZ25lZE1lbW9yeUFsbG9jYXRvciksIHN1YnNwYWNlKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw5ICsyNiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CitjbGFzcyBTdWJzcGFjZTsK
KwogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC00MCw2ICs0NCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZyZWVBbGlnbmVk
TWVtb3J5KHZvaWQqKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHJlZ2lzdGVyQWxsb2NhdG9yKE1hcmtlZEFsbG9j
YXRvciopOworICAgIE1hcmtlZEFsbG9jYXRvciogZmlyc3RBbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2FsbG9jYXRvcnMuZmlyc3QoKTsgfQorCisgICAgdm9pZCByZWdpc3RlclN1YnNwYWNl
KFN1YnNwYWNlKik7CisKK3ByaXZhdGU6CisgICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsPE1h
cmtlZEFsbG9jYXRvcj4gbV9hbGxvY2F0b3JzOworICAgIFNpbmdseUxpbmtlZExpc3RXaXRoVGFp
bDxTdWJzcGFjZT4gbV9zdWJzcGFjZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRpb25GYWlsdXJlTW9k
ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRp
b25GYWlsdXJlTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25h
bWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIEFsbG9jYXRpb25GYWlsdXJlTW9kZSB7CisgICAg
QXNzZXJ0LAorICAgIFJldHVybk51bGwKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJN
YXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgi
CisjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgorI2luY2x1ZGUgIlN1YnNwYWNl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ29tcGxldGVTdWJzcGFjZTo6Q29tcGxl
dGVTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEhlYXBDZWxsVHlwZSogaGVhcENl
bGxUeXBlLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yKQor
ICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCkKK3sKKyAgICBpbml0aWFsaXplKGhlYXBDZWxsVHlw
ZSwgYWxpZ25lZE1lbW9yeUFsbG9jYXRvcik7CisgICAgZm9yIChzaXplX3QgaSA9IE1hcmtlZFNw
YWNlOjpudW1TaXplQ2xhc3NlczsgaS0tOykKKyAgICAgICAgbV9hbGxvY2F0b3JGb3JTaXplU3Rl
cFtpXSA9IG51bGxwdHI7Cit9CisKK0NvbXBsZXRlU3Vic3BhY2U6On5Db21wbGV0ZVN1YnNwYWNl
KCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JG
b3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAg
ICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBmYWlsdXJlTW9kZSk7Cit9CisK
K3ZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRlKHNpemVfdCBzaXplLCBHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBkZWZlcnJhbENvbnRl
eHQsIGZhaWx1cmVNb2RlKTsKK30KKwordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGVO
b25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgdm9pZCAqcmVzdWx0
OworICAgIGlmIChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZp
cnR1YWwoc2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKSkKKyAgICAgICAg
cmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2Rl
KTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlU2xvdyhzaXplLCBkZWZlcnJh
bENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitNYXJrZWRB
bGxvY2F0b3IqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUp
Cit7CisgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6
ZSk7CisgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0ZvclNp
emVTdGVwW2luZGV4XTsKKyAgICBpZiAoIXNpemVDbGFzcykKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgCisgICAgLy8gVGhpcyBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCdz
IE9LIGZvciB0aGUgSklUIHRocmVhZHMgdG8gZW5kIHVwIGhlcmUgaWYgdGhleSB3YW50CisgICAg
Ly8gdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgc29tZSBhbGxvY2F0b3IgdGhhdCBoYWRuJ3Qg
YmVlbiB1c2VkIHlldC4gTm90ZSB0aGF0IGEgcG9zc2libHktCisgICAgLy8ganVzdC1hcy1nb29k
IHNvbHV0aW9uIHdvdWxkIGJlIHRvIHJldHVybiBudWxsIGlmIHdlJ3JlIGluIHRoZSBKSVQgc2lu
Y2UgdGhlIEpJVCB0cmVhdHMgbnVsbAorICAgIC8vIGFsbG9jYXRvciBhcyAicGxlYXNlIGFsd2F5
cyB0YWtlIHRoZSBzbG93IHBhdGgiLiBCdXQsIHRoYXQgY291bGQgbGVhZCB0byBwZXJmb3JtYW5j
ZQorICAgIC8vIHN1cnByaXNlcyBhbmQgdGhlIGFsZ29yaXRobSBoZXJlIGlzIHByZXR0eSBlYXN5
LiBPbmx5IHRoaXMgY29kZSBoYXMgdG8gaG9sZCB0aGUgbG9jaywgdG8KKyAgICAvLyBwcmV2ZW50
IHNpbXVsdGFuZW91c2x5IE1hcmtlZEFsbG9jYXRvciBjcmVhdGlvbnMgZnJvbSBtdWx0aXBsZSB0
aHJlYWRzLiBUaGlzIGNvZGUgZW5zdXJlcworICAgIC8vIHRoYXQgYW55ICJmb3JFYWNoQWxsb2Nh
dG9yIiB0cmF2ZXJzYWxzIHdpbGwgb25seSBzZWUgdGhpcyBhbGxvY2F0b3IgYWZ0ZXIgaXQncyBp
bml0aWFsaXplZAorICAgIC8vIGVub3VnaDogaXQgd2lsbCBoYXZlIAorICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9zcGFjZS5hbGxvY2F0b3JMb2NrKCkpOworICAgIGlmIChNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdKQorICAgICAg
ICByZXR1cm4gYWxsb2NhdG9yOworCisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJD
cmVhdGluZyBtYXJrZWQgYWxsb2NhdG9yIGZvciAiLCBtX25hbWUsICIsICIsIG1fYXR0cmlidXRl
cywgIiwgIiwgc2l6ZUNsYXNzLCAiLlxuIik7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFs
bG9jYXRvcj4gdW5pcXVlQWxsb2NhdG9yID0KKyAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxNYXJr
ZWRBbGxvY2F0b3I+KG1fc3BhY2UuaGVhcCgpLCBzaXplQ2xhc3MpOworICAgIE1hcmtlZEFsbG9j
YXRvciogYWxsb2NhdG9yID0gdW5pcXVlQWxsb2NhdG9yLmdldCgpOworICAgIG1fYWxsb2NhdG9y
cy5hcHBlbmQoV1RGTW92ZSh1bmlxdWVBbGxvY2F0b3IpKTsKKyAgICBhbGxvY2F0b3ItPnNldFN1
YnNwYWNlKHRoaXMpOworICAgIG1fc3BhY2UuYWRkTWFya2VkQWxsb2NhdG9yKGxvY2tlciwgYWxs
b2NhdG9yKTsKKyAgICBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemVD
bGFzcyk7CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoTWFya2VkU3BhY2U6OnNfc2l6ZUNs
YXNzRm9yU2l6ZVN0ZXBbaW5kZXhdICE9IHNpemVDbGFzcykKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhdID0gYWxsb2NhdG9yOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFpbmRleC0tKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGFsbG9jYXRvci0+c2V0TmV4dEFsbG9jYXRvckluU3Vic3BhY2UobV9maXJzdEFsbG9jYXRv
cik7CisgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlckFsbG9jYXRvcihhbGxv
Y2F0b3IpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgbV9maXJzdEFsbG9jYXRv
ciA9IGFsbG9jYXRvcjsKKyAgICByZXR1cm4gYWxsb2NhdG9yOworfQorCit2b2lkKiBDb21wbGV0
ZVN1YnNwYWNlOjphbGxvY2F0ZVNsb3coc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAg
ICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVNsb3coc2l6ZSwgZGVmZXJyYWxDb250ZXh0KTsK
KyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCogQ29tcGxldGVTdWJzcGFjZTo6dHJ5QWxsb2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0Rl
ZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQoreworICAgIHNhbml0aXplU3RhY2tGb3JW
TShtX3NwYWNlLmhlYXAoKS0+dm0oKSk7CisgICAgCisgICAgaWYgKE1hcmtlZEFsbG9jYXRvciog
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNz
ZXJ0KSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgIAorICAgIGlmIChzaXpl
IDw9IE9wdGlvbnM6OmxhcmdlQWxsb2NhdGlvbkN1dG9mZigpCisgICAgICAgICYmIHNpemUgPD0g
TWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKSB7CisgICAgICAgIGRhdGFMb2coIkZBVEFMOiBhdHRh
bXB0aW5nIHRvIGFsbG9jYXRlIHNtYWxsIG9iamVjdCB1c2luZyBsYXJnZSBhbGxvY2F0aW9uLlxu
Iik7CisgICAgICAgIGRhdGFMb2coIlJlcXVlc3RlZCBhbGxvY2F0aW9uIHNpemU6ICIsIHNpemUs
ICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICAKKyAgICBtX3NwYWNlLmhlYXAoKS0+Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcihkZWZlcnJh
bENvbnRleHQpOworICAgIAorICAgIHNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFy
a2VkU3BhY2U6OnNpemVTdGVwPihzaXplKTsKKyAgICBMYXJnZUFsbG9jYXRpb24qIGFsbG9jYXRp
b24gPSBMYXJnZUFsbG9jYXRpb246OnRyeUNyZWF0ZSgqbV9zcGFjZS5tX2hlYXAsIHNpemUsIHRo
aXMpOworICAgIGlmICghYWxsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
CisgICAgbV9zcGFjZS5tX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOworICAg
IG1fc3BhY2UubV9oZWFwLT5kaWRBbGxvY2F0ZShzaXplKTsKKyAgICBtX3NwYWNlLm1fY2FwYWNp
dHkgKz0gc2l6ZTsKKyAgICAKKyAgICBtX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRp
b24pOworICAgICAgICAKKyAgICByZXR1cm4gYWxsb2NhdGlvbi0+Y2VsbCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxl
dGVTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bXBsZXRlU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db21wbGV0ZVN1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
b21wbGV0ZVN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBDb21wbGV0ZVN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEhlYXBDZWxs
VHlwZSosIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+
Q29tcGxldGVTdWJzcGFjZSgpOworCisgICAgLy8gSW4gc29tZSBjb2RlIHBhdGhzLCB3ZSBuZWVk
IGl0IHRvIGJlIGEgY29tcGlsZSBlcnJvciB0byBjYWxsIHRoZSB2aXJ0dWFsIHZlcnNpb24gb2Yg
b25lIG9mCisgICAgLy8gdGhlc2UgZnVuY3Rpb25zLiBUaGF0J3Mgd2h5IHdlIGRvIGZpbmFsIG1l
dGhvZHMgdGhlIG9sZCBzY2hvb2wgd2F5LgorICAgIAorICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKKyAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUpOworICAgIAorICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJh
bENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChzaXplX3QsIEdDRGVmZXJyYWxDb250
ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q29tcGxldGVTdWJzcGFjZSwgbV9hbGxvY2F0b3JGb3JTaXplU3RlcCk7IH0KKyAgICAKKyAgICBN
YXJrZWRBbGxvY2F0b3IqKiBhbGxvY2F0b3JGb3JTaXplU3RlcCgpIHsgcmV0dXJuICZtX2FsbG9j
YXRvckZvclNpemVTdGVwWzBdOyB9CisKK3ByaXZhdGU6CisgICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3JGb3JTbG93KHNpemVfdCk7CisgICAgCisgICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBh
cmUgY29uY2VybmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlvbnMgYW5kIGFsbG9jYXRvciBjcmVhdGlv
bi4KKyAgICB2b2lkKiBhbGxvY2F0ZVNsb3coc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVTbG93KHNpemVfdCwg
R0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICAKKyAgICBzdGQ6OmFycmF5PE1hcmtlZEFsbG9jYXRv
ciosIE1hcmtlZFNwYWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JTaXplU3RlcDsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1hcmtlZEFsbG9jYXRvcj4+IG1fYWxsb2NhdG9y
czsKK307CisKK0FMV0FZU19JTkxJTkUgTWFya2VkQWxsb2NhdG9yKiBDb21wbGV0ZVN1YnNwYWNl
OjphbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUgZmFpbHVyZU1vZGUpCit7CisgICAgaWYgKHNpemUgPD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0
b2ZmKSB7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogcmVzdWx0ID0gbV9hbGxvY2F0b3JGb3JT
aXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV07CisgICAgICAgIGlm
IChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwgfHwgcmVz
dWx0KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRv
ckZvclNsb3coc2l6ZSk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcENlbGxU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2Vs
bFR5cGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1l
c3BhY2UgeworCisvLyBXcml0aW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdCB3aGVuIHlvdSBw
YXNzIHRoaXMgYXMgYSBmdW5jdG9yLCB0aGUgY2FsbGVlIGlzIHNwZWNpYWxpemVkIGZvcgorLy8g
dGhpcyBjYWxsYmFjay4gSWYgeW91IHdyb3RlIHRoaXMgYXMgYSBub3JtYWwgZnVuY3Rpb24gdGhl
biB0aGUgY2FsbGVlIHdvdWxkIGJlIHNwZWNpYWxpemVkIGZvcgorLy8gdGhlIGZ1bmN0aW9uJ3Mg
dHlwZSBhbmQgaXQgd291bGQgaGF2ZSBpbmRpcmVjdCBjYWxscyB0byB0aGF0IGZ1bmN0aW9uLiBB
bmQgdW5saWtlIGEgbGFtYmRhLCBpdCdzCisvLyBwb3NzaWJsZSB0byBtYXJrIHRoaXMgQUxXQVlT
X0lOTElORS4KK3N0cnVjdCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIG9w
ZXJhdG9yKCkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoY2VsbC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgIEFTU0VSVChjZWxsLT5pbmxpbmVUeXBl
RmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAgICAgICAgTWV0aG9kVGFibGU6OkRl
c3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5kZXN0cm95
OworICAgICAgICBkZXN0cm95KGNlbGwpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitIZWFwQ2VsbFR5cGU6OkhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMpCisgICAgOiBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKK3sKK30KKworSGVh
cENlbGxUeXBlOjp+SGVhcENlbGxUeXBlKCkKK3sKK30KKwordm9pZCBIZWFwQ2VsbFR5cGU6OmZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBGcmVlTGlzdCogZnJlZUxpc3Qp
Cit7CisgICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKGZyZWVMaXN0LCBE
ZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBK
U0NlbGwqIGNlbGwpCit7CisgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2Vs
bFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQ2Vs
bFR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
Q2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiTWFya2VkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXBDZWxsVHlw
ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGVhcENlbGxUeXBlKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBIZWFwQ2Vs
bFR5cGUoQWxsb2NhdG9yQXR0cmlidXRlcyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB+SGVhcENlbGxUeXBlKCk7CisKKyAgICBjb25zdCBBbGxvY2F0b3JBdHRyaWJ1dGVzJiBhdHRy
aWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisKKyAgICAvLyBUaGUgcHVy
cG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lhbGl6ZSB0aGUgc3dlZXAgZm9yIHlv
dXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKKyAgICAvLyBiZSBjYWxsZWQgZm9yIG5vLWRlc3Ry
dWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJrZWRCbG9jazo6ZmluaXNoU3dlZXBLbm93
aW5nU3Vic3BhY2UuCisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpI
YW5kbGUmLCBGcmVlTGlzdCopOworCisgICAgLy8gVGhlc2UgZ2V0IGNhbGxlZCBmb3IgbGFyZ2Ug
b2JqZWN0cy4KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOworCitwcml2
YXRlOgorICAgIEFsbG9jYXRvckF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklzb0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0lzb0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3I6Oklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQoreworfQorCitJc29B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yOjp+SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpCit7Cit9
CisKK3ZvaWQqIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OnRyeUFsbG9jYXRlQWxpZ25lZE1l
bW9yeShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICAvLyBTaW5jZSB0aGlz
IGlzIGRlc2lnbmVkIHNwZWNpYWxseSBmb3IgSXNvU3Vic3BhY2UsIHdlIGtub3cgdGhhdCB3ZSB3
aWxsIG9ubHkgYmUgYXNrZWQgdG8KKyAgICAvLyBhbGxvY2F0ZSBNYXJrZWRCbG9ja3MuCisgICAg
UkVMRUFTRV9BU1NFUlQoYWxpZ25tZW50ID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOworICAg
IFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgCisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIAorICAgIG1fZmlyc3RVbmNv
bW1pdHRlZCA9IG1fY29tbWl0dGVkLmZpbmRCaXQobV9maXJzdFVuY29tbWl0dGVkLCBmYWxzZSk7
CisgICAgaWYgKG1fZmlyc3RVbmNvbW1pdHRlZCA8IG1fYmxvY2tzLnNpemUoKSkgeworICAgICAg
ICBtX2NvbW1pdHRlZFttX2ZpcnN0VW5jb21taXR0ZWRdID0gdHJ1ZTsKKyAgICAgICAgdm9pZCog
cmVzdWx0ID0gbV9ibG9ja3NbbV9maXJzdFVuY29tbWl0dGVkXTsKKyAgICAgICAgT1NBbGxvY2F0
b3I6OmNvbW1pdChyZXN1bHQsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIHRydWUsIGZhbHNlKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0g
ZmFzdEFsaWduZWRNYWxsb2MoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSwgTWFya2VkQmxvY2s6OmJs
b2NrU2l6ZSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7CisgICAgbV9i
bG9ja3MuYXBwZW5kKHJlc3VsdCk7CisgICAgbV9ibG9ja0luZGljZXMuYWRkKHJlc3VsdCwgaW5k
ZXgpOworICAgIGlmIChtX2Jsb2Nrcy5jYXBhY2l0eSgpICE9IG1fY29tbWl0dGVkLnNpemUoKSkK
KyAgICAgICAgbV9jb21taXR0ZWQucmVzaXplKG1fYmxvY2tzLmNhcGFjaXR5KCkpOworICAgIG1f
Y29tbWl0dGVkW2luZGV4XSA9IHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJ
c29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOjpmcmVlQWxpZ25lZE1lbW9yeSh2b2lkKiBiYXNlUHRy
KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAKKyAgICBhdXRv
IGl0ZXIgPSBtX2Jsb2NrSW5kaWNlcy5maW5kKGJhc2VQdHIpOworICAgIFJFTEVBU0VfQVNTRVJU
KGl0ZXIgIT0gbV9ibG9ja0luZGljZXMuZW5kKCkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gaXRl
ci0+dmFsdWU7CisgICAgbV9jb21taXR0ZWRbaW5kZXhdID0gZmFsc2U7CisgICAgbV9maXJzdFVu
Y29tbWl0dGVkID0gc3RkOjptaW4oaW5kZXgsIG1fZmlyc3RVbmNvbW1pdHRlZCk7CisgICAgT1NB
bGxvY2F0b3I6OmRlY29tbWl0KGJhc2VQdHIsIE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOworfQor
Cit2b2lkIElzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoIklzbygiLCBSYXdQb2ludGVyKHRoaXMpLCAiKSIpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIElzb0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IgOiBwdWJsaWMgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CitwdWJs
aWM6CisgICAgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOworICAgIH5Jc29BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKCk7CisKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUFsaWduZWRNZW1vcnkoc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOworICAgIHZvaWQgZnJlZUFsaWdu
ZWRNZW1vcnkodm9pZCopIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7CisgICAgVmVjdG9y
PHZvaWQqPiBtX2Jsb2NrczsKKyAgICBIYXNoTWFwPHZvaWQqLCB1bnNpZ25lZD4gbV9ibG9ja0lu
ZGljZXM7CisgICAgRmFzdEJpdFZlY3RvciBtX2NvbW1pdHRlZDsKKyAgICB1bnNpZ25lZCBtX2Zp
cnN0VW5jb21taXR0ZWQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXNvU3Vic3BhY2Uu
aCIKKworI2luY2x1ZGUgIklzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJN
YXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitJc29TdWJzcGFj
ZTo6SXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBIZWFwQ2VsbFR5cGUqIGhl
YXBDZWxsVHlwZSwgc2l6ZV90IHNpemUpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwKQorICAg
ICwgbV9zaXplKHNpemUpCisgICAgLCBtX2FsbG9jYXRvcigmaGVhcCwgV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZSkpCisgICAgLCBtX2lzb0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxJc29BbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yPigpKQoreworICAgIGluaXRpYWxpemUoaGVhcENlbGxUeXBlLCBtX2lzb0FsaWduZWRNZW1v
cnlBbGxvY2F0b3IuZ2V0KCkpOworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3NwYWNl
LmFsbG9jYXRvckxvY2soKSk7CisgICAgbV9hbGxvY2F0b3Iuc2V0U3Vic3BhY2UodGhpcyk7Cisg
ICAgbV9zcGFjZS5hZGRNYXJrZWRBbGxvY2F0b3IobG9ja2VyLCAmbV9hbGxvY2F0b3IpOworICAg
IG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+cmVnaXN0ZXJBbGxvY2F0b3IoJm1fYWxsb2NhdG9y
KTsKKyAgICBtX2ZpcnN0QWxsb2NhdG9yID0gJm1fYWxsb2NhdG9yOworfQorCitJc29TdWJzcGFj
ZTo6fklzb1N1YnNwYWNlKCkKK3sKK30KKworTWFya2VkQWxsb2NhdG9yKiBJc29TdWJzcGFjZTo6
YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1v
ZGUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgZmFpbHVyZU1v
ZGUpOworfQorCitNYXJrZWRBbGxvY2F0b3IqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoc2l6ZSA9PSB0aGlzLT5zaXplKCkpOworICAgIHJldHVybiAmbV9hbGxvY2F0b3I7
Cit9CisKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgR0NEZWZlcnJh
bENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVN
b2RlKQoreworICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250
ZXh0LCBmYWlsdXJlTW9kZSk7Cit9CisKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZp
cnR1YWwoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChz
aXplID09IHRoaXMtPnNpemUoKSk7CisgICAgdm9pZCogcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxs
b2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSXNvU3Vic3BhY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTdWJzcGFjZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKKworY2xh
c3MgSXNvU3Vic3BhY2UgOiBwdWJsaWMgU3Vic3BhY2UgeworcHVibGljOgorICAgIEpTX0VYUE9S
VF9QUklWQVRFIElzb1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEhlYXBDZWxsVHlwZSos
IHNpemVfdCBzaXplKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+SXNvU3Vic3BhY2UoKTsKKwor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3Zl
cnJpZGU7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVf
dCBzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworCisgICAgdm9pZCogYWxsb2NhdGUoc2l6
ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBz
aXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUgZmFpbHVyZU1vZGUpOworCitwcml2YXRlOgorICAgIHNpemVfdCBtX3NpemU7CisgICAg
TWFya2VkQWxsb2NhdG9yIG1fYWxsb2NhdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29BbGln
bmVkTWVtb3J5QWxsb2NhdG9yPiBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3I7Cit9OworCisj
ZGVmaW5lIElTT19TVUJTUEFDRV9JTklUKGhlYXAsIGhlYXBDZWxsVHlwZSwgdHlwZSkgKCJJc29s
YXRlZCAiICN0eXBlICIgU3BhY2UiLCAoaGVhcCksIChoZWFwQ2VsbFR5cGUpLCBzaXplb2YodHlw
ZSkpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDE3ICs0MSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogc3RhdGljIGNvbnN0ZXhwciBi
b29sIHRyYWRlRGVzdHJ1Y3RvckJsb2NrcyA9IHRydWU7CiAKLU1hcmtlZEFsbG9jYXRvcjo6TWFy
a2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIFN1YnNwYWNlKiBzdWJzcGFjZSwgc2l6ZV90IGNlbGxT
aXplKQorTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaGVhcCwgc2l6ZV90
IGNlbGxTaXplKQogICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKICAgICAsIG1fY3VycmVudEJs
b2NrKDApCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQogICAgICwgbV9jZWxsU2l6ZShzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQotICAgICwgbV9hdHRyaWJ1dGVzKHN1YnNwYWNl
LT5hdHRyaWJ1dGVzKCkpCiAgICAgLCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fc3Vic3BhY2Uoc3Vi
c3BhY2UpCiB7CiB9CiAKK3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpzZXRTdWJzcGFjZShTdWJzcGFj
ZSogc3Vic3BhY2UpCit7CisgICAgbV9hdHRyaWJ1dGVzID0gc3Vic3BhY2UtPmF0dHJpYnV0ZXMo
KTsKKyAgICBtX3N1YnNwYWNlID0gc3Vic3BhY2U7Cit9CisKIGJvb2wgTWFya2VkQWxsb2NhdG9y
Ojppc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSkKIHsKICAgICB1bnNpZ25lZCBpdGVyc1NpbmNl
TGFzdFRpbWVDaGVjayA9IDA7CkBAIC0xNzUsMTkgKzE3OSw3IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OmRvVGUKICAgICAgICAgYWxsb2NhdGlvbkNvdW50ID0gMDsKIH0K
IAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250
ZXh0KiBkZWZlcnJhbENvbnRleHQpCi17Ci0gICAgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7
Ci0gICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGRlZmVycmFsQ29udGV4dCwgY3Jhc2hP
bkZhaWx1cmUpOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlU2xvd0Nh
c2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICBib29sIGNyYXNo
T25GYWlsdXJlID0gZmFsc2U7Ci0gICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VJbXBsKGRlZmVy
cmFsQ29udGV4dCwgY3Jhc2hPbkZhaWx1cmUpOwotfQotCi12b2lkKiBNYXJrZWRBbGxvY2F0b3I6
OmFsbG9jYXRlU2xvd0Nhc2VJbXBsKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQs
IGJvb2wgY3Jhc2hPbkZhaWx1cmUpCit2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxl
clNjb3BlKGZhbHNlKTsKICAgICBBU1NFUlQobV9oZWFwLT52bSgpLT5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKQEAgLTIwNCwxMSArMTk2LDggQEAgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIAogICAgIC8vIEdvb2Z5IGNvcm5lciBjYXNlOiB0
aGUgR0MgY2FsbGVkIGEgY2FsbGJhY2sgYW5kIG5vdyB0aGlzIGFsbG9jYXRvciBoYXMgYSBjdXJy
ZW50QmxvY2suIFRoaXMgb25seQogICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5nIFdlYktpdCB0
ZXN0cywgd2hpY2ggaW5qZWN0IGEgY2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5hbGl6YXRpb24u
Ci0gICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJsb2NrKSkgewotICAgICAgICBpZiAoY3Jhc2hP
bkZhaWx1cmUpCi0gICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsK
LSAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgfQorICAg
IGlmIChVTkxJS0VMWShtX2N1cnJlbnRCbG9jaykpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZShk
ZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKICAgICAKICAgICB2b2lkKiByZXN1bHQgPSB0
cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CiAgICAgCkBAIC0yMTcsNyArMjA2LDcgQEAg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIAogICAgIE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIGlmICghYmxv
Y2spIHsKLSAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKQorICAgICAgICBpZiAoZmFpbHVyZU1v
ZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgogI2luY2x1ZGUg
IkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJGcmVlTGlzdC5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrLmgiCkBAIC02NywxMyArNjgsMTcgQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjEy
MQogCiBjbGFzcyBNYXJrZWRBbGxvY2F0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1h
cmtlZEFsbG9jYXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogcHVibGljOgogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGcmVlTGlzdCgpOwogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZDZWxsU2l6ZSgpOwogCi0gICAgTWFya2VkQWxsb2NhdG9yKEhlYXAqLCBTdWJzcGFjZSos
IHNpemVfdCBjZWxsU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKEhlYXAqLCBzaXplX3QgY2Vs
bFNpemUpOworICAgIHZvaWQgc2V0U3Vic3BhY2UoU3Vic3BhY2UqKTsKICAgICB2b2lkIGxhc3RD
aGFuY2VUb0ZpbmFsaXplKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAg
IHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKQEAgLTkwLDggKzk1LDcgQEAgcHVibGljOgogICAgIGJv
b2wgbmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5kZXN0cnVj
dGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uOyB9CiAgICAgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uOyB9CiAgICAgSGVh
cENlbGw6OktpbmQgY2VsbEtpbmQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuY2VsbEtp
bmQ7IH0KLSAgICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsK
LSAgICB2b2lkKiB0cnlBbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKKyAg
ICB2b2lkKiBhbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSk7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogCiAgICAgYm9vbCBpc0Zy
ZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CkBAIC0xMzYsOSArMTQwLDEx
IEBAIHB1YmxpYzoKICAgICAKICAgICBNYXJrZWRBbGxvY2F0b3IqIG5leHRBbGxvY2F0b3IoKSBj
b25zdCB7IHJldHVybiBtX25leHRBbGxvY2F0b3I7IH0KICAgICBNYXJrZWRBbGxvY2F0b3IqIG5l
eHRBbGxvY2F0b3JJblN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0QWxsb2NhdG9ySW5T
dWJzcGFjZTsgfQorICAgIE1hcmtlZEFsbG9jYXRvciogbmV4dEFsbG9jYXRvckluQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dEFsbG9jYXRvckluQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjsgfQogICAgIAogICAgIHZvaWQgc2V0TmV4dEFsbG9jYXRvcihNYXJrZWRB
bGxvY2F0b3IqIGFsbG9jYXRvcikgeyBtX25leHRBbGxvY2F0b3IgPSBhbGxvY2F0b3I7IH0KICAg
ICB2b2lkIHNldE5leHRBbGxvY2F0b3JJblN1YnNwYWNlKE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yKSB7IG1fbmV4dEFsbG9jYXRvckluU3Vic3BhY2UgPSBhbGxvY2F0b3I7IH0KKyAgICB2b2lk
IHNldE5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3IpIHsgbV9uZXh0QWxsb2NhdG9ySW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yID0g
YWxsb2NhdG9yOyB9CiAgICAgCiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEVtcHR5Qmxv
Y2tUb1N0ZWFsKCk7CiAgICAgCkBAIC0xNTUsOSArMTYxLDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCopOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQq
KTsKLSAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlSW1wbChHQ0RlZmVycmFsQ29udGV4dCosIGJv
b2wgY3Jhc2hPbkZhaWx1cmUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRl
U2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVy
ZU1vZGUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgdm9pZCogdHJ5QWxs
b2NhdGVXaXRob3V0Q29sbGVjdGluZygpOwogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUFs
bG9jYXRlQmxvY2soKTsKQEAgLTE5MiwxMCArMTk2LDExIEBAIHByaXZhdGU6CiAgICAgQWxsb2Nh
dG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSBz
aG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2OTg4Ci0gICAgSGVhcCogbV9oZWFwOwotICAgIFN1YnNw
YWNlKiBtX3N1YnNwYWNlOworICAgIEhlYXAqIG1faGVhcCB7IG51bGxwdHIgfTsKKyAgICBTdWJz
cGFjZSogbV9zdWJzcGFjZSB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4
dEFsbG9jYXRvciB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbmV4dEFsbG9j
YXRvckluU3Vic3BhY2UgeyBudWxscHRyIH07CisgICAgTWFya2VkQWxsb2NhdG9yKiBtX25leHRB
bGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CiB9OwogCiBpbmxp
bmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5l
cy5oCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIxICszNSwxMiBAQCBp
bmxpbmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlCiAgICAgcmV0dXJuIG1fZnJl
ZUxpc3QuY29udGFpbnMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0KQorQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKICAgICByZXR1cm4gbV9mcmVlTGlzdC5h
bGxvY2F0ZSgKICAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CiAgICAgICAgICAgICBzYW5p
dGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIZWFwQ2VsbCo+KHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7Ci0g
ICAgICAgIH0pOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKLXsKLSAgICByZXR1cm4g
bV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7Ci0gICAg
ICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oaGVhcCgpLT52bSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250
ZXh0KSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0
ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsKICAgICAgICAgfSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNp
b24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
ICAgIC8vIFRoaXMgaXMgdG8gYmUgY2FsbGVkIGJ5IFN1YnNwYWNlLgogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgdm9pZCBmaW5pc2hTd2VlcEtub3dpbmdT
dWJzcGFjZShGcmVlTGlzdCosIGNvbnN0IERlc3Ryb3lGdW5jJik7CisgICAgICAgIHZvaWQgZmlu
aXNoU3dlZXBLbm93aW5nSGVhcENlbGxUeXBlKEZyZWVMaXN0KiwgY29uc3QgRGVzdHJveUZ1bmMm
KTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgdW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBEZXN0cm95RnVuYz4KLXZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6Zmlu
aXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJlZUxpc3QqIGZyZWVMaXN0LCBjb25zdCBEZXN0cm95
RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWVw
S25vd2luZ0hlYXBDZWxsVHlwZShGcmVlTGlzdCogZnJlZUxpc3QsIGNvbnN0IERlc3Ryb3lGdW5j
JiBkZXN0cm95RnVuYykKIHsKICAgICBTd2VlcE1vZGUgc3dlZXBNb2RlID0gZnJlZUxpc3QgPyBT
d2VlcFRvRnJlZUxpc3QgOiBTd2VlcE9ubHk7CiAgICAgU3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVz
dHJ1Y3Rpb25Nb2RlID0gdGhpcy0+c3dlZXBEZXN0cnVjdGlvbk1vZGUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNTE0NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMyLDkgKzEzMiwxMCBAQCBjb25zdCBWZWN0b3I8c2l6ZV90PiYgc2l6ZUNsYXNz
ZXMoKQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBNYW51YWxseSBpbmplY3Qgc2l6
ZSBjbGFzc2VzIGZvciBvYmplY3RzIHdlIGtub3cgd2lsbCBiZSBhbGxvY2F0ZWQgaW4gaGlnaCB2
b2x1bWUuCisgICAgICAgICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIHRoaW5ncyBzaG91bGQg
aGF2ZSBJc29TdWJzcGFjZXMuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5ODc2CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKSk7CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2spKTsKLSAgICAgICAgICAgIGFkZChzaXplb2YoRnVuY3Rpb25FeGVjdXRh
YmxlKSk7CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKEZ1bmN0aW9uQ29kZUJsb2NrKSk7CiAgICAg
ICAgICAgICBhZGQoc2l6ZW9mKEpTU3RyaW5nKSk7CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKEpT
RnVuY3Rpb24pKTsKQEAgLTU1MSwyNSArNTUyLDEzIEBAIHZvaWQgTWFya2VkU3BhY2U6OmR1bXBC
aXRzKFByaW50U3RyZWFtJiAKICAgICAgICAgfSk7CiB9CiAKLU1hcmtlZEFsbG9jYXRvciogTWFy
a2VkU3BhY2U6OmFkZE1hcmtlZEFsbG9jYXRvcigKLSAgICBjb25zdCBBYnN0cmFjdExvY2tlciYs
IFN1YnNwYWNlKiBzdWJzcGFjZSwgc2l6ZV90IHNpemVDbGFzcykKK3ZvaWQgTWFya2VkU3BhY2U6
OmFkZE1hcmtlZEFsbG9jYXRvcihjb25zdCBBYnN0cmFjdExvY2tlciYsIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yKQogewotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9iYWdP
ZkFsbG9jYXRvcnMuYWRkKGhlYXAoKSwgc3Vic3BhY2UsIHNpemVDbGFzcyk7CiAgICAgYWxsb2Nh
dG9yLT5zZXROZXh0QWxsb2NhdG9yKG51bGxwdHIpOwogICAgIAogICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CiAKLSAgICBpZiAoIW1fZmlyc3RBbGxvY2F0b3IpIHsKLSAgICAgICAgbV9maXJz
dEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICAgICAgbV9sYXN0QWxsb2NhdG9yID0gYWxsb2Nh
dG9yOwotICAgICAgICBmb3IgKFN1YnNwYWNlKiBzdWJzcGFjZSA6IG1fc3Vic3BhY2VzKQotICAg
ICAgICAgICAgc3Vic3BhY2UtPmRpZENyZWF0ZUZpcnN0QWxsb2NhdG9yKGFsbG9jYXRvcik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgbV9sYXN0QWxsb2NhdG9yLT5zZXROZXh0QWxsb2NhdG9yKGFs
bG9jYXRvcik7Ci0gICAgICAgIG1fbGFzdEFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIGFsbG9jYXRvcjsKKyAgICBtX2FsbG9jYXRvcnMuYXBwZW5kKHN0ZDo6
bWVtX2ZuKCZNYXJrZWRBbGxvY2F0b3I6OnNldE5leHRBbGxvY2F0b3IpLCBhbGxvY2F0b3IpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEyIEBACiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvU2luZ2x5
TGlua2VkTGlzdFdpdGhUYWlsLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgQ29tcGxldGVTdWJzcGFjZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBI
ZWFwSXRlcmF0aW9uU2NvcGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0xNTUs
MTAgKzE1NywxMCBAQCBwdWJsaWM6CiAgICAgTGFyZ2VBbGxvY2F0aW9uKiogbGFyZ2VBbGxvY2F0
aW9uc0ZvclRoaXNDb2xsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9sYXJnZUFsbG9jYXRp
b25zRm9yVGhpc0NvbGxlY3Rpb25FbmQ7IH0KICAgICB1bnNpZ25lZCBsYXJnZUFsbG9jYXRpb25z
Rm9yVGhpc0NvbGxlY3Rpb25TaXplKCkgY29uc3QgeyByZXR1cm4gbV9sYXJnZUFsbG9jYXRpb25z
Rm9yVGhpc0NvbGxlY3Rpb25TaXplOyB9CiAgICAgCi0gICAgTWFya2VkQWxsb2NhdG9yKiBmaXJz
dEFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RBbGxvY2F0b3I7IH0KKyAgICBNYXJr
ZWRBbGxvY2F0b3IqIGZpcnN0QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvY2F0b3Jz
LmZpcnN0KCk7IH0KICAgICAKICAgICBMb2NrJiBhbGxvY2F0b3JMb2NrKCkgeyByZXR1cm4gbV9h
bGxvY2F0b3JMb2NrOyB9Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhZGRNYXJrZWRBbGxvY2F0b3Io
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBTdWJzcGFjZSosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAg
dm9pZCBhZGRNYXJrZWRBbGxvY2F0b3IoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBNYXJrZWRBbGxv
Y2F0b3IqKTsKICAgICAKICAgICAvLyBXaGVuIHRoaXMgaXMgdHJ1ZSBpdCBtZWFucyB0aGF0IHdl
IGhhdmUgZmxpcHBlZCBidXQgdGhlIG1hcmsgYml0cyBoYXZlbid0IGNvbnZlcmdlZCB5ZXQuCiAg
ICAgYm9vbCBpc01hcmtpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzTWFya2luZzsgfQpAQCAtMTY4
LDE0ICsxNzAsMTIgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6
OmFycmF5PHNpemVfdCwgbnVtU2l6ZUNsYXNzZXM+IHNfc2l6ZUNsYXNzRm9yU2l6ZVN0ZXA7CiAg
ICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb21wbGV0ZVN1YnNwYWNlOwogICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsK
ICAgICBmcmllbmQgY2xhc3MgV2Vha1NldDsKICAgICBmcmllbmQgY2xhc3MgU3Vic3BhY2U7CiAg
ICAgCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KFN1YnNwYWNlJiwgR0NEZWZlcnJhbENvbnRleHQq
LCBzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhTdWJzcGFjZSYsIEdDRGVmZXJy
YWxDb250ZXh0Kiwgc2l6ZV90KTsKLQogICAgIC8vIFVzZSB0aGlzIHZlcnNpb24gd2hlbiBjYWxs
aW5nIGZyb20gd2l0aGluIHRoZSBHQyB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlIGFsbG9jYXRvcnMK
ICAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTIxMCw5
ICsyMTAsNyBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxXZWFrU2V0LCBCYXNp
Y1Jhd1NlbnRpbmVsTm9kZTxXZWFrU2V0Pj4gbV9uZXdBY3RpdmVXZWFrU2V0czsKIAogICAgIExv
Y2sgbV9hbGxvY2F0b3JMb2NrOwotICAgIEJhZzxNYXJrZWRBbGxvY2F0b3I+IG1fYmFnT2ZBbGxv
Y2F0b3JzOwotICAgIE1hcmtlZEFsbG9jYXRvciogbV9maXJzdEFsbG9jYXRvciB7IG51bGxwdHIg
fTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIG1fbGFzdEFsbG9jYXRvciB7IG51bGxwdHIgfTsKKyAg
ICBTaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWw8TWFya2VkQWxsb2NhdG9yPiBtX2FsbG9jYXRvcnM7
CiAKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVyOwogfTsKQEAgLTIyOSw3ICsyMjcsNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rvcj4KIHZvaWQgTWFya2VkU3BhY2U6OmZvckVhY2hBbGxvY2F0b3IoY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBmb3IgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gbV9maXJzdEFsbG9jYXRvcjsgYWxsb2NhdG9yOyBhbGxvY2F0b3IgPSBhbGxvY2F0b3ItPm5l
eHRBbGxvY2F0b3IoKSkgeworICAgIGZvciAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBt
X2FsbG9jYXRvcnMuZmlyc3QoKTsgYWxsb2NhdG9yOyBhbGxvY2F0b3IgPSBhbGxvY2F0b3ItPm5l
eHRBbGxvY2F0b3IoKSkgewogICAgICAgICBpZiAoZnVuY3RvcigqYWxsb2NhdG9yKSA9PSBJdGVy
YXRpb25TdGF0dXM6OkRvbmUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1MTQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2Uu
aCIKIAorI2luY2x1ZGUgIkFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJIZWFw
Q2VsbFR5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxs
b2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgpAQCAtMzQs
NDUgKzM2LDIzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1uYW1lc3BhY2UgewotCi0vLyBXcml0
aW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdCB3aGVuIHlvdSBwYXNzIHRoaXMgYXMgYSBmdW5j
dG9yLCB0aGUgY2FsbGVlIGlzIHNwZWNpYWxpemVkIGZvcgotLy8gdGhpcyBjYWxsYmFjay4gSWYg
eW91IHdyb3RlIHRoaXMgYXMgYSBub3JtYWwgZnVuY3Rpb24gdGhlbiB0aGUgY2FsbGVlIHdvdWxk
IGJlIHNwZWNpYWxpemVkIGZvcgotLy8gdGhlIGZ1bmN0aW9uJ3MgdHlwZSBhbmQgaXQgd291bGQg
aGF2ZSBpbmRpcmVjdCBjYWxscyB0byB0aGF0IGZ1bmN0aW9uLiBBbmQgdW5saWtlIGEgbGFtYmRh
LCBpdCdzCi0vLyBwb3NzaWJsZSB0byBtYXJrIHRoaXMgQUxXQVlTX0lOTElORS4KLXN0cnVjdCBE
ZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mIHZtLCBK
U0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoY2VsbC0+c3RydWN0dXJl
SUQoKSk7Ci0gICAgICAgIEFTU0VSVChjZWxsLT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVy
ZUlzSW1tb3J0YWwpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVj
dHVyZSh2bSk7Ci0gICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJl
LT5jbGFzc0luZm8oKTsKLSAgICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBk
ZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5kZXN0cm95OwotICAgICAgICBkZXN0cm95
KGNlbGwpOwotICAgIH0KLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1TdWJzcGFj
ZTo6U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0
b3IpCitTdWJzcGFjZTo6U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwKQogICAgIDog
bV9zcGFjZShoZWFwLm9iamVjdFNwYWNlKCkpCiAgICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1f
YXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKGFs
aWduZWRNZW1vcnlBbGxvY2F0b3IpCi0gICAgLCBtX2FsbG9jYXRvckZvckVtcHR5QWxsb2NhdGlv
bihtX3NwYWNlLmZpcnN0QWxsb2NhdG9yKCkpCi17Ci0gICAgLy8gSXQncyByZW1vdGVseSBwb3Nz
aWJsZSB0aGF0IHdlJ3JlIEdDaW5nIHJpZ2h0IG5vdyBldmVuIGlmIHRoZSBjbGllbnQgaXMgY2Fy
ZWZ1bCB0byBvbmx5Ci0gICAgLy8gY3JlYXRlIHN1YnNwYWNlcyByaWdodCBhZnRlciBWTSBjcmVh
dGlvbiwgc2luY2UgY29sbGVjdENvbnRpbnVvdXNseSAoYW5kIHByb2JhYmx5IG90aGVyCi0gICAg
Ly8gdGhpbmdzKSBjb3VsZCBjYXVzZSBhIEdDIHRvIGJlIGxhdW5jaGVkIGF0IHByZXR0eSBtdWNo
IGFueSB0aW1lIGFuZCBpdCdzIG5vdCAxMDAlIG9idmlvdXMKLSAgICAvLyB0aGF0IGFsbCBjbGll
bnRzIHdvdWxkIGJlIGFibGUgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIHplcm8gc2FmZXBvaW50
cyBiZXR3ZWVuIHdoZW4gdGhleQotICAgIC8vIGNyZWF0ZSBWTSBhbmQgd2hlbiB0aGV5IGRvIHRo
aXMuIFByZXZlbnRpbmcgR0Mgd2hpbGUgd2UncmUgY3JlYXRpbmcgdGhlIFN1YnNwYWNlIGVuc3Vy
ZXMKLSAgICAvLyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgd2hldGhlciBpdCdz
IE9LIGZvciB0aGUgR0MgdG8gZXZlciBzZWUgYSBicmFuZCBuZXcKLSAgICAvLyBzdWJzcGFjZS4K
K3sKK30KKwordm9pZCBTdWJzcGFjZTo6aW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUqIGhlYXBDZWxs
VHlwZSwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcikKK3sK
KyAgICBtX2F0dHJpYnV0ZXMgPSBoZWFwQ2VsbFR5cGUtPmF0dHJpYnV0ZXMoKTsKKyAgICBtX2hl
YXBDZWxsVHlwZSA9IGhlYXBDZWxsVHlwZTsKKyAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3Ig
PSBhbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0
aW9uID0gbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5maXJzdEFsbG9jYXRvcigpOworCisgICAg
SGVhcCYgaGVhcCA9ICptX3NwYWNlLmhlYXAoKTsKICAgICBQcmV2ZW50Q29sbGVjdGlvblNjb3Bl
IHByZXZlbnRDb2xsZWN0aW9uU2NvcGUoaGVhcCk7CiAgICAgaGVhcC5vYmplY3RTcGFjZSgpLm1f
c3Vic3BhY2VzLmFwcGVuZCh0aGlzKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gTWFya2Vk
U3BhY2U6Om51bVNpemVDbGFzc2VzOyBpLS07KQotICAgICAgICBtX2FsbG9jYXRvckZvclNpemVT
dGVwW2ldID0gbnVsbHB0cjsKKyAgICBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3ItPnJlZ2lzdGVy
U3Vic3BhY2UodGhpcyk7CiB9CiAKIFN1YnNwYWNlOjp+U3Vic3BhY2UoKQpAQCAtODEsNjAgKzYx
LDEyIEBAIFN1YnNwYWNlOjp+U3Vic3BhY2UoKQogCiB2b2lkIFN1YnNwYWNlOjpmaW5pc2hTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9jaywgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAg
IGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygp
KTsKKyAgICBtX2hlYXBDZWxsVHlwZS0+ZmluaXNoU3dlZXAoYmxvY2ssIGZyZWVMaXN0KTsKIH0K
IAogdm9pZCBTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKIHsKLSAgICBE
ZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKLX0KLQotLy8gVGhlIHJlYXNvbiB3aHkgd2UgZGlzdGlu
Z3Vpc2ggYmV0d2VlbiBhbGxvY2F0ZSBhbmQgdHJ5QWxsb2NhdGUgaXMgdG8gbWluaW1pemUgdGhl
IG51bWJlciBvZgotLy8gY2hlY2tzIG9uIHRoZSBhbGxvY2F0aW9uIHBhdGggaW4gYm90aCBjYXNl
cy4gTGlrZXdpc2UsIHRoZSByZWFzb24gd2h5IHdlIGhhdmUgb3ZlcmxvYWRzIHdpdGggYW5kCi0v
LyB3aXRob3V0IGRlZmVycmFsQ29udGV4dCBpcyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIGNv
ZGUgZm9yIGNhbGxpbmcgYWxsb2NhdGUgd2hlbiB5b3UgZG9uJ3QKLS8vIG5lZWQgdGhlIGRlZmVy
cmFsQ29udGV4dC4KLXZvaWQqIFN1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSkKLXsKLSAg
ICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdHJ5
QWxsb2NhdG9yRm9yKHNpemUpKQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRl
KCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVNsb3cobnVsbHB0ciwgc2l6
ZSk7Ci0gICAgZGlkQWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkKiBTdWJzcGFjZTo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCwgc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCAqcmVzdWx0OwotICAgIGlmIChNYXJrZWRBbGxv
Y2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKLSAgICAgICAgcmVzdWx0
ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQpOwotICAgIGVsc2UKLSAgICAg
ICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KGRlZmVycmFsQ29udGV4dCwgc2l6ZSk7Ci0gICAgZGlk
QWxsb2NhdGUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTdWJzcGFj
ZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlm
IChNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHRyeUFsbG9jYXRvckZvcihzaXplKSkKLSAg
ICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT50cnlBbGxvY2F0ZSgpOwotICAgIGVsc2UKLSAgICAg
ICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KG51bGxwdHIsIHNpemUpOwotICAgIGRpZEFsbG9j
YXRlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU3Vic3BhY2U6OnRy
eUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXpl
KQotewotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSB0cnlBbGxvY2F0b3JGb3Ioc2l6ZSkpCi0gICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+
dHJ5QWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9
IHRyeUFsbG9jYXRlU2xvdyhkZWZlcnJhbENvbnRleHQsIHNpemUpOwotICAgIGRpZEFsbG9jYXRl
KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2hlYXBDZWxsVHlwZS0+ZGVzdHJv
eSh2bSwgY2VsbCk7CiB9CiAKIHZvaWQgU3Vic3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkK
QEAgLTE0NCwxMDQgKzc2LDE3IEBAIHZvaWQgU3Vic3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9u
KCkKICAgICAgICAgICAgIGFsbG9jYXRvci5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgICAg
ICB9KTsKIAotICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9zcGFjZS5maXJz
dEFsbG9jYXRvcigpOworICAgIG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGln
bmVkTWVtb3J5QWxsb2NhdG9yLT5maXJzdEFsbG9jYXRvcigpOwogfQogCiBNYXJrZWRCbG9jazo6
SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkKIHsKLSAgICBmb3IgKDsg
bV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb247IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0
aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9jYXRpb24tPm5leHRBbGxvY2F0b3IoKSkgewot
ICAgICAgICBTdWJzcGFjZSogb3RoZXJTdWJzcGFjZSA9IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxv
Y2F0aW9uLT5zdWJzcGFjZSgpOwotICAgICAgICBpZiAob3RoZXJTdWJzcGFjZS0+YWxpZ25lZE1l
bW9yeUFsbG9jYXRvcigpICE9IGFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKKyAgICBmb3IgKDsgbV9hbGxvY2F0b3JGb3JFbXB0eUFsbG9j
YXRpb247IG1fYWxsb2NhdG9yRm9yRW1wdHlBbGxvY2F0aW9uID0gbV9hbGxvY2F0b3JGb3JFbXB0
eUFsbG9jYXRpb24tPm5leHRBbGxvY2F0b3JJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSkgewog
ICAgICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2FsbG9jYXRvckZvckVt
cHR5QWxsb2NhdGlvbi0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpCiAgICAgICAgICAgICByZXR1
cm4gYmxvY2s7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1NYXJrZWRBbGxvY2F0
b3IqIFN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQotewotICAgIHNpemVf
dCBpbmRleCA9IE1hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNpemUpOwotICAgIHNpemVf
dCBzaXplQ2xhc3MgPSBNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF07
Ci0gICAgaWYgKCFzaXplQ2xhc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAg
IC8vIFRoaXMgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgaXQncyBPSyBmb3IgdGhlIEpJ
VCB0aHJlYWRzIHRvIGVuZCB1cCBoZXJlIGlmIHRoZXkgd2FudAotICAgIC8vIHRvIGdlbmVyYXRl
IGNvZGUgdGhhdCB1c2VzIHNvbWUgYWxsb2NhdG9yIHRoYXQgaGFkbid0IGJlZW4gdXNlZCB5ZXQu
IE5vdGUgdGhhdCBhIHBvc3NpYmx5LQotICAgIC8vIGp1c3QtYXMtZ29vZCBzb2x1dGlvbiB3b3Vs
ZCBiZSB0byByZXR1cm4gbnVsbCBpZiB3ZSdyZSBpbiB0aGUgSklUIHNpbmNlIHRoZSBKSVQgdHJl
YXRzIG51bGwKLSAgICAvLyBhbGxvY2F0b3IgYXMgInBsZWFzZSBhbHdheXMgdGFrZSB0aGUgc2xv
dyBwYXRoIi4gQnV0LCB0aGF0IGNvdWxkIGxlYWQgdG8gcGVyZm9ybWFuY2UKLSAgICAvLyBzdXJw
cmlzZXMgYW5kIHRoZSBhbGdvcml0aG0gaGVyZSBpcyBwcmV0dHkgZWFzeS4gT25seSB0aGlzIGNv
ZGUgaGFzIHRvIGhvbGQgdGhlIGxvY2ssIHRvCi0gICAgLy8gcHJldmVudCBzaW11bHRhbmVvdXNs
eSBNYXJrZWRBbGxvY2F0b3IgY3JlYXRpb25zIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gVGhpcyBj
b2RlIGVuc3VyZXMKLSAgICAvLyB0aGF0IGFueSAiZm9yRWFjaEFsbG9jYXRvciIgdHJhdmVyc2Fs
cyB3aWxsIG9ubHkgc2VlIHRoaXMgYWxsb2NhdG9yIGFmdGVyIGl0J3MgaW5pdGlhbGl6ZWQKLSAg
ICAvLyBlbm91Z2g6IGl0IHdpbGwgaGF2ZSAKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
c3BhY2UuYWxsb2NhdG9yTG9jaygpKTsKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkKLSAgICAgICAgcmV0dXJuIGFsbG9j
YXRvcjsKLQotICAgIGlmIChmYWxzZSkKLSAgICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgbWFya2Vk
IGFsbG9jYXRvciBmb3IgIiwgbV9uYW1lLCAiLCAiLCBtX2F0dHJpYnV0ZXMsICIsICIsIHNpemVD
bGFzcywgIi5cbiIpOwotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gbV9zcGFjZS5h
ZGRNYXJrZWRBbGxvY2F0b3IobG9ja2VyLCB0aGlzLCBzaXplQ2xhc3MpOwotICAgIGluZGV4ID0g
TWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgoc2l6ZUNsYXNzKTsKLSAgICBmb3IgKDs7KSB7
Ci0gICAgICAgIGlmIChNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXplU3RlcFtpbmRleF0g
IT0gc2l6ZUNsYXNzKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbV9hbGxvY2F0b3JG
b3JTaXplU3RlcFtpbmRleF0gPSBhbGxvY2F0b3I7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWlu
ZGV4LS0pCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgYWxsb2NhdG9yLT5zZXROZXh0
QWxsb2NhdG9ySW5TdWJzcGFjZShtX2ZpcnN0QWxsb2NhdG9yKTsKLSAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwotICAgIG1fZmlyc3RBbGxvY2F0b3IgPSBhbGxvY2F0b3I7Ci0gICAgcmV0dXJu
IGFsbG9jYXRvcjsKLX0KLQotdm9pZCogU3Vic3BhY2U6OmFsbG9jYXRlU2xvdyhHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1
bHQgPSB0cnlBbGxvY2F0ZVNsb3coZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFN1YnNwYWNl
Ojp0cnlBbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgc2l6
ZV90IHNpemUpCi17Ci0gICAgc2FuaXRpemVTdGFja0ZvclZNKG1fc3BhY2UuaGVhcCgpLT52bSgp
KTsKLSAgICAKLSAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3Ioc2l6ZSkpCi0gICAgICAgIHJldHVybiBhbGxvY2F0b3ItPnRyeUFsbG9jYXRlKGRlZmVycmFs
Q29udGV4dCk7Ci0gICAgCi0gICAgaWYgKHNpemUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0aW9u
Q3V0b2ZmKCkKLSAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYpIHsK
LSAgICAgICAgZGF0YUxvZygiRkFUQUw6IGF0dGFtcHRpbmcgdG8gYWxsb2NhdGUgc21hbGwgb2Jq
ZWN0IHVzaW5nIGxhcmdlIGFsbG9jYXRpb24uXG4iKTsKLSAgICAgICAgZGF0YUxvZygiUmVxdWVz
dGVkIGFsbG9jYXRpb24gc2l6ZTogIiwgc2l6ZSwgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIG1fc3BhY2UuaGVhcCgpLT5jb2xs
ZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgCi0gICAgc2l6ZSA9
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRTcGFjZTo6c2l6ZVN0ZXA+KHNpemUpOwot
ICAgIExhcmdlQWxsb2NhdGlvbiogYWxsb2NhdGlvbiA9IExhcmdlQWxsb2NhdGlvbjo6dHJ5Q3Jl
YXRlKCptX3NwYWNlLm1faGVhcCwgc2l6ZSwgdGhpcyk7Ci0gICAgaWYgKCFhbGxvY2F0aW9uKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBtX3NwYWNlLm1fbGFyZ2VBbGxvY2F0
aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7Ci0gICAgbV9zcGFjZS5tX2hlYXAtPmRpZEFsbG9jYXRl
KHNpemUpOwotICAgIG1fc3BhY2UubV9jYXBhY2l0eSArPSBzaXplOwotICAgIAotICAgIG1fbGFy
Z2VBbGxvY2F0aW9ucy5hcHBlbmQoYWxsb2NhdGlvbik7Ci0gICAgICAgIAotICAgIHJldHVybiBh
bGxvY2F0aW9uLT5jZWxsKCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTdWJzcGFjZTo6ZGlk
QWxsb2NhdGUodm9pZCogcHRyKQotewotICAgIFVOVVNFRF9QQVJBTShwdHIpOwotICAgIAotICAg
IC8vIFRoaXMgaXMgdXNlZnVsIGZvciBsb2dnaW5nIGFsbG9jYXRpb25zLCBvciBkb2luZyBvdGhl
ciBraW5kcyBvZiBkZWJ1Z2dpbmcgaGFja3MuIEp1c3QgbWFrZQotICAgIC8vIHN1cmUgeW91IEpT
Q19mb3JjZUdDU2xvd1BhdGhzPXRydWUuCi19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTE0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFp
bHVyZU1vZGUuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZFNw
YWNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMzIsNDQgKzMzLDMwIEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKK2NsYXNz
IEhlYXBDZWxsVHlwZTsKIAogLy8gVGhlIGlkZWEgb2Ygc3Vic3BhY2VzIGlzIHRoYXQgeW91IGNh
biBwcm92aWRlIHNvbWUgY3VzdG9tIGJlaGF2aW9yIGZvciB5b3VyIG9iamVjdHMgaWYgeW91CiAv
LyBhbGxvY2F0ZSB0aGVtIGZyb20gYSBjdXN0b20gU3Vic3BhY2UgaW4gd2hpY2ggeW91IG92ZXJy
aWRlIHNvbWUgb2YgdGhlIHZpcnR1YWwgbWV0aG9kcy4gVGhpcwotLy8gY2xhc3MgaXMgdGhlIGJh
c2VjbGFzcyBvZiBTdWJzcGFjZXMgYW5kIGl0IHByb3ZpZGVzIGEgcmVhc29uYWJsZSBkZWZhdWx0
IGltcGxlbWVudGF0aW9uLCB3aGVyZQotLy8gc3dlZXBpbmcgYXNzdW1lcyBpbW1vcnRhbCBzdHJ1
Y3R1cmUuIFRoZSBjb21tb24gd2F5cyBvZiBvdmVycmlkaW5nIHRoaXMgYXJlOgotLy8KLS8vIC0g
UHJvdmlkZSBjdXN0b21pemVkIGRlc3RydWN0b3IgYmVoYXZpb3IuIFlvdSBjYW4gY2hhbmdlIGhv
dyB0aGUgZGVzdHJ1Y3RvciBpcyBjYWxsZWQuIFlvdSBjYW4KLS8vICAgYWxzbyBzcGVjaWFsaXpl
IHRoZSBkZXN0cnVjdG9yIGNhbGwgaW4gdGhlIGxvb3AuCi0vLwotLy8gLSBVc2UgdGhlIFN1YnNw
YWNlIGFzIGEgcXVpY2sgd2F5IHRvIGl0ZXJhdGUgYWxsIG9mIHRoZSBvYmplY3RzIGluIHRoYXQg
c3Vic3BhY2UuCisvLyBjbGFzcyBpcyB0aGUgYmFzZWNsYXNzIG9mIFN1YnNwYWNlcy4gVXN1YWxs
eSB5b3Ugd2lsbCB1c2UgZWl0aGVyIFN1YnNwYWNlIG9yIEZpeGVkU2l6ZVN1YnNwYWNlLgogY2xh
c3MgU3Vic3BhY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1YnNwYWNlKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBT
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGxvY2F0b3JBdHRyaWJ1dGVzLCBBbGlnbmVk
TWVtb3J5QWxsb2NhdG9yKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+U3Vic3BhY2Uo
KTsKLSAgICAKKwogICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUu
ZGF0YSgpOyB9CiAgICAgTWFya2VkU3BhY2UmIHNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFj
ZTsgfQogICAgIAogICAgIGNvbnN0IEFsbG9jYXRvckF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMoKSBj
b25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KKyAgICBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxs
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGVhcENlbGxUeXBlOyB9CiAgICAgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvciogYWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjsgfQogICAgIAotICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJy
aWRpbmcgdGhpcyBpcyB0byBzcGVjaWFsaXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9y
cy4gVGhpcyB3b24ndAotICAgIC8vIGJlIGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3Mu
IFRoaXMgbXVzdCBjYWxsIE1hcmtlZEJsb2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4K
LSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVM
aXN0Kik7Ci0gICAgCi0gICAgLy8gVGhlc2UgZ2V0IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4K
LSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOwotICAgIAotICAgIE1hcmtl
ZEFsbG9jYXRvciogdHJ5QWxsb2NhdG9yRm9yKHNpemVfdCk7Ci0gICAgTWFya2VkQWxsb2NhdG9y
KiBhbGxvY2F0b3JGb3Ioc2l6ZV90KTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
KiBhbGxvY2F0ZShzaXplX3QpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRl
KEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKLSAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQq
IHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0Kiwgc2l6ZV90KTsKKyAgICB2b2lkIGZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopOworICAgIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopOworCisgICAgdmlydHVhbCBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ckZvcihzaXplX3QsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCogYWxsb2NhdGUoc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSkgPSAwOwogICAgIAogICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICAK
QEAgLTk2LDQ4ICs4MywyNSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
ICAgICB2b2lkIGZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJik7CiAgICAgCi0gICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN1YnNwYWNlLCBtX2FsbG9jYXRvckZvclNpemVTdGVwKTsgfQotICAgIAotICAg
IE1hcmtlZEFsbG9jYXRvcioqIGFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gJm1fYWxs
b2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0KKyAgICBTdWJzcGFjZSogbmV4dFN1YnNwYWNlSW5BbGln
bmVkTWVtb3J5QWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0U3Vic3BhY2VJbkFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I7IH0KKyAgICB2b2lkIHNldE5leHRTdWJzcGFjZUluQWxpZ25lZE1l
bW9yeUFsbG9jYXRvcihTdWJzcGFjZSogc3Vic3BhY2UpIHsgbV9uZXh0U3Vic3BhY2VJbkFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IgPSBzdWJzcGFjZTsgfQogCi1wcml2YXRlOgotICAgIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yRm9yU2xvdyhzaXplX3QpOwotICAgIAotICAgIC8vIFRoZXNlIHNs
b3cgcGF0aHMgYXJlIGNvbmNlcm5lZCB3aXRoIGxhcmdlIGFsbG9jYXRpb25zIGFuZCBhbGxvY2F0
b3IgY3JlYXRpb24uCi0gICAgdm9pZCogYWxsb2NhdGVTbG93KEdDRGVmZXJyYWxDb250ZXh0Kiwg
c2l6ZV90KTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZVNsb3coR0NEZWZlcnJhbENvbnRleHQqLCBz
aXplX3QpOwotICAgIAotICAgIHZvaWQgZGlkQWxsb2NhdGUodm9pZCopOworcHJvdGVjdGVkOgor
ICAgIHZvaWQgaW5pdGlhbGl6ZShIZWFwQ2VsbFR5cGUqLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
Kik7CiAgICAgCiAgICAgTWFya2VkU3BhY2UmIG1fc3BhY2U7CiAgICAgCiAgICAgQ1N0cmluZyBt
X25hbWU7CiAgICAgQWxsb2NhdG9yQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisKKyAgICBIZWFw
Q2VsbFR5cGUqIG1faGVhcENlbGxUeXBlIHsgbnVsbHB0ciB9OworICAgIEFsaWduZWRNZW1vcnlB
bGxvY2F0b3IqIG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7IG51bGxwdHIgfTsKICAgICAKLSAg
ICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBtX2FsaWduZWRNZW1vcnlBbGxvY2F0b3I7Ci0gICAg
Ci0gICAgc3RkOjphcnJheTxNYXJrZWRBbGxvY2F0b3IqLCBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNs
YXNzZXM+IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXA7CiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2Zp
cnN0QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwogICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0
b3JGb3JFbXB0eUFsbG9jYXRpb24geyBudWxscHRyIH07IC8vIFVzZXMgdGhlIE1hcmtlZFNwYWNl
IGxpbmtlZCBsaXN0IG9mIGJsb2Nrcy4KICAgICBTZW50aW5lbExpbmtlZExpc3Q8TGFyZ2VBbGxv
Y2F0aW9uLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMYXJnZUFsbG9jYXRpb24+PiBtX2xhcmdlQWxs
b2NhdGlvbnM7CisgICAgU3Vic3BhY2UqIG1fbmV4dFN1YnNwYWNlSW5BbGlnbmVkTWVtb3J5QWxs
b2NhdG9yIHsgbnVsbHB0ciB9OwogfTsKIAotQUxXQVlTX0lOTElORSBNYXJrZWRBbGxvY2F0b3Iq
IFN1YnNwYWNlOjp0cnlBbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKHNpemUg
PD0gTWFya2VkU3BhY2U6OmxhcmdlQ3V0b2ZmKQotICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3JG
b3JTaXplU3RlcFtNYXJrZWRTcGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV07Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLUFMV0FZU19JTkxJTkUgTWFya2VkQWxsb2NhdG9yKiBTdWJzcGFj
ZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplIDw9IE1hcmtlZFNw
YWNlOjpsYXJnZUN1dG9mZikgewotICAgICAgICBpZiAoTWFya2VkQWxsb2NhdG9yKiByZXN1bHQg
PSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0luZGV4KHNp
emUpXSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0
b3JGb3JTbG93KHNpemUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3Miw3ICsxNTcyLDcgQEAg
cHVibGljOgogICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIsIFN0cnVjdHVyZVR5cGUg
c3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkK
ICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8
Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZvcihzaXplKTsKKyAgICAgICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAg
IGlmICghYWxsb2NhdG9yKSB7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1ODksNyArMTU4OSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBhbGxvY2F0aW9uU2l6ZSBjYW4gYmUgYWxpYXNlZCB3aXRoIGFueSBvZiB0aGUgb3Ro
ZXIgaW5wdXQgR1BScy4gSWYgaXQncyBub3QgYWxpYXNlZCB0aGVuIGl0CiAgICAgLy8gd29uJ3Qg
YmUgY2xvYmJlcmVkLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJSZWcg
cmVzdWx0R1BSLCBTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BS
UmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkK
KyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwgQ29t
cGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVnIHNj
cmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFya2Vk
U3BhY2U6OnNpemVTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUgYSBw
b3dlciBvZiB0d28uIik7CiAgICAgICAgIApAQCAtMTYwNyw3ICsxNjA3LDcgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4K
ICAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWRDZWxsKFZNJiB2bSwgR1BSUmVnIHJl
c3VsdEdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwg
R1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0
aCkKICAgICB7Ci0gICAgICAgIFN1YnNwYWNlJiBzdWJzcGFjZSA9ICpzdWJzcGFjZUZvcjxDbGFz
c1R5cGU+KHZtKTsKKyAgICAgICAgQ29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UgPSAqc3Vic3Bh
Y2VGb3I8Q2xhc3NUeXBlPih2bSk7CiAgICAgICAgIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQo
cmVzdWx0R1BSLCBzdWJzcGFjZSwgYWxsb2NhdGlvblNpemUsIHNjcmF0Y2hHUFIxLCBzY3JhdGNo
R1BSMiwgc2xvd1BhdGgpOwogICAgICAgICBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8o
c3RydWN0dXJlLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIyKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMjUx
NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dChJbnN0cnVjdGlvbgogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwogICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvcihhbGxvY2F0
aW9uU2l6ZSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxK
U0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNp
emUsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIAogICAgIFJlZ2lzdGVySUQgcmVz
dWx0UmVnID0gcmV0dXJuVmFsdWVHUFI7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSBy
ZWdUMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2
aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
b2JqZWN0KEluc3RydWN0aW9uCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAg
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yKGFs
bG9jYXRpb25TaXplKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHN1YnNwYWNl
Rm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0
aW9uU2l6ZSwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogCiAgICAgUmVnaXN0ZXJJ
RCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1Qx
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlu
bGluZXMuaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIEFM
V0FZU19JTkxJTkUgdW5zaWduZWQgQnV0dGVyZmx5OjpvcHRpbWEKIGlubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYgdm0sIEpTQ2VsbCosIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6
ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdI
ZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0u
anNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGUoc2l6ZSk7CisgICAgdm9pZCog
YmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVh
bChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaQogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5Ojp0cnlDcmVhdGUoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGlu
Z0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
LSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxs
b2NhdGUoc2l6ZSk7CisgICAgdm9pZCogYmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OlJldHVybk51bGwpOwogICAgIGlmICghYmFzZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZShiYXNlLCBwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSk7CkBAIC0xNTAsNyArMTUwLDcgQEAgaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5Ojpncm93QXJyYXlSaQogICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3Bl
cnR5Q2FwYWNpdHkpOwogICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5
Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CiAgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
dHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIG5ld0Jhc2Ug
PSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShuZXdTaXplKTsK
KyAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6
UmV0dXJuTnVsbCk7CiAgICAgaWYgKCFuZXdCYXNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgYSBtZW1jcHkuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHAJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNyBAQCB2b2lk
IERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0mCiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFsT2JqZWN0KCktPmFycmF5UHJv
dG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSk7CiAgICAgCi0gICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFyZ3VtZW50cy5raW5kKS50cnlBbGxvY2F0ZShtYXBw
ZWRBcmd1bWVudHNTaXplKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJhY2tpbmdTdG9yZSk7Cisg
ICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBl
ZEFyZ3VtZW50cy5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwobWFwcGVkQXJndW1lbnRzU2l6ZSgp
LCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgYm9vbCogb3Zl
cnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9tYXBwZWRB
cmd1bWVudHMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbGVuZ3RoOyBpLS07KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGly
ZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgCiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAg
c3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFDZWxsVHlwZTo6bmVlZHNEZXN0cnVjdGlvbik7CiAgICAgICAg
IHJldHVybiAmdm0uanNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0RXZhbEV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RFdmFsRXhlY3V0YWJsZS5oCShyZXZp
c2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RFdmFs
RXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMxLDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBEaXJlY3RFdmFsRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBFdmFsRXhlY3V0
YWJsZSB7CiBwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+CisgICAgc3Rh
dGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1
cm4gJnZtLmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7CisgICAgfQorCiAgICAgc3RhdGljIERp
cmVjdEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYs
IGJvb2wgaXNJblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93
RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1l
bnQqKTsKIHByaXZhdGU6CiAgICAgRGlyZWN0RXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29u
c3QgU291cmNlQ29kZSYsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUs
IGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRUeXBlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V2YWxFeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFibGUuaAkocmV2aXNp
b24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXZhbEV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7Ci0KKyAgICAKICAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2soKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fZXZhbENvZGVCbG9jay5nZXQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAkocmV2aXNpb24gMjI1
MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBGb3JjZSBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlIHRo
aXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RhdGljIHZvaWQgc3Vic3BhY2VGb3Io
Vk0mKSB7IH0KICAgICAgICAgCiAgICAgQ29kZUJsb2NrSGFzaCBoYXNoRm9yKENvZGVTcGVjaWFs
aXphdGlvbktpbmQpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDEyIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFNjcmlwdEV4ZWN1
dGFibGUgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDZWxsVHlwZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiAmdm0uZnVuY3Rpb25FeGVjdXRhYmxlU3Bh
Y2U7CisgICAgfQorCiAgICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKAogICAg
ICAgICBWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSwgCiAgICAgICAgIHVuc2lnbmVkIGxhc3RMaW5l
LCB1bnNpZ25lZCBlbmRDb2x1bW4sIEludHJpbnNpYyBpbnRyaW5zaWMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmgJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Myw4ICsyNjMs
NyBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmluaXRNb2RpZmllCiAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKTsKIAogICAgIGlmIChhcmdz
TGVuZ3RoKSB7Ci0gICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iua2luZCkudHJ5QWxsb2NhdGUo
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5ndGgpKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYmFja2luZ1N0b3JlKTsKKyAgICAgICAgdm9pZCogYmFja2luZ1N0b3JlID0gdm0u
Z2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21vZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvci5raW5k
KS5hbGxvY2F0ZU5vblZpcnR1YWwoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPDg+KGFyZ3NMZW5n
dGgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgICAgIGJv
b2wqIG1vZGlmaWVkQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7
CiAgICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLnNldCh2bSwgdGhpcywgbW9k
aWZpZWRBcmd1bWVudHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcmdzTGVuZ3RoOyBp
LS07KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5o
CShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNo
TWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFwQnVmZmVyOjphbGxvY2F0aW9uU2l6ZShj
YXBhY2l0eSk7Ci0gICAgICAgIHZvaWQqIGRhdGEgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS50cnlBbGxvY2F0ZShhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIHZvaWQqIGRhdGEg
PSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoYWxs
b2NhdGlvblNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7
CiAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGlyZWN0RXZhbEV4ZWN1dGFi
bGUuaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kaXJlY3RFdmFsRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMxLDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlIGZpbmFsIDogcHVi
bGljIEV2YWxFeGVjdXRhYmxlIHsKIHB1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxs
VHlwZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7
CisgICAgICAgIHJldHVybiAmdm0uaW5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlOworICAgIH0K
KwogICAgIHN0YXRpYyBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwg
Y29uc3QgU291cmNlQ29kZSYsIGJvb2wgaXNJblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0
VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUpOwogcHJp
dmF0ZToKICAgICBJbmRpcmVjdEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlz
QXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDcgKzgxLDcgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZAog
ICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUpKTsKIAogICAgICAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250aWd1b3VzVmVjdG9y
TGVuZ3RoKHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2
bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShkZWZlcnJhbENvbnRl
eHQsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgdm9pZCogdGVtcCA9
IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVhbChCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
ZnJvbUJhc2UodGVtcCwgMCwgb3V0T2ZMaW5lU3RvcmFnZSk7CkBAIC05OCw3ICs5OCw3IEBAIEpT
QXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQKICAgICB9IGVsc2UgewogICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5kZXhCaWFzID0gMDsKICAgICAgICAgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoID0gQXJyYXlTdG9yYWdlOjpvcHRpbWFsVmVjdG9yTGVuZ3RoKGluZGV4
Qmlhcywgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgdm9pZCogdGVtcCA9IHZt
LmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLnRyeUFsbG9jYXRlKGRlZmVycmFsQ29udGV4
dCwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSkpOworICAgICAgICB2b2lkKiB0
ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFs
KEJ1dHRlcmZseTo6dG90YWxTaXplKGluZGV4Qmlhcywgb3V0T2ZMaW5lU3RvcmFnZSwgdHJ1ZSwg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
dGVtcCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0g
QnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCBpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UpOwpA
QCAtMzY4LDcgKzM2OCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoY29u
c3QKICAgICAgICAgYWxsb2NhdGVkTmV3U3RvcmFnZSA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlD
YXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOwot
ICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50
cnlBbGxvY2F0ZShuZXdTaXplKTsKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIs
IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgICAgIGlmICghbmV3QWxs
b2NCYXNlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2Fw
YWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsOSBAQCBpbmxp
bmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlKFZNJiB2CiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9w
dGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoSGludCk7
Ci0gICAgICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50
cnlBbGxvY2F0ZShudWxscHRyLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxpbmVTdG9y
YWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAg
ICAgIHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0
ZU5vblZpcnR1YWwoCisgICAgICAgICAgICBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBvdXRPZkxp
bmVTdG9yYWdlLCB0cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwK
KyAgICAgICAgICAgIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7
CiAgICAgICAgIGlmICghdGVtcCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIG91dE9mTGluZVN0b3Jh
Z2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIEpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjoKICAgICAg
ICAgdm9pZCogdGVtcDsKICAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVt
ZW50U2l6ZSk7CiAgICAgICAgIGlmIChzaXplKSB7Ci0gICAgICAgICAgICB0ZW1wID0gdm0ucHJp
bWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS50cnlBbGxvY2F0ZShudWxscHRyLCBzaXplKTsK
KyAgICAgICAgICAgIHRlbXAgPSB2bS5wcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFs
bG9jYXRlTm9uVmlydHVhbChzaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJl
dHVybk51bGwpOwogICAgICAgICAgICAgaWYgKCF0ZW1wKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfSBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIENvbXBsZXRlU3Vic3BhY2U7CiBjbGFzcyBDb3B5VmlzaXRvcjsKIGNsYXNz
IEdDRGVmZXJyYWxDb250ZXh0OwogY2xhc3MgRXhlY1N0YXRlOwpAQCAtNTAsMTEgKzUxLDYgQEAg
Y2xhc3MgUHJvcGVydHlOYW1lOwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiBjbGFzcyBTdHJ1
Y3R1cmU7CiAKLWVudW0gY2xhc3MgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIHsKLSAgICBTaG91bGRB
c3NlcnRPbkZhaWx1cmUsCi0gICAgU2hvdWxkTm90QXNzZXJ0T25GYWlsdXJlCi19OwotCiBlbnVt
IGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2UgewogICAgIEhhc0FyZywKICAgICBE
b2VzTm90SGF2ZUFyZwpAQCAtODYsOCArODIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
KiB0cnlBbGxvY2F0ZUNlCiBjbGFzcyBKU0NlbGwgOiBwdWJsaWMgSGVhcENlbGwgewogICAgIGZy
aWVuZCBjbGFzcyBKU1ZhbHVlOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUsIEdDRGVmZXJyYWxDb250
ZXh0QXJnUHJlc2Vuc2U+Ci0gICAgZnJpZW5kIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcihI
ZWFwJiwgR0NEZWZlcnJhbENvbnRleHQqLCBzaXplX3QpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgZnJpZW5kIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcihIZWFwJiwgc2l6ZV90
LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAKIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSAwOwpAQCAtOTgsNyAr
OTQsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFJlZmVyIHRvIFN1YnNwYWNlIGJ5IHJlZmVy
ZW5jZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
OTg4CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYpOworICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYpOwogCiAgICAgc3RhdGljIEpTQ2VsbCogc2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0
cygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDEpKTsgfQogCkBAIC0zMjAsNyArMzE2LDcgQEAgaW5saW5lIFRvIGpzRHluYW1pY0Nhc3QoVk0m
IHZtLCBKU1ZhbHVlIAogLy8gRklYTUU6IFJlZmVyIHRvIFN1YnNwYWNlIGJ5IHJlZmVyZW5jZS4K
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5ODgKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+Ci1pbmxpbmUgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
K2lubGluZSBhdXRvIHN1YnNwYWNlRm9yKFZNJiB2bSkKIHsKICAgICByZXR1cm4gVHlwZTo6dGVt
cGxhdGUgc3Vic3BhY2VGb3I8VHlwZT4odm0pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsMzAgKzEzNSwyMSBAQCBBTFdBWVNfSU5MSU5FIFZNJiBFeGVjU3RhdGU6OnZtKCkg
Y29uc3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci1TdWJzcGFjZSogSlNDZWxs
OjpzdWJzcGFjZUZvcihWTSYgdm0pCitDb21wbGV0ZVN1YnNwYWNlKiBKU0NlbGw6OnN1YnNwYWNl
Rm9yKFZNJiB2bSkKIHsKICAgICBpZiAoQ2VsbFR5cGU6Om5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAg
ICAgIHJldHVybiAmdm0uZGVzdHJ1Y3RpYmxlQ2VsbFNwYWNlOwogICAgIHJldHVybiAmdm0uY2Vs
bFNwYWNlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUg
bW9kZSwgR0NEZWZlcnJhbENvbnRleHRBcmdQcmVzZW5zZSBkZWZlcnJhbENvbnRleHRBcmdQcmVz
ZW5jZT4KLUFMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVscGVyKEhlYXAmIGhl
YXAsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCogdHJ5QWxsb2NhdGVDZWxsSGVs
cGVyKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxD
b250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7CiAgICAgQVNTRVJU
KGRlZmVycmFsQ29udGV4dCB8fCAhRGlzYWxsb3dHQzo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVh
ZCgpKTsKICAgICBBU1NFUlQoc2l6ZSA+PSBzaXplb2YoVCkpOwotICAgIEpTQ2VsbCogcmVzdWx0
OwotICAgIGlmIChtb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6U2hvdWxkQXNzZXJ0T25G
YWlsdXJlKSB7Ci0gICAgICAgIHJlc3VsdCA9IChkZWZlcnJhbENvbnRleHRBcmdQcmVzZW5jZSA9
PSBHQ0RlZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpIYXNBcmcpCi0gICAgICAgICAgICA/IHN0
YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT5hbGxvY2F0ZShk
ZWZlcnJhbENvbnRleHQsIHNpemUpKQotICAgICAgICAgICAgOiBzdGF0aWNfY2FzdDxKU0NlbGwq
PihzdWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+YWxsb2NhdGUoc2l6ZSkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHJlc3VsdCA9IChkZWZlcnJhbENvbnRleHRBcmdQcmVzZW5jZSA9PSBHQ0Rl
ZmVycmFsQ29udGV4dEFyZ1ByZXNlbnNlOjpIYXNBcmcpCi0gICAgICAgICAgICA/IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KCpoZWFwLnZtKCkpLT50cnlBbGxvY2F0ZShkZWZl
cnJhbENvbnRleHQsIHNpemUpKQotICAgICAgICAgICAgOiBzdGF0aWNfY2FzdDxKU0NlbGwqPihz
dWJzcGFjZUZvcjxUPigqaGVhcC52bSgpKS0+dHJ5QWxsb2NhdGUoc2l6ZSkpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoIXJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
CisgICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxU
PigqaGVhcC52bSgpKS0+YWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwg
ZmFpbHVyZU1vZGUpKTsKKyAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpSZXR1cm5OdWxsICYmICFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogI2lm
IEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIEFTU0VSVCghaGVhcC52bSgpLT5pc0luaXRpYWxp
emluZ09iamVjdCgpKTsKICAgICBoZWFwLnZtKCktPnNldEluaXRpYWxpemluZ09iamVjdENsYXNz
KFQ6OmluZm8oKSk7CkBAIC0xNzAsMjUgKzE2MSwyNSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIHRy
eUFsbG9jYXRlQ2VsbEhlbHBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9pZCogYWxsb2NhdGVD
ZWxsKEhlYXAmIGhlYXAsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNl
bGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRBc3NlcnRPbkZhaWx1cmUs
IEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6OkRvZXNOb3RIYXZlQXJnPihoZWFwLCBudWxs
cHRyLCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAsIHNp
emUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIHZvaWQqIHRyeUFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwLCBzaXplX3Qg
c2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6U2hvdWxkTm90QXNzZXJ0T25GYWlsdXJlLCBHQ0RlZmVycmFsQ29udGV4dEFy
Z1ByZXNlbnNlOjpEb2VzTm90SGF2ZUFyZz4oaGVhcCwgbnVsbHB0ciwgc2l6ZSk7CisgICAgcmV0
dXJuIHRyeUFsbG9jYXRlQ2VsbEhlbHBlcjxUPihoZWFwLCBzaXplLCBudWxscHRyLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
dm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJh
bENvbnRleHQsIHNpemVfdCBzaXplKQogewotICAgIHJldHVybiB0cnlBbGxvY2F0ZUNlbGxIZWxw
ZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRBc3NlcnRPbkZhaWx1cmUsIEdDRGVm
ZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZz4oaGVhcCwgZGVmZXJyYWxDb250ZXh0LCBz
aXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxsSGVscGVyPFQ+KGhlYXAsIHNpemUsIGRl
ZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpBc3NlcnQpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogdm9pZCogdHJ5QWxsb2NhdGVDZWxsKEhlYXAmIGhlYXAsIEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIHNpemVfdCBzaXplKQogewotICAgIHJldHVy
biB0cnlBbGxvY2F0ZUNlbGxIZWxwZXI8VCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpTaG91bGRO
b3RBc3NlcnRPbkZhaWx1cmUsIEdDRGVmZXJyYWxDb250ZXh0QXJnUHJlc2Vuc2U6Okhhc0FyZz4o
aGVhcCwgZGVmZXJyYWxDb250ZXh0LCBzaXplKTsKKyAgICByZXR1cm4gdHJ5QWxsb2NhdGVDZWxs
SGVscGVyPFQ+KGhlYXAsIHNpemUsIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpSZXR1cm5OdWxsKTsKIH0KIAogaW5saW5lIGJvb2wgSlNDZWxsOjppc09iamVjdCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0LmgJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0
YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLmRl
c3RydWN0aWJsZU9iamVjdFNwYWNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHA6MjI0NTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIk1hcmtl
ZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTdWJz
cGFjZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSB7CisKK3N0cnVj
dCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBK
U0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxKU0Rlc3RydWN0
aWJsZU9iamVjdCo+KGNlbGwpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxs
KTsKKyAgICB9Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZTo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5h
bWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICA6
IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlv
biwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK3sKK30KKworSlNEZXN0cnVjdGlibGVP
YmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKQoreworfQorCit2
b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAgIGhhbmRsZS5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Cit9CisKK3Zv
aWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHJldmlz
aW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEw
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxs
VHlwZS5oIgogCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIApAQCAtNDMsMjEgKzQyLDIxIEBAIHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQogCi1KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpKU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1l
bW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxs
b2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxs
b2NhdG9yKQorSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0SGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShBbGxvY2F0b3JBdHRyaWJ1
dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQogewogfQogCi1KU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlOjp+SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSgpCitK
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZTo6fkpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlKCkKIHsKIH0KIAotdm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlz
dCkKK3ZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIGhh
bmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7
CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgRGVz
dHJveUZ1bmMoKSk7CiB9CiAKLXZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZGVz
dHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3ZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RIZWFw
Q2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgRGVzdHJveUZ1
bmMoKSh2bSwgY2VsbCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJ
KHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
ZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlN1YnNwYWNlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIDogcHVi
bGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlKCk7CisgICAgCisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6
SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0Nl
bGwqKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIlN1YnNwYWNlLmgiCisjaW5jbHVkZSAiSGVhcENlbGxUeXBlLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCi1jbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIDogcHVibGljIFN1YnNw
YWNlIHsKK2NsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlIDogcHVibGljIEhl
YXBDZWxsVHlwZSB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoKTsKICAgICAKICAgICB2b2lkIGZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5j
cHAJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5o
IgotCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
bmFtZXNwYWNlIHsKLQotc3RydWN0IERlc3Ryb3lGdW5jIHsKLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0
YXRpY19jYXN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Kj4oY2VsbCktPmNsYXNzSW5mbygpLT5tZXRo
b2RUYWJsZS5kZXN0cm95KGNlbGwpOwotICAgIH0KLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQotCi1KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpKU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwgaGVhcCwgQWxsb2NhdG9yQXR0cmli
dXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSwgYWxsb2NhdG9yKQotewot
fQotCi1KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjp+SlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZSgpCi17Ci19Ci0KLXZvaWQgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6Zmlu
aXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3Qp
Ci17Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0
cm95RnVuYygpKTsKLX0KLQotdm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0
cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQotewotICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2Uu
aAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
ZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCShub25leGlzdGVudCkKQEAgLTEsNDIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKLXB1Ymxp
YzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENT
dHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKCk7Ci0gICAg
Ci0gICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDIyNTE0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgSlNMZXhpY2FsRW52aXJvbm1lbnQg
OiBwdWJsaWMgSlNTeQogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNw
YWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFDZWxsVHlw
ZTo6bmVlZHNEZXN0cnVjdGlvbik7CiAgICAgICAgIHJldHVybiAmdm0uanNWYWx1ZUdpZ2FjYWdl
Q2VsbFNwYWNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMjI1MTQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lPgotICAgIHN0
YXRpYyBTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnNl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmNwcDoyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlT
X0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgewor
ICAgICAgICBzdGF0aWNfY2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCktPmNs
YXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KGNlbGwpOworICAgIH0KK307CisKK30gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQorCitKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6
OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhl
YXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICA6IFN1YnNwYWNlKG5h
bWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6
OkpTQ2VsbCksIGFsbG9jYXRvcikKK3sKK30KKworSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlOjp+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCkKK3sKK30KKwordm9p
ZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJs
b2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAgIGhhbmRsZS5m
aW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7Cit9CisK
K3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwg
SlNDZWxsKiBjZWxsKQoreworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBD
ZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgiCisjaW5jbHVkZSAi
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIgogCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIlN1
YnNwYWNlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDMsMjEgKzQyLDIxIEBA
IHN0cnVjdCBEZXN0cm95RnVuYyB7CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3Iq
IGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0
ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OkpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKEFsbG9jYXRvckF0dHJpYnV0ZXMo
TmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCiB7CiB9CiAKLUpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFj
ZSgpCitKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOjp+SlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5k
bGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhl
YXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVl
TGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNl
KGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5n
SGVhcENlbGxUeXBlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAotdm9pZCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwp
Cit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU6OmRlc3Ryb3koVk0m
IHZtLCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgRGVzdHJveUZ1bmMoKSh2bSwgY2VsbCk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAy
MjQ1MzYpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5oOjIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU3Vic3BhY2UuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSA6
IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVz
dHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmgJKHJldmlzaW9u
IDIyNDUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKKyNpbmNsdWRlICJI
ZWFwQ2VsbFR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitjbGFzcyBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlIDogcHVibGljIEhlYXBDZWxsVHlwZSB7CiBwdWJs
aWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3Bh
Y2UoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVh
cENlbGxUeXBlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZSgpOwogICAgIAogICAgIHZvaWQgZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0
cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UuaCIKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNs
dWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBEZXN0cm95RnVuYyB7
Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNv
bnN0Ci0gICAgewotICAgICAgICBzdGF0aWNfY2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
Kj4oY2VsbCktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KGNlbGwpOwotICAgIH0K
LX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2U6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5h
bWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6
IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlv
biwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKLXsKLX0KLQotSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCkK
LXsKLX0KLQotdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3
ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQotewot
ICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1
bmMoKSk7Ci19Ci0KLXZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0
cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQotewotICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlLmgJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCShub25leGlzdGVudCkK
QEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlN1YnNwYWNlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UgOiBwdWJs
aWMgU3Vic3BhY2UgewotcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7Ci0gICAgCi0gICAgdm9pZCBmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3ko
Vk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDIyNTE0
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIC8vIFdlIHNwZWNpYWxpemUgdGhl
IHN0cmluZyBzdWJzcGFjZSB0byBnZXQgdGhlIGZhc3Rlc3QgcG9zc2libGUgc3dlZXAuIFRoaXMg
d291bGRuJ3QgYmUKICAgICAvLyBuZWNlc3NhcnkgaWYgSlNTdHJpbmcgZGlkbid0IGhhdmUgYSBk
ZXN0cnVjdG9yLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lPgotICAgIHN0YXRpYyBTdWJzcGFjZSog
c3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCiAgICAgewogICAgICAgICByZXR1cm4gJnZtLnN0cmluZ1NwYWNlOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSGVhcENlbGxU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0hlYXBDZWxsVHlwZS5jcHAJKHJldmlzaW9uIDIyNDUzNikJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHA6MjI0NTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU3RyaW5nU3Vi
c3BhY2UuaCIKKworI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBEZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lO
TElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAg
ICAgICBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGNlbGwpLT5KU1N0cmluZzo6fkpTU3RyaW5nKCk7
CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0pTU3RyaW5nU3Vic3Bh
Y2U6OkpTU3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCisgICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxv
Y2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxv
Y2F0b3IpCit7Cit9CisKK0pTU3RyaW5nU3Vic3BhY2U6On5KU1N0cmluZ1N1YnNwYWNlKCkKK3sK
K30KKwordm9pZCBKU1N0cmluZ1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFu
ZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKK3sKKyAgICBoYW5kbGUuZmluaXNoU3dl
ZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIEpT
U3RyaW5nU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgRGVz
dHJveUZ1bmMoKSh2bSwgY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdIZWFwQ2Vs
bFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsy
NCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1N0cmluZ1N1
YnNwYWNlLmgiCisjaW5jbHVkZSAiSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCIKIAogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRl
ICJTdWJzcGFjZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDIxICs0Miwy
MSBAQCBzdHJ1Y3QgRGVzdHJveUZ1bmMgewogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAot
SlNTdHJpbmdTdWJzcGFjZTo6SlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhl
YXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikKLSAgICA6IFN1YnNwYWNlKG5h
bWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6
OkpTQ2VsbCksIGFsbG9jYXRvcikKK0pTU3RyaW5nSGVhcENlbGxUeXBlOjpKU1N0cmluZ0hlYXBD
ZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5cGUoQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rl
c3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsKIH0KIAotSlNTdHJpbmdTdWJzcGFjZTo6
fkpTU3RyaW5nU3Vic3BhY2UoKQorSlNTdHJpbmdIZWFwQ2VsbFR5cGU6On5KU1N0cmluZ0hlYXBD
ZWxsVHlwZSgpCiB7CiB9CiAKLXZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit2b2lkIEpTU3Ry
aW5nSGVhcENlbGxUeXBlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUs
IEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vi
c3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdIZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCi12b2lkIEpT
U3RyaW5nU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit2b2lkIEpTU3Ry
aW5nSGVhcENlbGxUeXBlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQogewogICAgIERl
c3Ryb3lGdW5jKCkodm0sIGNlbGwpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaDoy
MjQ1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxs
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJT
dWJzcGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNTdHJpbmdTdWJzcGFjZSA6
IHB1YmxpYyBTdWJzcGFjZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJp
bmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTdHJpbmdTdWJzcGFjZSgpOworICAg
IAorICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCShyZXZpc2lvbiAyMjQ1MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0hlYXBDZWxsVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkhlYXBDZWxsVHlwZS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY2xhc3MgSlNTdHJpbmdTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7CitjbGFz
cyBKU1N0cmluZ0hlYXBDZWxsVHlwZSA6IHB1YmxpYyBIZWFwQ2VsbFR5cGUgewogcHVibGljOgot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFw
JiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1
YWwgfkpTU3RyaW5nU3Vic3BhY2UoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZ0hl
YXBDZWxsVHlwZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU3RyaW5nSGVh
cENlbGxUeXBlKCk7CiAgICAgCiAgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFu
ZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwq
KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTU3RyaW5nU3Vic3BhY2UuaCIKLQot
I2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LSNpbmNsdWRlICJTdWJzcGFjZUlubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVz
cGFjZSB7Ci0KLXN0cnVjdCBEZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG9w
ZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0aWNf
Y2FzdDxKU1N0cmluZyo+KGNlbGwpLT5KU1N0cmluZzo6fkpTU3RyaW5nKCk7Ci0gICAgfQotfTsK
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUpTU3RyaW5nU3Vic3BhY2U6OkpTU3RyaW5n
U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1
dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpLCBhbGxvY2F0b3IpCi17Ci19
Ci0KLUpTU3RyaW5nU3Vic3BhY2U6On5KU1N0cmluZ1N1YnNwYWNlKCkKLXsKLX0KLQotdm9pZCBK
U1N0cmluZ1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUs
IEZyZWVMaXN0KiBmcmVlTGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vi
c3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTU3RyaW5nU3Vic3Bh
Y2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgRGVzdHJveUZ1bmMoKSh2
bSwgY2VsbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCShyZXZpc2lvbiAyMjUx
NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU3Vic3BhY2Uu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTU3RyaW5nU3Vic3BhY2UgOiBwdWJsaWMg
U3Vic3BhY2UgewotcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU3RyaW5nU3Vic3Bh
Y2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU3RyaW5nU3Vic3BhY2UoKTsKLSAgICAKLSAgICB2
b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRl
OwotICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjI1MTQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTIgQEAgcHVibGljOgogICAgIHR5cGVkZWYgU2Ny
aXB0RXhlY3V0YWJsZSBCYXNlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZ2bS5tb2R1bGVQcm9ncmFt
RXhlY3V0YWJsZVNwYWNlOworICAgIH0KKwogICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00Miw2ICs0MiwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5h
dGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShWTSYsIFJlZjxKSVRDb2RlPiYmIGNhbGxUaHVuaywgTmF0
aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFJlZjxKSVRDb2RlPiYmIGNvbnN0cnVjdFRodW5rLCBOYXRp
dmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgSW50cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVy
ZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgorICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZ2
bS5uYXRpdmVFeGVjdXRhYmxlU3BhY2U7CisgICAgfQogCiAgICAgQ29kZUJsb2NrSGFzaCBoYXNo
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9ncmFtRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIy
NTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb2dyYW1FeGVjdXRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEyIEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IFNjcmlwdEV4ZWN1dGFibGUgQmFzZTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiAmdm0ucHJvZ3JhbUV4
ZWN1dGFibGVTcGFjZTsKKyAgICB9CisKICAgICBzdGF0aWMgUHJvZ3JhbUV4ZWN1dGFibGUqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKICAgICB7CiAg
ICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMjI1MTQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlD
cmVhdGVVbmluaXRpYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVj
dHVyZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgYm9vbCBjcmVhdGVVbmluaXRpYWxpemVkID0gZ2xv
YmFsT2JqZWN0LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICB2b2lk
KiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UudHJ5QWxsb2NhdGUoZGVm
ZXJyYWxDb250ZXh0LCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKKyAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxs
b2NhdGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsK
ICAgICBpZiAoVU5MSUtFTFkoIXRlbXApKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2VsbFR5cGU+Ci0gICAgc3RhdGljIFN1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0p
CisgICAgc3RhdGljIENvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFDZWxsVHlwZTo6bmVlZHNEZXN0cnVjdGlvbik7CiAg
ICAgICAgIHJldHVybiAmdm0uanNWYWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVy
U2V0dGVyLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKKyNpbmNsdWRlICJEaXJlY3RFdmFs
RXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkVycm9y
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJFdmFsQ29kZUJsb2NrLmgiCkBAIC00Nyw2ICs0OCw3IEBA
CiAjaW5jbHVkZSAiRmFzdE1hbGxvY0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKICNpbmNsdWRl
ICJGdW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJHaWdhY2FnZUFs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKQEAgLTU3LDYgKzU5LDcgQEAKICNpbmNsdWRlICJIb3N0
Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIklu
Y3JlbWVudGFsU3dlZXBlci5oIgorI2luY2x1ZGUgIkluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCIK
ICNpbmNsdWRlICJJbmZlcnJlZFR5cGVUYWJsZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtNjQsNiArNjcsNyBAQAogI2luY2x1ZGUgIkpTQVBJ
VmFsdWVXcmFwcGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIgogI2lu
Y2x1ZGUgIkpTRml4ZWRBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgpAQCAtNzMsMjQgKzc3LDMwIEBACiAjaW5jbHVk
ZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5j
bHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIgogI2luY2x1ZGUgIkpTU2NyaXB0RmV0Y2hQYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiSlNTY3JpcHRGZXRjaGVyLmgiCiAjaW5jbHVkZSAiSlNTZXQu
aCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTb3VyY2VDb2RlLmgi
CisjaW5jbHVkZSAiSlNTdHJpbmdIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRl
UmVnaXN0cnlLZXkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3Bl
LmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRl
ICJMb29rdXAuaCIKICNpbmNsdWRlICJNaW5pbXVtUmVzZXJ2ZWRab25lU2l6ZS5oIgogI2luY2x1
ZGUgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJOYXRp
dmVTdGRGdW5jdGlvbkNlbGwuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgogI2luY2x1ZGUgIlBhcnNl
ci5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQcm9ncmFtQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiUHJvZ3JhbUV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJQcm9t
aXNlRGVmZXJyZWRUaW1lci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAj
aW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKQEAgLTE3MSwxOCArMTgxLDMzIEBAIFZNOjpWTShWTVR5
cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGZhc3RNYWxsb2NBbGxvY2F0b3Io
c3RkOjptYWtlX3VuaXF1ZTxGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oKSkKICAg
ICAsIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8R2lnYWNhZ2VB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yPihHaWdhY2FnZTo6UHJpbWl0aXZlKSkKICAgICAsIGpzVmFs
dWVHaWdhY2FnZUFsbG9jYXRvcihzdGQ6Om1ha2VfdW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcj4oR2lnYWNhZ2U6OkpTVmFsdWUpKQotICAgICwgcHJpbWl0aXZlR2lnYWNhZ2VB
dXhpbGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIEFsbG9j
YXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFy
eSksIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQotICAgICwganNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgQXV4aWxpYXJ5IiwgaGVhcCwgQWxs
b2NhdG9yQXR0cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6QXV4aWxp
YXJ5KSwganNWYWx1ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQotICAgICwgY2VsbFNwYWNlKCJK
U0NlbGwiLCBoZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24s
IEhlYXBDZWxsOjpKU0NlbGwpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQotICAgICwganNW
YWx1ZUdpZ2FjYWdlQ2VsbFNwYWNlKCJKU1ZhbHVlIEdpZ2FjYWdlIEpTQ2VsbCIsIGhlYXAsIEFs
bG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2Vs
bCksIGpzVmFsdWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKLSAgICAsIGRlc3RydWN0aWJsZUNl
bGxTcGFjZSgiRGVzdHJ1Y3RpYmxlIEpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMo
TmVlZHNEZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGZhc3RNYWxsb2NBbGxvY2F0b3Iu
Z2V0KCkpCi0gICAgLCBzdHJpbmdTcGFjZSgiSlNTdHJpbmciLCBoZWFwLCBmYXN0TWFsbG9jQWxs
b2NhdG9yLmdldCgpKQotICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0IiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIGVhZ2Vy
bHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlKCJFYWdlcmx5IFN3ZXB0IEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0IiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKLSAgICAsIHNlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UoIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTcGFjZSIs
IGhlYXAsIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBhdXhpbGlhcnlIZWFwQ2Vs
bFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxIZWFwQ2VsbFR5cGU+KEFsbG9jYXRvckF0dHJpYnV0ZXMo
RG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGlsaWFyeSkpKQorICAgICwgY2Vs
bEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEhlYXBDZWxsVHlwZT4oQWxsb2NhdG9yQXR0
cmlidXRlcyhEb2VzTm90TmVlZERlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkpCisgICAg
LCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SGVhcENlbGxU
eXBlPihBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0Nl
bGwpKSkKKyAgICAsIHN0cmluZ0hlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpTU3RyaW5n
SGVhcENlbGxUeXBlPigpKQorICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0
ZDo6bWFrZV91bmlxdWU8SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCisgICAg
LCBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQotICAgICwgd2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFjZSgiSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1NwYWNlIiwgaGVhcCwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAgICAsIHdl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZT4oKSkKICNlbmRpZgorICAgICwgcHJpbWl0aXZlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAs
IGF1eGlsaWFyeUhlYXBDZWxsVHlwZS5nZXQoKSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3Iu
Z2V0KCkpCisgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNWYWx1ZSBHaWdh
Y2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0KCksIGpzVmFs
dWVHaWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKKyAgICAsIGNlbGxTcGFjZSgiSlNDZWxsIiwgaGVh
cCwgY2VsbEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQoKSkKKyAg
ICAsIGpzVmFsdWVHaWdhY2FnZUNlbGxTcGFjZSgiSlNWYWx1ZSBHaWdhY2FnZSBKU0NlbGwiLCBo
ZWFwLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0
KCkpCisgICAgLCBkZXN0cnVjdGlibGVDZWxsU3BhY2UoIkRlc3RydWN0aWJsZSBKU0NlbGwiLCBo
ZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2Nh
dG9yLmdldCgpKQorICAgICwgc3RyaW5nU3BhY2UoIkpTU3RyaW5nIiwgaGVhcCwgc3RyaW5nSGVh
cENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwgZGVzdHJ1
Y3RpYmxlT2JqZWN0U3BhY2UoIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IiwgaGVhcCwgZGVzdHJ1Y3Rp
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBmYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQor
ICAgICwgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2UoIkVhZ2VybHkgU3dlcHQg
SlNEZXN0cnVjdGlibGVPYmplY3QiLCBoZWFwLCBkZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5
cGUuZ2V0KCksIGZhc3RNYWxsb2NBbGxvY2F0b3IuZ2V0KCkpCisgICAgLCBzZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFNwYWNlKCJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3BhY2UiLCBoZWFwLCBz
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9j
YXRvci5nZXQoKSkKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgLCB3ZWJBc3NlbWJseUNv
ZGVCbG9ja1NwYWNlKCJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3BhY2UiLCBoZWFwLCB3ZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwgZmFzdE1hbGxvY0FsbG9jYXRvci5nZXQo
KSkKKyNlbmRpZgorICAgICwgbmF0aXZlRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE5hdGl2ZUV4ZWN1dGFi
bGUpCisgICAgLCBkaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIERpcmVjdEV2YWxFeGVjdXRh
YmxlKQorICAgICwgaW5kaXJlY3RFdmFsRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9JTklU
KGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEluZGlyZWN0RXZhbEV4
ZWN1dGFibGUpCisgICAgLCBmdW5jdGlvbkV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0VfSU5J
VChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBGdW5jdGlvbkV4ZWN1
dGFibGUpCisgICAgLCBtb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVNwYWNlIElTT19TVUJTUEFDRV9J
TklUKGhlYXAsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIE1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlKQorICAgICwgcHJvZ3JhbUV4ZWN1dGFibGVTcGFjZSBJU09fU1VCU1BBQ0Vf
SU5JVChoZWFwLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLmdldCgpLCBQcm9ncmFtRXhl
Y3V0YWJsZSkKICAgICAsIHZtVHlwZSh2bVR5cGUpCiAgICAgLCBjbGllbnREYXRhKDApCiAgICAg
LCB0b3BFbnRyeUZyYW1lKG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNhbGxEYXRh
LmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2luY2x1ZGUgIkNvbXBs
ZXRlU3Vic3BhY2UuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAi
Q29udHJvbEZsb3dQcm9maWxlci5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZUNhY2hlLmgiCkBA
IC0zOSwyMCArNDAsMTYgQEAKICNpbmNsdWRlICJGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCIK
ICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW50cmluc2ljLmgiCisjaW5jbHVkZSAiSXNv
U3Vic3BhY2UuaCIKICNpbmNsdWRlICJKSVRUaHVua3MuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oIgogI2luY2x1ZGUg
IkpTTG9jay5oIgotI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5o
IgotI2luY2x1ZGUgIkpTU3RyaW5nU3Vic3BhY2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIK
ICNpbmNsdWRlICJNaWNyb3Rhc2suaCIKICNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgogI2lu
Y2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZUNhY2hlLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2UuaCIKICNpbmNsdWRlICJUZW1wbGF0
ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVk
ZSAiVk1UcmFwcy5oIgpAQCAtMTA4LDkgKzEwNSwxMyBAQCBjbGFzcyBIZWFwUHJvZmlsZXI7CiBj
bGFzcyBJZGVudGlmaWVyOwogY2xhc3MgSW50ZXJwcmV0ZXI7CiBjbGFzcyBKU0N1c3RvbUdldHRl
clNldHRlckZ1bmN0aW9uOworY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU7
CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgSlNSdW5Mb29w
VGltZXI7CitjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlOworY2xh
c3MgSlNTdHJpbmdIZWFwQ2VsbFR5cGU7CitjbGFzcyBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlOwogY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOwogY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKQEAgLTI5MCw5ICsyOTEsMTkg
QEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxGYXN0TWFsbG9jQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcj4gZmFzdE1hbGxvY0FsbG9jYXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2lnYWNh
Z2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R2lnYWNhZ2VBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPiBqc1ZhbHVl
R2lnYWNhZ2VBbGxvY2F0b3I7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGVhcENlbGxUeXBlPiBh
dXhpbGlhcnlIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBDZWxsVHlwZT4g
Y2VsbEhlYXBDZWxsVHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGVhcENlbGxUeXBlPiBkZXN0
cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU1N0cmluZ0hl
YXBDZWxsVHlwZT4gc3RyaW5nSGVhcENlbGxUeXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZT4gZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENl
bGxUeXBlPiBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZTsKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisgICAgc3RkOjp1bmlxdWVfcHRyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlOworI2VuZGlmCiAg
ICAgCi0gICAgU3Vic3BhY2UgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gVHlw
ZWQgYXJyYXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVyZS4KLSAgICBTdWJzcGFj
ZSBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gQnV0dGVyZmxpZXMsIGFycmF5cyBv
ZiBKU1ZhbHVlcywgZXRjIGdvIGhlcmUuCisgICAgQ29tcGxldGVTdWJzcGFjZSBwcmltaXRpdmVH
aWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBUeXBlZCBhcnJheXMsIHN0cmluZ3MsIGJpdHZlY3Rv
cnMsIGV0YyBnbyBoZXJlLgorICAgIENvbXBsZXRlU3Vic3BhY2UganNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2U7IC8vIEJ1dHRlcmZsaWVzLCBhcnJheXMgb2YgSlNWYWx1ZXMsIGV0YyBnbyBo
ZXJlLgogCiAgICAgLy8gV2UgbWFrZSBjcm9zcy1jdXR0aW5nIGFzc3VtcHRpb25zIGFib3V0IHR5
cGVkIGFycmF5cyBiZWluZyBpbiB0aGUgcHJpbWl0aXZlIEdpZ2FjYWdlIGFuZCBidXR0ZXJmbGll
cwogICAgIC8vIGJlaW5nIGluIHRoZSBKU1ZhbHVlIGdpZ2FjYWdlLiBGb3Igc29tZSB0eXBlcywg
aXQncyBzdXBlciBvYnZpb3VzIHdoZXJlIHRoZXkgc2hvdWxkIGdvLCBhbmQgc28gd2UKQEAgLTMw
MCw3ICszMTEsNyBAQCBwdWJsaWM6CiAgICAgLy8gY29uc3RhbnQgc29tZXdoZXJlLgogICAgIC8v
IEZJWE1FOiBNYXliZSBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgZXZlcnlvbmUgYWJzdHJhY3RlZCB0
aGlzPwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUy
NDgKLSAgICBBTFdBWVNfSU5MSU5FIFN1YnNwYWNlJiBnaWdhY2FnZUF1eGlsaWFyeVNwYWNlKEdp
Z2FjYWdlOjpLaW5kIGtpbmQpCisgICAgQUxXQVlTX0lOTElORSBDb21wbGV0ZVN1YnNwYWNlJiBn
aWdhY2FnZUF1eGlsaWFyeVNwYWNlKEdpZ2FjYWdlOjpLaW5kIGtpbmQpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBHaWdhY2FnZTo6UHJpbWl0aXZlOgpAQCAt
MzE1LDE2ICszMjYsMjMgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICAvLyBXaGVuZXZlciBw
b3NzaWJsZSwgdXNlIHN1YnNwYWNlRm9yPENlbGxUeXBlPih2bSkgdG8gZ2V0IG9uZSBvZiB0aGVz
ZSBzdWJzcGFjZXMuCi0gICAgU3Vic3BhY2UgY2VsbFNwYWNlOwotICAgIFN1YnNwYWNlIGpzVmFs
dWVHaWdhY2FnZUNlbGxTcGFjZTsKLSAgICBTdWJzcGFjZSBkZXN0cnVjdGlibGVDZWxsU3BhY2U7
Ci0gICAgSlNTdHJpbmdTdWJzcGFjZSBzdHJpbmdTcGFjZTsKLSAgICBKU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlOwotICAgIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7Ci0gICAg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlIHNlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSBjZWxsU3BhY2U7CisgICAgQ29tcGxldGVTdWJz
cGFjZSBqc1ZhbHVlR2lnYWNhZ2VDZWxsU3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSBkZXN0
cnVjdGlibGVDZWxsU3BhY2U7CisgICAgQ29tcGxldGVTdWJzcGFjZSBzdHJpbmdTcGFjZTsKKyAg
ICBDb21wbGV0ZVN1YnNwYWNlIGRlc3RydWN0aWJsZU9iamVjdFNwYWNlOworICAgIENvbXBsZXRl
U3Vic3BhY2UgZWFnZXJseVN3ZXB0RGVzdHJ1Y3RpYmxlT2JqZWN0U3BhY2U7CisgICAgQ29tcGxl
dGVTdWJzcGFjZSBzZWdtZW50ZWRWYXJpYWJsZU9iamVjdFNwYWNlOwogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKLSAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2Ugd2ViQXNzZW1ibHlD
b2RlQmxvY2tTcGFjZTsKKyAgICBDb21wbGV0ZVN1YnNwYWNlIHdlYkFzc2VtYmx5Q29kZUJsb2Nr
U3BhY2U7CiAjZW5kaWYKKyAgICAKKyAgICBJc29TdWJzcGFjZSBuYXRpdmVFeGVjdXRhYmxlU3Bh
Y2U7CisgICAgSXNvU3Vic3BhY2UgZGlyZWN0RXZhbEV4ZWN1dGFibGVTcGFjZTsKKyAgICBJc29T
dWJzcGFjZSBpbmRpcmVjdEV2YWxFeGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgZnVu
Y3Rpb25FeGVjdXRhYmxlU3BhY2U7CisgICAgSXNvU3Vic3BhY2UgbW9kdWxlUHJvZ3JhbUV4ZWN1
dGFibGVTcGFjZTsKKyAgICBJc29TdWJzcGFjZSBwcm9ncmFtRXhlY3V0YWJsZVNwYWNlOwogCiAg
ICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZT4KLSAg
ICBzdGF0aWMgU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICBzdGF0aWMgQ29tcGxl
dGVTdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKICAgICAgICAgcmV0dXJuICZ2
bS53ZWJBc3NlbWJseUNvZGVCbG9ja1NwYWNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1MzYpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA6
MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja0hlYXBDZWxsVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgiCisK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIHsKKworc3RydWN0IERlc3Ryb3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgb3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKKyAgICB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19maW5hbDxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPjo6dmFs
dWUsICJPdGhlcndpc2UsIHRoaXMgY29kZSB3b3VsZCBub3QgYmUgY29ycmVjdC4iKTsKKyAgICAg
ICAgSlNXZWJBc3NlbWJseUNvZGVCbG9jazo6aW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KGNl
bGwpOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2U6OkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZShDU3Ry
aW5nIG5hbWUsIEhlYXAmIGhlYXAsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqIGFsbG9jYXRvcikK
KyAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0ZXMoTmVlZHNEZXN0
cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCksIGFsbG9jYXRvcikKK3sKK30KKworSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCkK
K3sKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAg
IGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMo
KSk7Cit9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIERlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tI
ZWFwQ2VsbFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuY3BwCShyZXZpc2lvbiAyMjQ1
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQgKzI0LDEzIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5
cGUuaCIKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3Vic3BhY2VJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC00NywyMSArNDYsMjEgQEAgc3RydWN0IERlc3Ryb3lGdW5jIHsKIAogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYgaGVhcCwg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvciogYWxsb2NhdG9yKQotICAgIDogU3Vic3BhY2UobmFtZSwg
aGVhcCwgQWxsb2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlND
ZWxsKSwgYWxsb2NhdG9yKQorSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6SlNX
ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZSgpCisgICAgOiBIZWFwQ2VsbFR5cGUoQWxs
b2NhdG9yQXR0cmlidXRlcyhOZWVkc0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKIHsK
IH0KIAotSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjp+SlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlKCkKK0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU6On5KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCkKIHsKIH0KIAotdm9pZCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhh
bmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVh
cENlbGxUeXBlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVM
aXN0KiBmcmVlTGlzdCkKIHsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uo
ZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdI
ZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCi12b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3Zv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKIHsKICAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2Vs
bFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHJldmlzaW9uIDIyNDUzNikJKGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmg6MjI0NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJTdWJzcGFjZS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlIDogcHVibGljIFN1YnNwYWNlIHsKK3B1YmxpYzoKKyAgICBKU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciop
OworICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpOworICAgIAor
ICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFw
Q2VsbFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmgJKHJldmlzaW9uIDIyNDUzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFw
Q2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDE0IEBACiAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJTdWJzcGFjZS5oIgorI2luY2x1ZGUgIkhlYXBD
ZWxsVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKK2NsYXNzIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tIZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsKIHB1YmxpYzoKLSAgICBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgQWxpZ25l
ZE1lbW9yeUFsbG9jYXRvciopOwotICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZSgpOworICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoKTsKKyAg
ICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlKCk7CiAgICAgCiAg
ICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQotCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2suaCIKLSNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJTdWJz
cGFjZUlubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVj
dCBEZXN0cm95RnVuYyB7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJhdG9yKCkoVk0mLCBK
U0NlbGwqIGNlbGwpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
ZmluYWw8SlNXZWJBc3NlbWJseUNvZGVCbG9jaz46OnZhbHVlLCAiT3RoZXJ3aXNlLCB0aGlzIGNv
ZGUgd291bGQgbm90IGJlIGNvcnJlY3QuIik7Ci0gICAgICAgIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmluZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKLSAgICB9Ci19OwotCi19IC8v
IGFub255bW91cyBuYW1lc3BhY2UKLQotSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiBoZWFwLCBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi0gICAgOiBTdWJzcGFjZShuYW1lLCBo
ZWFwLCBBbGxvY2F0b3JBdHRyaWJ1dGVzKE5lZWRzRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0Nl
bGwpLCBhbGxvY2F0b3IpCi17Ci19Ci0KLUpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6
fkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpCi17Ci19Ci0KLXZvaWQgSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBo
YW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKLXsKLSAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93
aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwotfQotCi12b2lkIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKLXsK
LSAgICBEZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vi
c3BhY2UuaAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiU3Vi
c3BhY2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZSA6IHB1YmxpYyBTdWJzcGFjZSB7Ci1wdWJsaWM6Ci0gICAgSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IqKTsKLSAgICB2aXJ0dWFsIH5KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoKTsK
LSAgICAKLSAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlz
dCopIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1lbW9yeS5oCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlPgotICAgIHN0YXRpYyBTdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHN0YXRpYyBDb21wbGV0ZVN1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCiAgICAgewogICAgICAgICAvLyBXZSBob2xkIG9udG8gYSBsb3Qgb2YgbWVtb3J5
LCBzbyBpdCBtYWtlcyBhIGxvdCBvZiBzZW5zZSB0byBiZSBzd2VwdCBlYWdlcmx5LgogICAgICAg
ICByZXR1cm4gJnZtLmVhZ2VybHlTd2VwdERlc3RydWN0aWJsZU9iamVjdFNwYWNlOwpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjggQEAKKzIwMTctMTEtMTkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBHQyBzaG91bGQgc3VwcG9ydCBpc29oZWFwcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5Mjg4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBPbmUgb2YgbXkgZmF2
b3JpdGUgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoZSBHQyBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCB0
aGF0IGtub3dzIGl0cyB0YWlsLCBzbyB0aGF0CisgICAgICAgIHRoaW5ncyBnZXQgYWRkZWQgdG8g
aXQgYXQgdGhlIGVuZCByYXRoZXIgdGhhdCBhdCB0aGUgYmVnaW5uaW5nLiBJbiB0aGlzIHBhdGNo
LCBJIHVzZSB0aGlzIHRvIHB1dAorICAgICAgICB0aGUgc2FtZSBub2RlIG9uIG11bHRpcGxlIGxp
c3RzLCB3aGljaCBvdXIgZXhpc3RpbmcgbGlua2VkIGxpc3QgdGVtcGxhdGVzIGFsc28gZG9uJ3Qg
c3VwcG9ydC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBhIG5ldyBsaW5rZWQgbGlzdCB0
aGF0IGRvZXMgdGhvc2UgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBJdCBzdXBwb3J0cyBh
cHBlbmQoKS4gSXQgY291bGQgYWxzbyBzdXBwb3J0IHByZXBlbmQoKSwgYnV0IGN1cnJlbnRseSB0
aGVyZSBpcyBubyBuZWVkIGZvciBpdC4KKyAgICAgICAgCisgICAgICAgIC0gSXQgc3VwcG9ydHMg
bm9kZXMgdGhhdCBhcmUgb24gbXVsdGlwbGUgbGlzdHMuIFRoZSBHQyB1c2VzIHN0ZDo6bWVtX2Zu
KCkgdG8gY3JlYXRlIGEgbGFtYmRhIHRoYXQgdGhlCisgICAgICAgICAgbGlzdCB1c2VzIHRvIHNl
dCBuZXh0LgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL1NpbmdseUxpbmtlZExpc3RXaXRoVGFpbC5oOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6U2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6U2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsOjphcHBlbmQpOgorICAgICAgICAoV1RGOjpTaW5n
bHlMaW5rZWRMaXN0V2l0aFRhaWw6OmZpcnN0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U2luZ2x5
TGlua2VkTGlzdFdpdGhUYWlsOjpsYXN0IGNvbnN0KToKKwogMjAxNi0wOC0wNSAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHNvbWUgbWlub3IgcHJvYmxlbXMg
aW4gdGhlIFN0cmluZ0ltcGwgaGVhZGVyCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsNyBAQAog
CQkwRjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9tYXRpY1RocmVhZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb21pbmF0b3JzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVT
b3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1YmJsZVNvcnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0RDhDNzExRkMxRTdDRTAwMUQzMkFDIC8qIFNp
bmdseUxpbmtlZExpc3RXaXRoVGFpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW5nbHlMaW5rZWRMaXN0V2l0aFRhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1QkYxNjUxRjIzMTc4MzAwMjlEOTFEIC8qIE5hdHVyYWxMb29wcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QkYx
NzQxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdp
Z2FjYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QkYxNzUxRjIzRDQ5
QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdpZ2FjYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODUsNiArOTg2LDcgQEAKIAkJCQlBOEE0NzMwQTE1
MUE4MjVCMDA0MTIzRkYgLyogU2ltcGxlU3RhdHMuaCAqLywKIAkJCQk3OTUyMTIwMjFGNDI1ODg4
MDBCRDY0MjEgLyogU2luZ2xlUm9vdEdyYXBoLmggKi8sCiAJCQkJQThBNDczMEIxNTFBODI1QjAw
NDEyM0ZGIC8qIFNpbmdseUxpbmtlZExpc3QuaCAqLywKKwkJCQkwRjREOEM3MTFGQzFFN0NFMDAx
RDMyQUMgLyogU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmggKi8sCiAJCQkJQTc0ODc0NEYxN0Ew
QkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwICovLAogCQkJCUE3NDg3NDUwMTdB
MEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmggKi8sCiAJCQkJQThBNDczMEMxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNpemVMaW1pdHMuY3BwICovLApJbmRleDogU291cmNlL1dURi93dGYv
U2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
U2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93
dGYvU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2NsYXNzIFNpbmdseUxpbmtlZExpc3RXaXRoVGFpbCB7CitwdWJsaWM6CisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZmlyc3Q7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTZXROZXh0RnVuYz4KKyAgICB2b2lkIGFwcGVuZChTZXROZXh0RnVuYyYmIHNldE5leHRG
dW5jLCBUKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2ZpcnN0KSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghbV9sYXN0KTsKKyAgICAgICAgICAgIG1fZmlyc3QgPSBub2RlOwor
ICAgICAgICAgICAgbV9sYXN0ID0gbm9kZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgc3RkOjpmb3J3YXJkPFNldE5leHRGdW5jPihzZXROZXh0RnVu
YykobV9sYXN0LCBub2RlKTsKKyAgICAgICAgbV9sYXN0ID0gbm9kZTsKKyAgICB9CisgICAgCisg
ICAgVCogZmlyc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0OyB9CisgICAgVCogbGFzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGFzdDsgfQorICAgIAorcHJpdmF0ZToKKyAgICBUKiBtX2ZpcnN0IHsg
bnVsbHB0ciB9OworICAgIFQqIG1fbGFzdCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OlNpbmdseUxpbmtlZExpc3RXaXRoVGFpbDsKKwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTctMTEtMTcgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBHQyBzaG91bGQgc3VwcG9ydCBpc29oZWFwcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5Mjg4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIGJlY2F1c2Ugbm8gbmV3IGJlaGF2aW9yLgorICAgICAgICAKKyAgICAgICAgQWRvcHRpbmcg
Y2hhbmdlcyBpbiBKU0MgU3Vic3BhY2UgQVBJLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RIZWFwQ2VsbFR5cGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XcmFw
cGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvcik6
CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3Vic3BhY2VG
b3IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNW
TUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJD
b3JlSlNDbGllbnREYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpKU1ZNQ2xpZW50RGF0YTo6b3V0
cHV0Q29uc3RyYWludFNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVk1DbGllbnREYXRhOjpn
bG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorCiAy
MDE3LTExLTI1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFr
ZSBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbiBJU08gYWxsb2NhdGVkCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKyNw
cmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RI
ZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKyNwcmFnbWEgb25j
ZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFw
Q2VsbFR5cGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFw
cGVyLmNwcAkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIEpTRE9N
V2luZG93JiBKU0RPTU9iamVjdDo6ZG9tV2luZG93KCkgY28KICAgICByZXR1cm4gKmRvbVdpbmRv
dzsKIH0KIAotU3Vic3BhY2UqIG91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvcihWTSYgdm0pCitD
b21wbGV0ZVN1YnNwYWNlKiBvdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoVk0mIHZtKQogewog
ICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+
b3V0cHV0Q29uc3RyYWludFNwYWNlKCk7CiB9CiAKLVN1YnNwYWNlKiBnbG9iYWxPYmplY3RPdXRw
dXRDb25zdHJhaW50U3Vic3BhY2VGb3IoVk0mIHZtKQorQ29tcGxldGVTdWJzcGFjZSogZ2xvYmFs
T2JqZWN0T3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKFZNJiB2bSkKIHsKICAgICByZXR1cm4g
JnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmdsb2JhbE9iamVj
dE91dHB1dENvbnN0cmFpbnRTcGFjZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XcmFwcGVyLmgJKHJldmlzaW9uIDIyNTE0NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4
IEBAIHByb3RlY3RlZDoKICAgICB9CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBKU0M6OlN1YnNwYWNl
KiBvdXRwdXRDb25zdHJhaW50U3Vic3BhY2VGb3IoSlNDOjpWTSYpOwotV0VCQ09SRV9FWFBPUlQg
SlNDOjpTdWJzcGFjZSogZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKEpT
Qzo6Vk0mKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6Q29tcGxldGVTdWJzcGFjZSogb3V0cHV0Q29u
c3RyYWludFN1YnNwYWNlRm9yKEpTQzo6Vk0mKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6Q29tcGxl
dGVTdWJzcGFjZSogZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFN1YnNwYWNlRm9yKEpTQzo6
Vk0mKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSW1wbGVtZW50YXRpb25DbGFzcz4gY2xhc3MgSlNE
T01XcmFwcGVyIDogcHVibGljIEpTRE9NT2JqZWN0IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuY3BwCShyZXZp
c2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGll
bnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPGhl
YXAvTWFya2VkQmxvY2tJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9TdWJzcGFjZUlubGluZXMu
aD4KICNpbmNsdWRlIDxoZWFwL1Zpc2l0aW5nVGltZW91dC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KICNpbmNsdWRlIDxydW50aW1l
L1ZNLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIApAQCAtNDQsOCArNDYsOCBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogSlNWTUNsaWVudERhdGE6OkpTVk1DbGllbnREYXRhKFZNJiB2
bSkKICAgICA6IG1fYnVpbHRpbkZ1bmN0aW9ucyh2bSkKICAgICAsIG1fYnVpbHRpbk5hbWVzKCZ2
bSkKLSAgICAsIG1fb3V0cHV0Q29uc3RyYWludFNwYWNlKCJXZWJDb3JlIFdyYXBwZXIgdy8gT3V0
cHV0IENvbnN0cmFpbnQiLCB2bS5oZWFwLCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQot
ICAgICwgbV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgR2xvYmFs
IE9iamVjdCB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZtLmZhc3RNYWxsb2NBbGxv
Y2F0b3IuZ2V0KCkpCisgICAgLCBtX291dHB1dENvbnN0cmFpbnRTcGFjZSgiV2ViQ29yZSBXcmFw
cGVyIHcvIE91dHB1dCBDb25zdHJhaW50Iiwgdm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmdldCgpLCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQorICAgICwg
bV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2UoIldlYkNvcmUgR2xvYmFsIE9iamVj
dCB3LyBPdXRwdXQgQ29uc3RyYWludCIsIHZtLmhlYXAsIHZtLnNlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0SGVhcENlbGxUeXBlLmdldCgpLCB2bS5mYXN0TWFsbG9jQWxsb2NhdG9yLmdldCgpKQogewog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oCShyZXZpc2lvbiAyMjUxNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDggQEAg
cHVibGljOgogICAgIFdlYkNvcmVCdWlsdGluTmFtZXMmIGJ1aWx0aW5OYW1lcygpIHsgcmV0dXJu
IG1fYnVpbHRpbk5hbWVzOyB9CiAgICAgSlNCdWlsdGluRnVuY3Rpb25zJiBidWlsdGluRnVuY3Rp
b25zKCkgeyByZXR1cm4gbV9idWlsdGluRnVuY3Rpb25zOyB9CiAgICAgCi0gICAgSlNDOjpTdWJz
cGFjZSYgb3V0cHV0Q29uc3RyYWludFNwYWNlKCkgeyByZXR1cm4gbV9vdXRwdXRDb25zdHJhaW50
U3BhY2U7IH0KLSAgICBKU0M6OlN1YnNwYWNlJiBnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50
U3BhY2UoKSB7IHJldHVybiBtX2dsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZTsgfQor
ICAgIEpTQzo6Q29tcGxldGVTdWJzcGFjZSYgb3V0cHV0Q29uc3RyYWludFNwYWNlKCkgeyByZXR1
cm4gbV9vdXRwdXRDb25zdHJhaW50U3BhY2U7IH0KKyAgICBKU0M6OkNvbXBsZXRlU3Vic3BhY2Um
IGdsb2JhbE9iamVjdE91dHB1dENvbnN0cmFpbnRTcGFjZSgpIHsgcmV0dXJuIG1fZ2xvYmFsT2Jq
ZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KICAgICB2b2lkIGZvckVhY2hPdXRwdXRDb25zdHJhaW50U3BhY2UoY29uc3QgRnVuYyYg
ZnVuYykKQEAgLTc2LDggKzc2LDggQEAgcHJpdmF0ZToKICAgICBKU0J1aWx0aW5GdW5jdGlvbnMg
bV9idWlsdGluRnVuY3Rpb25zOwogICAgIFdlYkNvcmVCdWlsdGluTmFtZXMgbV9idWlsdGluTmFt
ZXM7CiAgICAgCi0gICAgSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlIG1fb3V0cHV0
Q29uc3RyYWludFNwYWNlOwotICAgIEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlIG1fZ2xvYmFsT2JqZWN0T3V0cHV0Q29uc3RyYWludFNwYWNlOworICAgIEpTQzo6Q29tcGxl
dGVTdWJzcGFjZSBtX291dHB1dENvbnN0cmFpbnRTcGFjZTsKKyAgICBKU0M6OkNvbXBsZXRlU3Vi
c3BhY2UgbV9nbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50U3BhY2U7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjI1MTQ1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTI3MzUsNyArMjczNSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgIyB0
aGlzIGp1c3QgY2FsbHMgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4sIHlvdSB1c3VhbGx5IGRvbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcy4KICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljIHZvaWQgdmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJik7XG4iKTsKICAgICAgICAgICAgIG15ICRzdWJzcGFjZUZ1bmMgPSBJc0RP
TUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKSA/ICJnbG9iYWxPYmplY3RPdXRwdXRDb25zdHJhaW50
U3Vic3BhY2VGb3IiIDogIm91dHB1dENvbnN0cmFpbnRTdWJzcGFjZUZvciI7Ci0gICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lPiBzdGF0aWMgSlND
OjpTdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pIHsgcmV0dXJuICRzdWJzcGFjZUZ1
bmModm0pOyB9XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdGVt
cGxhdGU8dHlwZW5hbWU+IHN0YXRpYyBKU0M6OkNvbXBsZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKSB7IHJldHVybiAkc3Vic3BhY2VGdW5jKHZtKTsgfVxuIik7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCg==
</data>
<flag name="review"
          id="346781"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>