<?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>223613</bug_id>
          
          <creation_ts>2021-03-22 17:04:47 -0700</creation_ts>
          <short_desc>JSGlobalObject&apos;s m_customGetterFunctionMap and m_customSetterFunctionMap should be sets, not maps, and should use both the identifier and function pointer as the key</short_desc>
          <delta_ts>2021-03-30 19:55:47 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>222518</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>ashvayka</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1742576</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-22 17:04:47 -0700</bug_when>
    <thetext>JSGlobalObject&apos;s m_customGetterFunctionMap and m_customSetterFunctionMap should be sets, not maps, and should use both the identifier and function pointer as the key.

This will allow WebCore to use the same custom getter and setter functions for multiple attributes, as is needed for CSSStyleDeclaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742584</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-22 17:11:34 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #0)
&gt; JSGlobalObject&apos;s m_customGetterFunctionMap and m_customSetterFunctionMap
&gt; should be sets, not maps, and should use both the identifier and function
&gt; pointer as the key.

Could please expand why they need to be sets, and if so, how JSFunctions would be stored? Agreed on the second part though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742592</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-22 17:17:21 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #1)
&gt; (In reply to Sam Weinig from comment #0)
&gt; &gt; JSGlobalObject&apos;s m_customGetterFunctionMap and m_customSetterFunctionMap
&gt; &gt; should be sets, not maps, and should use both the identifier and function
&gt; &gt; pointer as the key.
&gt; 
&gt; Could please expand why they need to be sets, and if so, how JSFunctions
&gt; would be stored? Agreed on the second part though.

Right, I forgot to explain that part :).

If we just change m_customGetterFunctionMap (and m_customSetterFunctionMap) from:

WeakGCMap&lt;GetValueFunc, JSCustomGetterFunction&gt;

to

WeakGCMap&lt;std::pair&lt;PropertyName, GetValueFunc&gt;, JSCustomGetterFunction&gt; 

we would increase the size of the maps considerably.

But, if we can use a set instead, we could take advantage of the fact that the JSCustomGetterFunction already stores the PropertyName and GetValueFunc. And thus, rather than increase size, we could actually make these a bit smaller, since the buckets would now just be Weak&lt;JSCustomGetterFunction&gt;.

The problem is there isn&apos;t a WeakGCSet class yet, so I&apos;ll have to figure out if it&apos;s possible to make one for a case like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742603</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-22 17:25:07 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #2)
&gt; But, if we can use a set instead, we could take advantage of the fact that
&gt; the JSCustomGetterFunction already stores the PropertyName and GetValueFunc.
&gt; And thus, rather than increase size, we could actually make these a bit
&gt; smaller, since the buckets would now just be Weak&lt;JSCustomGetterFunction&gt;.

Oh, thanks, makes total sense.

Wouldn&apos;t that slow down the value lookup to O(N)? If so, I guess it&apos;s tolerable for Object.getOwnPropertyDescriptor().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742606</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-22 17:34:54 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #3)
&gt; (In reply to Sam Weinig from comment #2)
&gt; &gt; But, if we can use a set instead, we could take advantage of the fact that
&gt; &gt; the JSCustomGetterFunction already stores the PropertyName and GetValueFunc.
&gt; &gt; And thus, rather than increase size, we could actually make these a bit
&gt; &gt; smaller, since the buckets would now just be Weak&lt;JSCustomGetterFunction&gt;.
&gt; 
&gt; Oh, thanks, makes total sense.
&gt; 
&gt; Wouldn&apos;t that slow down the value lookup to O(N)? If so, I guess it&apos;s
&gt; tolerable for Object.getOwnPropertyDescriptor().

I don&apos;t think so, but perhaps you are thinking of something I have missed. It should still be O(1). It&apos;s essentially just going from 

   HashMap&lt;GetValueFunc, Weak&lt;JSCustomGetterFunction&gt;&gt; 

to 

   HashSet&lt;Weak&lt;JSCustomGetterFunction&gt;, CustomHashTraits&gt;


The question is, can I figure out how to make that work (I am not convinced I can).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742610</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-22 17:43:34 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt; I don&apos;t think so, but perhaps you are thinking of something I have missed.
&gt; It should still be O(1). It&apos;s essentially just going from 

To preserve identity, JSObject::getOwnPropertyDescriptor() tries to lookup already created JSCustomGetterFunction by given GetValueFunc.

I might be totally missing something obvious, but is it possible to do that quickly with HashSet&lt;Weak&lt;JSCustomGetterFunction&gt;, CustomHashTraits&gt;, without iterating all the entries?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742614</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-22 17:47:34 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #5)
&gt; I might be totally missing something obvious, but is it possible to do that
&gt; quickly with HashSet&lt;Weak&lt;JSCustomGetterFunction&gt;, CustomHashTraits&gt;,
&gt; without iterating all the entries?

Oh, I see, we can use CustomHashTraits for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742618</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-22 17:53:25 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt;    HashSet&lt;Weak&lt;JSCustomGetterFunction&gt;, CustomHashTraits&gt;
&gt; 
&gt; 
&gt; The question is, can I figure out how to make that work (I am not convinced
&gt; I can).

Yeah, we could also use this approach to replace WeakGCMaps that were introduced in r274528; their std::pair&lt;&gt; keys are stored unnecessarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742619</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-22 17:55:35 -0700</bug_when>
    <thetext>An amusing list of all the classes that are not really what I want here:

JSC::WeakSet
JSC::WeakMapImpl
JSC::WeakGCMap
JSC::JSWeakSet
JSC::JSWeakMap
WTF::WeakHashSet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742622</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-22 18:05:20 -0700</bug_when>
    <thetext>Note that JITThunks is doing this for NativeExecutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744524</commentid>
    <comment_count>10</comment_count>
      <attachid>424459</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-27 11:29:37 -0700</bug_when>
    <thetext>Created attachment 424459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744525</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-27 11:30:07 -0700</bug_when>
    <thetext>Ok, here is an initial shot at this, let&apos;s see how badly this breaks things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744570</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-27 18:16:16 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #11)
&gt; Ok, here is an initial shot at this, let&apos;s see how badly this breaks things.

Looks like reinserting on hash table expand is asserting. I&apos;m guessing I didn&apos;t get WeakCustomGetterOrSetterHash::equal quite right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744571</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-27 18:18:55 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #12)
&gt; (In reply to Sam Weinig from comment #11)
&gt; &gt; Ok, here is an initial shot at this, let&apos;s see how badly this breaks things.
&gt; 
&gt; Looks like reinserting on hash table expand is asserting. I&apos;m guessing I
&gt; didn&apos;t get WeakCustomGetterOrSetterHash::equal quite right.

Interesting, there is generic support in WTF::HashTable added for WeakPtr, which allows removing reaped weak pointers on expand. Seems useful, but not needed since we have the pruning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744572</commentid>
    <comment_count>14</comment_count>
      <attachid>424478</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-27 18:38:41 -0700</bug_when>
    <thetext>Created attachment 424478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744573</commentid>
    <comment_count>15</comment_count>
      <attachid>424479</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-27 18:47:15 -0700</bug_when>
    <thetext>Created attachment 424479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744605</commentid>
    <comment_count>16</comment_count>
      <attachid>424479</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-28 03:50:07 -0700</bug_when>
    <thetext>Comment on attachment 424479
Patch

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

This patch looks great! Really appreciate your detailed ChangeLogs. I would defer r+ to a reviewer more knowledgeable on Source/WTF though.

&gt; Source/JavaScriptCore/runtime/WeakGCSet.h:74
&gt; +        return result.iterator-&gt;get();

WeakGCMap::ensureValue() has a null check here; without it, a few LayoutTests were crashing (https://bugs.webkit.org/show_bug.cgi?id=222739#c14).
r274911 fixed functor not to invoke GC, but did it eliminate the possibility of returning a zombie (non-pruned) value here?
If so, should we add an ASSERT here and, maybe, remove the null check from WeakGCMap::ensureValue()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744616</commentid>
    <comment_count>17</comment_count>
      <attachid>424499</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-28 09:18:56 -0700</bug_when>
    <thetext>Created attachment 424499
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744617</commentid>
    <comment_count>18</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-28 09:19:58 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #17)
&gt; Created attachment 424499 [details]
&gt; Patch

Added a version that utilizes the HashTraits::isReleasedWeakValue() function ensure released weak values don&apos;t survive rehashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744618</commentid>
    <comment_count>19</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-28 09:21:14 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #16)
&gt; Comment on attachment 424479 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=424479&amp;action=review
&gt; 
&gt; This patch looks great! Really appreciate your detailed ChangeLogs. I would
&gt; defer r+ to a reviewer more knowledgeable on Source/WTF though.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/WeakGCSet.h:74
&gt; &gt; +        return result.iterator-&gt;get();
&gt; 
&gt; WeakGCMap::ensureValue() has a null check here; without it, a few
&gt; LayoutTests were crashing
&gt; (https://bugs.webkit.org/show_bug.cgi?id=222739#c14).
&gt; r274911 fixed functor not to invoke GC, but did it eliminate the possibility
&gt; of returning a zombie (non-pruned) value here?
&gt; If so, should we add an ASSERT here and, maybe, remove the null check from
&gt; WeakGCMap::ensureValue()

I think that only matters for the map version, since the key can still match if the weak value has been released. In the set version, that can&apos;t happen as the key is the value, and therefor if it got released, it can&apos;t possibly match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744630</commentid>
    <comment_count>20</comment_count>
      <attachid>424505</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-28 11:42:47 -0700</bug_when>
    <thetext>Created attachment 424505
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744985</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-29 17:05:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/75980689&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745287</commentid>
    <comment_count>22</comment_count>
      <attachid>424505</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-03-30 13:44:46 -0700</bug_when>
    <thetext>Comment on attachment 424505
Patch

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

Nice. r=me

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:3528
&gt; +    using Key = std::tuple&lt;PropertyName, typename T::CustomFunctionPointer&gt;;

nit: std::pair might be a smidge nicer?

&gt; Source/JavaScriptCore/runtime/WeakGCSet.h:36
&gt; +template&lt;typename T&gt; struct WeakGCSetHashTraits : HashTraits&lt;Weak&lt;T&gt;&gt; {

style nit: Maybe  &quot;template&lt;typename T&gt;&quot; on its own line?

&gt; Source/WTF/ChangeLog:8
&gt; +        Adds a heterogenous HashSet::ensure, which allows lazy construction of the value to

nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745295</commentid>
    <comment_count>23</comment_count>
      <attachid>424690</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-30 13:56:26 -0700</bug_when>
    <thetext>Created attachment 424690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745307</commentid>
    <comment_count>24</comment_count>
      <attachid>424694</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-30 14:10:45 -0700</bug_when>
    <thetext>Created attachment 424694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745319</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-30 14:21:38 -0700</bug_when>
    <thetext>idlharness.js uses Object.getOwnPropertyDescriptor() to tests getter / setter presence, and it&apos;s also heavy on memory. Can this flaky failures (not timeouts) be related to the change?

imported/w3c/web-platform-tests/xhr/idlharness.any.worker.html:

  https://ews-build.webkit.org/#/builders/56/builds/4449
  https://ews-build.webkit.org/#/builders/56/builds/4471
  https://ews-build.webkit.org/#/builders/56/builds/4475

imported/w3c/web-platform-tests/FileAPI/idlharness.worker.html:

  https://ews-build.webkit.org/#/builders/56/builds/4471

Should we run these tests locally with --slowPathAllocsBetweenGCs=10 JSC option and --repeat-each=100 to ensure that all descriptors are correctly reported?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745334</commentid>
    <comment_count>26</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-30 14:39:32 -0700</bug_when>
    <thetext>Eek, good catch. Seems possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745335</commentid>
    <comment_count>27</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-30 14:40:24 -0700</bug_when>
    <thetext>Any idea how to see those failures? I can no longer understand the results website well enough to figure out where to find them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745341</commentid>
    <comment_count>28</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-30 14:51:27 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #27)
&gt; Any idea how to see those failures? I can no longer understand the results
&gt; website well enough to figure out where to find them.

According to the log, EWS does create pretty diffs of flaky failures but doesn&apos;t upload them if there no confirmed regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745375</commentid>
    <comment_count>29</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-30 15:48:28 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #28)
&gt; (In reply to Sam Weinig from comment #27)
&gt; &gt; Any idea how to see those failures? I can no longer understand the results
&gt; &gt; website well enough to figure out where to find them.
&gt; 
&gt; According to the log, EWS does create pretty diffs of flaky failures but
&gt; doesn&apos;t upload them if there no confirmed regressions.

Ok, will rebuild locally and see if I can repro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745455</commentid>
    <comment_count>30</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-30 19:25:44 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #25)
&gt; idlharness.js uses Object.getOwnPropertyDescriptor() to tests getter /
&gt; setter presence, and it&apos;s also heavy on memory. Can this flaky failures (not
&gt; timeouts) be related to the change?
&gt; 
&gt; imported/w3c/web-platform-tests/xhr/idlharness.any.worker.html:
&gt; 
&gt;   https://ews-build.webkit.org/#/builders/56/builds/4449
&gt;   https://ews-build.webkit.org/#/builders/56/builds/4471
&gt;   https://ews-build.webkit.org/#/builders/56/builds/4475
&gt; 
&gt; imported/w3c/web-platform-tests/FileAPI/idlharness.worker.html:
&gt; 
&gt;   https://ews-build.webkit.org/#/builders/56/builds/4471
&gt; 
&gt; Should we run these tests locally with --slowPathAllocsBetweenGCs=10 JSC
&gt; option and --repeat-each=100 to ensure that all descriptors are correctly
&gt; reported?

What does one do to get --slowPathAllocsBetweenGCs=10 in WTR? I could just set it in code and recompile, but if there is a way to enable it from the command line, that would be great (I don&apos;t see it in run-webkit-tests --help).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745456</commentid>
    <comment_count>31</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-30 19:27:30 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #29)
&gt; (In reply to Alexey Shvayka from comment #28)
&gt; &gt; (In reply to Sam Weinig from comment #27)
&gt; &gt; &gt; Any idea how to see those failures? I can no longer understand the results
&gt; &gt; &gt; website well enough to figure out where to find them.
&gt; &gt; 
&gt; &gt; According to the log, EWS does create pretty diffs of flaky failures but
&gt; &gt; doesn&apos;t upload them if there no confirmed regressions.
&gt; 
&gt; Ok, will rebuild locally and see if I can repro.

I&apos;m not seeing it locally, so I am just going to land this and see if shows up. Might have been unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745480</commentid>
    <comment_count>32</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-30 19:55:43 -0700</bug_when>
    <thetext>Committed r275261: &lt;https://commits.webkit.org/r275261&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 424694.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424459</attachid>
            <date>2021-03-27 11:29:37 -0700</date>
            <delta_ts>2021-03-27 19:14:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223613-20210327112936.patch</filename>
            <type>text/plain</type>
            <size>47027</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMS0wMy0yNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QncyBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwIGFuZCBtX2N1c3RvbVNl
dHRlckZ1bmN0aW9uTWFwIHNob3VsZCBiZSBzZXRzLCBub3QgbWFwcywgYW5kIHNob3VsZCB1c2Ug
Ym90aCB0aGUgaWRlbnRpZmllciBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcyB0aGUga2V5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM2MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSBnZW5l
cmljIFdlYWtHQ1NldCBjbGFzcyB0byBnbyB3aXRoIHRoZSBleGlzdGluZyBXZWFrR0NNYXAuCisg
ICAgICAgIC0gUmVuYW1lcyBXZWFrR0NNYXBCYXNlIHRvIFdlYWtHQ0hhc2hUYWJsZSwgbW92ZXMg
aXQgdG8gaXRzIG93biBmaWxlCisgICAgICAgICAgYW5kIG5vdyB1c2VzIGl0IGFzIHRoZSBiYXNl
IGNsYXNzIG9mIGJvdGggV2Vha0dDU2V0IGFuZCBXZWFrR0NNYXAuCisgICAgICAgIC0gUmVwbGFj
ZXMgSlNHbG9iYWxPYmplY3QncyBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9jdXN0b21TZXR0ZXJG
dW5jdGlvbk1hcAorICAgICAgICAgIHdpdGggY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvY3VzdG9t
U2V0dGVyRnVuY3Rpb25TZXQsIHVzaW5nIHRoZSBuZXcKKyAgICAgICAgICBXZWFrR0NTZXQsIGFu
ZCB1cGRhdGVzIHRoZW0gdG8gdXNlIGJvdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIAorICAg
ICAgICAgIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBrZXksIHJhdGhlciB0aGFuIGp1c3QgdGhlIGZ1
bmN0aW9uIHBvaW50ZXIgd2hpY2gKKyAgICAgICAgICBpcyB3aGF0IHRoZSBwcmV2aW91cyBjb2Rl
IGRpZC4gVGhpcyBhbGxvd3MgbXVsdGlwbGUgY3VzdG9tIGZ1bmN0aW9ucworICAgICAgICAgIHRv
IHVzZSB0aGUgc2FtZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHBvaW50ZXIgYXMgbG9uZyBhcyB0aGV5
IGhhdmUgZGlzdGluY3QKKyAgICAgICAgICBwcm9wZXJ0eSBuYW1lcywgd2hpY2ggaXMgZ29pbmcg
dG8gYmUgdXNlZCB0byBvcHRpbWl6ZSB0aGUgYmluZGluZ3MgZm9yCisgICAgICAgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcg
ZmlsZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpy
dW5FbmRQaGFzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdl
YWtHQ0hhc2hUYWJsZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZWdpc3RlcldlYWtHQ0hhc2hU
YWJsZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6cmVnaXN0ZXJXZWFrR0NNYXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpIZWFwOjp1bnJlZ2lzdGVyV2Vha0dDTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZS4gV2Vha0dDTWFw
QmFzZSAtPiBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMu
aDoKKyAgICAgICAgQWRkIFdlYWtHQ1NldElubGluZXMuaAorCisgICAgICAgICogcnVudGltZS9K
U0N1c3RvbUdldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0
b21HZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmg6Cisg
ICAgICAgICogcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbVNl
dHRlckZ1bmN0aW9uLmg6CisgICAgICAgIEFkZCBoZWxwZXIgdHlwZSBDdXN0b21GdW5jdGlvblBv
aW50ZXIgYW5kIGhlbHBlciBmdW5jdGlvbiBjdXN0b21GdW5jdGlvblBvaW50ZXIoKQorICAgICAg
ICB0byBhbGxvdyBzb21lIGdlbmVyaWMgaGFzaGluZyBjb2RlIHRvIHJ1biBvbiBlaXRoZXIgSlND
dXN0b21HZXR0ZXJGdW5jdGlvbgorICAgICAgICBvciBKU0N1c3RvbVNldHRlckZ1bmN0aW9uLgor
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6V2Vha0N1c3RvbUdldHRl
ck9yU2V0dGVySGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpXZWFr
Q3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlcGxhY2UgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9tX2N1c3RvbVNldHRlckZ1bmN0
aW9uTWFwIHdpdGggCisgICAgICAgIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvbV9jdXN0b21T
ZXR0ZXJGdW5jdGlvblNldC4gQXMgdGhlIGtleSBpcyBpbmNsdWRlZAorICAgICAgICBpbiB0aGUg
dmFsdWUsIGl0IHNhdmVzIHNwYWNlIHRvIHVzZSBhIHNldCByYXRoZXIgdGhhbiBhIG1hcC4gV2Ug
bm93IGFsc28KKyAgICAgICAgaGFzaCBhbmQgY29tcGFyZSBib3RoIHRoZSBmdW5jdGlvbiBwb2lu
dGVyIGFuZCB0aGUgcHJvcGVydHkgbmFtZSB0byBhbGxvdworICAgICAgICBzaGFyaW5nIGltcGxl
bWVudGF0aW9ucy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAg
ICAgIChKU0M6OldlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yOjplcXVhbCk6
CisgICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgorICAgICAgICBVcGRhdGUgY3JlYXRpb24g
ZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IHNldHMsIG1ha2luZyB1c2Ugb2YgdGhlCisgICAgICAg
IGVuc3VyZVZhbHVlIGZ1bmN0aW9uIGFuZCBhIEhhc2hUcmFuc2xhdG9yIGFsbG93aW5nIHRoZSB1
c2Ugb2YgYQorICAgICAgICBzdGQ6OnR1cGxlPFByb3BlcnR5TmFtZSwgRnVuY3Rpb25Qb2ludGVy
PiBhcyBhbiBhbHRlcm5hdGl2ZSBsb29rdXAKKyAgICAgICAga2V5LiBUaGlzIGFsbG93cyB1cyB0
byBhdm9pZCBjcmVhdGluZyB0aGUgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi9KU0N1c3RvbVNldHRl
ckZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgaWYgb25lIHdpdGggdGhlIHNhbWUgcHJvcGVydHkg
bmFtZSBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcmUKKyAgICAgICAgYWxyZWFkeSBpbiB0aGUgc2V0
LgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NIYXNoVGFibGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OldlYWtHQ0hhc2hUYWJsZTo6fldlYWtHQ0hhc2hUYWJsZSk6CisgICAgICAgIE1vdmVk
IGZyb20gV2Vha0dDTWFwIGFuZCByZW5hbWVkIGFzIGl0IGlzIG5vdyB0aGUgYmFzZSBvZiBib3Ro
CisgICAgICAgIFdlYWtHQ01hcCBhbmQgV2Vha0dDU2V0LgorIAorICAgICAgICAqIHJ1bnRpbWUv
V2Vha0dDTWFwLmg6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IFdlYWtHQ0hhc2hUYWJsZSBi
YXNlIGNsYXNzLgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OktleVRyYWl0c0FyZz46OldlYWtHQ01hcCk6CisgICAgICAgIChKU0M6OktleVRy
YWl0c0FyZz46On5XZWFrR0NNYXApOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBIZWFwIGZ1bmN0
aW9uIG5hbWVzIGZvciBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL1dlYWtH
Q1NldC5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ1NldElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlRyYWl0c0FyZz46OldlYWtHQ1NldCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46On5XZWFrR0NTZXQpOgorICAgICAgICAoSlNDOjpUcmFpdHNBcmc+OjpmaW5k
KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6
cHJ1bmVTdGFsZUVudHJpZXMpOgorICAgICAgICBBZGRlZCBhIG1pbmltYWwgV2Vha0dDU2V0IGJh
c2VkIG9uIFdlYWtHQ01hcC4gCisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJIGZvciBjYW5vbmlj
YWxpemF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAyNzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwOTcsOCArMTA5NywxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9WTVRyYXBzLmgKICAgICBydW50aW1lL1Zhck9m
ZnNldC5oCiAgICAgcnVudGltZS9XYXRjaGRvZy5oCisgICAgcnVudGltZS9XZWFrR0NIYXNoVGFi
bGUuaAogICAgIHJ1bnRpbWUvV2Vha0dDTWFwLmgKICAgICBydW50aW1lL1dlYWtHQ01hcElubGlu
ZXMuaAorICAgIHJ1bnRpbWUvV2Vha0dDU2V0LmgKKyAgICBydW50aW1lL1dlYWtHQ1NldElubGlu
ZXMuaAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmll
cklubGluZXMuaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
Mjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MjksNiArMTcyOSw5IEBACiAJ
CUJDRDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QyMDM0ODBFMTcxMzVFMDAyQzdF
ODIgLyogRGF0ZVByb3RvdHlwZS5oICovOyB9OwogCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdFODIg
LyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRDIwM0U3MEUxNzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmx1
dC5oICovOyB9OwogCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0RFM0FCMTBFNkM4
MkNGMDAxNDUzQTcgLyogU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkNFMkZBRkIyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1Nl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFMkZB
RkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZEMjYwOTE2RkYwMDBBNTEwRiAvKiBX
ZWFrR0NTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZG
MjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBX
ZWFrR0NIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjA1MTIwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIy
RUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkRGQ0IyQkJFOTBGNDEzNDlFMUIwQkVEIC8qIEpTU291cmNl
Q29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzAz
MjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODkyLDYgKzQ4OTUsOSBAQAogCQlC
Q0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGNvZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNERTNBQjAwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0RFM0FCMTBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0
dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0UyRkFGQTI2MDkxNkVGMDAwQTUxMEYgLyogV2Vh
a0dDU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrR0NTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vha0dDSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyZ0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTAsOCArNzg5NiwxMSBAQAogCQkJCUZFNkY1NkRE
MUU2NEU5MjAwMEQxNzgwMSAvKiBWTVRyYXBzLmggKi8sCiAJCQkJRkVEOTRGMkIxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLywKIAkJCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCAqLywKKwkJCQlCQ0UyRkFGRTI2MDkxNzgyMDAwQTUxMEYgLyogV2Vha0dD
SGFzaFRhYmxlLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01h
cC5oICovLAogCQkJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVz
LmggKi8sCisJCQkJQkNFMkZBRkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovLAor
CQkJCUJDRTJGQUZDMjYwOTE2RkYwMDBBNTEwRiAvKiBXZWFrR0NTZXRJbmxpbmVzLmggKi8sCiAJ
CQkJQTdDQTNBREQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgKi8s
CiAJCQkJQTdDQTNBREUxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oICov
LAogCQkJCUUzQTMyQkM1MUZDODMxMkQwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCkBA
IC05MjEzLDYgKzkyMjIsNyBAQAogCQkJCThCQzA2NDhCMUUxQUJBOTQwMEIyQjhDQSAvKiBBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCQzA2
NDhBMUUxQUJBN0IwMEIyQjhDQSAvKiBBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4QkMwNjQ5MjFFMUFEQ0M0MDBCMkI4Q0EgLyogQXN5bmNHZW5l
cmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRTJGQUZGMjYwOTE3ODIwMDBB
NTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCThCM0JGNUU0MUUz
RDM2OEIwMDc2QTg3QSAvKiBBc3luY0dlbmVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCQzA2NDk2MUUxRDg0NUMwMEIyQjhDQSAvKiBBc3luY0l0ZXJhdG9yUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5
bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NzYsNiArOTY4Niw3IEBACiAJCQkJ
MTQzODZBNzUxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjM3MzA4RjFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU0REVGRjFFOEQ3NkZB
MDBBODkyQzUgLyogRGlzYWxsb3dTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZBRkIy
NjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1NERF
RkIxRThDNkQ4ODAwQTg5MkM1IC8qIERpc2FsbG93Vk1FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTMxNjE4MTMxRUM1RkUxNzAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtMTAzMzMsNiArMTAzNDQsNyBAQAogCQkJCTE0Rjc5RjcwMjE2RUFGRDIw
MDA0NkQzOSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjQ4NzJFMjE0MUQwNDgw
MEFCMEQzRSAvKiBPcGNvZGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEE0NjgwRDIx
NkZBNTZBMDAwRDJCMUEgLyogT3Bjb2RlU2l6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZB
RkQyNjA5MTZGRjAwMEE1MTBGIC8qIFdlYWtHQ1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpy
dW5FbmRQaGFzZShHQ0NvCiAgICAgICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxl
cygpOwogCiAgICAgICAgIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICBwcnVuZVN0YWxlRW50
cmllc0Zyb21XZWFrR0NNYXBzKCk7CisgICAgICAgIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtH
Q0hhc2hUYWJsZXMoKTsKICAgICAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICAgICAgc25h
cHNob3RVbnN3ZXB0KCk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMo
KTsgLy8gV2UgcmVseSBvbiB0aGVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMgcnVubmluZyBi
ZWZvcmUgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcgc2luY2UgQ29kZUJsb2NrJ3MgZmluYWxpemVy
IHJlbGllcyBvbiBxdWVyeWluZyBjdXJyZW50bHkgZXhlY3V0aW5nLgpAQCAtMjIxNywxMiArMjIx
NywxMiBAQCB2b2lkIEhlYXA6OnJlYXBXZWFrSGFuZGxlcygpCiAgICAgbV9vYmplY3RTcGFjZS5y
ZWFwV2Vha1NldHMoKTsKIH0KIAotdm9pZCBIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFr
R0NNYXBzKCkKK3ZvaWQgSGVhcDo6cHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDSGFzaFRhYmxl
cygpCiB7CiAgICAgaWYgKCFtX2NvbGxlY3Rpb25TY29wZSB8fCBtX2NvbGxlY3Rpb25TY29wZS52
YWx1ZSgpICE9IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgcmV0dXJuOwotICAgIGZv
ciAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwIDogbV93ZWFrR0NNYXBzKQotICAgICAgICB3ZWFr
R0NNYXAtPnBydW5lU3RhbGVFbnRyaWVzKCk7CisgICAgZm9yIChhdXRvKiB3ZWFrR0NIYXNoVGFi
bGUgOiBtX3dlYWtHQ0hhc2hUYWJsZXMpCisgICAgICAgIHdlYWtHQ0hhc2hUYWJsZS0+cHJ1bmVT
dGFsZUVudHJpZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCkBAIC0y
Njc0LDE0ICsyNjc0LDE0IEBAIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWYKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKLXZvaWQgSGVhcDo6cmVn
aXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjpyZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqIHdlYWtHQ0hhc2hUYWJsZSkKIHsK
LSAgICBtX3dlYWtHQ01hcHMuYWRkKHdlYWtHQ01hcCk7CisgICAgbV93ZWFrR0NIYXNoVGFibGVz
LmFkZCh3ZWFrR0NIYXNoVGFibGUpOwogfQogCi12b2lkIEhlYXA6OnVucmVnaXN0ZXJXZWFrR0NN
YXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjp1bnJlZ2lzdGVyV2Vha0dD
SGFzaFRhYmxlKFdlYWtHQ0hhc2hUYWJsZSogd2Vha0dDSGFzaFRhYmxlKQogewotICAgIG1fd2Vh
a0dDTWFwcy5yZW1vdmUod2Vha0dDTWFwKTsKKyAgICBtX3dlYWtHQ0hhc2hUYWJsZXMucmVtb3Zl
KHdlYWtHQ0hhc2hUYWJsZSk7CiB9CiAKIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVCbG9jayhzaXpl
X3QgY2FwYWNpdHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAy
NzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDcgKzg3LDcgQEAgY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBT
d2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CiBjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwotY2xh
c3MgV2Vha0dDTWFwQmFzZTsKK2NsYXNzIFdlYWtHQ0hhc2hUYWJsZTsKIHN0cnVjdCBDdXJyZW50
VGhyZWFkU3RhdGU7CiAKICNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRApAQCAtMjg5LDggKzI4
OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbGVhc2VTb29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NH
TGliV3JhcHBlck9iamVjdD4mJik7CiAjZW5kaWYKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vh
a0dDTWFwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDSGFzaFRh
YmxlKFdlYWtHQ0hhc2hUYWJsZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5yZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqKTsKIAogICAgIHZvaWQgYWRkTG9n
aWNhbGx5RW1wdHlXZWFrQmxvY2soV2Vha0Jsb2NrKik7CiAKQEAgLTUyNiw3ICs1MjYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZW5kTWFya2luZygpOwogCiAgICAgdm9pZCByZWFwV2Vha0hhbmRs
ZXMoKTsKLSAgICB2b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKKyAgICB2
b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ0hhc2hUYWJsZXMoKTsKICAgICB2b2lkIHN3
ZWVwQXJyYXlCdWZmZXJzKCk7CiAgICAgdm9pZCBzbmFwc2hvdFVuc3dlcHQoKTsKICAgICB2b2lk
IGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CkBAIC02ODksNyArNjg5LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIHVuc2lnbmVkIG1fZGVmZXJyYWxEZXB0aCB7IDAgfTsKIAotICAgIEhh
c2hTZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKKyAgICBIYXNoU2V0PFdlYWtHQ0hh
c2hUYWJsZSo+IG1fd2Vha0dDSGFzaFRhYmxlczsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjc1
MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCwzICs1NCw0IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgi
CisjaW5jbHVkZSAiV2Vha0dDU2V0SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KIAogICAgIEpTQ3VzdG9tR2V0dGVy
RnVuY3Rpb24qIGN1c3RvbUdldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyRnVu
Y3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmdldHRlcigpOworICAgIGF1dG8gZ2V0dGVyID0gY3VzdG9tR2V0dGVy
RnVuY3Rpb24tPmdldHRlcigpOwogCiAgICAgaWYgKGF1dG8gZG9tQXR0cmlidXRlID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmRvbUF0dHJpYnV0ZSgpKSB7CiAgICAgICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpCkBAIC01MCw3ICs1MCw3IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGdldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlz
VmFsdWUpLCBjdXN0b21HZXR0ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpKTsKIH0KIAotSlND
dXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgR2V0
VmFsdWVGdW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0
cmlidXRlKQorSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3Bl
cnR5TmFtZSwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmli
dXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3Byb3BlcnR5TmFtZShJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQpAQCAtNTgsNyArNTgsNyBAQCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRl
ckZ1CiB7CiB9CiAKLUpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2V0dGVyRnVuY3Rp
b246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFBy
b3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0dGVyLCBPcHRpb25hbDxE
T01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCitKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgQ3VzdG9t
RnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlKQogewogICAgIEFTU0VSVChnZXR0ZXIpOwogICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY3VzdG9tR2V0dGVyRnVuY3Rpb25D
YWxsLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgU3RyaW5nKHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Z1bmN0
aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCisgICAgdXNpbmcgQ3VzdG9tRnVuY3Rpb25Qb2ludGVy
ID0gR2V0VmFsdWVGdW5jOworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKQEAgLTQ5
LDE5ICs1MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyLCBPcHRpb25hbDxET01BdHRy
aWJ1dGVBbm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eU5hbWU7IH0KLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nZXR0ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZ2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0
b21GdW5jdGlvblBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlcjsgfTsKICAgICBPcHRp
b25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVy
biBtX2RvbUF0dHJpYnV0ZTsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPik7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFByb3BlcnR5TmFtZSYs
IEN1c3RvbUZ1bmN0aW9uUG9pbnRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4p
OwogCiAgICAgSWRlbnRpZmllciBtX3Byb3BlcnR5TmFtZTsKLSAgICBHZXRWYWx1ZUZ1bmMgbV9n
ZXR0ZXI7CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIG1fZ2V0dGVyOwogICAgIE9wdGlvbmFs
PERPTUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
OSArMzYsMTkgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3VzdG9tUwogSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGN1c3RvbVNldHRlckZ1bmN0aW9uQ2FsbCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBhdXRv
IGN1c3RvbVNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwotICAgIFB1dFZhbHVlRnVuYyBzZXR0ZXIgPSBjdXN0b21T
ZXR0ZXJGdW5jdGlvbi0+c2V0dGVyKCk7CisgICAgYXV0byBzZXR0ZXIgPSBjdXN0b21TZXR0ZXJG
dW5jdGlvbi0+c2V0dGVyKCk7CiAgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5j
b2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSksIGN1c3RvbVNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotSlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5j
IHNldHRlcikKK0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24o
Vk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9w
ZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiAgICAgOiBCYXNlKHZtLCBl
eGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fcHJvcGVydHlOYW1l
KElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpCiAgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCiB7CiB9CiAKLUpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tU2V0
dGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMgc2V0dGVyKQor
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBw
cm9wZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiB7CiAgICAgQVNTRVJU
KHNldHRlcik7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RG
dW5jdGlvbihjdXN0b21TZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rp
b24uaAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKKyAg
ICB1c2luZyBDdXN0b21GdW5jdGlvblBvaW50ZXIgPSBQdXRWYWx1ZUZ1bmM7CisKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIApAQCAtNDksMTggKzUxLDE5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiog
Y3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUmLCBQdXRWYWx1
ZUZ1bmMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0
aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEN1
c3RvbUZ1bmN0aW9uUG9pbnRlcik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eU5hbWU7IH0KLSAgICBQdXRWYWx1ZUZ1bmMgc2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0
ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIHNldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0b21GdW5jdGlvblBv
aW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlcjsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1
c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgUHV0VmFsdWVGdW5jKTsKKyAgICBK
U0N1c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2lu
dGVyKTsKIAogICAgIElkZW50aWZpZXIgbV9wcm9wZXJ0eU5hbWU7Ci0gICAgUHV0VmFsdWVGdW5j
IG1fc2V0dGVyOworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBtX3NldHRlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDcsOCArNTA3LDggQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgUwog
ICAgICwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQogICAgICwgbV9y
dW50aW1lRmxhZ3MoKQogICAgICwgbV9zdGFja1RyYWNlTGltaXQoT3B0aW9uczo6ZGVmYXVsdEVy
cm9yU3RhY2tUcmFjZUxpbWl0KCkpCi0gICAgLCBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwKHZt
KQotICAgICwgbV9jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCh2bSkKKyAgICAsIG1fY3VzdG9tR2V0
dGVyRnVuY3Rpb25TZXQodm0pCisgICAgLCBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU2V0KHZtKQog
ICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNs
dWRlICJTeW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhdGNo
cG9pbnQuaCIKKyNpbmNsdWRlICJXZWFrR0NTZXQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0Jhc2UuaD4KICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpA
QCAtNTQ2LDggKzU0Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFwUHJvdG90eXBlU2V0RmFz
dEFuZE5vbk9ic2VydmFibGUoKTsKICAgICBib29sIGlzU2V0UHJvdG90eXBlQWRkRmFzdEFuZE5v
bk9ic2VydmFibGUoKTsKIAotICAgIFdlYWtHQ01hcDxHZXRWYWx1ZUZ1bmMsIEpTQ3VzdG9tR2V0
dGVyRnVuY3Rpb24+JiBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCgpIHsgcmV0dXJuIG1fY3VzdG9t
R2V0dGVyRnVuY3Rpb25NYXA7IH0KLSAgICBXZWFrR0NNYXA8UHV0VmFsdWVGdW5jLCBKU0N1c3Rv
bVNldHRlckZ1bmN0aW9uPiYgY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAoKSB7IHJldHVybiBtX2N1
c3RvbVNldHRlckZ1bmN0aW9uTWFwOyB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB1c2lu
ZyBSZWZlcmVuY2VkR2xvYmFsUHJvcGVydHlXYXRjaHBvaW50U2V0cyA9IEhhc2hNYXA8UmVmUHRy
PFVuaXF1ZWRTdHJpbmdJbXBsPiwgUmVmPFdhdGNocG9pbnRTZXQ+LCBJZGVudGlmaWVyUmVwSGFz
aD47CkBAIC01NjMsOCArNTYyLDM3IEBAIHB1YmxpYzoKICAgICBSdW50aW1lRmxhZ3MgbV9ydW50
aW1lRmxhZ3M7CiAgICAgQ29uc29sZUNsaWVudCogbV9jb25zb2xlQ2xpZW50IHsgbnVsbHB0ciB9
OwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YWNrVHJhY2VMaW1pdDsKLSAgICBXZWFrR0NN
YXA8R2V0VmFsdWVGdW5jLCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uPiBtX2N1c3RvbUdldHRlckZ1
bmN0aW9uTWFwOwotICAgIFdlYWtHQ01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3VzdG9tU2V0dGVyRnVu
Y3Rpb24+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHN0cnVjdCBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoIHsKKyAgICAgICAg
c3RhdGljIGlubGluZSB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYWs8VD4mIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIGhhc2godmFsdWUtPnByb3BlcnR5TmFtZSgpLCB2YWx1ZS0+Y3Vz
dG9tRnVuY3Rpb25Qb2ludGVyKCkpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGlubGlu
ZSBib29sIGVxdWFsKGNvbnN0IFdlYWs8VD4mIGEsIGNvbnN0IFdlYWs8VD4mIGIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgdHlwZW5h
bWUgVDo6Q3VzdG9tRnVuY3Rpb25Qb2ludGVyIGZ1bmN0aW9uUG9pbnRlcikKKyAgICAgICAgewor
ICAgICAgICAgICAgdW5zaWduZWQgaGFzaCA9IERlZmF1bHRIYXNoPHR5cGVuYW1lIFQ6OkN1c3Rv
bUZ1bmN0aW9uUG9pbnRlcj46Omhhc2goZnVuY3Rpb25Qb2ludGVyKTsKKyAgICAgICAgICAgIGlm
ICghcHJvcGVydHlOYW1lLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGhhc2ggPSBXVEY6OnBh
aXJJbnRIYXNoKGhhc2gsIHByb3BlcnR5TmFtZS51aWQoKS0+ZXhpc3RpbmdTeW1ib2xBd2FyZUhh
c2goKSk7CisgICAgICAgICAgICByZXR1cm4gaGFzaDsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNl
OworICAgIH07CisKKyAgICBXZWFrR0NTZXQ8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbiwgV2Vha0N1
c3RvbUdldHRlck9yU2V0dGVySGFzaDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21H
ZXR0ZXJGdW5jdGlvblNldDsKKyAgICBXZWFrR0NTZXQ8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiwg
V2Vha0N1c3RvbUdldHRlck9yU2V0dGVySGFzaDxKU0N1c3RvbVNldHRlckZ1bmN0aW9uPj4gbV9j
dXN0b21TZXR0ZXJGdW5jdGlvblNldDsKKworICAgIFdlYWtHQ1NldDxKU0N1c3RvbUdldHRlckZ1
bmN0aW9uLCBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPEpTQ3VzdG9tR2V0dGVyRnVuY3Rp
b24+PiYgY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQoKSB7IHJldHVybiBtX2N1c3RvbUdldHRlckZ1
bmN0aW9uU2V0OyB9CisgICAgV2Vha0dDU2V0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24sIFdlYWtD
dXN0b21HZXR0ZXJPclNldHRlckhhc2g8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj4+JiBjdXN0b21T
ZXR0ZXJGdW5jdGlvblNldCgpIHsgcmV0dXJuIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TZXQ7IH0K
IAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgY29uc3QgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFs
T2JqZWN0QXREZWJ1Z2dlckVudHJ5IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTIxLDIyICszNTIxLDQ1IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91dE9m
TGkKICAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dQcm9wZXJ0eVN0b3JhZ2UoYnV0
dGVyZmx5KCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBuZXdTaXplKTsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJI
YXNoVHJhbnNsYXRvciB7CisgICAgdXNpbmcgQmFzZUhhc2ggPSBKU0dsb2JhbE9iamVjdDo6V2Vh
a0N1c3RvbUdldHRlck9yU2V0dGVySGFzaDxUPjsKKworICAgIHVzaW5nIEtleSA9IHN0ZDo6dHVw
bGU8UHJvcGVydHlOYW1lLCB0eXBlbmFtZSBUOjpDdXN0b21GdW5jdGlvblBvaW50ZXI+OworCisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBrZXkpCisgICAgeworICAgICAgICBy
ZXR1cm4gQmFzZUhhc2g6Omhhc2goc3RkOjpnZXQ8MD4oa2V5KSwgc3RkOjpnZXQ8MT4oa2V5KSk7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2VhazxUPiYgYSwgY29uc3Qg
S2V5JiBiKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gYS0+cHJvcGVydHlOYW1lKCkgPT0gc3RkOjpnZXQ8MD4oYikgJiYg
YS0+Y3VzdG9tRnVuY3Rpb25Qb2ludGVyKCkgPT0gc3RkOjpnZXQ8MT4oYik7CisgICAgfQorfTsK
Kwogc3RhdGljIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0
aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlRnVuYywgT3B0aW9uYWw8RE9NQXR0cmli
dXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQogewotICAgIC8vIFdlYWtHQ01hcDo6ZW5zdXJl
VmFsdWUncyBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBHQyBzaW5jZSBHQyBjYW4gbW9kaWZ5IFdl
YWtHQ01hcCBpbiB0aGUgbWlkZGxlIG9mIEhhc2hNYXA6OmVuc3VyZS4KLSAgICAvLyBXZSB1c2Ug
RGVmZXJHQyBoZXJlICgxKSBub3QgdG8gaW52b2tlIEdDIHdoZW4gZXhlY3V0aW5nIFdlYWtHQ01h
cDo6ZW5zdXJlVmFsdWUgYW5kICgyKSB0byBhdm9pZCBsb29raW5nIHVwIEhhc2hNYXAgdHdpY2Uu
CisgICAgdXNpbmcgVHJhbnNsYXRvciA9IFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFu
c2xhdG9yPEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+OworCisgICAgLy8gV2Vha0dDU2V0OjplbnN1
cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDIHNpbmNlIEdDIGNhbiBtb2RpZnkg
V2Vha0dDU2V0IGluIHRoZSBtaWRkbGUgb2YgSGFzaFNldDo6ZW5zdXJlLgorICAgIC8vIFdlIHVz
ZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mgd2hlbiBleGVjdXRpbmcgV2Vha0dD
U2V0OjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAgSGFzaFNldCB0d2lj
ZS4KICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgcmV0dXJuIGdsb2JhbE9iamVj
dC0+Y3VzdG9tR2V0dGVyRnVuY3Rpb25NYXAoKS5lbnN1cmVWYWx1ZShnZXRWYWx1ZUZ1bmMsIFsm
XSB7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Y3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQoKS5l
bnN1cmVWYWx1ZTxUcmFuc2xhdG9yPihzdGQ6Om1ha2VfdHVwbGUocHJvcGVydHlOYW1lLCBnZXRW
YWx1ZUZ1bmMpLCBbJl0gewogICAgICAgICByZXR1cm4gSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgZ2V0VmFsdWVGdW5jLCBkb21B
dHRyaWJ1dGUpOwogICAgIH0pOwogfQogCiBzdGF0aWMgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiog
Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMgcHV0VmFsdWVG
dW5jKQogewotICAgIC8vIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11c3Qgbm90
IGludm9rZSBHQyBzaW5jZSBHQyBjYW4gbW9kaWZ5IFdlYWtHQ01hcCBpbiB0aGUgbWlkZGxlIG9m
IEhhc2hNYXA6OmVuc3VyZS4KLSAgICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgxKSBub3QgdG8g
aW52b2tlIEdDIHdoZW4gZXhlY3V0aW5nIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUgYW5kICgyKSB0
byBhdm9pZCBsb29raW5nIHVwIEhhc2hNYXAgdHdpY2UuCisgICAgdXNpbmcgVHJhbnNsYXRvciA9
IFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yPEpTQ3VzdG9tU2V0dGVyRnVu
Y3Rpb24+OworCisgICAgLy8gV2Vha0dDU2V0OjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBu
b3QgaW52b2tlIEdDIHNpbmNlIEdDIGNhbiBtb2RpZnkgV2Vha0dDU2V0IGluIHRoZSBtaWRkbGUg
b2YgSGFzaFNldDo6ZW5zdXJlLgorICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0
byBpbnZva2UgR0Mgd2hlbiBleGVjdXRpbmcgV2Vha0dDU2V0OjplbnN1cmVWYWx1ZSBhbmQgKDIp
IHRvIGF2b2lkIGxvb2tpbmcgdXAgSGFzaFNldCB0d2ljZS4KICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7Ci0gICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Y3VzdG9tU2V0dGVyRnVuY3Rpb25N
YXAoKS5lbnN1cmVWYWx1ZShwdXRWYWx1ZUZ1bmMsIFsmXSB7CisgICAgcmV0dXJuIGdsb2JhbE9i
amVjdC0+Y3VzdG9tU2V0dGVyRnVuY3Rpb25TZXQoKS5lbnN1cmVWYWx1ZTxUcmFuc2xhdG9yPihz
dGQ6Om1ha2VfdHVwbGUocHJvcGVydHlOYW1lLCBwdXRWYWx1ZUZ1bmMpLCBbJl0gewogICAgICAg
ICByZXR1cm4gSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgcHV0VmFsdWVGdW5jKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ0hhc2hUYWJsZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ0hhc2hUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYWtHQ0hhc2hUYWJsZSB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+V2Vha0dDSGFzaFRhYmxlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBydW5l
U3RhbGVFbnRyaWVzKCkgPSAwOworfTsKKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha0dDTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha0dDTWFwLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMSArMjcs
MTUgQEAKIAogI2luY2x1ZGUgIkRlZmVyR0MuaCIKICNpbmNsdWRlICJXZWFrLmgiCisjaW5jbHVk
ZSAiV2Vha0dDSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKIC8vIEEgSGFzaE1hcCB3aXRoIFdlYWs8SlNDZWxsPiB2YWx1ZXMsIHdoaWNo
IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyB2YWx1ZXMgb25jZSB0aGV5J3JlIGdhcmJhZ2UgY29sbGVj
dGVkLgogCi1jbGFzcyBXZWFrR0NNYXBCYXNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWFr
R0NNYXBCYXNlKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBydW5lU3RhbGVFbnRyaWVzKCkgPSAw
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlw
ZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sCi0gICAgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnID0gSGFzaFRyYWl0czxLZXlBcmc+PgotY2xhc3MgV2Vha0dDTWFwIGZpbmFsIDogcHVi
bGljIFdlYWtHQ01hcEJhc2UgewordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBW
YWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPEtleUFyZz4sIHR5cGVuYW1l
IEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5QXJnPj4KK2NsYXNzIFdlYWtHQ01hcCBmaW5h
bCA6IHB1YmxpYyBXZWFrR0NIYXNoVGFibGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIHR5cGVkZWYgV2VhazxWYWx1ZUFyZz4gVmFsdWVUeXBlOwogICAgIHR5cGVkZWYgSGFz
aE1hcDxLZXlBcmcsIFZhbHVlVHlwZSwgSGFzaEFyZywgS2V5VHJhaXRzQXJnPiBIYXNoTWFwVHlw
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXBJ
bmxpbmVzLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtHQ01hcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEzIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWUKIGlubGluZSBXZWFrR0NN
YXA8S2V5QXJnLCBWYWx1ZUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPjo6V2Vha0dDTWFwKFZN
JiB2bSkKICAgICA6IG1fdm0odm0pCiB7Ci0gICAgdm0uaGVhcC5yZWdpc3RlcldlYWtHQ01hcCh0
aGlzKTsKKyAgICB2bS5oZWFwLnJlZ2lzdGVyV2Vha0dDSGFzaFRhYmxlKHRoaXMpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+CiBpbmxpbmUgV2Vha0dDTWFwPEtleUFyZywgVmFs
dWVBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz46On5XZWFrR0NNYXAoKQogewotICAgIG1fdm0u
aGVhcC51bnJlZ2lzdGVyV2Vha0dDTWFwKHRoaXMpOworICAgIG1fdm0uaGVhcC51bnJlZ2lzdGVy
V2Vha0dDSGFzaFRhYmxlKHRoaXMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NTZXQuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJXZWFrLmgiCisjaW5jbHVkZSAiV2Vha0dDSGFzaFRhYmxlLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgSGFzaFNldCB3aXRo
IFdlYWs8SlNDZWxsPiB2YWx1ZXMsIHdoaWNoIGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyB2YWx1ZXMg
b25jZSB0aGV5J3JlIGdhcmJhZ2UgY29sbGVjdGVkLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPFdlYWs8VmFsdWVBcmc+PiwgdHlw
ZW5hbWUgVHJhaXRzQXJnID0gSGFzaFRyYWl0czxXZWFrPFZhbHVlQXJnPj4+CitjbGFzcyBXZWFr
R0NTZXQgZmluYWwgOiBwdWJsaWMgV2Vha0dDSGFzaFRhYmxlIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSBXZWFrPFZhbHVlQXJnPjsKKyAgICB1
c2luZyBIYXNoU2V0VHlwZSA9IEhhc2hTZXQ8VmFsdWVUeXBlLCBIYXNoQXJnLCBUcmFpdHNBcmc+
OworCitwdWJsaWM6CisgICAgdXNpbmcgQWRkUmVzdWx0ID0gdHlwZW5hbWUgSGFzaFNldFR5cGU6
OkFkZFJlc3VsdDsKKyAgICB1c2luZyBpdGVyYXRvciA9IHR5cGVuYW1lIEhhc2hTZXRUeXBlOjpp
dGVyYXRvcjsKKyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IHR5cGVuYW1lIEhhc2hTZXRUeXBl
Ojpjb25zdF9pdGVyYXRvcjsKKworICAgIGV4cGxpY2l0IFdlYWtHQ1NldChWTSYpOworICAgIH5X
ZWFrR0NTZXQoKSBmaW5hbDsKKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9z
ZXQuY2xlYXIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBtX3NldC5iZWdpbigpOworICAgICAgICBjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsKKyAgICAgICAgd2hpbGUgKGl0ICE9IGVuZCkgewor
ICAgICAgICAgICAgaWYgKGl0LT52YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgVmFsdWVBcmcqIGVuc3VyZVZhbHVlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgLy8gSWYgZnVuY3RvciBpbnZva2VzIEdDLCBHQyBjYW4gcHJ1bmUgV2Vha0dD
U2V0LCBhbmQgbWFuaXB1bGF0ZSBIYXNoU2V0IHdoaWxlIHdlIGFyZSB0b3VjaGluZyBpdCBpbiB0
aGUgZW5zdXJlIGZ1bmN0aW9uLgorICAgICAgICAvLyBUaGUgZnVuY3RvciBtdXN0IG5vdCBpbnZv
a2UgR0MuCisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgCisgICAgICAg
IGF1dG8gcmVzdWx0ID0gbV9zZXQudGVtcGxhdGUgZW5zdXJlPEhhc2hUcmFuc2xhdG9yPihzdGQ6
OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+Z2V0KCk7CisgICAgfQorCisgICAgaW5saW5lIGl0
ZXJhdG9yIGZpbmQoY29uc3QgVmFsdWVUeXBlJiBrZXkpOworICAgIGlubGluZSBjb25zdF9pdGVy
YXRvciBmaW5kKGNvbnN0IFZhbHVlVHlwZSYga2V5KSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBj
b250YWlucyhjb25zdCBWYWx1ZVR5cGUmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBy
dW5lU3RhbGVFbnRyaWVzKCkgZmluYWw7CisKKyAgICBIYXNoU2V0VHlwZSBtX3NldDsKKyAgICBW
TSYgbV92bTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldElubGluZXMuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NTZXRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSGVhcElubGluZXMuaCIKKyNpbmNsdWRlICJXZWFrR0NTZXQuaCIKKyNpbmNsdWRl
ICJXZWFrSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK2lubGluZSBX
ZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46OldlYWtHQ1NldChWTSYgdm0p
CisgICAgOiBtX3ZtKHZtKQoreworICAgIHZtLmhlYXAucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUo
dGhpcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJn
LCB0eXBlbmFtZSBUcmFpdHNBcmc+CitpbmxpbmUgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJn
LCBUcmFpdHNBcmc+Ojp+V2Vha0dDU2V0KCkKK3sKKyAgICBtX3ZtLmhlYXAudW5yZWdpc3Rlcldl
YWtHQ0hhc2hUYWJsZSh0aGlzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK2lubGluZSB0eXBlbmFtZSBXZWFr
R0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46Oml0ZXJhdG9yIFdlYWtHQ1NldDxW
YWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVl
KQoreworICAgIGl0ZXJhdG9yIGl0ID0gbV9zZXQuZmluZCh2YWx1ZSk7CisgICAgaXRlcmF0b3Ig
ZW5kID0gbV9zZXQuZW5kKCk7CisgICAgaWYgKGl0ICE9IGVuZCAmJiAhKml0KSAvLyBGb3VuZCBh
IHpvbWJpZSB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICByZXR1cm4gaXQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBU
cmFpdHNBcmc+CitpbmxpbmUgdHlwZW5hbWUgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBU
cmFpdHNBcmc+Ojpjb25zdF9pdGVyYXRvciBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRy
YWl0c0FyZz46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gY29uc3RfY2FzdDxXZWFrR0NTZXQqPih0aGlzKS0+ZmluZCh2YWx1ZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNB
cmc+CitpbmxpbmUgYm9vbCBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46
OmNvbnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZp
bmQodmFsdWUpICE9IG1fc2V0LmVuZCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgorTkVWRVJfSU5MSU5FIHZv
aWQgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+OjpwcnVuZVN0YWxlRW50
cmllcygpCit7CisgICAgbV9zZXQucmVtb3ZlSWYoW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAg
cmV0dXJuICFlbnRyeTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw0MSBAQAorMjAyMS0wMy0yNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QncyBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFw
IGFuZCBtX2N1c3RvbVNldHRlckZ1bmN0aW9uTWFwIHNob3VsZCBiZSBzZXRzLCBub3QgbWFwcywg
YW5kIHNob3VsZCB1c2UgYm90aCB0aGUgaWRlbnRpZmllciBhbmQgZnVuY3Rpb24gcG9pbnRlciBh
cyB0aGUga2V5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjM2MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGEgaGV0ZXJvZ2Vub3VzIEhhc2hTZXQ6OmVuc3VyZSwgd2hpY2ggYWxsb3dzIGxhenkg
Y29uc3RydWN0aW9uIG9mIHRoZSB2YWx1ZSB0bworICAgICAgICBpbnNlcnQgaW50byB0aGUgSGFz
aFNldCBvbmx5IGlmIHRoZSBoZXRlcm9nZW5vdXMga2V5IChlLmcuIGEga2V5ICsgSGFzaFRyYW5z
bGF0b3IKKyAgICAgICAgdGhhdCBhcmUgbm90IHRoZSBzYW1lIGFzIHRoZSBIYXNoU2V0J3MgVmFs
dWVUeXBlKSBkb2VzIG5vdCBtYXRjaCBhbnkgaXRlbSBpbiB0aGUKKyAgICAgICAgc2V0LiBGb3Ig
ZXhhbXBsZSBnaXZlbiBhIHNldCBvZiBFeHBlbnNpdmVUb0NvbnN0cnVjdCwgYnV0IHVuaXF1ZWx5
IGlkZW50aWZpYWJsZQorICAgICAgICBieSBDaGVhcFRvQ29uc3RydWN0OgorICAgICAgICAKKyAg
ICAgICAgICAgIEhhc2hTZXQ8RXhwZW5zaXZlVG9Db25zdHJ1Y3Q+IGhhc2hTZXQ7CisgICAgICAg
ICAgICAuLi4KKyAgICAgICAgICAgIHN0cnVjdCBUcmFuc2xhdG9yIHsKKyAgICAgICAgICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGVhcFRvQ29uc3RydWN0JiBrZXkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5Lmhhc2goKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
RXhwZW5zaXZlVG9Db25zdHJ1Y3QmIGEsIGNvbnN0IENoZWFwVG9Db25zdHJ1Y3QmIGIpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhh
c2hTZXQuZW5zdXJlPFRyYW5zbGF0b3I+KENoZWFwVG9Db25zdHJ1Y3QgeyAuLi4gfSwgW10gewor
ICAgICAgICAgICAgICAgIHJldHVybiBFeHBlbnNpdmVUb0NvbnN0cnVjdCB7IC4uLiB9OworICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgVGhpcyB3aWxsIGJlIHVzZWQgYnkgdGhlIGN1c3RvbSBn
ZXR0ZXIvc2V0dGVyIHNldHMgdG8gYXZvaWQgY29uc3RydWN0aW5nIHRoZSBHQyBvYmplY3RzCisg
ICAgICAgIHVubGVzcyB0aGV5IGFyZSByZWFsbHkgbmVlZGVkLgorCisgICAgICAgIEFsc28gdG9v
ayB0aGUgb3BlcnR1bml0eSB0byByZXBsYWNlIHNvbWUgdHlwZWRlZnMgd2l0aCB1c2luZ3MsIGFu
ZCBmaXhlZCBzb21lIGNvbW1lbnRzLgorCisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAg
ICAgKFdURjo6VHJhaXRzPjo6ZW5zdXJlKToKKwogMjAyMS0wMy0yNiAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgUFVJQ1F1aWNrYm9hcmRDb250
cm9sbGVyIGZvciB0ZXh0IGlucHV0IHdoZW4gSEFWRShRVUlDS0JPQVJEX0NPTlRST0xMRVIpIGlz
IGRlZmluZWQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9XVEYv
d3RmL0hhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzYgKzMzLDMwIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXMKIGNsYXNzIEhhc2hTZXQgZmluYWwgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hB
cmcgSGFzaEZ1bmN0aW9uczsKLSAgICB0eXBlZGVmIFRyYWl0c0FyZyBWYWx1ZVRyYWl0czsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUYWtlVHlwZSBUYWtlVHlwZTsKKyAgICB1
c2luZyBIYXNoRnVuY3Rpb25zID0gSGFzaEFyZzsKKyAgICB1c2luZyBWYWx1ZVRyYWl0cyA9IFRy
YWl0c0FyZzsKKyAgICB1c2luZyBUYWtlVHlwZSA9IHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUYWtl
VHlwZTsKIAogcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRyYWl0
VHlwZSBWYWx1ZVR5cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVmFsdWVUcmFp
dHM6OlRyYWl0VHlwZTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hUYWJsZTxWYWx1ZVR5
cGUsIFZhbHVlVHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsCi0gICAgICAgIEhhc2hGdW5jdGlvbnMs
IFZhbHVlVHJhaXRzLCBWYWx1ZVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKKyAgICB1c2luZyBIYXNo
VGFibGVUeXBlID0gSGFzaFRhYmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJh
Y3RvciwgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPjsKIAogcHVibGlj
OgotICAgIC8qCi0gICAgICogU2luY2UgZmlndXJpbmcgb3V0IHRoZSBlbnRyaWVzIG9mIGFuIGl0
ZXJhdG9yIGlzIGNvbmZ1c2luZywgaGVyZSBpcyBhIGNoZWF0IHNoZWV0OgotICAgICAqIGNvbnN0
IEtleVR5cGUmIGtleSA9IGl0ZXJhdG9yLT5rZXk7Ci0gICAgICovCi0gICAgdHlwZWRlZiBIYXNo
VGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+IGl0ZXJh
dG9yOwotICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxl
VHlwZSwgVmFsdWVUeXBlPiBjb25zdF9pdGVyYXRvcjsKLQotICAgIC8qCi0gICAgICogU2luY2Ug
ZmlndXJpbmcgb3V0IHRoZSBlbnRyaWVzIG9mIGFuIEFkZFJlc3VsdCBpcyBjb25mdXNpbmcsIGhl
cmUgaXMgYSBjaGVhdCBzaGVldDoKLSAgICAgKiBpdGVyYXRvciBpdGVyID0gYWRkUmVzdWx0Lml0
ZXJhdG9yOwotICAgICAqIGJvb2wgaXNOZXdFbnRyeSA9IGFkZFJlc3VsdC5pc05ld0VudHJ5Owot
ICAgICAqLwotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6QWRkUmVzdWx0IEFk
ZFJlc3VsdDsKLQotICAgIEhhc2hTZXQoKQotICAgIHsKLSAgICB9CisgICAgLy8gSGFzaFNldCBp
dGVyYXRvcnMgaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKyAgICAvLyAgICAgIGNvbnN0
IFZhbHVlVHlwZSogZ2V0KCkgY29uc3Q7CisgICAgLy8gICAgICBjb25zdCBWYWx1ZVR5cGUmIG9w
ZXJhdG9yKigpIGNvbnN0OworICAgIC8vICAgICAgY29uc3QgVmFsdWVUeXBlKiBvcGVyYXRvci0+
KCkgY29uc3Q7CisgICAgdXNpbmcgaXRlcmF0b3IgPSBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRh
cHRlcjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+OworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9y
ID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgVmFsdWVUeXBl
PjsKKworICAgIC8vIEhhc2hTZXQgQWRkUmVzdWx0cyBoYXZlIHRoZSBmb2xsb3dpbmcgZmllbGRz
OgorICAgIC8vICAgICAgSXRlcmF0b3JUeXBlIGl0ZXJhdG9yOworICAgIC8vICAgICAgYm9vbCBp
c05ld0VudHJ5OworICAgIHVzaW5nIEFkZFJlc3VsdCA9IHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6
OkFkZFJlc3VsdDsKIAorICAgIEhhc2hTZXQoKSA9IGRlZmF1bHQ7CiAgICAgSGFzaFNldChzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8VmFsdWVBcmc+IGluaXRpYWxpemVyTGlzdCkKICAgICB7CiAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBpbml0aWFsaXplckxpc3QpCkBAIC05Myw2ICs4
Nyw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlw
ZW5hbWUgVD4gaXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMoY29uc3QgVCYp
IGNvbnN0OwogCisKICAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluY2x1ZGVzIGJvdGggYW4gaXRl
cmF0b3IgdG8gdGhlIGFkZGVkIHZhbHVlJ3MgbG9jYXRpb24sCiAgICAgLy8gYW5kIGFuIGlzTmV3
RW50cnkgYm9vbCB0aGF0IGluZGljYXRlcyBpZiBpdCBpcyBhIG5ldyBvciBleGlzdGluZyBlbnRy
eSBpbiB0aGUgc2V0LgogICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVUeXBlJik7CkBAIC0x
MTAsNiArMTA1LDE2IEBAIHB1YmxpYzoKICAgICAvLyAgIHN0YXRpYyB0cmFuc2xhdGUoVmFsdWVU
eXBlJiwgY29uc3QgVCYsIHVuc2lnbmVkIGhhc2hDb2RlKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gQWRkUmVzdWx0IGFkZChjb25zdCBUJik7CiAg
ICAgCisgICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgdHJhbnNsYXRlZCBhZGQoKSwgZW5z
dXJlKCkgd2lsbCBzdGlsbCBkbyB0cmFuc2xhdGlvbgorICAgIC8vIGJ5IGhhc2hpbmcgYW5kIGNv
bXBhcmluZyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZQor
ICAgIC8vIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSB0YWJsZSwg
YnV0IHJhdGhlciB0aGFuIGEgc3RhdGljCisgICAgLy8gdHJhbnNsYXRlKCkgZnVuY3Rpb24sIHVz
ZXMgdGhlIHBhc3NlZCBpbiBmdW5jdG9yIHRvIHBlcmZvcm0gbGF6eSBjcmVhdGlvbiBvZgorICAg
IC8vIHRoZSB2YWx1ZSBvbmx5IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHRoZXJlLiBIYXNoVHJhbnNs
YXRvciBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZworICAgIC8vIGZ1bmN0aW9uIG1lbWJlcnM6Cisg
ICAgLy8gICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJik7CisgICAgLy8gICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBWYWx1ZVR5cGUmLCBjb25zdCBUJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+IEFkZFJl
c3VsdCBlbnN1cmUoVCYmLCBGdW5jdG9yJiYpOworCiAgICAgLy8gQXR0ZW1wdHMgdG8gYWRkIGEg
bGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFueSBvZgogICAgIC8v
IHRoZW0gYXJlIG5ldyB0byB0aGUgc2V0LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBzZXQgaXMgdW5j
aGFuZ2VkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KQEAgLTE3MSw2ICsx
NzYsMTYgQEAgc3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlciB7CiAgICAgfQogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUcmFpdHMsIHR5cGVuYW1lIFRyYW5zbGF0b3I+CitzdHJ1
Y3QgSGFzaFNldEVuc3VyZVRyYW5zbGF0b3JBZGFwdG9yIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIFRyYW5zbGF0
b3I6Omhhc2goa2V5KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIFRyYW5zbGF0
b3I6OmVxdWFsKGEsIGIpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgRnVuY3Rvcj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxvY2F0aW9uLCBVJiYs
IEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRv
RW1wdHkobG9jYXRpb24sIGZ1bmN0b3IoKSk7CisgICAgfQorfTsKKwogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KIGlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwg
Vj46OnN3YXAoSGFzaFNldCYgb3RoZXIpCiB7CkBAIC0yMzMsNiArMjQ4LDEzIEBAIGlubGluZSBi
b29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMKICAgICByZXR1cm4gbV9pbXBsLnRlbXBs
YXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZh
bHVlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPgoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZW5zdXJlKFQmJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9y
KSAtPiBBZGRSZXN1bHQKK3sKKyAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGFkZDxIYXNoU2V0
RW5zdXJlVHJhbnNsYXRvckFkYXB0b3I8VHJhaXRzLCBIYXNoVHJhbnNsYXRvcj4+KHN0ZDo6Zm9y
d2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworfQorCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogaW5saW5lIGF1dG8gSGFz
aFNldDxULCBVLCBWPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAog
ewo=
</data>
<flag name="commit-queue"
          id="444167"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424478</attachid>
            <date>2021-03-27 18:38:41 -0700</date>
            <delta_ts>2021-03-27 18:47:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223613-20210327183841.patch</filename>
            <type>text/plain</type>
            <size>47577</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMS0wMy0yNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QncyBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwIGFuZCBtX2N1c3RvbVNl
dHRlckZ1bmN0aW9uTWFwIHNob3VsZCBiZSBzZXRzLCBub3QgbWFwcywgYW5kIHNob3VsZCB1c2Ug
Ym90aCB0aGUgaWRlbnRpZmllciBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcyB0aGUga2V5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM2MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSBnZW5l
cmljIFdlYWtHQ1NldCBjbGFzcyB0byBnbyB3aXRoIHRoZSBleGlzdGluZyBXZWFrR0NNYXAuCisg
ICAgICAgIC0gUmVuYW1lcyBXZWFrR0NNYXBCYXNlIHRvIFdlYWtHQ0hhc2hUYWJsZSwgbW92ZXMg
aXQgdG8gaXRzIG93biBmaWxlCisgICAgICAgICAgYW5kIG5vdyB1c2VzIGl0IGFzIHRoZSBiYXNl
IGNsYXNzIG9mIGJvdGggV2Vha0dDU2V0IGFuZCBXZWFrR0NNYXAuCisgICAgICAgIC0gUmVwbGFj
ZXMgSlNHbG9iYWxPYmplY3QncyBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9jdXN0b21TZXR0ZXJG
dW5jdGlvbk1hcAorICAgICAgICAgIHdpdGggY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvY3VzdG9t
U2V0dGVyRnVuY3Rpb25TZXQsIHVzaW5nIHRoZSBuZXcKKyAgICAgICAgICBXZWFrR0NTZXQsIGFu
ZCB1cGRhdGVzIHRoZW0gdG8gdXNlIGJvdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIAorICAg
ICAgICAgIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBrZXksIHJhdGhlciB0aGFuIGp1c3QgdGhlIGZ1
bmN0aW9uIHBvaW50ZXIgd2hpY2gKKyAgICAgICAgICBpcyB3aGF0IHRoZSBwcmV2aW91cyBjb2Rl
IGRpZC4gVGhpcyBhbGxvd3MgbXVsdGlwbGUgY3VzdG9tIGZ1bmN0aW9ucworICAgICAgICAgIHRv
IHVzZSB0aGUgc2FtZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHBvaW50ZXIgYXMgbG9uZyBhcyB0aGV5
IGhhdmUgZGlzdGluY3QKKyAgICAgICAgICBwcm9wZXJ0eSBuYW1lcywgd2hpY2ggaXMgZ29pbmcg
dG8gYmUgdXNlZCB0byBvcHRpbWl6ZSB0aGUgYmluZGluZ3MgZm9yCisgICAgICAgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcg
ZmlsZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpy
dW5FbmRQaGFzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdl
YWtHQ0hhc2hUYWJsZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZWdpc3RlcldlYWtHQ0hhc2hU
YWJsZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6cmVnaXN0ZXJXZWFrR0NNYXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpIZWFwOjp1bnJlZ2lzdGVyV2Vha0dDTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZS4gV2Vha0dDTWFw
QmFzZSAtPiBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMu
aDoKKyAgICAgICAgQWRkIFdlYWtHQ1NldElubGluZXMuaAorCisgICAgICAgICogcnVudGltZS9K
U0N1c3RvbUdldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0
b21HZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmg6Cisg
ICAgICAgICogcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbVNl
dHRlckZ1bmN0aW9uLmg6CisgICAgICAgIEFkZCBoZWxwZXIgdHlwZSBDdXN0b21GdW5jdGlvblBv
aW50ZXIgYW5kIGhlbHBlciBmdW5jdGlvbiBjdXN0b21GdW5jdGlvblBvaW50ZXIoKQorICAgICAg
ICB0byBhbGxvdyBzb21lIGdlbmVyaWMgaGFzaGluZyBjb2RlIHRvIHJ1biBvbiBlaXRoZXIgSlND
dXN0b21HZXR0ZXJGdW5jdGlvbgorICAgICAgICBvciBKU0N1c3RvbVNldHRlckZ1bmN0aW9uLgor
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6V2Vha0N1c3RvbUdldHRl
ck9yU2V0dGVySGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpXZWFr
Q3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlcGxhY2UgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9tX2N1c3RvbVNldHRlckZ1bmN0
aW9uTWFwIHdpdGggCisgICAgICAgIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvbV9jdXN0b21T
ZXR0ZXJGdW5jdGlvblNldC4gQXMgdGhlIGtleSBpcyBpbmNsdWRlZAorICAgICAgICBpbiB0aGUg
dmFsdWUsIGl0IHNhdmVzIHNwYWNlIHRvIHVzZSBhIHNldCByYXRoZXIgdGhhbiBhIG1hcC4gV2Ug
bm93IGFsc28KKyAgICAgICAgaGFzaCBhbmQgY29tcGFyZSBib3RoIHRoZSBmdW5jdGlvbiBwb2lu
dGVyIGFuZCB0aGUgcHJvcGVydHkgbmFtZSB0byBhbGxvdworICAgICAgICBzaGFyaW5nIGltcGxl
bWVudGF0aW9ucy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAg
ICAgIChKU0M6OldlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yOjplcXVhbCk6
CisgICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgorICAgICAgICBVcGRhdGUgY3JlYXRpb24g
ZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IHNldHMsIG1ha2luZyB1c2Ugb2YgdGhlCisgICAgICAg
IGVuc3VyZVZhbHVlIGZ1bmN0aW9uIGFuZCBhIEhhc2hUcmFuc2xhdG9yIGFsbG93aW5nIHRoZSB1
c2Ugb2YgYQorICAgICAgICBzdGQ6OnR1cGxlPFByb3BlcnR5TmFtZSwgRnVuY3Rpb25Qb2ludGVy
PiBhcyBhbiBhbHRlcm5hdGl2ZSBsb29rdXAKKyAgICAgICAga2V5LiBUaGlzIGFsbG93cyB1cyB0
byBhdm9pZCBjcmVhdGluZyB0aGUgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi9KU0N1c3RvbVNldHRl
ckZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgaWYgb25lIHdpdGggdGhlIHNhbWUgcHJvcGVydHkg
bmFtZSBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcmUKKyAgICAgICAgYWxyZWFkeSBpbiB0aGUgc2V0
LgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NIYXNoVGFibGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OldlYWtHQ0hhc2hUYWJsZTo6fldlYWtHQ0hhc2hUYWJsZSk6CisgICAgICAgIE1vdmVk
IGZyb20gV2Vha0dDTWFwIGFuZCByZW5hbWVkIGFzIGl0IGlzIG5vdyB0aGUgYmFzZSBvZiBib3Ro
CisgICAgICAgIFdlYWtHQ01hcCBhbmQgV2Vha0dDU2V0LgorIAorICAgICAgICAqIHJ1bnRpbWUv
V2Vha0dDTWFwLmg6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IFdlYWtHQ0hhc2hUYWJsZSBi
YXNlIGNsYXNzLgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OktleVRyYWl0c0FyZz46OldlYWtHQ01hcCk6CisgICAgICAgIChKU0M6OktleVRy
YWl0c0FyZz46On5XZWFrR0NNYXApOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBIZWFwIGZ1bmN0
aW9uIG5hbWVzIGZvciBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL1dlYWtH
Q1NldC5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ1NldElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlRyYWl0c0FyZz46OldlYWtHQ1NldCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46On5XZWFrR0NTZXQpOgorICAgICAgICAoSlNDOjpUcmFpdHNBcmc+OjpmaW5k
KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6
cHJ1bmVTdGFsZUVudHJpZXMpOgorICAgICAgICBBZGRlZCBhIG1pbmltYWwgV2Vha0dDU2V0IGJh
c2VkIG9uIFdlYWtHQ01hcC4gCisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJIGZvciBjYW5vbmlj
YWxpemF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAyNzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwOTcsOCArMTA5NywxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9WTVRyYXBzLmgKICAgICBydW50aW1lL1Zhck9m
ZnNldC5oCiAgICAgcnVudGltZS9XYXRjaGRvZy5oCisgICAgcnVudGltZS9XZWFrR0NIYXNoVGFi
bGUuaAogICAgIHJ1bnRpbWUvV2Vha0dDTWFwLmgKICAgICBydW50aW1lL1dlYWtHQ01hcElubGlu
ZXMuaAorICAgIHJ1bnRpbWUvV2Vha0dDU2V0LmgKKyAgICBydW50aW1lL1dlYWtHQ1NldElubGlu
ZXMuaAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmll
cklubGluZXMuaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
Mjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MjksNiArMTcyOSw5IEBACiAJ
CUJDRDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QyMDM0ODBFMTcxMzVFMDAyQzdF
ODIgLyogRGF0ZVByb3RvdHlwZS5oICovOyB9OwogCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdFODIg
LyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRDIwM0U3MEUxNzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmx1
dC5oICovOyB9OwogCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0RFM0FCMTBFNkM4
MkNGMDAxNDUzQTcgLyogU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkNFMkZBRkIyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1Nl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFMkZB
RkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZEMjYwOTE2RkYwMDBBNTEwRiAvKiBX
ZWFrR0NTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZG
MjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBX
ZWFrR0NIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjA1MTIwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIy
RUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkRGQ0IyQkJFOTBGNDEzNDlFMUIwQkVEIC8qIEpTU291cmNl
Q29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzAz
MjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODkyLDYgKzQ4OTUsOSBAQAogCQlC
Q0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGNvZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNERTNBQjAwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0RFM0FCMTBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0
dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0UyRkFGQTI2MDkxNkVGMDAwQTUxMEYgLyogV2Vh
a0dDU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrR0NTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vha0dDSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyZ0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTAsOCArNzg5NiwxMSBAQAogCQkJCUZFNkY1NkRE
MUU2NEU5MjAwMEQxNzgwMSAvKiBWTVRyYXBzLmggKi8sCiAJCQkJRkVEOTRGMkIxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLywKIAkJCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCAqLywKKwkJCQlCQ0UyRkFGRTI2MDkxNzgyMDAwQTUxMEYgLyogV2Vha0dD
SGFzaFRhYmxlLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01h
cC5oICovLAogCQkJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVz
LmggKi8sCisJCQkJQkNFMkZBRkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovLAor
CQkJCUJDRTJGQUZDMjYwOTE2RkYwMDBBNTEwRiAvKiBXZWFrR0NTZXRJbmxpbmVzLmggKi8sCiAJ
CQkJQTdDQTNBREQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgKi8s
CiAJCQkJQTdDQTNBREUxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oICov
LAogCQkJCUUzQTMyQkM1MUZDODMxMkQwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCkBA
IC05MjEzLDYgKzkyMjIsNyBAQAogCQkJCThCQzA2NDhCMUUxQUJBOTQwMEIyQjhDQSAvKiBBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCQzA2
NDhBMUUxQUJBN0IwMEIyQjhDQSAvKiBBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4QkMwNjQ5MjFFMUFEQ0M0MDBCMkI4Q0EgLyogQXN5bmNHZW5l
cmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRTJGQUZGMjYwOTE3ODIwMDBB
NTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCThCM0JGNUU0MUUz
RDM2OEIwMDc2QTg3QSAvKiBBc3luY0dlbmVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCQzA2NDk2MUUxRDg0NUMwMEIyQjhDQSAvKiBBc3luY0l0ZXJhdG9yUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5
bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NzYsNiArOTY4Niw3IEBACiAJCQkJ
MTQzODZBNzUxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjM3MzA4RjFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU0REVGRjFFOEQ3NkZB
MDBBODkyQzUgLyogRGlzYWxsb3dTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZBRkIy
NjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1NERF
RkIxRThDNkQ4ODAwQTg5MkM1IC8qIERpc2FsbG93Vk1FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTMxNjE4MTMxRUM1RkUxNzAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtMTAzMzMsNiArMTAzNDQsNyBAQAogCQkJCTE0Rjc5RjcwMjE2RUFGRDIw
MDA0NkQzOSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjQ4NzJFMjE0MUQwNDgw
MEFCMEQzRSAvKiBPcGNvZGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEE0NjgwRDIx
NkZBNTZBMDAwRDJCMUEgLyogT3Bjb2RlU2l6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZB
RkQyNjA5MTZGRjAwMEE1MTBGIC8qIFdlYWtHQ1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpy
dW5FbmRQaGFzZShHQ0NvCiAgICAgICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxl
cygpOwogCiAgICAgICAgIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICBwcnVuZVN0YWxlRW50
cmllc0Zyb21XZWFrR0NNYXBzKCk7CisgICAgICAgIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtH
Q0hhc2hUYWJsZXMoKTsKICAgICAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICAgICAgc25h
cHNob3RVbnN3ZXB0KCk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMo
KTsgLy8gV2UgcmVseSBvbiB0aGVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMgcnVubmluZyBi
ZWZvcmUgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcgc2luY2UgQ29kZUJsb2NrJ3MgZmluYWxpemVy
IHJlbGllcyBvbiBxdWVyeWluZyBjdXJyZW50bHkgZXhlY3V0aW5nLgpAQCAtMjIxNywxMiArMjIx
NywxMiBAQCB2b2lkIEhlYXA6OnJlYXBXZWFrSGFuZGxlcygpCiAgICAgbV9vYmplY3RTcGFjZS5y
ZWFwV2Vha1NldHMoKTsKIH0KIAotdm9pZCBIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFr
R0NNYXBzKCkKK3ZvaWQgSGVhcDo6cHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDSGFzaFRhYmxl
cygpCiB7CiAgICAgaWYgKCFtX2NvbGxlY3Rpb25TY29wZSB8fCBtX2NvbGxlY3Rpb25TY29wZS52
YWx1ZSgpICE9IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgcmV0dXJuOwotICAgIGZv
ciAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwIDogbV93ZWFrR0NNYXBzKQotICAgICAgICB3ZWFr
R0NNYXAtPnBydW5lU3RhbGVFbnRyaWVzKCk7CisgICAgZm9yIChhdXRvKiB3ZWFrR0NIYXNoVGFi
bGUgOiBtX3dlYWtHQ0hhc2hUYWJsZXMpCisgICAgICAgIHdlYWtHQ0hhc2hUYWJsZS0+cHJ1bmVT
dGFsZUVudHJpZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCkBAIC0y
Njc0LDE0ICsyNjc0LDE0IEBAIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWYKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKLXZvaWQgSGVhcDo6cmVn
aXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjpyZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqIHdlYWtHQ0hhc2hUYWJsZSkKIHsK
LSAgICBtX3dlYWtHQ01hcHMuYWRkKHdlYWtHQ01hcCk7CisgICAgbV93ZWFrR0NIYXNoVGFibGVz
LmFkZCh3ZWFrR0NIYXNoVGFibGUpOwogfQogCi12b2lkIEhlYXA6OnVucmVnaXN0ZXJXZWFrR0NN
YXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjp1bnJlZ2lzdGVyV2Vha0dD
SGFzaFRhYmxlKFdlYWtHQ0hhc2hUYWJsZSogd2Vha0dDSGFzaFRhYmxlKQogewotICAgIG1fd2Vh
a0dDTWFwcy5yZW1vdmUod2Vha0dDTWFwKTsKKyAgICBtX3dlYWtHQ0hhc2hUYWJsZXMucmVtb3Zl
KHdlYWtHQ0hhc2hUYWJsZSk7CiB9CiAKIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVCbG9jayhzaXpl
X3QgY2FwYWNpdHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAy
NzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDcgKzg3LDcgQEAgY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBT
d2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CiBjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwotY2xh
c3MgV2Vha0dDTWFwQmFzZTsKK2NsYXNzIFdlYWtHQ0hhc2hUYWJsZTsKIHN0cnVjdCBDdXJyZW50
VGhyZWFkU3RhdGU7CiAKICNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRApAQCAtMjg5LDggKzI4
OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbGVhc2VTb29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NH
TGliV3JhcHBlck9iamVjdD4mJik7CiAjZW5kaWYKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vh
a0dDTWFwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDSGFzaFRh
YmxlKFdlYWtHQ0hhc2hUYWJsZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5yZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqKTsKIAogICAgIHZvaWQgYWRkTG9n
aWNhbGx5RW1wdHlXZWFrQmxvY2soV2Vha0Jsb2NrKik7CiAKQEAgLTUyNiw3ICs1MjYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZW5kTWFya2luZygpOwogCiAgICAgdm9pZCByZWFwV2Vha0hhbmRs
ZXMoKTsKLSAgICB2b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKKyAgICB2
b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ0hhc2hUYWJsZXMoKTsKICAgICB2b2lkIHN3
ZWVwQXJyYXlCdWZmZXJzKCk7CiAgICAgdm9pZCBzbmFwc2hvdFVuc3dlcHQoKTsKICAgICB2b2lk
IGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CkBAIC02ODksNyArNjg5LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIHVuc2lnbmVkIG1fZGVmZXJyYWxEZXB0aCB7IDAgfTsKIAotICAgIEhh
c2hTZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKKyAgICBIYXNoU2V0PFdlYWtHQ0hh
c2hUYWJsZSo+IG1fd2Vha0dDSGFzaFRhYmxlczsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjc1
MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCwzICs1NCw0IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgi
CisjaW5jbHVkZSAiV2Vha0dDU2V0SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KIAogICAgIEpTQ3VzdG9tR2V0dGVy
RnVuY3Rpb24qIGN1c3RvbUdldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyRnVu
Y3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmdldHRlcigpOworICAgIGF1dG8gZ2V0dGVyID0gY3VzdG9tR2V0dGVy
RnVuY3Rpb24tPmdldHRlcigpOwogCiAgICAgaWYgKGF1dG8gZG9tQXR0cmlidXRlID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmRvbUF0dHJpYnV0ZSgpKSB7CiAgICAgICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpCkBAIC01MCw3ICs1MCw3IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGdldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlz
VmFsdWUpLCBjdXN0b21HZXR0ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpKTsKIH0KIAotSlND
dXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgR2V0
VmFsdWVGdW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0
cmlidXRlKQorSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3Bl
cnR5TmFtZSwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmli
dXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3Byb3BlcnR5TmFtZShJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQpAQCAtNTgsNyArNTgsNyBAQCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRl
ckZ1CiB7CiB9CiAKLUpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2V0dGVyRnVuY3Rp
b246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFBy
b3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0dGVyLCBPcHRpb25hbDxE
T01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCitKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgQ3VzdG9t
RnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlKQogewogICAgIEFTU0VSVChnZXR0ZXIpOwogICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY3VzdG9tR2V0dGVyRnVuY3Rpb25D
YWxsLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgU3RyaW5nKHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Z1bmN0
aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCisgICAgdXNpbmcgQ3VzdG9tRnVuY3Rpb25Qb2ludGVy
ID0gR2V0VmFsdWVGdW5jOworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKQEAgLTQ5
LDE5ICs1MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyLCBPcHRpb25hbDxET01BdHRy
aWJ1dGVBbm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eU5hbWU7IH0KLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nZXR0ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZ2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0
b21GdW5jdGlvblBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlcjsgfTsKICAgICBPcHRp
b25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVy
biBtX2RvbUF0dHJpYnV0ZTsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPik7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFByb3BlcnR5TmFtZSYs
IEN1c3RvbUZ1bmN0aW9uUG9pbnRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4p
OwogCiAgICAgSWRlbnRpZmllciBtX3Byb3BlcnR5TmFtZTsKLSAgICBHZXRWYWx1ZUZ1bmMgbV9n
ZXR0ZXI7CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIG1fZ2V0dGVyOwogICAgIE9wdGlvbmFs
PERPTUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
OSArMzYsMTkgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3VzdG9tUwogSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGN1c3RvbVNldHRlckZ1bmN0aW9uQ2FsbCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBhdXRv
IGN1c3RvbVNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwotICAgIFB1dFZhbHVlRnVuYyBzZXR0ZXIgPSBjdXN0b21T
ZXR0ZXJGdW5jdGlvbi0+c2V0dGVyKCk7CisgICAgYXV0byBzZXR0ZXIgPSBjdXN0b21TZXR0ZXJG
dW5jdGlvbi0+c2V0dGVyKCk7CiAgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5j
b2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSksIGN1c3RvbVNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotSlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5j
IHNldHRlcikKK0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24o
Vk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9w
ZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiAgICAgOiBCYXNlKHZtLCBl
eGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fcHJvcGVydHlOYW1l
KElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpCiAgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCiB7CiB9CiAKLUpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tU2V0
dGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMgc2V0dGVyKQor
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBw
cm9wZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiB7CiAgICAgQVNTRVJU
KHNldHRlcik7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RG
dW5jdGlvbihjdXN0b21TZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rp
b24uaAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKKyAg
ICB1c2luZyBDdXN0b21GdW5jdGlvblBvaW50ZXIgPSBQdXRWYWx1ZUZ1bmM7CisKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIApAQCAtNDksMTggKzUxLDE5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiog
Y3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUmLCBQdXRWYWx1
ZUZ1bmMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0
aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEN1
c3RvbUZ1bmN0aW9uUG9pbnRlcik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eU5hbWU7IH0KLSAgICBQdXRWYWx1ZUZ1bmMgc2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0
ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIHNldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0b21GdW5jdGlvblBv
aW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlcjsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1
c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgUHV0VmFsdWVGdW5jKTsKKyAgICBK
U0N1c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2lu
dGVyKTsKIAogICAgIElkZW50aWZpZXIgbV9wcm9wZXJ0eU5hbWU7Ci0gICAgUHV0VmFsdWVGdW5j
IG1fc2V0dGVyOworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBtX3NldHRlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDcsOCArNTA3LDggQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgUwog
ICAgICwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQogICAgICwgbV9y
dW50aW1lRmxhZ3MoKQogICAgICwgbV9zdGFja1RyYWNlTGltaXQoT3B0aW9uczo6ZGVmYXVsdEVy
cm9yU3RhY2tUcmFjZUxpbWl0KCkpCi0gICAgLCBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwKHZt
KQotICAgICwgbV9jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCh2bSkKKyAgICAsIG1fY3VzdG9tR2V0
dGVyRnVuY3Rpb25TZXQodm0pCisgICAgLCBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU2V0KHZtKQog
ICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSwxNCBAQAogI2lu
Y2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVk
ZSAiSlNDbGFzc1JlZi5oIgorI2luY2x1ZGUgIkpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaCIKKyNp
bmNsdWRlICJKU0N1c3RvbVNldHRlckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50
ZXJuYWwuaCIKLSNpbmNsdWRlICJMYXp5UHJvcGVydHkuaCIKICNpbmNsdWRlICJMYXp5Q2xhc3NT
dHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJMYXp5UHJvcGVydHkuaCIKICNpbmNsdWRlICJOdW1iZXJQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJQYXJzZXJNb2Rlcy5oIgogI2luY2x1ZGUgIlJlZ0V4cEds
b2JhbERhdGEuaCIKQEAgLTQ1LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUu
aCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJX
ZWFrR0NTZXQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRl
IDxhcnJheT4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNTQ2LDggKzU0OSw2IEBAIHB1
YmxpYzoKICAgICBib29sIGlzTWFwUHJvdG90eXBlU2V0RmFzdEFuZE5vbk9ic2VydmFibGUoKTsK
ICAgICBib29sIGlzU2V0UHJvdG90eXBlQWRkRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIAotICAg
IFdlYWtHQ01hcDxHZXRWYWx1ZUZ1bmMsIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+JiBjdXN0b21H
ZXR0ZXJGdW5jdGlvbk1hcCgpIHsgcmV0dXJuIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25NYXA7IH0K
LSAgICBXZWFrR0NNYXA8UHV0VmFsdWVGdW5jLCBKU0N1c3RvbVNldHRlckZ1bmN0aW9uPiYgY3Vz
dG9tU2V0dGVyRnVuY3Rpb25NYXAoKSB7IHJldHVybiBtX2N1c3RvbVNldHRlckZ1bmN0aW9uTWFw
OyB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB1c2luZyBSZWZlcmVuY2VkR2xvYmFsUHJv
cGVydHlXYXRjaHBvaW50U2V0cyA9IEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwg
UmVmPFdhdGNocG9pbnRTZXQ+LCBJZGVudGlmaWVyUmVwSGFzaD47CkBAIC01NjMsOCArNTY0LDM5
IEBAIHB1YmxpYzoKICAgICBSdW50aW1lRmxhZ3MgbV9ydW50aW1lRmxhZ3M7CiAgICAgQ29uc29s
ZUNsaWVudCogbV9jb25zb2xlQ2xpZW50IHsgbnVsbHB0ciB9OwogICAgIE9wdGlvbmFsPHVuc2ln
bmVkPiBtX3N0YWNrVHJhY2VMaW1pdDsKLSAgICBXZWFrR0NNYXA8R2V0VmFsdWVGdW5jLCBKU0N1
c3RvbUdldHRlckZ1bmN0aW9uPiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwOwotICAgIFdlYWtH
Q01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24+IG1fY3VzdG9tU2V0dGVy
RnVuY3Rpb25NYXA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBXZWFr
Q3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoIHsKKyAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFdlYWs8VD4mIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGhh
c2godmFsdWUtPnByb3BlcnR5TmFtZSgpLCB2YWx1ZS0+Y3VzdG9tRnVuY3Rpb25Qb2ludGVyKCkp
OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGlubGluZSBib29sIGVxdWFsKGNvbnN0IFdl
YWs8VD4mIGEsIGNvbnN0IFdlYWs8VD4mIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
YSB8fCAhYikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gYSA9PSBiOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUsIHR5cGVuYW1lIFQ6OkN1c3RvbUZ1bmN0aW9u
UG9pbnRlciBmdW5jdGlvblBvaW50ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGhhc2ggPSBEZWZhdWx0SGFzaDx0eXBlbmFtZSBUOjpDdXN0b21GdW5jdGlvblBvaW50ZXI+Ojpo
YXNoKGZ1bmN0aW9uUG9pbnRlcik7CisgICAgICAgICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc051
bGwoKSkKKyAgICAgICAgICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50SGFzaChoYXNoLCBwcm9w
ZXJ0eU5hbWUudWlkKCktPmV4aXN0aW5nU3ltYm9sQXdhcmVIYXNoKCkpOworICAgICAgICAgICAg
cmV0dXJuIGhhc2g7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICB9OworCisgICAgV2Vh
a0dDU2V0PEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24sIFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhh
c2g8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbj4+IG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQ7Cisg
ICAgV2Vha0dDU2V0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24sIFdlYWtDdXN0b21HZXR0ZXJPclNl
dHRlckhhc2g8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj4+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25T
ZXQ7CisKKyAgICBXZWFrR0NTZXQ8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdl
dHRlck9yU2V0dGVySGFzaDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uPj4mIGN1c3RvbUdldHRlckZ1
bmN0aW9uU2V0KCkgeyByZXR1cm4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblNldDsgfQorICAgIFdl
YWtHQ1NldDxKU0N1c3RvbVNldHRlckZ1bmN0aW9uLCBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJI
YXNoPEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24+PiYgY3VzdG9tU2V0dGVyRnVuY3Rpb25TZXQoKSB7
IHJldHVybiBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU2V0OyB9CiAKICNpZiBBU1NFUlRfRU5BQkxF
RAogICAgIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdEF0RGVidWdnZXJFbnRy
eSB7IG51bGxwdHIgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyMSwyMiArMzUyMSw0NSBAQCBC
dXR0ZXJmbHkqIEpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpCiAgICAgcmV0dXJuIEJ1dHRl
cmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKGJ1dHRlcmZseSgpLCB2bSwgdGhpcywg
c3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgV2Vha0N1c3RvbUdldHRlck9yU2V0dGVySGFzaFRyYW5zbGF0b3IgeworICAg
IHVzaW5nIEJhc2VIYXNoID0gSlNHbG9iYWxPYmplY3Q6OldlYWtDdXN0b21HZXR0ZXJPclNldHRl
ckhhc2g8VD47CisKKyAgICB1c2luZyBLZXkgPSBzdGQ6OnR1cGxlPFByb3BlcnR5TmFtZSwgdHlw
ZW5hbWUgVDo6Q3VzdG9tRnVuY3Rpb25Qb2ludGVyPjsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IEtleSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VIYXNoOjpoYXNo
KHN0ZDo6Z2V0PDA+KGtleSksIHN0ZDo6Z2V0PDE+KGtleSkpOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFdlYWs8VD4mIGEsIGNvbnN0IEtleSYgYikKKyAgICB7CisgICAg
ICAgIGlmICghYSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGEt
PnByb3BlcnR5TmFtZSgpID09IHN0ZDo6Z2V0PDA+KGIpICYmIGEtPmN1c3RvbUZ1bmN0aW9uUG9p
bnRlcigpID09IHN0ZDo6Z2V0PDE+KGIpOworICAgIH0KK307CisKIHN0YXRpYyBKU0N1c3RvbUdl
dHRlckZ1bmN0aW9uKiBjcmVhdGVDdXN0b21HZXR0ZXJGdW5jdGlvbihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEdldFZhbHVl
RnVuYyBnZXRWYWx1ZUZ1bmMsIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0
dHJpYnV0ZSkKIHsKLSAgICAvLyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0
IG5vdCBpbnZva2UgR0Mgc2luY2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRs
ZSBvZiBIYXNoTWFwOjplbnN1cmUuCi0gICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90
IHRvIGludm9rZSBHQyB3aGVuIGV4ZWN1dGluZyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAo
MikgdG8gYXZvaWQgbG9va2luZyB1cCBIYXNoTWFwIHR3aWNlLgorICAgIHVzaW5nIFRyYW5zbGF0
b3IgPSBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjxKU0N1c3RvbUdldHRl
ckZ1bmN0aW9uPjsKKworICAgIC8vIFdlYWtHQ1NldDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11
c3Qgbm90IGludm9rZSBHQyBzaW5jZSBHQyBjYW4gbW9kaWZ5IFdlYWtHQ1NldCBpbiB0aGUgbWlk
ZGxlIG9mIEhhc2hTZXQ6OmVuc3VyZS4KKyAgICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgxKSBu
b3QgdG8gaW52b2tlIEdDIHdoZW4gZXhlY3V0aW5nIFdlYWtHQ1NldDo6ZW5zdXJlVmFsdWUgYW5k
ICgyKSB0byBhdm9pZCBsb29raW5nIHVwIEhhc2hTZXQgdHdpY2UuCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwotICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmN1c3RvbUdldHRlckZ1bmN0
aW9uTWFwKCkuZW5zdXJlVmFsdWUoZ2V0VmFsdWVGdW5jLCBbJl0geworICAgIHJldHVybiBnbG9i
YWxPYmplY3QtPmN1c3RvbUdldHRlckZ1bmN0aW9uU2V0KCkuZW5zdXJlVmFsdWU8VHJhbnNsYXRv
cj4oc3RkOjptYWtlX3R1cGxlKHByb3BlcnR5TmFtZSwgZ2V0VmFsdWVGdW5jKSwgWyZdIHsKICAg
ICAgICAgcmV0dXJuIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGdldFZhbHVlRnVuYywgZG9tQXR0cmlidXRlKTsKICAgICB9KTsK
IH0KIAogc3RhdGljIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIGNyZWF0ZUN1c3RvbVNldHRlckZ1
bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5jIHB1dFZhbHVlRnVuYykKIHsKLSAgICAvLyBXZWFr
R0NNYXA6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mgc2luY2UgR0Mg
Y2FuIG1vZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBvZiBIYXNoTWFwOjplbnN1cmUuCi0g
ICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGludm9rZSBHQyB3aGVuIGV4ZWN1
dGluZyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8gYXZvaWQgbG9va2luZyB1cCBI
YXNoTWFwIHR3aWNlLgorICAgIHVzaW5nIFRyYW5zbGF0b3IgPSBXZWFrQ3VzdG9tR2V0dGVyT3JT
ZXR0ZXJIYXNoVHJhbnNsYXRvcjxKU0N1c3RvbVNldHRlckZ1bmN0aW9uPjsKKworICAgIC8vIFdl
YWtHQ1NldDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBHQyBzaW5jZSBH
QyBjYW4gbW9kaWZ5IFdlYWtHQ1NldCBpbiB0aGUgbWlkZGxlIG9mIEhhc2hTZXQ6OmVuc3VyZS4K
KyAgICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgxKSBub3QgdG8gaW52b2tlIEdDIHdoZW4gZXhl
Y3V0aW5nIFdlYWtHQ1NldDo6ZW5zdXJlVmFsdWUgYW5kICgyKSB0byBhdm9pZCBsb29raW5nIHVw
IEhhc2hTZXQgdHdpY2UuCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIHJldHVy
biBnbG9iYWxPYmplY3QtPmN1c3RvbVNldHRlckZ1bmN0aW9uTWFwKCkuZW5zdXJlVmFsdWUocHV0
VmFsdWVGdW5jLCBbJl0geworICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmN1c3RvbVNldHRlckZ1
bmN0aW9uU2V0KCkuZW5zdXJlVmFsdWU8VHJhbnNsYXRvcj4oc3RkOjptYWtlX3R1cGxlKHByb3Bl
cnR5TmFtZSwgcHV0VmFsdWVGdW5jKSwgWyZdIHsKICAgICAgICAgcmV0dXJuIEpTQ3VzdG9tU2V0
dGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHB1dFZh
bHVlRnVuYyk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrR0NIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrR0NIYXNoVGFibGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrR0NIYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBXZWFrR0NIYXNoVGFibGUgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYWtHQ0hh
c2hUYWJsZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcnVuZVN0YWxlRW50cmllcygpID0gMDsK
K307CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5o
CShyZXZpc2lvbiAyNzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
R0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjEgKzI3LDE1IEBACiAKICNpbmNsdWRlICJE
ZWZlckdDLmgiCiAjaW5jbHVkZSAiV2Vhay5oIgorI2luY2x1ZGUgIldlYWtHQ0hhc2hUYWJsZS5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBBIEhh
c2hNYXAgd2l0aCBXZWFrPEpTQ2VsbD4gdmFsdWVzLCB3aGljaCBhdXRvbWF0aWNhbGx5IHJlbW92
ZXMgdmFsdWVzIG9uY2UgdGhleSdyZSBnYXJiYWdlIGNvbGxlY3RlZC4KIAotY2xhc3MgV2Vha0dD
TWFwQmFzZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2Vha0dDTWFwQmFzZSgpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBwcnVuZVN0YWxlRW50cmllcygpID0gMDsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZh
dWx0SGFzaDxLZXlBcmc+LAotICAgIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8
S2V5QXJnPj4KLWNsYXNzIFdlYWtHQ01hcCBmaW5hbCA6IHB1YmxpYyBXZWFrR0NNYXBCYXNlIHsK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNo
VHJhaXRzPEtleUFyZz4+CitjbGFzcyBXZWFrR0NNYXAgZmluYWwgOiBwdWJsaWMgV2Vha0dDSGFz
aFRhYmxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICB0eXBlZGVmIFdlYWs8
VmFsdWVBcmc+IFZhbHVlVHlwZTsKICAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBWYWx1ZVR5
cGUsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5lcy5oCShyZXZpc2lvbiAy
NzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXBJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIFZhbHVlCiBpbmxpbmUgV2Vha0dDTWFwPEtleUFyZywgVmFsdWVBcmcs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZz46OldlYWtHQ01hcChWTSYgdm0pCiAgICAgOiBtX3ZtKHZt
KQogewotICAgIHZtLmhlYXAucmVnaXN0ZXJXZWFrR0NNYXAodGhpcyk7CisgICAgdm0uaGVhcC5y
ZWdpc3RlcldlYWtHQ0hhc2hUYWJsZSh0aGlzKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJh
aXRzQXJnPgogaW5saW5lIFdlYWtHQ01hcDxLZXlBcmcsIFZhbHVlQXJnLCBIYXNoQXJnLCBLZXlU
cmFpdHNBcmc+Ojp+V2Vha0dDTWFwKCkKIHsKLSAgICBtX3ZtLmhlYXAudW5yZWdpc3RlcldlYWtH
Q01hcCh0aGlzKTsKKyAgICBtX3ZtLmhlYXAudW5yZWdpc3RlcldlYWtHQ0hhc2hUYWJsZSh0aGlz
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2Vhay5oIgor
I2luY2x1ZGUgIldlYWtHQ0hhc2hUYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisK
K25hbWVzcGFjZSBKU0MgeworCisvLyBBIEhhc2hTZXQgd2l0aCBXZWFrPEpTQ2VsbD4gdmFsdWVz
LCB3aGljaCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgdmFsdWVzIG9uY2UgdGhleSdyZSBnYXJiYWdl
IGNvbGxlY3RlZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hB
cmcgPSBEZWZhdWx0SGFzaDxXZWFrPFZhbHVlQXJnPj4sIHR5cGVuYW1lIFRyYWl0c0FyZyA9IEhh
c2hUcmFpdHM8V2VhazxWYWx1ZUFyZz4+PgorY2xhc3MgV2Vha0dDU2V0IGZpbmFsIDogcHVibGlj
IFdlYWtHQ0hhc2hUYWJsZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgdXNp
bmcgVmFsdWVUeXBlID0gV2VhazxWYWx1ZUFyZz47CisgICAgdXNpbmcgSGFzaFNldFR5cGUgPSBI
YXNoU2V0PFZhbHVlVHlwZSwgSGFzaEFyZywgVHJhaXRzQXJnPjsKKworcHVibGljOgorICAgIHVz
aW5nIEFkZFJlc3VsdCA9IHR5cGVuYW1lIEhhc2hTZXRUeXBlOjpBZGRSZXN1bHQ7CisgICAgdXNp
bmcgaXRlcmF0b3IgPSB0eXBlbmFtZSBIYXNoU2V0VHlwZTo6aXRlcmF0b3I7CisgICAgdXNpbmcg
Y29uc3RfaXRlcmF0b3IgPSB0eXBlbmFtZSBIYXNoU2V0VHlwZTo6Y29uc3RfaXRlcmF0b3I7CisK
KyAgICBleHBsaWNpdCBXZWFrR0NTZXQoVk0mKTsKKyAgICB+V2Vha0dDU2V0KCkgZmluYWw7CisK
KyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2V0LmNsZWFyKCk7CisgICAgfQor
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9zZXQuYmVnaW4oKTsKKyAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gbV9zZXQu
ZW5kKCk7CisgICAgICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIFZhbHVlQXJnKiBlbnN1cmVW
YWx1ZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIC8vIElmIGZ1
bmN0b3IgaW52b2tlcyBHQywgR0MgY2FuIHBydW5lIFdlYWtHQ1NldCwgYW5kIG1hbmlwdWxhdGUg
SGFzaFNldCB3aGlsZSB3ZSBhcmUgdG91Y2hpbmcgaXQgaW4gdGhlIGVuc3VyZSBmdW5jdGlvbi4K
KyAgICAgICAgLy8gVGhlIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDLgorICAgICAgICBEaXNh
bGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgIAorICAgICAgICBhdXRvIHJlc3VsdCA9IG1fc2V0
LnRlbXBsYXRlIGVuc3VyZTxIYXNoVHJhbnNsYXRvcj4oc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0
ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIHJldHVybiByZXN1bHQuaXRl
cmF0b3ItPmdldCgpOworICAgIH0KKworICAgIGlubGluZSBpdGVyYXRvciBmaW5kKGNvbnN0IFZh
bHVlVHlwZSYga2V5KTsKKyAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBWYWx1
ZVR5cGUmIGtleSkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgY29udGFpbnMoY29uc3QgVmFsdWVU
eXBlJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcnVuZVN0YWxlRW50cmllcygpIGZp
bmFsOworCisgICAgSGFzaFNldFR5cGUgbV9zZXQ7CisgICAgVk0mIG1fdm07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtH
Q1NldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrR0NTZXRJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkhlYXBJbmxpbmVz
LmgiCisjaW5jbHVkZSAiV2Vha0dDU2V0LmgiCisjaW5jbHVkZSAiV2Vha0lubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBI
YXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+CitpbmxpbmUgV2Vha0dDU2V0PFZhbHVlQXJnLCBI
YXNoQXJnLCBUcmFpdHNBcmc+OjpXZWFrR0NTZXQoVk0mIHZtKQorICAgIDogbV92bSh2bSkKK3sK
KyAgICB2bS5oZWFwLnJlZ2lzdGVyV2Vha0dDSGFzaFRhYmxlKHRoaXMpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJn
PgoraW5saW5lIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6fldlYWtH
Q1NldCgpCit7CisgICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUodGhpcyk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBUcmFpdHNBcmc+CitpbmxpbmUgdHlwZW5hbWUgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNo
QXJnLCBUcmFpdHNBcmc+OjppdGVyYXRvciBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRy
YWl0c0FyZz46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3sKKyAgICBpdGVyYXRvciBp
dCA9IG1fc2V0LmZpbmQodmFsdWUpOworICAgIGl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOwor
ICAgIGlmIChpdCAhPSBlbmQgJiYgISppdCkgLy8gRm91bmQgYSB6b21iaWUgdmFsdWUuCisgICAg
ICAgIHJldHVybiBlbmQ7CisgICAgcmV0dXJuIGl0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgoraW5saW5lIHR5
cGVuYW1lIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6Y29uc3RfaXRl
cmF0b3IgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+OjpmaW5kKGNvbnN0
IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2Vha0dD
U2V0Kj4odGhpcyktPmZpbmQodmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFy
ZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgoraW5saW5lIGJvb2wgV2Vh
a0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+Ojpjb250YWlucyhjb25zdCBWYWx1
ZVR5cGUmIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBmaW5kKHZhbHVlKSAhPSBtX3NldC5l
bmQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIFRyYWl0c0FyZz4KK05FVkVSX0lOTElORSB2b2lkIFdlYWtHQ1NldDxWYWx1ZUFy
ZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6cHJ1bmVTdGFsZUVudHJpZXMoKQoreworICAgIG1fc2V0
LnJlbW92ZUlmKFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiAhZW50cnk7CisgICAg
fSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NTEyMykKKysr
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIw
MjEtMDMtMjcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEpTR2xv
YmFsT2JqZWN0J3MgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCBhbmQgbV9jdXN0b21TZXR0ZXJG
dW5jdGlvbk1hcCBzaG91bGQgYmUgc2V0cywgbm90IG1hcHMsIGFuZCBzaG91bGQgdXNlIGJvdGgg
dGhlIGlkZW50aWZpZXIgYW5kIGZ1bmN0aW9uIHBvaW50ZXIgYXMgdGhlIGtleQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzNjEzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIGhldGVyb2dlbm91
cyBIYXNoU2V0OjplbnN1cmUsIHdoaWNoIGFsbG93cyBsYXp5IGNvbnN0cnVjdGlvbiBvZiB0aGUg
dmFsdWUgdG8KKyAgICAgICAgaW5zZXJ0IGludG8gdGhlIEhhc2hTZXQgb25seSBpZiB0aGUgaGV0
ZXJvZ2Vub3VzIGtleSAoZS5nLiBhIGtleSArIEhhc2hUcmFuc2xhdG9yCisgICAgICAgIHRoYXQg
YXJlIG5vdCB0aGUgc2FtZSBhcyB0aGUgSGFzaFNldCdzIFZhbHVlVHlwZSkgZG9lcyBub3QgbWF0
Y2ggYW55IGl0ZW0gaW4gdGhlCisgICAgICAgIHNldC4gRm9yIGV4YW1wbGUgZ2l2ZW4gYSBzZXQg
b2YgRXhwZW5zaXZlVG9Db25zdHJ1Y3QsIGJ1dCB1bmlxdWVseSBpZGVudGlmaWFibGUKKyAgICAg
ICAgYnkgQ2hlYXBUb0NvbnN0cnVjdDoKKyAgICAgICAgCisgICAgICAgICAgICBIYXNoU2V0PEV4
cGVuc2l2ZVRvQ29uc3RydWN0PiBoYXNoU2V0OworICAgICAgICAgICAgLi4uCisgICAgICAgICAg
ICBzdHJ1Y3QgVHJhbnNsYXRvciB7CisgICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgQ2hlYXBUb0NvbnN0cnVjdCYga2V5KQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEV4cGVuc2l2ZVRvQ29uc3RydWN0
JiBhLCBjb25zdCBDaGVhcFRvQ29uc3RydWN0JiBiKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXNoU2V0LmVuc3VyZTxUcmFuc2xh
dG9yPihDaGVhcFRvQ29uc3RydWN0IHsgLi4uIH0sIFtdIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gRXhwZW5zaXZlVG9Db25zdHJ1Y3QgeyAuLi4gfTsKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgIFRoaXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBjdXN0b20gZ2V0dGVyL3NldHRlciBzZXRzIHRv
IGF2b2lkIGNvbnN0cnVjdGluZyB0aGUgR0Mgb2JqZWN0cworICAgICAgICB1bmxlc3MgdGhleSBh
cmUgcmVhbGx5IG5lZWRlZC4KKworICAgICAgICBBbHNvIHRvb2sgdGhlIG9wZXJ0dW5pdHkgdG8g
cmVwbGFjZSBzb21lIHR5cGVkZWZzIHdpdGggdXNpbmdzLCBhbmQgZml4ZWQgc29tZSBjb21tZW50
cy4KKworICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6OlRyYWl0cz46OmVu
c3VyZSk6CisKIDIwMjEtMDMtMjYgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5j
b20+CiAKICAgICAgICAgVXNlIFBVSUNRdWlja2JvYXJkQ29udHJvbGxlciBmb3IgdGV4dCBpbnB1
dCB3aGVuIEhBVkUoUVVJQ0tCT0FSRF9DT05UUk9MTEVSKSBpcyBkZWZpbmVkCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFNl
dC5oCShyZXZpc2lvbiAyNzUxMjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDM2ICszMywzMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywg
dHlwZW5hbWUgSGFzCiBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoQXJnIEhhc2hGdW5jdGlvbnM7Ci0g
ICAgdHlwZWRlZiBUcmFpdHNBcmcgVmFsdWVUcmFpdHM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBW
YWx1ZVRyYWl0czo6VGFrZVR5cGUgVGFrZVR5cGU7CisgICAgdXNpbmcgSGFzaEZ1bmN0aW9ucyA9
IEhhc2hBcmc7CisgICAgdXNpbmcgVmFsdWVUcmFpdHMgPSBUcmFpdHNBcmc7CisgICAgdXNpbmcg
VGFrZVR5cGUgPSB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VGFrZVR5cGU7CiAKIHB1YmxpYzoKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGUgVmFsdWVUeXBlOworICAg
IHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGU7CiAKIHBy
aXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoVGFibGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50
aXR5RXh0cmFjdG9yLAotICAgICAgICBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVU
cmFpdHM+IEhhc2hUYWJsZVR5cGU7CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9IEhhc2hUYWJs
ZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFZhbHVlVHJhaXRzLCBWYWx1ZVRyYWl0cz47CiAKIHB1YmxpYzoKLSAgICAvKgotICAgICAqIFNp
bmNlIGZpZ3VyaW5nIG91dCB0aGUgZW50cmllcyBvZiBhbiBpdGVyYXRvciBpcyBjb25mdXNpbmcs
IGhlcmUgaXMgYSBjaGVhdCBzaGVldDoKLSAgICAgKiBjb25zdCBLZXlUeXBlJiBrZXkgPSBpdGVy
YXRvci0+a2V5OwotICAgICAqLwotICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFk
YXB0ZXI8SGFzaFRhYmxlVHlwZSwgVmFsdWVUeXBlPiBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIEhh
c2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT4gY29u
c3RfaXRlcmF0b3I7Ci0KLSAgICAvKgotICAgICAqIFNpbmNlIGZpZ3VyaW5nIG91dCB0aGUgZW50
cmllcyBvZiBhbiBBZGRSZXN1bHQgaXMgY29uZnVzaW5nLCBoZXJlIGlzIGEgY2hlYXQgc2hlZXQ6
Ci0gICAgICogaXRlcmF0b3IgaXRlciA9IGFkZFJlc3VsdC5pdGVyYXRvcjsKLSAgICAgKiBib29s
IGlzTmV3RW50cnkgPSBhZGRSZXN1bHQuaXNOZXdFbnRyeTsKLSAgICAgKi8KLSAgICB0eXBlZGVm
IHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7Ci0KLSAgICBIYXNo
U2V0KCkKLSAgICB7Ci0gICAgfQorICAgIC8vIEhhc2hTZXQgaXRlcmF0b3JzIGhhdmUgdGhlIGZv
bGxvd2luZyBzdHJ1Y3R1cmU6CisgICAgLy8gICAgICBjb25zdCBWYWx1ZVR5cGUqIGdldCgpIGNv
bnN0OworICAgIC8vICAgICAgY29uc3QgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBjb25zdDsKKyAg
ICAvLyAgICAgIGNvbnN0IFZhbHVlVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0OworICAgIHVzaW5n
IGl0ZXJhdG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwg
VmFsdWVUeXBlPjsKKyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IEhhc2hUYWJsZUNvbnN0SXRl
cmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT47CisKKyAgICAvLyBIYXNoU2V0
IEFkZFJlc3VsdHMgaGF2ZSB0aGUgZm9sbG93aW5nIGZpZWxkczoKKyAgICAvLyAgICAgIEl0ZXJh
dG9yVHlwZSBpdGVyYXRvcjsKKyAgICAvLyAgICAgIGJvb2wgaXNOZXdFbnRyeTsKKyAgICB1c2lu
ZyBBZGRSZXN1bHQgPSB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpBZGRSZXN1bHQ7CiAKKyAgICBI
YXNoU2V0KCkgPSBkZWZhdWx0OwogICAgIEhhc2hTZXQoc3RkOjppbml0aWFsaXplcl9saXN0PFZh
bHVlQXJnPiBpbml0aWFsaXplckxpc3QpCiAgICAgewogICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IHZhbHVlIDogaW5pdGlhbGl6ZXJMaXN0KQpAQCAtOTMsNiArODcsNyBAQCBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0ZXJhdG9yIGZp
bmQoY29uc3QgVCYpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiBib29sIGNvbnRhaW5zKGNvbnN0IFQmKSBjb25zdDsKIAorCiAgICAgLy8g
VGhlIHJldHVybiB2YWx1ZSBpbmNsdWRlcyBib3RoIGFuIGl0ZXJhdG9yIHRvIHRoZSBhZGRlZCB2
YWx1ZSdzIGxvY2F0aW9uLAogICAgIC8vIGFuZCBhbiBpc05ld0VudHJ5IGJvb2wgdGhhdCBpbmRp
Y2F0ZXMgaWYgaXQgaXMgYSBuZXcgb3IgZXhpc3RpbmcgZW50cnkgaW4gdGhlIHNldC4KICAgICBB
ZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYpOwpAQCAtMTEwLDYgKzEwNSwxNiBAQCBwdWJs
aWM6CiAgICAgLy8gICBzdGF0aWMgdHJhbnNsYXRlKFZhbHVlVHlwZSYsIGNvbnN0IFQmLCB1bnNp
Z25lZCBoYXNoQ29kZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQ+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYpOwogICAgIAorICAgIC8vIEFuIGFsdGVy
bmF0ZSB2ZXJzaW9uIG9mIHRyYW5zbGF0ZWQgYWRkKCksIGVuc3VyZSgpIHdpbGwgc3RpbGwgZG8g
dHJhbnNsYXRpb24KKyAgICAvLyBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcgd2l0aCBzb21lIG90
aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUKKyAgICAvLyBjb252ZXJzaW9uIGlm
IHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgdGFibGUsIGJ1dCByYXRoZXIgdGhhbiBhIHN0
YXRpYworICAgIC8vIHRyYW5zbGF0ZSgpIGZ1bmN0aW9uLCB1c2VzIHRoZSBwYXNzZWQgaW4gZnVu
Y3RvciB0byBwZXJmb3JtIGxhenkgY3JlYXRpb24gb2YKKyAgICAvLyB0aGUgdmFsdWUgb25seSBp
ZiBpdCBpcyBub3QgYWxyZWFkeSB0aGVyZS4gSGFzaFRyYW5zbGF0b3IgbXVzdCBoYXZlIHRoZSBm
b2xsb3dpbmcKKyAgICAvLyBmdW5jdGlvbiBtZW1iZXJzOgorICAgIC8vICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgVCYpOworICAgIC8vICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFs
dWVUeXBlJiwgY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPiBBZGRSZXN1bHQgZW5zdXJlKFQmJiwgRnVu
Y3RvciYmKTsKKwogICAgIC8vIEF0dGVtcHRzIHRvIGFkZCBhIGxpc3Qgb2YgdGhpbmdzIHRvIHRo
ZSBzZXQuIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YKICAgICAvLyB0aGVtIGFyZSBuZXcgdG8gdGhl
IHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CkBAIC0xNzEsNiArMTc2LDE2IEBAIHN0cnVjdCBIYXNo
U2V0VHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHJhaXRzLCB0eXBlbmFtZSBUcmFuc2xhdG9yPgorc3RydWN0IEhhc2hTZXRFbnN1cmVUcmFu
c2xhdG9yQWRhcHRvciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBUcmFuc2xhdG9yOjpoYXNoKGtleSk7IH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChhLCBiKTsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmN0b3I+IHN0
YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgVSYmLCBGdW5jdG9yJiYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KGxvY2F0aW9uLCBmdW5j
dG9yKCkpOworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+CiBpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+Ojpzd2FwKEhhc2hTZXQmIG90
aGVyKQogewpAQCAtMjMzLDYgKzI0OCwxMyBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBI
YXNoRnVuY3Rpb25zCiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxIYXNoU2V0
VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
RnVuY3Rvcj4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmVuc3VyZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVzdWx0Cit7Cisg
ICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaFNldEVuc3VyZVRyYW5zbGF0b3JBZGFw
dG9yPFRyYWl0cywgSGFzaFRyYW5zbGF0b3I+PihzdGQ6OmZvcndhcmQ8VD4oa2V5KSwgc3RkOjpm
b3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsK
</data>
<flag name="commit-queue"
          id="444165"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424479</attachid>
            <date>2021-03-27 18:47:15 -0700</date>
            <delta_ts>2021-03-28 11:38:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223613-20210327184714.patch</filename>
            <type>text/plain</type>
            <size>48262</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMS0wMy0yNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QncyBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwIGFuZCBtX2N1c3RvbVNl
dHRlckZ1bmN0aW9uTWFwIHNob3VsZCBiZSBzZXRzLCBub3QgbWFwcywgYW5kIHNob3VsZCB1c2Ug
Ym90aCB0aGUgaWRlbnRpZmllciBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcyB0aGUga2V5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM2MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSBnZW5l
cmljIFdlYWtHQ1NldCBjbGFzcyB0byBnbyB3aXRoIHRoZSBleGlzdGluZyBXZWFrR0NNYXAuCisg
ICAgICAgIC0gUmVuYW1lcyBXZWFrR0NNYXBCYXNlIHRvIFdlYWtHQ0hhc2hUYWJsZSwgbW92ZXMg
aXQgdG8gaXRzIG93biBmaWxlCisgICAgICAgICAgYW5kIG5vdyB1c2VzIGl0IGFzIHRoZSBiYXNl
IGNsYXNzIG9mIGJvdGggV2Vha0dDU2V0IGFuZCBXZWFrR0NNYXAuCisgICAgICAgIC0gUmVwbGFj
ZXMgSlNHbG9iYWxPYmplY3QncyBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9jdXN0b21TZXR0ZXJG
dW5jdGlvbk1hcAorICAgICAgICAgIHdpdGggY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvY3VzdG9t
U2V0dGVyRnVuY3Rpb25TZXQsIHVzaW5nIHRoZSBuZXcKKyAgICAgICAgICBXZWFrR0NTZXQsIGFu
ZCB1cGRhdGVzIHRoZW0gdG8gdXNlIGJvdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIAorICAg
ICAgICAgIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBrZXksIHJhdGhlciB0aGFuIGp1c3QgdGhlIGZ1
bmN0aW9uIHBvaW50ZXIgd2hpY2gKKyAgICAgICAgICBpcyB3aGF0IHRoZSBwcmV2aW91cyBjb2Rl
IGRpZC4gVGhpcyBhbGxvd3MgbXVsdGlwbGUgY3VzdG9tIGZ1bmN0aW9ucworICAgICAgICAgIHRv
IHVzZSB0aGUgc2FtZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHBvaW50ZXIgYXMgbG9uZyBhcyB0aGV5
IGhhdmUgZGlzdGluY3QKKyAgICAgICAgICBwcm9wZXJ0eSBuYW1lcywgd2hpY2ggaXMgZ29pbmcg
dG8gYmUgdXNlZCB0byBvcHRpbWl6ZSB0aGUgYmluZGluZ3MgZm9yCisgICAgICAgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcg
ZmlsZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpy
dW5FbmRQaGFzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdl
YWtHQ0hhc2hUYWJsZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZWdpc3RlcldlYWtHQ0hhc2hU
YWJsZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6cmVnaXN0ZXJXZWFrR0NNYXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpIZWFwOjp1bnJlZ2lzdGVyV2Vha0dDTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZS4gV2Vha0dDTWFw
QmFzZSAtPiBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMu
aDoKKyAgICAgICAgQWRkIFdlYWtHQ1NldElubGluZXMuaAorCisgICAgICAgICogcnVudGltZS9K
U0N1c3RvbUdldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0
b21HZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmg6Cisg
ICAgICAgICogcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbVNl
dHRlckZ1bmN0aW9uLmg6CisgICAgICAgIEFkZCBoZWxwZXIgdHlwZSBDdXN0b21GdW5jdGlvblBv
aW50ZXIgYW5kIGhlbHBlciBmdW5jdGlvbiBjdXN0b21GdW5jdGlvblBvaW50ZXIoKQorICAgICAg
ICB0byBhbGxvdyBzb21lIGdlbmVyaWMgaGFzaGluZyBjb2RlIHRvIHJ1biBvbiBlaXRoZXIgSlND
dXN0b21HZXR0ZXJGdW5jdGlvbgorICAgICAgICBvciBKU0N1c3RvbVNldHRlckZ1bmN0aW9uLgor
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6V2Vha0N1c3RvbUdldHRl
ck9yU2V0dGVySGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpXZWFr
Q3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlcGxhY2UgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9tX2N1c3RvbVNldHRlckZ1bmN0
aW9uTWFwIHdpdGggCisgICAgICAgIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvbV9jdXN0b21T
ZXR0ZXJGdW5jdGlvblNldC4gQXMgdGhlIGtleSBpcyBpbmNsdWRlZAorICAgICAgICBpbiB0aGUg
dmFsdWUsIGl0IHNhdmVzIHNwYWNlIHRvIHVzZSBhIHNldCByYXRoZXIgdGhhbiBhIG1hcC4gV2Ug
bm93IGFsc28KKyAgICAgICAgaGFzaCBhbmQgY29tcGFyZSBib3RoIHRoZSBmdW5jdGlvbiBwb2lu
dGVyIGFuZCB0aGUgcHJvcGVydHkgbmFtZSB0byBhbGxvdworICAgICAgICBzaGFyaW5nIGltcGxl
bWVudGF0aW9ucy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAg
ICAgIChKU0M6OldlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yOjplcXVhbCk6
CisgICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgorICAgICAgICBVcGRhdGUgY3JlYXRpb24g
ZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IHNldHMsIG1ha2luZyB1c2Ugb2YgdGhlCisgICAgICAg
IGVuc3VyZVZhbHVlIGZ1bmN0aW9uIGFuZCBhIEhhc2hUcmFuc2xhdG9yIGFsbG93aW5nIHRoZSB1
c2Ugb2YgYQorICAgICAgICBzdGQ6OnR1cGxlPFByb3BlcnR5TmFtZSwgRnVuY3Rpb25Qb2ludGVy
PiBhcyBhbiBhbHRlcm5hdGl2ZSBsb29rdXAKKyAgICAgICAga2V5LiBUaGlzIGFsbG93cyB1cyB0
byBhdm9pZCBjcmVhdGluZyB0aGUgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi9KU0N1c3RvbVNldHRl
ckZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgaWYgb25lIHdpdGggdGhlIHNhbWUgcHJvcGVydHkg
bmFtZSBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcmUKKyAgICAgICAgYWxyZWFkeSBpbiB0aGUgc2V0
LgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NIYXNoVGFibGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OldlYWtHQ0hhc2hUYWJsZTo6fldlYWtHQ0hhc2hUYWJsZSk6CisgICAgICAgIE1vdmVk
IGZyb20gV2Vha0dDTWFwIGFuZCByZW5hbWVkIGFzIGl0IGlzIG5vdyB0aGUgYmFzZSBvZiBib3Ro
CisgICAgICAgIFdlYWtHQ01hcCBhbmQgV2Vha0dDU2V0LgorIAorICAgICAgICAqIHJ1bnRpbWUv
V2Vha0dDTWFwLmg6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IFdlYWtHQ0hhc2hUYWJsZSBi
YXNlIGNsYXNzLgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OktleVRyYWl0c0FyZz46OldlYWtHQ01hcCk6CisgICAgICAgIChKU0M6OktleVRy
YWl0c0FyZz46On5XZWFrR0NNYXApOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBIZWFwIGZ1bmN0
aW9uIG5hbWVzIGZvciBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL1dlYWtH
Q1NldC5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ1NldElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlRyYWl0c0FyZz46OldlYWtHQ1NldCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46On5XZWFrR0NTZXQpOgorICAgICAgICAoSlNDOjpUcmFpdHNBcmc+OjpmaW5k
KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6
cHJ1bmVTdGFsZUVudHJpZXMpOgorICAgICAgICBBZGRlZCBhIG1pbmltYWwgV2Vha0dDU2V0IGJh
c2VkIG9uIFdlYWtHQ01hcC4gCisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJIGZvciBjYW5vbmlj
YWxpemF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAyNzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwOTcsOCArMTA5NywxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9WTVRyYXBzLmgKICAgICBydW50aW1lL1Zhck9m
ZnNldC5oCiAgICAgcnVudGltZS9XYXRjaGRvZy5oCisgICAgcnVudGltZS9XZWFrR0NIYXNoVGFi
bGUuaAogICAgIHJ1bnRpbWUvV2Vha0dDTWFwLmgKICAgICBydW50aW1lL1dlYWtHQ01hcElubGlu
ZXMuaAorICAgIHJ1bnRpbWUvV2Vha0dDU2V0LmgKKyAgICBydW50aW1lL1dlYWtHQ1NldElubGlu
ZXMuaAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmll
cklubGluZXMuaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
Mjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MjksNiArMTcyOSw5IEBACiAJ
CUJDRDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QyMDM0ODBFMTcxMzVFMDAyQzdF
ODIgLyogRGF0ZVByb3RvdHlwZS5oICovOyB9OwogCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdFODIg
LyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRDIwM0U3MEUxNzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmx1
dC5oICovOyB9OwogCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0RFM0FCMTBFNkM4
MkNGMDAxNDUzQTcgLyogU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkNFMkZBRkIyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1Nl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFMkZB
RkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZEMjYwOTE2RkYwMDBBNTEwRiAvKiBX
ZWFrR0NTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZG
MjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBX
ZWFrR0NIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjA1MTIwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIy
RUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkRGQ0IyQkJFOTBGNDEzNDlFMUIwQkVEIC8qIEpTU291cmNl
Q29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzAz
MjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODkyLDYgKzQ4OTUsOSBAQAogCQlC
Q0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGNvZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNERTNBQjAwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0RFM0FCMTBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0
dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0UyRkFGQTI2MDkxNkVGMDAwQTUxMEYgLyogV2Vh
a0dDU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrR0NTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vha0dDSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyZ0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTAsOCArNzg5NiwxMSBAQAogCQkJCUZFNkY1NkRE
MUU2NEU5MjAwMEQxNzgwMSAvKiBWTVRyYXBzLmggKi8sCiAJCQkJRkVEOTRGMkIxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLywKIAkJCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCAqLywKKwkJCQlCQ0UyRkFGRTI2MDkxNzgyMDAwQTUxMEYgLyogV2Vha0dD
SGFzaFRhYmxlLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01h
cC5oICovLAogCQkJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVz
LmggKi8sCisJCQkJQkNFMkZBRkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovLAor
CQkJCUJDRTJGQUZDMjYwOTE2RkYwMDBBNTEwRiAvKiBXZWFrR0NTZXRJbmxpbmVzLmggKi8sCiAJ
CQkJQTdDQTNBREQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgKi8s
CiAJCQkJQTdDQTNBREUxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oICov
LAogCQkJCUUzQTMyQkM1MUZDODMxMkQwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCkBA
IC05MjEzLDYgKzkyMjIsNyBAQAogCQkJCThCQzA2NDhCMUUxQUJBOTQwMEIyQjhDQSAvKiBBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCQzA2
NDhBMUUxQUJBN0IwMEIyQjhDQSAvKiBBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4QkMwNjQ5MjFFMUFEQ0M0MDBCMkI4Q0EgLyogQXN5bmNHZW5l
cmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRTJGQUZGMjYwOTE3ODIwMDBB
NTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCThCM0JGNUU0MUUz
RDM2OEIwMDc2QTg3QSAvKiBBc3luY0dlbmVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCQzA2NDk2MUUxRDg0NUMwMEIyQjhDQSAvKiBBc3luY0l0ZXJhdG9yUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5
bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NzYsNiArOTY4Niw3IEBACiAJCQkJ
MTQzODZBNzUxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjM3MzA4RjFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU0REVGRjFFOEQ3NkZB
MDBBODkyQzUgLyogRGlzYWxsb3dTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZBRkIy
NjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1NERF
RkIxRThDNkQ4ODAwQTg5MkM1IC8qIERpc2FsbG93Vk1FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTMxNjE4MTMxRUM1RkUxNzAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtMTAzMzMsNiArMTAzNDQsNyBAQAogCQkJCTE0Rjc5RjcwMjE2RUFGRDIw
MDA0NkQzOSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjQ4NzJFMjE0MUQwNDgw
MEFCMEQzRSAvKiBPcGNvZGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEE0NjgwRDIx
NkZBNTZBMDAwRDJCMUEgLyogT3Bjb2RlU2l6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZB
RkQyNjA5MTZGRjAwMEE1MTBGIC8qIFdlYWtHQ1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpy
dW5FbmRQaGFzZShHQ0NvCiAgICAgICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxl
cygpOwogCiAgICAgICAgIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICBwcnVuZVN0YWxlRW50
cmllc0Zyb21XZWFrR0NNYXBzKCk7CisgICAgICAgIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtH
Q0hhc2hUYWJsZXMoKTsKICAgICAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICAgICAgc25h
cHNob3RVbnN3ZXB0KCk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMo
KTsgLy8gV2UgcmVseSBvbiB0aGVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMgcnVubmluZyBi
ZWZvcmUgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcgc2luY2UgQ29kZUJsb2NrJ3MgZmluYWxpemVy
IHJlbGllcyBvbiBxdWVyeWluZyBjdXJyZW50bHkgZXhlY3V0aW5nLgpAQCAtMjIxNywxMiArMjIx
NywxMiBAQCB2b2lkIEhlYXA6OnJlYXBXZWFrSGFuZGxlcygpCiAgICAgbV9vYmplY3RTcGFjZS5y
ZWFwV2Vha1NldHMoKTsKIH0KIAotdm9pZCBIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFr
R0NNYXBzKCkKK3ZvaWQgSGVhcDo6cHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDSGFzaFRhYmxl
cygpCiB7CiAgICAgaWYgKCFtX2NvbGxlY3Rpb25TY29wZSB8fCBtX2NvbGxlY3Rpb25TY29wZS52
YWx1ZSgpICE9IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgcmV0dXJuOwotICAgIGZv
ciAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwIDogbV93ZWFrR0NNYXBzKQotICAgICAgICB3ZWFr
R0NNYXAtPnBydW5lU3RhbGVFbnRyaWVzKCk7CisgICAgZm9yIChhdXRvKiB3ZWFrR0NIYXNoVGFi
bGUgOiBtX3dlYWtHQ0hhc2hUYWJsZXMpCisgICAgICAgIHdlYWtHQ0hhc2hUYWJsZS0+cHJ1bmVT
dGFsZUVudHJpZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCkBAIC0y
Njc0LDE0ICsyNjc0LDE0IEBAIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWYKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKLXZvaWQgSGVhcDo6cmVn
aXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjpyZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqIHdlYWtHQ0hhc2hUYWJsZSkKIHsK
LSAgICBtX3dlYWtHQ01hcHMuYWRkKHdlYWtHQ01hcCk7CisgICAgbV93ZWFrR0NIYXNoVGFibGVz
LmFkZCh3ZWFrR0NIYXNoVGFibGUpOwogfQogCi12b2lkIEhlYXA6OnVucmVnaXN0ZXJXZWFrR0NN
YXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjp1bnJlZ2lzdGVyV2Vha0dD
SGFzaFRhYmxlKFdlYWtHQ0hhc2hUYWJsZSogd2Vha0dDSGFzaFRhYmxlKQogewotICAgIG1fd2Vh
a0dDTWFwcy5yZW1vdmUod2Vha0dDTWFwKTsKKyAgICBtX3dlYWtHQ0hhc2hUYWJsZXMucmVtb3Zl
KHdlYWtHQ0hhc2hUYWJsZSk7CiB9CiAKIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVCbG9jayhzaXpl
X3QgY2FwYWNpdHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAy
NzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDcgKzg3LDcgQEAgY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBT
d2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CiBjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwotY2xh
c3MgV2Vha0dDTWFwQmFzZTsKK2NsYXNzIFdlYWtHQ0hhc2hUYWJsZTsKIHN0cnVjdCBDdXJyZW50
VGhyZWFkU3RhdGU7CiAKICNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRApAQCAtMjg5LDggKzI4
OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbGVhc2VTb29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NH
TGliV3JhcHBlck9iamVjdD4mJik7CiAjZW5kaWYKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vh
a0dDTWFwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDSGFzaFRh
YmxlKFdlYWtHQ0hhc2hUYWJsZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5yZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqKTsKIAogICAgIHZvaWQgYWRkTG9n
aWNhbGx5RW1wdHlXZWFrQmxvY2soV2Vha0Jsb2NrKik7CiAKQEAgLTUyNiw3ICs1MjYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZW5kTWFya2luZygpOwogCiAgICAgdm9pZCByZWFwV2Vha0hhbmRs
ZXMoKTsKLSAgICB2b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKKyAgICB2
b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ0hhc2hUYWJsZXMoKTsKICAgICB2b2lkIHN3
ZWVwQXJyYXlCdWZmZXJzKCk7CiAgICAgdm9pZCBzbmFwc2hvdFVuc3dlcHQoKTsKICAgICB2b2lk
IGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CkBAIC02ODksNyArNjg5LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIHVuc2lnbmVkIG1fZGVmZXJyYWxEZXB0aCB7IDAgfTsKIAotICAgIEhh
c2hTZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKKyAgICBIYXNoU2V0PFdlYWtHQ0hh
c2hUYWJsZSo+IG1fd2Vha0dDSGFzaFRhYmxlczsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjc1
MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCwzICs1NCw0IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgi
CisjaW5jbHVkZSAiV2Vha0dDU2V0SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KIAogICAgIEpTQ3VzdG9tR2V0dGVy
RnVuY3Rpb24qIGN1c3RvbUdldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyRnVu
Y3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmdldHRlcigpOworICAgIGF1dG8gZ2V0dGVyID0gY3VzdG9tR2V0dGVy
RnVuY3Rpb24tPmdldHRlcigpOwogCiAgICAgaWYgKGF1dG8gZG9tQXR0cmlidXRlID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmRvbUF0dHJpYnV0ZSgpKSB7CiAgICAgICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpCkBAIC01MCw3ICs1MCw3IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGdldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlz
VmFsdWUpLCBjdXN0b21HZXR0ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpKTsKIH0KIAotSlND
dXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgR2V0
VmFsdWVGdW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0
cmlidXRlKQorSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3Bl
cnR5TmFtZSwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmli
dXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3Byb3BlcnR5TmFtZShJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQpAQCAtNTgsNyArNTgsNyBAQCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRl
ckZ1CiB7CiB9CiAKLUpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2V0dGVyRnVuY3Rp
b246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFBy
b3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0dGVyLCBPcHRpb25hbDxE
T01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCitKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgQ3VzdG9t
RnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlKQogewogICAgIEFTU0VSVChnZXR0ZXIpOwogICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY3VzdG9tR2V0dGVyRnVuY3Rpb25D
YWxsLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgU3RyaW5nKHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Z1bmN0
aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCisgICAgdXNpbmcgQ3VzdG9tRnVuY3Rpb25Qb2ludGVy
ID0gR2V0VmFsdWVGdW5jOworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKQEAgLTQ5
LDE5ICs1MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyLCBPcHRpb25hbDxET01BdHRy
aWJ1dGVBbm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eU5hbWU7IH0KLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nZXR0ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZ2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0
b21GdW5jdGlvblBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlcjsgfTsKICAgICBPcHRp
b25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVy
biBtX2RvbUF0dHJpYnV0ZTsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPik7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFByb3BlcnR5TmFtZSYs
IEN1c3RvbUZ1bmN0aW9uUG9pbnRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4p
OwogCiAgICAgSWRlbnRpZmllciBtX3Byb3BlcnR5TmFtZTsKLSAgICBHZXRWYWx1ZUZ1bmMgbV9n
ZXR0ZXI7CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIG1fZ2V0dGVyOwogICAgIE9wdGlvbmFs
PERPTUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
OSArMzYsMTkgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3VzdG9tUwogSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGN1c3RvbVNldHRlckZ1bmN0aW9uQ2FsbCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBhdXRv
IGN1c3RvbVNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwotICAgIFB1dFZhbHVlRnVuYyBzZXR0ZXIgPSBjdXN0b21T
ZXR0ZXJGdW5jdGlvbi0+c2V0dGVyKCk7CisgICAgYXV0byBzZXR0ZXIgPSBjdXN0b21TZXR0ZXJG
dW5jdGlvbi0+c2V0dGVyKCk7CiAgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5j
b2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSksIGN1c3RvbVNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotSlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5j
IHNldHRlcikKK0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24o
Vk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9w
ZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiAgICAgOiBCYXNlKHZtLCBl
eGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fcHJvcGVydHlOYW1l
KElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpCiAgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCiB7CiB9CiAKLUpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tU2V0
dGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMgc2V0dGVyKQor
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBw
cm9wZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiB7CiAgICAgQVNTRVJU
KHNldHRlcik7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RG
dW5jdGlvbihjdXN0b21TZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rp
b24uaAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKKyAg
ICB1c2luZyBDdXN0b21GdW5jdGlvblBvaW50ZXIgPSBQdXRWYWx1ZUZ1bmM7CisKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIApAQCAtNDksMTggKzUxLDE5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiog
Y3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUmLCBQdXRWYWx1
ZUZ1bmMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0
aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEN1
c3RvbUZ1bmN0aW9uUG9pbnRlcik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eU5hbWU7IH0KLSAgICBQdXRWYWx1ZUZ1bmMgc2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0
ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIHNldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0b21GdW5jdGlvblBv
aW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlcjsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1
c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgUHV0VmFsdWVGdW5jKTsKKyAgICBK
U0N1c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2lu
dGVyKTsKIAogICAgIElkZW50aWZpZXIgbV9wcm9wZXJ0eU5hbWU7Ci0gICAgUHV0VmFsdWVGdW5j
IG1fc2V0dGVyOworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBtX3NldHRlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDcsOCArNTA3LDggQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgUwog
ICAgICwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQogICAgICwgbV9y
dW50aW1lRmxhZ3MoKQogICAgICwgbV9zdGFja1RyYWNlTGltaXQoT3B0aW9uczo6ZGVmYXVsdEVy
cm9yU3RhY2tUcmFjZUxpbWl0KCkpCi0gICAgLCBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwKHZt
KQotICAgICwgbV9jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCh2bSkKKyAgICAsIG1fY3VzdG9tR2V0
dGVyRnVuY3Rpb25TZXQodm0pCisgICAgLCBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU2V0KHZtKQog
ICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKICNpbmNs
dWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJMYXp5
UHJvcGVydHkuaCIKICNpbmNsdWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJM
YXp5UHJvcGVydHkuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJQ
YXJzZXJNb2Rlcy5oIgogI2luY2x1ZGUgIlJlZ0V4cEdsb2JhbERhdGEuaCIKQEAgLTQ1LDYgKzQ1
LDcgQEAKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJXZWFrR0NTZXQuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgpAQCAtNTQ2LDggKzU0Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFwUHJv
dG90eXBlU2V0RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKICAgICBib29sIGlzU2V0UHJvdG90eXBl
QWRkRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIAotICAgIFdlYWtHQ01hcDxHZXRWYWx1ZUZ1bmMs
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+JiBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCgpIHsgcmV0
dXJuIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25NYXA7IH0KLSAgICBXZWFrR0NNYXA8UHV0VmFsdWVG
dW5jLCBKU0N1c3RvbVNldHRlckZ1bmN0aW9uPiYgY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAoKSB7
IHJldHVybiBtX2N1c3RvbVNldHRlckZ1bmN0aW9uTWFwOyB9CiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICB1c2luZyBSZWZlcmVuY2VkR2xvYmFsUHJvcGVydHlXYXRjaHBvaW50U2V0cyA9IEhh
c2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgUmVmPFdhdGNocG9pbnRTZXQ+LCBJZGVu
dGlmaWVyUmVwSGFzaD47CkBAIC01NjMsOCArNTYyLDIxIEBAIHB1YmxpYzoKICAgICBSdW50aW1l
RmxhZ3MgbV9ydW50aW1lRmxhZ3M7CiAgICAgQ29uc29sZUNsaWVudCogbV9jb25zb2xlQ2xpZW50
IHsgbnVsbHB0ciB9OwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YWNrVHJhY2VMaW1pdDsK
LSAgICBXZWFrR0NNYXA8R2V0VmFsdWVGdW5jLCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uPiBtX2N1
c3RvbUdldHRlckZ1bmN0aW9uTWFwOwotICAgIFdlYWtHQ01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb24+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXA7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNo
IHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2VhazxUPiYpOworICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPFQ+JiwgY29uc3QgV2VhazxUPiYpOworICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eU5hbWUmLCB0eXBlbmFtZSBU
OjpDdXN0b21GdW5jdGlvblBvaW50ZXIpOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBX
ZWFrR0NTZXQ8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9yU2V0dGVy
SGFzaDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblNldDsK
KyAgICBXZWFrR0NTZXQ8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9y
U2V0dGVySGFzaDxKU0N1c3RvbVNldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21TZXR0ZXJGdW5jdGlv
blNldDsKKworICAgIFdlYWtHQ1NldDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uLCBXZWFrQ3VzdG9t
R2V0dGVyT3JTZXR0ZXJIYXNoPEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+PiYgY3VzdG9tR2V0dGVy
RnVuY3Rpb25TZXQoKSB7IHJldHVybiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uU2V0OyB9CisgICAg
V2Vha0dDU2V0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24sIFdlYWtDdXN0b21HZXR0ZXJPclNldHRl
ckhhc2g8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj4+JiBjdXN0b21TZXR0ZXJGdW5jdGlvblNldCgp
IHsgcmV0dXJuIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TZXQ7IH0KIAogI2lmIEFTU0VSVF9FTkFC
TEVECiAgICAgY29uc3QgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVu
dHJ5IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0N1c3RvbUdldHRl
ckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMaW5rVGltZUNvbnN0YW50LmgiCiAjaW5jbHVk
ZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC0xMjQsNCArMTI2LDI5IEBAIEFMV0FZU19JTkxJTkUg
Vk0mIGdldFZNKEpTR2xvYmFsT2JqZWN0KiAKICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT52bSgp
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHVuc2lnbmVkIEpTR2xvYmFsT2Jq
ZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjpoYXNoKGNvbnN0IFdlYWs8VD4m
IHZhbHVlKQoreworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBoYXNoKHZhbHVlLT5wcm9wZXJ0eU5hbWUoKSwgdmFsdWUtPmN1c3RvbUZ1bmN0aW9uUG9pbnRl
cigpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIEpTR2xvYmFsT2Jq
ZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjplcXVhbChjb25zdCBXZWFrPFQ+
JiBhLCBjb25zdCBXZWFrPFQ+JiBiKQoreworICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBhID09IGI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitpbmxpbmUgdW5zaWduZWQgSlNHbG9iYWxPYmplY3Q6OldlYWtDdXN0b21HZXR0ZXJPclNldHRl
ckhhc2g8VD46Omhhc2goY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUsIHR5cGVuYW1l
IFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlciBmdW5jdGlvblBvaW50ZXIpCit7CisgICAgdW5zaWdu
ZWQgaGFzaCA9IERlZmF1bHRIYXNoPHR5cGVuYW1lIFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlcj46
Omhhc2goZnVuY3Rpb25Qb2ludGVyKTsKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc051bGwoKSkK
KyAgICAgICAgaGFzaCA9IFdURjo6cGFpckludEhhc2goaGFzaCwgcHJvcGVydHlOYW1lLnVpZCgp
LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCShyZXZpc2lvbiAyNzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MjEsMjIgKzM1MjEsNDUgQEAg
QnV0dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaQogICAgIHJldHVybiBCdXR0
ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShidXR0ZXJmbHkoKSwgdm0sIHRoaXMs
IHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorc3RydWN0IFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yIHsKKyAg
ICB1c2luZyBCYXNlSGFzaCA9IEpTR2xvYmFsT2JqZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0
ZXJIYXNoPFQ+OworCisgICAgdXNpbmcgS2V5ID0gc3RkOjp0dXBsZTxQcm9wZXJ0eU5hbWUsIHR5
cGVuYW1lIFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlcj47CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlSGFzaDo6aGFz
aChzdGQ6OmdldDwwPihrZXkpLCBzdGQ6OmdldDwxPihrZXkpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPFQ+JiBhLCBjb25zdCBLZXkmIGIpCisgICAgeworICAg
ICAgICBpZiAoIWEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBh
LT5wcm9wZXJ0eU5hbWUoKSA9PSBzdGQ6OmdldDwwPihiKSAmJiBhLT5jdXN0b21GdW5jdGlvblBv
aW50ZXIoKSA9PSBzdGQ6OmdldDwxPihiKTsKKyAgICB9Cit9OworCiBzdGF0aWMgSlNDdXN0b21H
ZXR0ZXJGdW5jdGlvbiogY3JlYXRlQ3VzdG9tR2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBHZXRWYWx1
ZUZ1bmMgZ2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21B
dHRyaWJ1dGUpCiB7Ci0gICAgLy8gV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVz
dCBub3QgaW52b2tlIEdDIHNpbmNlIEdDIGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRk
bGUgb2YgSGFzaE1hcDo6ZW5zdXJlLgotICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5v
dCB0byBpbnZva2UgR0Mgd2hlbiBleGVjdXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQg
KDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAgSGFzaE1hcCB0d2ljZS4KKyAgICB1c2luZyBUcmFuc2xh
dG9yID0gV2Vha0N1c3RvbUdldHRlck9yU2V0dGVySGFzaFRyYW5zbGF0b3I8SlNDdXN0b21HZXR0
ZXJGdW5jdGlvbj47CisKKyAgICAvLyBXZWFrR0NTZXQ6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBt
dXN0IG5vdCBpbnZva2UgR0Mgc2luY2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NTZXQgaW4gdGhlIG1p
ZGRsZSBvZiBIYXNoU2V0OjplbnN1cmUuCisgICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkg
bm90IHRvIGludm9rZSBHQyB3aGVuIGV4ZWN1dGluZyBXZWFrR0NTZXQ6OmVuc3VyZVZhbHVlIGFu
ZCAoMikgdG8gYXZvaWQgbG9va2luZyB1cCBIYXNoU2V0IHR3aWNlLgogICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5jdXN0b21HZXR0ZXJGdW5j
dGlvbk1hcCgpLmVuc3VyZVZhbHVlKGdldFZhbHVlRnVuYywgWyZdIHsKKyAgICByZXR1cm4gZ2xv
YmFsT2JqZWN0LT5jdXN0b21HZXR0ZXJGdW5jdGlvblNldCgpLmVuc3VyZVZhbHVlPFRyYW5zbGF0
b3I+KHN0ZDo6bWFrZV90dXBsZShwcm9wZXJ0eU5hbWUsIGdldFZhbHVlRnVuYyksIFsmXSB7CiAg
ICAgICAgIHJldHVybiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBnZXRWYWx1ZUZ1bmMsIGRvbUF0dHJpYnV0ZSk7CiAgICAgfSk7
CiB9CiAKIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKiBjcmVhdGVDdXN0b21TZXR0ZXJG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFB1dFZhbHVlRnVuYyBwdXRWYWx1ZUZ1bmMpCiB7Ci0gICAgLy8gV2Vh
a0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDIHNpbmNlIEdD
IGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6ZW5zdXJlLgot
ICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mgd2hlbiBleGVj
dXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAg
SGFzaE1hcCB0d2ljZS4KKyAgICB1c2luZyBUcmFuc2xhdG9yID0gV2Vha0N1c3RvbUdldHRlck9y
U2V0dGVySGFzaFRyYW5zbGF0b3I8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj47CisKKyAgICAvLyBX
ZWFrR0NTZXQ6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mgc2luY2Ug
R0MgY2FuIG1vZGlmeSBXZWFrR0NTZXQgaW4gdGhlIG1pZGRsZSBvZiBIYXNoU2V0OjplbnN1cmUu
CisgICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGludm9rZSBHQyB3aGVuIGV4
ZWN1dGluZyBXZWFrR0NTZXQ6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8gYXZvaWQgbG9va2luZyB1
cCBIYXNoU2V0IHR3aWNlLgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICByZXR1
cm4gZ2xvYmFsT2JqZWN0LT5jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCgpLmVuc3VyZVZhbHVlKHB1
dFZhbHVlRnVuYywgWyZdIHsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5jdXN0b21TZXR0ZXJG
dW5jdGlvblNldCgpLmVuc3VyZVZhbHVlPFRyYW5zbGF0b3I+KHN0ZDo6bWFrZV90dXBsZShwcm9w
ZXJ0eU5hbWUsIHB1dFZhbHVlRnVuYyksIFsmXSB7CiAgICAgICAgIHJldHVybiBKU0N1c3RvbVNl
dHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBwdXRW
YWx1ZUZ1bmMpOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha0dDSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha0dDSGFzaFRhYmxlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgV2Vha0dDSGFzaFRhYmxlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWFrR0NI
YXNoVGFibGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSA9IDA7
Cit9OworCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAu
aAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a0dDTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIxICsyNywxNSBAQAogCiAjaW5jbHVkZSAi
RGVmZXJHQy5oIgogI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNsdWRlICJXZWFrR0NIYXNoVGFibGUu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogLy8gQSBI
YXNoTWFwIHdpdGggV2VhazxKU0NlbGw+IHZhbHVlcywgd2hpY2ggYXV0b21hdGljYWxseSByZW1v
dmVzIHZhbHVlcyBvbmNlIHRoZXkncmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAKLWNsYXNzIFdlYWtH
Q01hcEJhc2UgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYWtHQ01hcEJhc2UoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSA9IDA7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVm
YXVsdEhhc2g8S2V5QXJnPiwKLSAgICB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRz
PEtleUFyZz4+Ci1jbGFzcyBXZWFrR0NNYXAgZmluYWwgOiBwdWJsaWMgV2Vha0dDTWFwQmFzZSB7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBI
YXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFz
aFRyYWl0czxLZXlBcmc+PgorY2xhc3MgV2Vha0dDTWFwIGZpbmFsIDogcHVibGljIFdlYWtHQ0hh
c2hUYWJsZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgdHlwZWRlZiBXZWFr
PFZhbHVlQXJnPiBWYWx1ZVR5cGU7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgVmFsdWVU
eXBlLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hNYXBUeXBlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcElubGluZXMuaAkocmV2aXNpb24g
Mjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJnLCB0eXBlbmFtZSBWYWx1ZQogaW5saW5lIFdlYWtHQ01hcDxLZXlBcmcsIFZhbHVlQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+OjpXZWFrR0NNYXAoVk0mIHZtKQogICAgIDogbV92bSh2
bSkKIHsKLSAgICB2bS5oZWFwLnJlZ2lzdGVyV2Vha0dDTWFwKHRoaXMpOworICAgIHZtLmhlYXAu
cmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUodGhpcyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZz4KIGlubGluZSBXZWFrR0NNYXA8S2V5QXJnLCBWYWx1ZUFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnPjo6fldlYWtHQ01hcCgpCiB7Ci0gICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFr
R0NNYXAodGhpcyk7CisgICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUodGhp
cyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYWsuaCIK
KyNpbmNsdWRlICJXZWFrR0NIYXNoVGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gQSBIYXNoU2V0IHdpdGggV2VhazxKU0NlbGw+IHZhbHVl
cywgd2hpY2ggYXV0b21hdGljYWxseSByZW1vdmVzIHZhbHVlcyBvbmNlIHRoZXkncmUgZ2FyYmFn
ZSBjb2xsZWN0ZWQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNo
QXJnID0gRGVmYXVsdEhhc2g8V2VhazxWYWx1ZUFyZz4+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBI
YXNoVHJhaXRzPFdlYWs8VmFsdWVBcmc+Pj4KK2NsYXNzIFdlYWtHQ1NldCBmaW5hbCA6IHB1Ymxp
YyBXZWFrR0NIYXNoVGFibGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVz
aW5nIFZhbHVlVHlwZSA9IFdlYWs8VmFsdWVBcmc+OworICAgIHVzaW5nIEhhc2hTZXRUeXBlID0g
SGFzaFNldDxWYWx1ZVR5cGUsIEhhc2hBcmcsIFRyYWl0c0FyZz47CisKK3B1YmxpYzoKKyAgICB1
c2luZyBBZGRSZXN1bHQgPSB0eXBlbmFtZSBIYXNoU2V0VHlwZTo6QWRkUmVzdWx0OworICAgIHVz
aW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgSGFzaFNldFR5cGU6Oml0ZXJhdG9yOworICAgIHVzaW5n
IGNvbnN0X2l0ZXJhdG9yID0gdHlwZW5hbWUgSGFzaFNldFR5cGU6OmNvbnN0X2l0ZXJhdG9yOwor
CisgICAgZXhwbGljaXQgV2Vha0dDU2V0KFZNJik7CisgICAgfldlYWtHQ1NldCgpIGZpbmFsOwor
CisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3NldC5jbGVhcigpOworICAgIH0K
KworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc2V0LmJlZ2luKCk7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc2V0
LmVuZCgpOworICAgICAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgICAgICBpZiAoaXQt
PnZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNs
YXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBWYWx1ZUFyZyogZW5zdXJl
VmFsdWUoVCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICAvLyBJZiBm
dW5jdG9yIGludm9rZXMgR0MsIEdDIGNhbiBwcnVuZSBXZWFrR0NTZXQsIGFuZCBtYW5pcHVsYXRl
IEhhc2hTZXQgd2hpbGUgd2UgYXJlIHRvdWNoaW5nIGl0IGluIHRoZSBlbnN1cmUgZnVuY3Rpb24u
CisgICAgICAgIC8vIFRoZSBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBHQy4KKyAgICAgICAgRGlz
YWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAgICAKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3Nl
dC50ZW1wbGF0ZSBlbnN1cmU8SGFzaFRyYW5zbGF0b3I+KHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBz
dGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0
ZXJhdG9yLT5nZXQoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgaXRlcmF0b3IgZmluZChjb25zdCBW
YWx1ZVR5cGUmIGtleSk7CisgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgVmFs
dWVUeXBlJiBrZXkpIGNvbnN0OworICAgIGlubGluZSBib29sIGNvbnRhaW5zKGNvbnN0IFZhbHVl
VHlwZSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSBm
aW5hbDsKKworICAgIEhhc2hTZXRUeXBlIG1fc2V0OworICAgIFZNJiBtX3ZtOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
R0NTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha0dDU2V0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtHQ1NldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIZWFwSW5saW5l
cy5oIgorI2luY2x1ZGUgIldlYWtHQ1NldC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgoraW5saW5lIFdlYWtHQ1NldDxWYWx1ZUFyZywg
SGFzaEFyZywgVHJhaXRzQXJnPjo6V2Vha0dDU2V0KFZNJiB2bSkKKyAgICA6IG1fdm0odm0pCit7
CisgICAgdm0uaGVhcC5yZWdpc3RlcldlYWtHQ0hhc2hUYWJsZSh0aGlzKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0Fy
Zz4KK2lubGluZSBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46On5XZWFr
R0NTZXQoKQoreworICAgIG1fdm0uaGVhcC51bnJlZ2lzdGVyV2Vha0dDSGFzaFRhYmxlKHRoaXMp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgVHJhaXRzQXJnPgoraW5saW5lIHR5cGVuYW1lIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFz
aEFyZywgVHJhaXRzQXJnPjo6aXRlcmF0b3IgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBU
cmFpdHNBcmc+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit7CisgICAgaXRlcmF0b3Ig
aXQgPSBtX3NldC5maW5kKHZhbHVlKTsKKyAgICBpdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsK
KyAgICBpZiAoaXQgIT0gZW5kICYmICEqaXQpIC8vIEZvdW5kIGEgem9tYmllIHZhbHVlLgorICAg
ICAgICByZXR1cm4gZW5kOworICAgIHJldHVybiBpdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK2lubGluZSB0
eXBlbmFtZSBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46OmNvbnN0X2l0
ZXJhdG9yIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6ZmluZChjb25z
dCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYWtH
Q1NldCo+KHRoaXMpLT5maW5kKHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVB
cmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK2lubGluZSBib29sIFdl
YWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6Y29udGFpbnMoY29uc3QgVmFs
dWVUeXBlJiB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmluZCh2YWx1ZSkgIT0gbV9zZXQu
ZW5kKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJn
LCB0eXBlbmFtZSBUcmFpdHNBcmc+CitORVZFUl9JTkxJTkUgdm9pZCBXZWFrR0NTZXQ8VmFsdWVB
cmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46OnBydW5lU3RhbGVFbnRyaWVzKCkKK3sKKyAgICBtX3Nl
dC5yZW1vdmVJZihbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gIWVudHJ5OworICAg
IH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzUxMjMpCisr
KyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisy
MDIxLTAzLTI3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0ds
b2JhbE9iamVjdCdzIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25NYXAgYW5kIG1fY3VzdG9tU2V0dGVy
RnVuY3Rpb25NYXAgc2hvdWxkIGJlIHNldHMsIG5vdCBtYXBzLCBhbmQgc2hvdWxkIHVzZSBib3Ro
IHRoZSBpZGVudGlmaWVyIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzIHRoZSBrZXkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzYxMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBoZXRlcm9nZW5v
dXMgSGFzaFNldDo6ZW5zdXJlLCB3aGljaCBhbGxvd3MgbGF6eSBjb25zdHJ1Y3Rpb24gb2YgdGhl
IHZhbHVlIHRvCisgICAgICAgIGluc2VydCBpbnRvIHRoZSBIYXNoU2V0IG9ubHkgaWYgdGhlIGhl
dGVyb2dlbm91cyBrZXkgKGUuZy4gYSBrZXkgKyBIYXNoVHJhbnNsYXRvcgorICAgICAgICB0aGF0
IGFyZSBub3QgdGhlIHNhbWUgYXMgdGhlIEhhc2hTZXQncyBWYWx1ZVR5cGUpIGRvZXMgbm90IG1h
dGNoIGFueSBpdGVtIGluIHRoZQorICAgICAgICBzZXQuIEZvciBleGFtcGxlIGdpdmVuIGEgc2V0
IG9mIEV4cGVuc2l2ZVRvQ29uc3RydWN0LCBidXQgdW5pcXVlbHkgaWRlbnRpZmlhYmxlCisgICAg
ICAgIGJ5IENoZWFwVG9Db25zdHJ1Y3Q6CisgICAgICAgIAorICAgICAgICAgICAgSGFzaFNldDxF
eHBlbnNpdmVUb0NvbnN0cnVjdD4gaGFzaFNldDsKKyAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgc3RydWN0IFRyYW5zbGF0b3IgeworICAgICAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IENoZWFwVG9Db25zdHJ1Y3QmIGtleSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBrZXkuaGFzaCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBFeHBlbnNpdmVUb0NvbnN0cnVj
dCYgYSwgY29uc3QgQ2hlYXBUb0NvbnN0cnVjdCYgYikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGFzaFNldC5lbnN1cmU8VHJhbnNs
YXRvcj4oQ2hlYXBUb0NvbnN0cnVjdCB7IC4uLiB9LCBbXSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEV4cGVuc2l2ZVRvQ29uc3RydWN0IHsgLi4uIH07CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICBUaGlzIHdpbGwgYmUgdXNlZCBieSB0aGUgY3VzdG9tIGdldHRlci9zZXR0ZXIgc2V0cyB0
byBhdm9pZCBjb25zdHJ1Y3RpbmcgdGhlIEdDIG9iamVjdHMKKyAgICAgICAgdW5sZXNzIHRoZXkg
YXJlIHJlYWxseSBuZWVkZWQuCisKKyAgICAgICAgQWxzbyB0b29rIHRoZSBvcGVydHVuaXR5IHRv
IHJlcGxhY2Ugc29tZSB0eXBlZGVmcyB3aXRoIHVzaW5ncywgYW5kIGZpeGVkIHNvbWUgY29tbWVu
dHMuCisKKyAgICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpl
bnN1cmUpOgorCiAyMDIxLTAzLTI2ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVzZSBQVUlDUXVpY2tib2FyZENvbnRyb2xsZXIgZm9yIHRleHQgaW5w
dXQgd2hlbiBIQVZFKFFVSUNLQk9BUkRfQ09OVFJPTExFUikgaXMgZGVmaW5lZApJbmRleDogU291
cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hT
ZXQuaAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywzNiArMzMsMzAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcs
IHR5cGVuYW1lIEhhcwogY2xhc3MgSGFzaFNldCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOwot
ICAgIHR5cGVkZWYgVHJhaXRzQXJnIFZhbHVlVHJhaXRzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUg
VmFsdWVUcmFpdHM6OlRha2VUeXBlIFRha2VUeXBlOworICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMg
PSBIYXNoQXJnOworICAgIHVzaW5nIFZhbHVlVHJhaXRzID0gVHJhaXRzQXJnOworICAgIHVzaW5n
IFRha2VUeXBlID0gdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRha2VUeXBlOwogCiBwdWJsaWM6Ci0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlIFZhbHVlVHlwZTsKKyAg
ICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlOwogCiBw
cml2YXRlOgotICAgIHR5cGVkZWYgSGFzaFRhYmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVu
dGl0eUV4dHJhY3RvciwKLSAgICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVl
VHJhaXRzPiBIYXNoVGFibGVUeXBlOworICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFi
bGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+OwogCiBwdWJsaWM6Ci0gICAgLyoKLSAgICAgKiBT
aW5jZSBmaWd1cmluZyBvdXQgdGhlIGVudHJpZXMgb2YgYW4gaXRlcmF0b3IgaXMgY29uZnVzaW5n
LCBoZXJlIGlzIGEgY2hlYXQgc2hlZXQ6Ci0gICAgICogY29uc3QgS2V5VHlwZSYga2V5ID0gaXRl
cmF0b3ItPmtleTsKLSAgICAgKi8KLSAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JB
ZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT4gaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBI
YXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+IGNv
bnN0X2l0ZXJhdG9yOwotCi0gICAgLyoKLSAgICAgKiBTaW5jZSBmaWd1cmluZyBvdXQgdGhlIGVu
dHJpZXMgb2YgYW4gQWRkUmVzdWx0IGlzIGNvbmZ1c2luZywgaGVyZSBpcyBhIGNoZWF0IHNoZWV0
OgotICAgICAqIGl0ZXJhdG9yIGl0ZXIgPSBhZGRSZXN1bHQuaXRlcmF0b3I7Ci0gICAgICogYm9v
bCBpc05ld0VudHJ5ID0gYWRkUmVzdWx0LmlzTmV3RW50cnk7Ci0gICAgICovCi0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgSGFz
aFNldCgpCi0gICAgewotICAgIH0KKyAgICAvLyBIYXNoU2V0IGl0ZXJhdG9ycyBoYXZlIHRoZSBm
b2xsb3dpbmcgc3RydWN0dXJlOgorICAgIC8vICAgICAgY29uc3QgVmFsdWVUeXBlKiBnZXQoKSBj
b25zdDsKKyAgICAvLyAgICAgIGNvbnN0IFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkgY29uc3Q7Cisg
ICAgLy8gICAgICBjb25zdCBWYWx1ZVR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdDsKKyAgICB1c2lu
ZyBpdGVyYXRvciA9IEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUs
IFZhbHVlVHlwZT47CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBIYXNoVGFibGVDb25zdEl0
ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+OworCisgICAgLy8gSGFzaFNl
dCBBZGRSZXN1bHRzIGhhdmUgdGhlIGZvbGxvd2luZyBmaWVsZHM6CisgICAgLy8gICAgICBJdGVy
YXRvclR5cGUgaXRlcmF0b3I7CisgICAgLy8gICAgICBib29sIGlzTmV3RW50cnk7CisgICAgdXNp
bmcgQWRkUmVzdWx0ID0gdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6QWRkUmVzdWx0OwogCisgICAg
SGFzaFNldCgpID0gZGVmYXVsdDsKICAgICBIYXNoU2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxW
YWx1ZUFyZz4gaW5pdGlhbGl6ZXJMaXN0KQogICAgIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiB2YWx1ZSA6IGluaXRpYWxpemVyTGlzdCkKQEAgLTkzLDYgKzg3LDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBm
aW5kKGNvbnN0IFQmKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRv
ciwgdHlwZW5hbWUgVD4gYm9vbCBjb250YWlucyhjb25zdCBUJikgY29uc3Q7CiAKKwogICAgIC8v
IFRoZSByZXR1cm4gdmFsdWUgaW5jbHVkZXMgYm90aCBhbiBpdGVyYXRvciB0byB0aGUgYWRkZWQg
dmFsdWUncyBsb2NhdGlvbiwKICAgICAvLyBhbmQgYW4gaXNOZXdFbnRyeSBib29sIHRoYXQgaW5k
aWNhdGVzIGlmIGl0IGlzIGEgbmV3IG9yIGV4aXN0aW5nIGVudHJ5IGluIHRoZSBzZXQuCiAgICAg
QWRkUmVzdWx0IGFkZChjb25zdCBWYWx1ZVR5cGUmKTsKQEAgLTExMCw2ICsxMDUsMTYgQEAgcHVi
bGljOgogICAgIC8vICAgc3RhdGljIHRyYW5zbGF0ZShWYWx1ZVR5cGUmLCBjb25zdCBUJiwgdW5z
aWduZWQgaGFzaENvZGUpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUPiBBZGRSZXN1bHQgYWRkKGNvbnN0IFQmKTsKICAgICAKKyAgICAvLyBBbiBhbHRl
cm5hdGUgdmVyc2lvbiBvZiB0cmFuc2xhdGVkIGFkZCgpLCBlbnN1cmUoKSB3aWxsIHN0aWxsIGRv
IHRyYW5zbGF0aW9uCisgICAgLy8gYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nIHdpdGggc29tZSBv
dGhlciB0eXBlLCB0byBhdm9pZCB0aGUgY29zdCBvZiB0eXBlCisgICAgLy8gY29udmVyc2lvbiBp
ZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIHRhYmxlLCBidXQgcmF0aGVyIHRoYW4gYSBz
dGF0aWMKKyAgICAvLyB0cmFuc2xhdGUoKSBmdW5jdGlvbiwgdXNlcyB0aGUgcGFzc2VkIGluIGZ1
bmN0b3IgdG8gcGVyZm9ybSBsYXp5IGNyZWF0aW9uIG9mCisgICAgLy8gdGhlIHZhbHVlIG9ubHkg
aWYgaXQgaXMgbm90IGFscmVhZHkgdGhlcmUuIEhhc2hUcmFuc2xhdG9yIG11c3QgaGF2ZSB0aGUg
Zm9sbG93aW5nCisgICAgLy8gZnVuY3Rpb24gbWVtYmVyczoKKyAgICAvLyAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFQmKTsKKyAgICAvLyAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZh
bHVlVHlwZSYsIGNvbnN0IFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRv
ciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4gQWRkUmVzdWx0IGVuc3VyZShUJiYsIEZ1
bmN0b3ImJik7CisKICAgICAvLyBBdHRlbXB0cyB0byBhZGQgYSBsaXN0IG9mIHRoaW5ncyB0byB0
aGUgc2V0LiBSZXR1cm5zIHRydWUgaWYgYW55IG9mCiAgICAgLy8gdGhlbSBhcmUgbmV3IHRvIHRo
ZSBzZXQuIFJldHVybnMgZmFsc2UgaWYgdGhlIHNldCBpcyB1bmNoYW5nZWQuCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgpAQCAtMTcxLDYgKzE3NiwxNiBAQCBzdHJ1Y3QgSGFz
aFNldFRyYW5zbGF0b3JBZGFwdGVyIHsKICAgICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZVRyYWl0cywgdHlwZW5hbWUgVHJhbnNsYXRvcj4KK3N0cnVjdCBIYXNoU2V0RW5zdXJlVHJh
bnNsYXRvckFkYXB0b3IgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4gVHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1cm4gVHJhbnNsYXRvcjo6ZXF1YWwoYSwgYik7IH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jdG9yPiBz
dGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIFUmJiwgRnVuY3RvciYmIGZ1bmN0b3Ip
CisgICAgeworICAgICAgICBWYWx1ZVRyYWl0czo6YXNzaWduVG9FbXB0eShsb2NhdGlvbiwgZnVu
Y3RvcigpKTsKKyAgICB9Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgogaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6c3dhcChIYXNoU2V0JiBv
dGhlcikKIHsKQEAgLTIzMyw2ICsyNDgsMTMgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucwogICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaFNl
dFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUpOwogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
PgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEZ1bmN0b3I+CitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHM+OjplbnN1cmUoVCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAorewor
ICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEhhc2hTZXRFbnN1cmVUcmFuc2xhdG9yQWRh
cHRvcjxUcmFpdHMsIEhhc2hUcmFuc2xhdG9yPj4oc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+CiBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQo
Y29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4gQWRkUmVzdWx0CiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424499</attachid>
            <date>2021-03-28 09:18:56 -0700</date>
            <delta_ts>2021-03-28 11:42:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223613-20210328091855.patch</filename>
            <type>text/plain</type>
            <size>48577</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMS0wMy0yNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QncyBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwIGFuZCBtX2N1c3RvbVNl
dHRlckZ1bmN0aW9uTWFwIHNob3VsZCBiZSBzZXRzLCBub3QgbWFwcywgYW5kIHNob3VsZCB1c2Ug
Ym90aCB0aGUgaWRlbnRpZmllciBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcyB0aGUga2V5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM2MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSBnZW5l
cmljIFdlYWtHQ1NldCBjbGFzcyB0byBnbyB3aXRoIHRoZSBleGlzdGluZyBXZWFrR0NNYXAuCisg
ICAgICAgIC0gUmVuYW1lcyBXZWFrR0NNYXBCYXNlIHRvIFdlYWtHQ0hhc2hUYWJsZSwgbW92ZXMg
aXQgdG8gaXRzIG93biBmaWxlCisgICAgICAgICAgYW5kIG5vdyB1c2VzIGl0IGFzIHRoZSBiYXNl
IGNsYXNzIG9mIGJvdGggV2Vha0dDU2V0IGFuZCBXZWFrR0NNYXAuCisgICAgICAgIC0gUmVwbGFj
ZXMgSlNHbG9iYWxPYmplY3QncyBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9jdXN0b21TZXR0ZXJG
dW5jdGlvbk1hcAorICAgICAgICAgIHdpdGggY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvY3VzdG9t
U2V0dGVyRnVuY3Rpb25TZXQsIHVzaW5nIHRoZSBuZXcKKyAgICAgICAgICBXZWFrR0NTZXQsIGFu
ZCB1cGRhdGVzIHRoZW0gdG8gdXNlIGJvdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIAorICAg
ICAgICAgIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBrZXksIHJhdGhlciB0aGFuIGp1c3QgdGhlIGZ1
bmN0aW9uIHBvaW50ZXIgd2hpY2gKKyAgICAgICAgICBpcyB3aGF0IHRoZSBwcmV2aW91cyBjb2Rl
IGRpZC4gVGhpcyBhbGxvd3MgbXVsdGlwbGUgY3VzdG9tIGZ1bmN0aW9ucworICAgICAgICAgIHRv
IHVzZSB0aGUgc2FtZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHBvaW50ZXIgYXMgbG9uZyBhcyB0aGV5
IGhhdmUgZGlzdGluY3QKKyAgICAgICAgICBwcm9wZXJ0eSBuYW1lcywgd2hpY2ggaXMgZ29pbmcg
dG8gYmUgdXNlZCB0byBvcHRpbWl6ZSB0aGUgYmluZGluZ3MgZm9yCisgICAgICAgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcg
ZmlsZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpy
dW5FbmRQaGFzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdl
YWtHQ0hhc2hUYWJsZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZWdpc3RlcldlYWtHQ0hhc2hU
YWJsZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6cmVnaXN0ZXJXZWFrR0NNYXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpIZWFwOjp1bnJlZ2lzdGVyV2Vha0dDTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZS4gV2Vha0dDTWFw
QmFzZSAtPiBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMu
aDoKKyAgICAgICAgQWRkIFdlYWtHQ1NldElubGluZXMuaAorCisgICAgICAgICogcnVudGltZS9K
U0N1c3RvbUdldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0
b21HZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmg6Cisg
ICAgICAgICogcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbVNl
dHRlckZ1bmN0aW9uLmg6CisgICAgICAgIEFkZCBoZWxwZXIgdHlwZSBDdXN0b21GdW5jdGlvblBv
aW50ZXIgYW5kIGhlbHBlciBmdW5jdGlvbiBjdXN0b21GdW5jdGlvblBvaW50ZXIoKQorICAgICAg
ICB0byBhbGxvdyBzb21lIGdlbmVyaWMgaGFzaGluZyBjb2RlIHRvIHJ1biBvbiBlaXRoZXIgSlND
dXN0b21HZXR0ZXJGdW5jdGlvbgorICAgICAgICBvciBKU0N1c3RvbVNldHRlckZ1bmN0aW9uLgor
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6V2Vha0N1c3RvbUdldHRl
ck9yU2V0dGVySGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpXZWFr
Q3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlcGxhY2UgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9tX2N1c3RvbVNldHRlckZ1bmN0
aW9uTWFwIHdpdGggCisgICAgICAgIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvbV9jdXN0b21T
ZXR0ZXJGdW5jdGlvblNldC4gQXMgdGhlIGtleSBpcyBpbmNsdWRlZAorICAgICAgICBpbiB0aGUg
dmFsdWUsIGl0IHNhdmVzIHNwYWNlIHRvIHVzZSBhIHNldCByYXRoZXIgdGhhbiBhIG1hcC4gV2Ug
bm93IGFsc28KKyAgICAgICAgaGFzaCBhbmQgY29tcGFyZSBib3RoIHRoZSBmdW5jdGlvbiBwb2lu
dGVyIGFuZCB0aGUgcHJvcGVydHkgbmFtZSB0byBhbGxvdworICAgICAgICBzaGFyaW5nIGltcGxl
bWVudGF0aW9ucy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAg
ICAgIChKU0M6OldlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yOjplcXVhbCk6
CisgICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgorICAgICAgICBVcGRhdGUgY3JlYXRpb24g
ZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IHNldHMsIG1ha2luZyB1c2Ugb2YgdGhlCisgICAgICAg
IGVuc3VyZVZhbHVlIGZ1bmN0aW9uIGFuZCBhIEhhc2hUcmFuc2xhdG9yIGFsbG93aW5nIHRoZSB1
c2Ugb2YgYQorICAgICAgICBzdGQ6OnR1cGxlPFByb3BlcnR5TmFtZSwgRnVuY3Rpb25Qb2ludGVy
PiBhcyBhbiBhbHRlcm5hdGl2ZSBsb29rdXAKKyAgICAgICAga2V5LiBUaGlzIGFsbG93cyB1cyB0
byBhdm9pZCBjcmVhdGluZyB0aGUgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi9KU0N1c3RvbVNldHRl
ckZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgaWYgb25lIHdpdGggdGhlIHNhbWUgcHJvcGVydHkg
bmFtZSBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcmUKKyAgICAgICAgYWxyZWFkeSBpbiB0aGUgc2V0
LgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NIYXNoVGFibGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OldlYWtHQ0hhc2hUYWJsZTo6fldlYWtHQ0hhc2hUYWJsZSk6CisgICAgICAgIE1vdmVk
IGZyb20gV2Vha0dDTWFwIGFuZCByZW5hbWVkIGFzIGl0IGlzIG5vdyB0aGUgYmFzZSBvZiBib3Ro
CisgICAgICAgIFdlYWtHQ01hcCBhbmQgV2Vha0dDU2V0LgorIAorICAgICAgICAqIHJ1bnRpbWUv
V2Vha0dDTWFwLmg6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IFdlYWtHQ0hhc2hUYWJsZSBi
YXNlIGNsYXNzLgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OktleVRyYWl0c0FyZz46OldlYWtHQ01hcCk6CisgICAgICAgIChKU0M6OktleVRy
YWl0c0FyZz46On5XZWFrR0NNYXApOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBIZWFwIGZ1bmN0
aW9uIG5hbWVzIGZvciBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL1dlYWtH
Q1NldC5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ1NldElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlRyYWl0c0FyZz46OldlYWtHQ1NldCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46On5XZWFrR0NTZXQpOgorICAgICAgICAoSlNDOjpUcmFpdHNBcmc+OjpmaW5k
KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6
cHJ1bmVTdGFsZUVudHJpZXMpOgorICAgICAgICBBZGRlZCBhIG1pbmltYWwgV2Vha0dDU2V0IGJh
c2VkIG9uIFdlYWtHQ01hcC4gCisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJIGZvciBjYW5vbmlj
YWxpemF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAyNzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwOTcsOCArMTA5NywxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9WTVRyYXBzLmgKICAgICBydW50aW1lL1Zhck9m
ZnNldC5oCiAgICAgcnVudGltZS9XYXRjaGRvZy5oCisgICAgcnVudGltZS9XZWFrR0NIYXNoVGFi
bGUuaAogICAgIHJ1bnRpbWUvV2Vha0dDTWFwLmgKICAgICBydW50aW1lL1dlYWtHQ01hcElubGlu
ZXMuaAorICAgIHJ1bnRpbWUvV2Vha0dDU2V0LmgKKyAgICBydW50aW1lL1dlYWtHQ1NldElubGlu
ZXMuaAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmll
cklubGluZXMuaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
Mjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MjksNiArMTcyOSw5IEBACiAJ
CUJDRDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QyMDM0ODBFMTcxMzVFMDAyQzdF
ODIgLyogRGF0ZVByb3RvdHlwZS5oICovOyB9OwogCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdFODIg
LyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRDIwM0U3MEUxNzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmx1
dC5oICovOyB9OwogCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0RFM0FCMTBFNkM4
MkNGMDAxNDUzQTcgLyogU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkNFMkZBRkIyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1Nl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFMkZB
RkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZEMjYwOTE2RkYwMDBBNTEwRiAvKiBX
ZWFrR0NTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZG
MjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBX
ZWFrR0NIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjA1MTIwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIy
RUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkRGQ0IyQkJFOTBGNDEzNDlFMUIwQkVEIC8qIEpTU291cmNl
Q29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzAz
MjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODkyLDYgKzQ4OTUsOSBAQAogCQlC
Q0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGNvZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNERTNBQjAwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0RFM0FCMTBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0
dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0UyRkFGQTI2MDkxNkVGMDAwQTUxMEYgLyogV2Vh
a0dDU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrR0NTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vha0dDSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyZ0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTAsOCArNzg5NiwxMSBAQAogCQkJCUZFNkY1NkRE
MUU2NEU5MjAwMEQxNzgwMSAvKiBWTVRyYXBzLmggKi8sCiAJCQkJRkVEOTRGMkIxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLywKIAkJCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCAqLywKKwkJCQlCQ0UyRkFGRTI2MDkxNzgyMDAwQTUxMEYgLyogV2Vha0dD
SGFzaFRhYmxlLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01h
cC5oICovLAogCQkJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVz
LmggKi8sCisJCQkJQkNFMkZBRkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovLAor
CQkJCUJDRTJGQUZDMjYwOTE2RkYwMDBBNTEwRiAvKiBXZWFrR0NTZXRJbmxpbmVzLmggKi8sCiAJ
CQkJQTdDQTNBREQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgKi8s
CiAJCQkJQTdDQTNBREUxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oICov
LAogCQkJCUUzQTMyQkM1MUZDODMxMkQwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCkBA
IC05MjEzLDYgKzkyMjIsNyBAQAogCQkJCThCQzA2NDhCMUUxQUJBOTQwMEIyQjhDQSAvKiBBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCQzA2
NDhBMUUxQUJBN0IwMEIyQjhDQSAvKiBBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4QkMwNjQ5MjFFMUFEQ0M0MDBCMkI4Q0EgLyogQXN5bmNHZW5l
cmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRTJGQUZGMjYwOTE3ODIwMDBB
NTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCThCM0JGNUU0MUUz
RDM2OEIwMDc2QTg3QSAvKiBBc3luY0dlbmVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCQzA2NDk2MUUxRDg0NUMwMEIyQjhDQSAvKiBBc3luY0l0ZXJhdG9yUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5
bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NzYsNiArOTY4Niw3IEBACiAJCQkJ
MTQzODZBNzUxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjM3MzA4RjFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU0REVGRjFFOEQ3NkZB
MDBBODkyQzUgLyogRGlzYWxsb3dTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZBRkIy
NjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1NERF
RkIxRThDNkQ4ODAwQTg5MkM1IC8qIERpc2FsbG93Vk1FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTMxNjE4MTMxRUM1RkUxNzAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtMTAzMzMsNiArMTAzNDQsNyBAQAogCQkJCTE0Rjc5RjcwMjE2RUFGRDIw
MDA0NkQzOSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjQ4NzJFMjE0MUQwNDgw
MEFCMEQzRSAvKiBPcGNvZGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEE0NjgwRDIx
NkZBNTZBMDAwRDJCMUEgLyogT3Bjb2RlU2l6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZB
RkQyNjA5MTZGRjAwMEE1MTBGIC8qIFdlYWtHQ1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpy
dW5FbmRQaGFzZShHQ0NvCiAgICAgICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxl
cygpOwogCiAgICAgICAgIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICBwcnVuZVN0YWxlRW50
cmllc0Zyb21XZWFrR0NNYXBzKCk7CisgICAgICAgIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtH
Q0hhc2hUYWJsZXMoKTsKICAgICAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICAgICAgc25h
cHNob3RVbnN3ZXB0KCk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMo
KTsgLy8gV2UgcmVseSBvbiB0aGVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMgcnVubmluZyBi
ZWZvcmUgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcgc2luY2UgQ29kZUJsb2NrJ3MgZmluYWxpemVy
IHJlbGllcyBvbiBxdWVyeWluZyBjdXJyZW50bHkgZXhlY3V0aW5nLgpAQCAtMjIxNywxMiArMjIx
NywxMiBAQCB2b2lkIEhlYXA6OnJlYXBXZWFrSGFuZGxlcygpCiAgICAgbV9vYmplY3RTcGFjZS5y
ZWFwV2Vha1NldHMoKTsKIH0KIAotdm9pZCBIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFr
R0NNYXBzKCkKK3ZvaWQgSGVhcDo6cHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDSGFzaFRhYmxl
cygpCiB7CiAgICAgaWYgKCFtX2NvbGxlY3Rpb25TY29wZSB8fCBtX2NvbGxlY3Rpb25TY29wZS52
YWx1ZSgpICE9IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgcmV0dXJuOwotICAgIGZv
ciAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwIDogbV93ZWFrR0NNYXBzKQotICAgICAgICB3ZWFr
R0NNYXAtPnBydW5lU3RhbGVFbnRyaWVzKCk7CisgICAgZm9yIChhdXRvKiB3ZWFrR0NIYXNoVGFi
bGUgOiBtX3dlYWtHQ0hhc2hUYWJsZXMpCisgICAgICAgIHdlYWtHQ0hhc2hUYWJsZS0+cHJ1bmVT
dGFsZUVudHJpZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCkBAIC0y
Njc0LDE0ICsyNjc0LDE0IEBAIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWYKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKLXZvaWQgSGVhcDo6cmVn
aXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjpyZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqIHdlYWtHQ0hhc2hUYWJsZSkKIHsK
LSAgICBtX3dlYWtHQ01hcHMuYWRkKHdlYWtHQ01hcCk7CisgICAgbV93ZWFrR0NIYXNoVGFibGVz
LmFkZCh3ZWFrR0NIYXNoVGFibGUpOwogfQogCi12b2lkIEhlYXA6OnVucmVnaXN0ZXJXZWFrR0NN
YXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjp1bnJlZ2lzdGVyV2Vha0dD
SGFzaFRhYmxlKFdlYWtHQ0hhc2hUYWJsZSogd2Vha0dDSGFzaFRhYmxlKQogewotICAgIG1fd2Vh
a0dDTWFwcy5yZW1vdmUod2Vha0dDTWFwKTsKKyAgICBtX3dlYWtHQ0hhc2hUYWJsZXMucmVtb3Zl
KHdlYWtHQ0hhc2hUYWJsZSk7CiB9CiAKIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVCbG9jayhzaXpl
X3QgY2FwYWNpdHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAy
NzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDcgKzg3LDcgQEAgY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBT
d2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CiBjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwotY2xh
c3MgV2Vha0dDTWFwQmFzZTsKK2NsYXNzIFdlYWtHQ0hhc2hUYWJsZTsKIHN0cnVjdCBDdXJyZW50
VGhyZWFkU3RhdGU7CiAKICNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRApAQCAtMjg5LDggKzI4
OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbGVhc2VTb29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NH
TGliV3JhcHBlck9iamVjdD4mJik7CiAjZW5kaWYKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vh
a0dDTWFwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDSGFzaFRh
YmxlKFdlYWtHQ0hhc2hUYWJsZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5yZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqKTsKIAogICAgIHZvaWQgYWRkTG9n
aWNhbGx5RW1wdHlXZWFrQmxvY2soV2Vha0Jsb2NrKik7CiAKQEAgLTUyNiw3ICs1MjYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZW5kTWFya2luZygpOwogCiAgICAgdm9pZCByZWFwV2Vha0hhbmRs
ZXMoKTsKLSAgICB2b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKKyAgICB2
b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ0hhc2hUYWJsZXMoKTsKICAgICB2b2lkIHN3
ZWVwQXJyYXlCdWZmZXJzKCk7CiAgICAgdm9pZCBzbmFwc2hvdFVuc3dlcHQoKTsKICAgICB2b2lk
IGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CkBAIC02ODksNyArNjg5LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIHVuc2lnbmVkIG1fZGVmZXJyYWxEZXB0aCB7IDAgfTsKIAotICAgIEhh
c2hTZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKKyAgICBIYXNoU2V0PFdlYWtHQ0hh
c2hUYWJsZSo+IG1fd2Vha0dDSGFzaFRhYmxlczsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjc1
MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCwzICs1NCw0IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgi
CisjaW5jbHVkZSAiV2Vha0dDU2V0SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KIAogICAgIEpTQ3VzdG9tR2V0dGVy
RnVuY3Rpb24qIGN1c3RvbUdldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyRnVu
Y3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmdldHRlcigpOworICAgIGF1dG8gZ2V0dGVyID0gY3VzdG9tR2V0dGVy
RnVuY3Rpb24tPmdldHRlcigpOwogCiAgICAgaWYgKGF1dG8gZG9tQXR0cmlidXRlID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmRvbUF0dHJpYnV0ZSgpKSB7CiAgICAgICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpCkBAIC01MCw3ICs1MCw3IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGdldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlz
VmFsdWUpLCBjdXN0b21HZXR0ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpKTsKIH0KIAotSlND
dXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgR2V0
VmFsdWVGdW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0
cmlidXRlKQorSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3Bl
cnR5TmFtZSwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmli
dXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3Byb3BlcnR5TmFtZShJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQpAQCAtNTgsNyArNTgsNyBAQCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRl
ckZ1CiB7CiB9CiAKLUpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2V0dGVyRnVuY3Rp
b246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFBy
b3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0dGVyLCBPcHRpb25hbDxE
T01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCitKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgQ3VzdG9t
RnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlKQogewogICAgIEFTU0VSVChnZXR0ZXIpOwogICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY3VzdG9tR2V0dGVyRnVuY3Rpb25D
YWxsLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgU3RyaW5nKHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Z1bmN0
aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCisgICAgdXNpbmcgQ3VzdG9tRnVuY3Rpb25Qb2ludGVy
ID0gR2V0VmFsdWVGdW5jOworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKQEAgLTQ5
LDE5ICs1MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyLCBPcHRpb25hbDxET01BdHRy
aWJ1dGVBbm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eU5hbWU7IH0KLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nZXR0ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZ2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0
b21GdW5jdGlvblBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlcjsgfTsKICAgICBPcHRp
b25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVy
biBtX2RvbUF0dHJpYnV0ZTsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPik7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFByb3BlcnR5TmFtZSYs
IEN1c3RvbUZ1bmN0aW9uUG9pbnRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4p
OwogCiAgICAgSWRlbnRpZmllciBtX3Byb3BlcnR5TmFtZTsKLSAgICBHZXRWYWx1ZUZ1bmMgbV9n
ZXR0ZXI7CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIG1fZ2V0dGVyOwogICAgIE9wdGlvbmFs
PERPTUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
OSArMzYsMTkgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3VzdG9tUwogSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGN1c3RvbVNldHRlckZ1bmN0aW9uQ2FsbCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBhdXRv
IGN1c3RvbVNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwotICAgIFB1dFZhbHVlRnVuYyBzZXR0ZXIgPSBjdXN0b21T
ZXR0ZXJGdW5jdGlvbi0+c2V0dGVyKCk7CisgICAgYXV0byBzZXR0ZXIgPSBjdXN0b21TZXR0ZXJG
dW5jdGlvbi0+c2V0dGVyKCk7CiAgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5j
b2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSksIGN1c3RvbVNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotSlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5j
IHNldHRlcikKK0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24o
Vk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9w
ZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiAgICAgOiBCYXNlKHZtLCBl
eGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fcHJvcGVydHlOYW1l
KElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpCiAgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCiB7CiB9CiAKLUpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tU2V0
dGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMgc2V0dGVyKQor
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBw
cm9wZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiB7CiAgICAgQVNTRVJU
KHNldHRlcik7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RG
dW5jdGlvbihjdXN0b21TZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rp
b24uaAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKKyAg
ICB1c2luZyBDdXN0b21GdW5jdGlvblBvaW50ZXIgPSBQdXRWYWx1ZUZ1bmM7CisKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIApAQCAtNDksMTggKzUxLDE5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiog
Y3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUmLCBQdXRWYWx1
ZUZ1bmMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0
aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEN1
c3RvbUZ1bmN0aW9uUG9pbnRlcik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eU5hbWU7IH0KLSAgICBQdXRWYWx1ZUZ1bmMgc2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0
ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIHNldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0b21GdW5jdGlvblBv
aW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlcjsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1
c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgUHV0VmFsdWVGdW5jKTsKKyAgICBK
U0N1c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2lu
dGVyKTsKIAogICAgIElkZW50aWZpZXIgbV9wcm9wZXJ0eU5hbWU7Ci0gICAgUHV0VmFsdWVGdW5j
IG1fc2V0dGVyOworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBtX3NldHRlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDcsOCArNTA3LDggQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgUwog
ICAgICwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQogICAgICwgbV9y
dW50aW1lRmxhZ3MoKQogICAgICwgbV9zdGFja1RyYWNlTGltaXQoT3B0aW9uczo6ZGVmYXVsdEVy
cm9yU3RhY2tUcmFjZUxpbWl0KCkpCi0gICAgLCBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwKHZt
KQotICAgICwgbV9jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCh2bSkKKyAgICAsIG1fY3VzdG9tR2V0
dGVyRnVuY3Rpb25TZXQodm0pCisgICAgLCBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU2V0KHZtKQog
ICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKICNpbmNs
dWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJMYXp5
UHJvcGVydHkuaCIKICNpbmNsdWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJM
YXp5UHJvcGVydHkuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJQ
YXJzZXJNb2Rlcy5oIgogI2luY2x1ZGUgIlJlZ0V4cEdsb2JhbERhdGEuaCIKQEAgLTQ1LDYgKzQ1
LDcgQEAKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJXZWFrR0NTZXQuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgpAQCAtNTQ2LDggKzU0Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFwUHJv
dG90eXBlU2V0RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKICAgICBib29sIGlzU2V0UHJvdG90eXBl
QWRkRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIAotICAgIFdlYWtHQ01hcDxHZXRWYWx1ZUZ1bmMs
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+JiBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCgpIHsgcmV0
dXJuIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25NYXA7IH0KLSAgICBXZWFrR0NNYXA8UHV0VmFsdWVG
dW5jLCBKU0N1c3RvbVNldHRlckZ1bmN0aW9uPiYgY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAoKSB7
IHJldHVybiBtX2N1c3RvbVNldHRlckZ1bmN0aW9uTWFwOyB9CiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICB1c2luZyBSZWZlcmVuY2VkR2xvYmFsUHJvcGVydHlXYXRjaHBvaW50U2V0cyA9IEhh
c2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgUmVmPFdhdGNocG9pbnRTZXQ+LCBJZGVu
dGlmaWVyUmVwSGFzaD47CkBAIC01NjMsOCArNTYyLDIxIEBAIHB1YmxpYzoKICAgICBSdW50aW1l
RmxhZ3MgbV9ydW50aW1lRmxhZ3M7CiAgICAgQ29uc29sZUNsaWVudCogbV9jb25zb2xlQ2xpZW50
IHsgbnVsbHB0ciB9OwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YWNrVHJhY2VMaW1pdDsK
LSAgICBXZWFrR0NNYXA8R2V0VmFsdWVGdW5jLCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uPiBtX2N1
c3RvbUdldHRlckZ1bmN0aW9uTWFwOwotICAgIFdlYWtHQ01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb24+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXA7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNo
IHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2VhazxUPiYpOworICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPFQ+JiwgY29uc3QgV2VhazxUPiYpOworICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eU5hbWUmLCB0eXBlbmFtZSBU
OjpDdXN0b21GdW5jdGlvblBvaW50ZXIpOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBX
ZWFrR0NTZXQ8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9yU2V0dGVy
SGFzaDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblNldDsK
KyAgICBXZWFrR0NTZXQ8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9y
U2V0dGVySGFzaDxKU0N1c3RvbVNldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21TZXR0ZXJGdW5jdGlv
blNldDsKKworICAgIFdlYWtHQ1NldDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uLCBXZWFrQ3VzdG9t
R2V0dGVyT3JTZXR0ZXJIYXNoPEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+PiYgY3VzdG9tR2V0dGVy
RnVuY3Rpb25TZXQoKSB7IHJldHVybiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uU2V0OyB9CisgICAg
V2Vha0dDU2V0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24sIFdlYWtDdXN0b21HZXR0ZXJPclNldHRl
ckhhc2g8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj4+JiBjdXN0b21TZXR0ZXJGdW5jdGlvblNldCgp
IHsgcmV0dXJuIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TZXQ7IH0KIAogI2lmIEFTU0VSVF9FTkFC
TEVECiAgICAgY29uc3QgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVu
dHJ5IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0N1c3RvbUdldHRl
ckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMaW5rVGltZUNvbnN0YW50LmgiCiAjaW5jbHVk
ZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC0xMjQsNCArMTI2LDI5IEBAIEFMV0FZU19JTkxJTkUg
Vk0mIGdldFZNKEpTR2xvYmFsT2JqZWN0KiAKICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT52bSgp
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHVuc2lnbmVkIEpTR2xvYmFsT2Jq
ZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjpoYXNoKGNvbnN0IFdlYWs8VD4m
IHZhbHVlKQoreworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBoYXNoKHZhbHVlLT5wcm9wZXJ0eU5hbWUoKSwgdmFsdWUtPmN1c3RvbUZ1bmN0aW9uUG9pbnRl
cigpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIEpTR2xvYmFsT2Jq
ZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjplcXVhbChjb25zdCBXZWFrPFQ+
JiBhLCBjb25zdCBXZWFrPFQ+JiBiKQoreworICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBhID09IGI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitpbmxpbmUgdW5zaWduZWQgSlNHbG9iYWxPYmplY3Q6OldlYWtDdXN0b21HZXR0ZXJPclNldHRl
ckhhc2g8VD46Omhhc2goY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUsIHR5cGVuYW1l
IFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlciBmdW5jdGlvblBvaW50ZXIpCit7CisgICAgdW5zaWdu
ZWQgaGFzaCA9IERlZmF1bHRIYXNoPHR5cGVuYW1lIFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlcj46
Omhhc2goZnVuY3Rpb25Qb2ludGVyKTsKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc051bGwoKSkK
KyAgICAgICAgaGFzaCA9IFdURjo6cGFpckludEhhc2goaGFzaCwgcHJvcGVydHlOYW1lLnVpZCgp
LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCShyZXZpc2lvbiAyNzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MjEsMjIgKzM1MjEsNDUgQEAg
QnV0dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaQogICAgIHJldHVybiBCdXR0
ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShidXR0ZXJmbHkoKSwgdm0sIHRoaXMs
IHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorc3RydWN0IFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yIHsKKyAg
ICB1c2luZyBCYXNlSGFzaCA9IEpTR2xvYmFsT2JqZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0
ZXJIYXNoPFQ+OworCisgICAgdXNpbmcgS2V5ID0gc3RkOjp0dXBsZTxQcm9wZXJ0eU5hbWUsIHR5
cGVuYW1lIFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlcj47CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlSGFzaDo6aGFz
aChzdGQ6OmdldDwwPihrZXkpLCBzdGQ6OmdldDwxPihrZXkpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPFQ+JiBhLCBjb25zdCBLZXkmIGIpCisgICAgeworICAg
ICAgICBpZiAoIWEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBh
LT5wcm9wZXJ0eU5hbWUoKSA9PSBzdGQ6OmdldDwwPihiKSAmJiBhLT5jdXN0b21GdW5jdGlvblBv
aW50ZXIoKSA9PSBzdGQ6OmdldDwxPihiKTsKKyAgICB9Cit9OworCiBzdGF0aWMgSlNDdXN0b21H
ZXR0ZXJGdW5jdGlvbiogY3JlYXRlQ3VzdG9tR2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBHZXRWYWx1
ZUZ1bmMgZ2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21B
dHRyaWJ1dGUpCiB7Ci0gICAgLy8gV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVz
dCBub3QgaW52b2tlIEdDIHNpbmNlIEdDIGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRk
bGUgb2YgSGFzaE1hcDo6ZW5zdXJlLgotICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5v
dCB0byBpbnZva2UgR0Mgd2hlbiBleGVjdXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQg
KDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAgSGFzaE1hcCB0d2ljZS4KKyAgICB1c2luZyBUcmFuc2xh
dG9yID0gV2Vha0N1c3RvbUdldHRlck9yU2V0dGVySGFzaFRyYW5zbGF0b3I8SlNDdXN0b21HZXR0
ZXJGdW5jdGlvbj47CisKKyAgICAvLyBXZWFrR0NTZXQ6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBt
dXN0IG5vdCBpbnZva2UgR0Mgc2luY2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NTZXQgaW4gdGhlIG1p
ZGRsZSBvZiBIYXNoU2V0OjplbnN1cmUuCisgICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkg
bm90IHRvIGludm9rZSBHQyB3aGVuIGV4ZWN1dGluZyBXZWFrR0NTZXQ6OmVuc3VyZVZhbHVlIGFu
ZCAoMikgdG8gYXZvaWQgbG9va2luZyB1cCBIYXNoU2V0IHR3aWNlLgogICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5jdXN0b21HZXR0ZXJGdW5j
dGlvbk1hcCgpLmVuc3VyZVZhbHVlKGdldFZhbHVlRnVuYywgWyZdIHsKKyAgICByZXR1cm4gZ2xv
YmFsT2JqZWN0LT5jdXN0b21HZXR0ZXJGdW5jdGlvblNldCgpLmVuc3VyZVZhbHVlPFRyYW5zbGF0
b3I+KHN0ZDo6bWFrZV90dXBsZShwcm9wZXJ0eU5hbWUsIGdldFZhbHVlRnVuYyksIFsmXSB7CiAg
ICAgICAgIHJldHVybiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBnZXRWYWx1ZUZ1bmMsIGRvbUF0dHJpYnV0ZSk7CiAgICAgfSk7
CiB9CiAKIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKiBjcmVhdGVDdXN0b21TZXR0ZXJG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFB1dFZhbHVlRnVuYyBwdXRWYWx1ZUZ1bmMpCiB7Ci0gICAgLy8gV2Vh
a0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDIHNpbmNlIEdD
IGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6ZW5zdXJlLgot
ICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mgd2hlbiBleGVj
dXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAg
SGFzaE1hcCB0d2ljZS4KKyAgICB1c2luZyBUcmFuc2xhdG9yID0gV2Vha0N1c3RvbUdldHRlck9y
U2V0dGVySGFzaFRyYW5zbGF0b3I8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj47CisKKyAgICAvLyBX
ZWFrR0NTZXQ6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mgc2luY2Ug
R0MgY2FuIG1vZGlmeSBXZWFrR0NTZXQgaW4gdGhlIG1pZGRsZSBvZiBIYXNoU2V0OjplbnN1cmUu
CisgICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGludm9rZSBHQyB3aGVuIGV4
ZWN1dGluZyBXZWFrR0NTZXQ6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8gYXZvaWQgbG9va2luZyB1
cCBIYXNoU2V0IHR3aWNlLgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICByZXR1
cm4gZ2xvYmFsT2JqZWN0LT5jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCgpLmVuc3VyZVZhbHVlKHB1
dFZhbHVlRnVuYywgWyZdIHsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5jdXN0b21TZXR0ZXJG
dW5jdGlvblNldCgpLmVuc3VyZVZhbHVlPFRyYW5zbGF0b3I+KHN0ZDo6bWFrZV90dXBsZShwcm9w
ZXJ0eU5hbWUsIHB1dFZhbHVlRnVuYyksIFsmXSB7CiAgICAgICAgIHJldHVybiBKU0N1c3RvbVNl
dHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBwdXRW
YWx1ZUZ1bmMpOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha0dDSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha0dDSGFzaFRhYmxlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgV2Vha0dDSGFzaFRhYmxlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWFrR0NI
YXNoVGFibGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSA9IDA7
Cit9OworCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAu
aAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a0dDTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIxICsyNywxNSBAQAogCiAjaW5jbHVkZSAi
RGVmZXJHQy5oIgogI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNsdWRlICJXZWFrR0NIYXNoVGFibGUu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogLy8gQSBI
YXNoTWFwIHdpdGggV2VhazxKU0NlbGw+IHZhbHVlcywgd2hpY2ggYXV0b21hdGljYWxseSByZW1v
dmVzIHZhbHVlcyBvbmNlIHRoZXkncmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAKLWNsYXNzIFdlYWtH
Q01hcEJhc2UgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYWtHQ01hcEJhc2UoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSA9IDA7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVm
YXVsdEhhc2g8S2V5QXJnPiwKLSAgICB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRz
PEtleUFyZz4+Ci1jbGFzcyBXZWFrR0NNYXAgZmluYWwgOiBwdWJsaWMgV2Vha0dDTWFwQmFzZSB7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBI
YXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFz
aFRyYWl0czxLZXlBcmc+PgorY2xhc3MgV2Vha0dDTWFwIGZpbmFsIDogcHVibGljIFdlYWtHQ0hh
c2hUYWJsZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgdHlwZWRlZiBXZWFr
PFZhbHVlQXJnPiBWYWx1ZVR5cGU7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgVmFsdWVU
eXBlLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hNYXBUeXBlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcElubGluZXMuaAkocmV2aXNpb24g
Mjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJnLCB0eXBlbmFtZSBWYWx1ZQogaW5saW5lIFdlYWtHQ01hcDxLZXlBcmcsIFZhbHVlQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+OjpXZWFrR0NNYXAoVk0mIHZtKQogICAgIDogbV92bSh2
bSkKIHsKLSAgICB2bS5oZWFwLnJlZ2lzdGVyV2Vha0dDTWFwKHRoaXMpOworICAgIHZtLmhlYXAu
cmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUodGhpcyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZz4KIGlubGluZSBXZWFrR0NNYXA8S2V5QXJnLCBWYWx1ZUFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnPjo6fldlYWtHQ01hcCgpCiB7Ci0gICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFr
R0NNYXAodGhpcyk7CisgICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUodGhp
cyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYWsuaCIK
KyNpbmNsdWRlICJXZWFrR0NIYXNoVGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gQSBIYXNoU2V0IHdpdGggV2VhazxKU0NlbGw+IHZhbHVl
cywgd2hpY2ggYXV0b21hdGljYWxseSByZW1vdmVzIHZhbHVlcyBvbmNlIHRoZXkncmUgZ2FyYmFn
ZSBjb2xsZWN0ZWQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBXZWFrR0NTZXRIYXNo
VHJhaXRzIDogSGFzaFRyYWl0czxXZWFrPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGhhc0lzUmVsZWFzZWRXZWFrVmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGJvb2wg
aXNSZWxlYXNlZFdlYWtWYWx1ZShjb25zdCBXZWFrPFQ+JiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiAhdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSAmJiAhdmFsdWUuaXNIYXNo
VGFibGVFbXB0eVZhbHVlKCkgJiYgIXZhbHVlOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8V2VhazxWYWx1ZUFy
Zz4+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBXZWFrR0NTZXRIYXNoVHJhaXRzPFZhbHVlQXJnPj4K
K2NsYXNzIFdlYWtHQ1NldCBmaW5hbCA6IHB1YmxpYyBXZWFrR0NIYXNoVGFibGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IFdlYWs8VmFsdWVB
cmc+OworICAgIHVzaW5nIEhhc2hTZXRUeXBlID0gSGFzaFNldDxWYWx1ZVR5cGUsIEhhc2hBcmcs
IFRyYWl0c0FyZz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBBZGRSZXN1bHQgPSB0eXBlbmFtZSBI
YXNoU2V0VHlwZTo6QWRkUmVzdWx0OworICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgSGFz
aFNldFR5cGU6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gdHlwZW5hbWUg
SGFzaFNldFR5cGU6OmNvbnN0X2l0ZXJhdG9yOworCisgICAgZXhwbGljaXQgV2Vha0dDU2V0KFZN
Jik7CisgICAgfldlYWtHQ1NldCgpIGZpbmFsOworCisgICAgdm9pZCBjbGVhcigpCisgICAgewor
ICAgICAgICBtX3NldC5jbGVhcigpOworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRvciBpdCA9IG1fc2V0LmJlZ2luKCk7CisgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgICAgICB3aGlsZSAoaXQg
IT0gZW5kKSB7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICBWYWx1ZUFyZyogZW5zdXJlVmFsdWUoVCYmIGtleSwgRnVuY3RvciYmIGZ1
bmN0b3IpCisgICAgeworICAgICAgICAvLyBJZiBmdW5jdG9yIGludm9rZXMgR0MsIEdDIGNhbiBw
cnVuZSBXZWFrR0NTZXQsIGFuZCBtYW5pcHVsYXRlIEhhc2hTZXQgd2hpbGUgd2UgYXJlIHRvdWNo
aW5nIGl0IGluIHRoZSBlbnN1cmUgZnVuY3Rpb24uCisgICAgICAgIC8vIFRoZSBmdW5jdG9yIG11
c3Qgbm90IGludm9rZSBHQy4KKyAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAg
ICAKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3NldC50ZW1wbGF0ZSBlbnN1cmU8SGFzaFRyYW5z
bGF0b3I+KHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
cikpOworICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5nZXQoKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgaXRlcmF0b3IgZmluZChjb25zdCBWYWx1ZVR5cGUmIGtleSk7CisgICAgaW5saW5l
IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgVmFsdWVUeXBlJiBrZXkpIGNvbnN0OworICAgIGlu
bGluZSBib29sIGNvbnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSBmaW5hbDsKKworICAgIEhhc2hTZXRUeXBlIG1f
c2V0OworICAgIFZNJiBtX3ZtOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NTZXRJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIldlYWtHQ1NldC5o
IgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJn
PgoraW5saW5lIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6V2Vha0dD
U2V0KFZNJiB2bSkKKyAgICA6IG1fdm0odm0pCit7CisgICAgdm0uaGVhcC5yZWdpc3RlcldlYWtH
Q0hhc2hUYWJsZSh0aGlzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVu
YW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK2lubGluZSBXZWFrR0NTZXQ8VmFsdWVB
cmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46On5XZWFrR0NTZXQoKQoreworICAgIG1fdm0uaGVhcC51
bnJlZ2lzdGVyV2Vha0dDSGFzaFRhYmxlKHRoaXMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgoraW5saW5lIHR5
cGVuYW1lIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6aXRlcmF0b3Ig
V2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+OjpmaW5kKGNvbnN0IFZhbHVl
VHlwZSYgdmFsdWUpCit7CisgICAgaXRlcmF0b3IgaXQgPSBtX3NldC5maW5kKHZhbHVlKTsKKyAg
ICBpdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsKKyAgICBpZiAoaXQgIT0gZW5kICYmICEqaXQp
IC8vIEZvdW5kIGEgem9tYmllIHZhbHVlLgorICAgICAgICByZXR1cm4gZW5kOworICAgIHJldHVy
biBpdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcs
IHR5cGVuYW1lIFRyYWl0c0FyZz4KK2lubGluZSB0eXBlbmFtZSBXZWFrR0NTZXQ8VmFsdWVBcmcs
IEhhc2hBcmcsIFRyYWl0c0FyZz46OmNvbnN0X2l0ZXJhdG9yIFdlYWtHQ1NldDxWYWx1ZUFyZywg
SGFzaEFyZywgVHJhaXRzQXJnPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdAor
eworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYWtHQ1NldCo+KHRoaXMpLT5maW5kKHZhbHVlKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIFRyYWl0c0FyZz4KK2lubGluZSBib29sIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywg
VHJhaXRzQXJnPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmluZCh2YWx1ZSkgIT0gbV9zZXQuZW5kKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+CitORVZF
Ul9JTkxJTkUgdm9pZCBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46OnBy
dW5lU3RhbGVFbnRyaWVzKCkKK3sKKyAgICBtX3NldC5yZW1vdmVJZihbXShhdXRvJiBlbnRyeSkg
eworICAgICAgICByZXR1cm4gIWVudHJ5OworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNzUxMjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDIxLTAzLTI3ICBTYW0gV2VpbmlnICA8d2Vp
bmlnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0dsb2JhbE9iamVjdCdzIG1fY3VzdG9tR2V0dGVy
RnVuY3Rpb25NYXAgYW5kIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAgc2hvdWxkIGJlIHNldHMs
IG5vdCBtYXBzLCBhbmQgc2hvdWxkIHVzZSBib3RoIHRoZSBpZGVudGlmaWVyIGFuZCBmdW5jdGlv
biBwb2ludGVyIGFzIHRoZSBrZXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMzYxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZHMgYSBoZXRlcm9nZW5vdXMgSGFzaFNldDo6ZW5zdXJlLCB3aGljaCBh
bGxvd3MgbGF6eSBjb25zdHJ1Y3Rpb24gb2YgdGhlIHZhbHVlIHRvCisgICAgICAgIGluc2VydCBp
bnRvIHRoZSBIYXNoU2V0IG9ubHkgaWYgdGhlIGhldGVyb2dlbm91cyBrZXkgKGUuZy4gYSBrZXkg
KyBIYXNoVHJhbnNsYXRvcgorICAgICAgICB0aGF0IGFyZSBub3QgdGhlIHNhbWUgYXMgdGhlIEhh
c2hTZXQncyBWYWx1ZVR5cGUpIGRvZXMgbm90IG1hdGNoIGFueSBpdGVtIGluIHRoZQorICAgICAg
ICBzZXQuIEZvciBleGFtcGxlIGdpdmVuIGEgc2V0IG9mIEV4cGVuc2l2ZVRvQ29uc3RydWN0LCBi
dXQgdW5pcXVlbHkgaWRlbnRpZmlhYmxlCisgICAgICAgIGJ5IENoZWFwVG9Db25zdHJ1Y3Q6Cisg
ICAgICAgIAorICAgICAgICAgICAgSGFzaFNldDxFeHBlbnNpdmVUb0NvbnN0cnVjdD4gaGFzaFNl
dDsKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgc3RydWN0IFRyYW5zbGF0b3IgeworICAg
ICAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENoZWFwVG9Db25zdHJ1Y3Qm
IGtleSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXku
aGFzaCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBFeHBlbnNpdmVUb0NvbnN0cnVjdCYgYSwgY29uc3QgQ2hlYXBUb0NvbnN0cnVj
dCYgYikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhID09
IGI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaGFzaFNldC5lbnN1cmU8VHJhbnNsYXRvcj4oQ2hlYXBUb0NvbnN0cnVjdCB7IC4u
LiB9LCBbXSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4cGVuc2l2ZVRvQ29uc3RydWN0IHsg
Li4uIH07CisgICAgICAgICAgICB9KTsKKworICAgICAgICBUaGlzIHdpbGwgYmUgdXNlZCBieSB0
aGUgY3VzdG9tIGdldHRlci9zZXR0ZXIgc2V0cyB0byBhdm9pZCBjb25zdHJ1Y3RpbmcgdGhlIEdD
IG9iamVjdHMKKyAgICAgICAgdW5sZXNzIHRoZXkgYXJlIHJlYWxseSBuZWVkZWQuCisKKyAgICAg
ICAgQWxzbyB0b29rIHRoZSBvcGVydHVuaXR5IHRvIHJlcGxhY2Ugc29tZSB0eXBlZGVmcyB3aXRo
IHVzaW5ncywgYW5kIGZpeGVkIHNvbWUgY29tbWVudHMuCisKKyAgICAgICAgKiB3dGYvSGFzaFNl
dC5oOgorICAgICAgICAoV1RGOjpUcmFpdHM+OjplbnN1cmUpOgorCiAyMDIxLTAzLTI2ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBQVUlDUXVp
Y2tib2FyZENvbnRyb2xsZXIgZm9yIHRleHQgaW5wdXQgd2hlbiBIQVZFKFFVSUNLQk9BUkRfQ09O
VFJPTExFUikgaXMgZGVmaW5lZApJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMjc1MTIzKQorKysg
U291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywzNiArMzMsMzAg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhcwogY2xhc3MgSGFzaFNl
dCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgotICAgIHR5
cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOwotICAgIHR5cGVkZWYgVHJhaXRzQXJnIFZhbHVl
VHJhaXRzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRha2VUeXBlIFRha2VU
eXBlOworICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNoQXJnOworICAgIHVzaW5nIFZhbHVl
VHJhaXRzID0gVHJhaXRzQXJnOworICAgIHVzaW5nIFRha2VUeXBlID0gdHlwZW5hbWUgVmFsdWVU
cmFpdHM6OlRha2VUeXBlOwogCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRy
YWl0czo6VHJhaXRUeXBlIFZhbHVlVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFt
ZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaFRh
YmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwKLSAgICAgICAgSGFz
aEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPiBIYXNoVGFibGVUeXBlOworICAg
IHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElk
ZW50aXR5RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFpdHM+
OwogCiBwdWJsaWM6Ci0gICAgLyoKLSAgICAgKiBTaW5jZSBmaWd1cmluZyBvdXQgdGhlIGVudHJp
ZXMgb2YgYW4gaXRlcmF0b3IgaXMgY29uZnVzaW5nLCBoZXJlIGlzIGEgY2hlYXQgc2hlZXQ6Ci0g
ICAgICogY29uc3QgS2V5VHlwZSYga2V5ID0gaXRlcmF0b3ItPmtleTsKLSAgICAgKi8KLSAgICB0
eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVl
VHlwZT4gaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRl
cjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+IGNvbnN0X2l0ZXJhdG9yOwotCi0gICAgLyoKLSAg
ICAgKiBTaW5jZSBmaWd1cmluZyBvdXQgdGhlIGVudHJpZXMgb2YgYW4gQWRkUmVzdWx0IGlzIGNv
bmZ1c2luZywgaGVyZSBpcyBhIGNoZWF0IHNoZWV0OgotICAgICAqIGl0ZXJhdG9yIGl0ZXIgPSBh
ZGRSZXN1bHQuaXRlcmF0b3I7Ci0gICAgICogYm9vbCBpc05ld0VudHJ5ID0gYWRkUmVzdWx0Lmlz
TmV3RW50cnk7Ci0gICAgICovCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpB
ZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgSGFzaFNldCgpCi0gICAgewotICAgIH0KKyAgICAv
LyBIYXNoU2V0IGl0ZXJhdG9ycyBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorICAgIC8v
ICAgICAgY29uc3QgVmFsdWVUeXBlKiBnZXQoKSBjb25zdDsKKyAgICAvLyAgICAgIGNvbnN0IFZh
bHVlVHlwZSYgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgLy8gICAgICBjb25zdCBWYWx1ZVR5cGUq
IG9wZXJhdG9yLT4oKSBjb25zdDsKKyAgICB1c2luZyBpdGVyYXRvciA9IEhhc2hUYWJsZUNvbnN0
SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT47CisgICAgdXNpbmcgY29u
c3RfaXRlcmF0b3IgPSBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBl
LCBWYWx1ZVR5cGU+OworCisgICAgLy8gSGFzaFNldCBBZGRSZXN1bHRzIGhhdmUgdGhlIGZvbGxv
d2luZyBmaWVsZHM6CisgICAgLy8gICAgICBJdGVyYXRvclR5cGUgaXRlcmF0b3I7CisgICAgLy8g
ICAgICBib29sIGlzTmV3RW50cnk7CisgICAgdXNpbmcgQWRkUmVzdWx0ID0gdHlwZW5hbWUgSGFz
aFRhYmxlVHlwZTo6QWRkUmVzdWx0OwogCisgICAgSGFzaFNldCgpID0gZGVmYXVsdDsKICAgICBI
YXNoU2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxWYWx1ZUFyZz4gaW5pdGlhbGl6ZXJMaXN0KQog
ICAgIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGluaXRpYWxpemVyTGlzdCkK
QEAgLTkzLDYgKzg3LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gYm9vbCBjb250YWlu
cyhjb25zdCBUJikgY29uc3Q7CiAKKwogICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaW5jbHVkZXMg
Ym90aCBhbiBpdGVyYXRvciB0byB0aGUgYWRkZWQgdmFsdWUncyBsb2NhdGlvbiwKICAgICAvLyBh
bmQgYW4gaXNOZXdFbnRyeSBib29sIHRoYXQgaW5kaWNhdGVzIGlmIGl0IGlzIGEgbmV3IG9yIGV4
aXN0aW5nIGVudHJ5IGluIHRoZSBzZXQuCiAgICAgQWRkUmVzdWx0IGFkZChjb25zdCBWYWx1ZVR5
cGUmKTsKQEAgLTExMCw2ICsxMDUsMTYgQEAgcHVibGljOgogICAgIC8vICAgc3RhdGljIHRyYW5z
bGF0ZShWYWx1ZVR5cGUmLCBjb25zdCBUJiwgdW5zaWduZWQgaGFzaENvZGUpOwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBBZGRSZXN1bHQgYWRkKGNv
bnN0IFQmKTsKICAgICAKKyAgICAvLyBBbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0cmFuc2xhdGVk
IGFkZCgpLCBlbnN1cmUoKSB3aWxsIHN0aWxsIGRvIHRyYW5zbGF0aW9uCisgICAgLy8gYnkgaGFz
aGluZyBhbmQgY29tcGFyaW5nIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUgY29z
dCBvZiB0eXBlCisgICAgLy8gY29udmVyc2lvbiBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4g
dGhlIHRhYmxlLCBidXQgcmF0aGVyIHRoYW4gYSBzdGF0aWMKKyAgICAvLyB0cmFuc2xhdGUoKSBm
dW5jdGlvbiwgdXNlcyB0aGUgcGFzc2VkIGluIGZ1bmN0b3IgdG8gcGVyZm9ybSBsYXp5IGNyZWF0
aW9uIG9mCisgICAgLy8gdGhlIHZhbHVlIG9ubHkgaWYgaXQgaXMgbm90IGFscmVhZHkgdGhlcmUu
IEhhc2hUcmFuc2xhdG9yIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nCisgICAgLy8gZnVuY3Rpb24g
bWVtYmVyczoKKyAgICAvLyAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmKTsKKyAgICAv
LyAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlVHlwZSYsIGNvbnN0IFQmKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVu
Y3Rvcj4gQWRkUmVzdWx0IGVuc3VyZShUJiYsIEZ1bmN0b3ImJik7CisKICAgICAvLyBBdHRlbXB0
cyB0byBhZGQgYSBsaXN0IG9mIHRoaW5ncyB0byB0aGUgc2V0LiBSZXR1cm5zIHRydWUgaWYgYW55
IG9mCiAgICAgLy8gdGhlbSBhcmUgbmV3IHRvIHRoZSBzZXQuIFJldHVybnMgZmFsc2UgaWYgdGhl
IHNldCBpcyB1bmNoYW5nZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgpA
QCAtMTcxLDYgKzE3NiwxNiBAQCBzdHJ1Y3QgSGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyIHsKICAg
ICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgVHJhbnNs
YXRvcj4KK3N0cnVjdCBIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0b3IgeworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1
cm4gVHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1
cm4gVHJhbnNsYXRvcjo6ZXF1YWwoYSwgYik7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jdG9yPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9j
YXRpb24sIFUmJiwgRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBWYWx1ZVRyYWl0
czo6YXNzaWduVG9FbXB0eShsb2NhdGlvbiwgZnVuY3RvcigpKTsKKyAgICB9Cit9OworCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogaW5saW5lIHZvaWQgSGFz
aFNldDxULCBVLCBWPjo6c3dhcChIYXNoU2V0JiBvdGhlcikKIHsKQEAgLTIzMyw2ICsyNDgsMTMg
QEAgaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucwogICAgIHJldHVybiBt
X2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hUcmFu
c2xhdG9yPj4odmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+CitpbmxpbmUgYXV0byBIYXNo
U2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjplbnN1cmUoVCYmIGtleSwgRnVuY3Rv
ciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAoreworICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUg
YWRkPEhhc2hTZXRFbnN1cmVUcmFuc2xhdG9yQWRhcHRvcjxUcmFpdHMsIEhhc2hUcmFuc2xhdG9y
Pj4oc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7
Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CiBpbmxp
bmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgLT4g
QWRkUmVzdWx0CiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424505</attachid>
            <date>2021-03-28 11:42:47 -0700</date>
            <delta_ts>2021-03-30 13:56:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223613-20210328114246.patch</filename>
            <type>text/plain</type>
            <size>48327</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMS0wMy0yNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QncyBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwIGFuZCBtX2N1c3RvbVNl
dHRlckZ1bmN0aW9uTWFwIHNob3VsZCBiZSBzZXRzLCBub3QgbWFwcywgYW5kIHNob3VsZCB1c2Ug
Ym90aCB0aGUgaWRlbnRpZmllciBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcyB0aGUga2V5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM2MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSBnZW5l
cmljIFdlYWtHQ1NldCBjbGFzcyB0byBnbyB3aXRoIHRoZSBleGlzdGluZyBXZWFrR0NNYXAuCisg
ICAgICAgIC0gUmVuYW1lcyBXZWFrR0NNYXBCYXNlIHRvIFdlYWtHQ0hhc2hUYWJsZSwgbW92ZXMg
aXQgdG8gaXRzIG93biBmaWxlCisgICAgICAgICAgYW5kIG5vdyB1c2VzIGl0IGFzIHRoZSBiYXNl
IGNsYXNzIG9mIGJvdGggV2Vha0dDU2V0IGFuZCBXZWFrR0NNYXAuCisgICAgICAgIC0gUmVwbGFj
ZXMgSlNHbG9iYWxPYmplY3QncyBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9jdXN0b21TZXR0ZXJG
dW5jdGlvbk1hcAorICAgICAgICAgIHdpdGggY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvY3VzdG9t
U2V0dGVyRnVuY3Rpb25TZXQsIHVzaW5nIHRoZSBuZXcKKyAgICAgICAgICBXZWFrR0NTZXQsIGFu
ZCB1cGRhdGVzIHRoZW0gdG8gdXNlIGJvdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIAorICAg
ICAgICAgIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBrZXksIHJhdGhlciB0aGFuIGp1c3QgdGhlIGZ1
bmN0aW9uIHBvaW50ZXIgd2hpY2gKKyAgICAgICAgICBpcyB3aGF0IHRoZSBwcmV2aW91cyBjb2Rl
IGRpZC4gVGhpcyBhbGxvd3MgbXVsdGlwbGUgY3VzdG9tIGZ1bmN0aW9ucworICAgICAgICAgIHRv
IHVzZSB0aGUgc2FtZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHBvaW50ZXIgYXMgbG9uZyBhcyB0aGV5
IGhhdmUgZGlzdGluY3QKKyAgICAgICAgICBwcm9wZXJ0eSBuYW1lcywgd2hpY2ggaXMgZ29pbmcg
dG8gYmUgdXNlZCB0byBvcHRpbWl6ZSB0aGUgYmluZGluZ3MgZm9yCisgICAgICAgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcg
ZmlsZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpy
dW5FbmRQaGFzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdl
YWtHQ0hhc2hUYWJsZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZWdpc3RlcldlYWtHQ0hhc2hU
YWJsZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6cmVnaXN0ZXJXZWFrR0NNYXApOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpIZWFwOjp1bnJlZ2lzdGVyV2Vha0dDTWFwKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZS4gV2Vha0dDTWFw
QmFzZSAtPiBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMu
aDoKKyAgICAgICAgQWRkIFdlYWtHQ1NldElubGluZXMuaAorCisgICAgICAgICogcnVudGltZS9K
U0N1c3RvbUdldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0
b21HZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmg6Cisg
ICAgICAgICogcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbVNl
dHRlckZ1bmN0aW9uLmg6CisgICAgICAgIEFkZCBoZWxwZXIgdHlwZSBDdXN0b21GdW5jdGlvblBv
aW50ZXIgYW5kIGhlbHBlciBmdW5jdGlvbiBjdXN0b21GdW5jdGlvblBvaW50ZXIoKQorICAgICAg
ICB0byBhbGxvdyBzb21lIGdlbmVyaWMgaGFzaGluZyBjb2RlIHRvIHJ1biBvbiBlaXRoZXIgSlND
dXN0b21HZXR0ZXJGdW5jdGlvbgorICAgICAgICBvciBKU0N1c3RvbVNldHRlckZ1bmN0aW9uLgor
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6V2Vha0N1c3RvbUdldHRl
ck9yU2V0dGVySGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpXZWFr
Q3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAg
ICAgIFJlcGxhY2UgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9tX2N1c3RvbVNldHRlckZ1bmN0
aW9uTWFwIHdpdGggCisgICAgICAgIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvbV9jdXN0b21T
ZXR0ZXJGdW5jdGlvblNldC4gQXMgdGhlIGtleSBpcyBpbmNsdWRlZAorICAgICAgICBpbiB0aGUg
dmFsdWUsIGl0IHNhdmVzIHNwYWNlIHRvIHVzZSBhIHNldCByYXRoZXIgdGhhbiBhIG1hcC4gV2Ug
bm93IGFsc28KKyAgICAgICAgaGFzaCBhbmQgY29tcGFyZSBib3RoIHRoZSBmdW5jdGlvbiBwb2lu
dGVyIGFuZCB0aGUgcHJvcGVydHkgbmFtZSB0byBhbGxvdworICAgICAgICBzaGFyaW5nIGltcGxl
bWVudGF0aW9ucy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAg
ICAgIChKU0M6OldlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yOjplcXVhbCk6
CisgICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgorICAgICAgICBVcGRhdGUgY3JlYXRpb24g
ZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IHNldHMsIG1ha2luZyB1c2Ugb2YgdGhlCisgICAgICAg
IGVuc3VyZVZhbHVlIGZ1bmN0aW9uIGFuZCBhIEhhc2hUcmFuc2xhdG9yIGFsbG93aW5nIHRoZSB1
c2Ugb2YgYQorICAgICAgICBzdGQ6OnR1cGxlPFByb3BlcnR5TmFtZSwgRnVuY3Rpb25Qb2ludGVy
PiBhcyBhbiBhbHRlcm5hdGl2ZSBsb29rdXAKKyAgICAgICAga2V5LiBUaGlzIGFsbG93cyB1cyB0
byBhdm9pZCBjcmVhdGluZyB0aGUgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi9KU0N1c3RvbVNldHRl
ckZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgaWYgb25lIHdpdGggdGhlIHNhbWUgcHJvcGVydHkg
bmFtZSBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcmUKKyAgICAgICAgYWxyZWFkeSBpbiB0aGUgc2V0
LgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NIYXNoVGFibGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OldlYWtHQ0hhc2hUYWJsZTo6fldlYWtHQ0hhc2hUYWJsZSk6CisgICAgICAgIE1vdmVk
IGZyb20gV2Vha0dDTWFwIGFuZCByZW5hbWVkIGFzIGl0IGlzIG5vdyB0aGUgYmFzZSBvZiBib3Ro
CisgICAgICAgIFdlYWtHQ01hcCBhbmQgV2Vha0dDU2V0LgorIAorICAgICAgICAqIHJ1bnRpbWUv
V2Vha0dDTWFwLmg6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IFdlYWtHQ0hhc2hUYWJsZSBi
YXNlIGNsYXNzLgorCisgICAgICAgICogcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OktleVRyYWl0c0FyZz46OldlYWtHQ01hcCk6CisgICAgICAgIChKU0M6OktleVRy
YWl0c0FyZz46On5XZWFrR0NNYXApOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBIZWFwIGZ1bmN0
aW9uIG5hbWVzIGZvciBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL1dlYWtH
Q1NldC5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ1NldElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OlRyYWl0c0FyZz46OldlYWtHQ1NldCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46On5XZWFrR0NTZXQpOgorICAgICAgICAoSlNDOjpUcmFpdHNBcmc+OjpmaW5k
KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6ZmluZCBjb25zdCk6CisgICAgICAgIChKU0M6
OlRyYWl0c0FyZz46OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6
cHJ1bmVTdGFsZUVudHJpZXMpOgorICAgICAgICBBZGRlZCBhIG1pbmltYWwgV2Vha0dDU2V0IGJh
c2VkIG9uIFdlYWtHQ01hcC4gCisKIDIwMjEtMDMtMjYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQXBwbGVJQ1UgU1BJIGZvciBjYW5vbmlj
YWxpemF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAyNzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEwOTcsOCArMTA5NywxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9WTVRyYXBzLmgKICAgICBydW50aW1lL1Zhck9m
ZnNldC5oCiAgICAgcnVudGltZS9XYXRjaGRvZy5oCisgICAgcnVudGltZS9XZWFrR0NIYXNoVGFi
bGUuaAogICAgIHJ1bnRpbWUvV2Vha0dDTWFwLmgKICAgICBydW50aW1lL1dlYWtHQ01hcElubGlu
ZXMuaAorICAgIHJ1bnRpbWUvV2Vha0dDU2V0LmgKKyAgICBydW50aW1lL1dlYWtHQ1NldElubGlu
ZXMuaAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmll
cklubGluZXMuaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
Mjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MjksNiArMTcyOSw5IEBACiAJ
CUJDRDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QyMDM0ODBFMTcxMzVFMDAyQzdF
ODIgLyogRGF0ZVByb3RvdHlwZS5oICovOyB9OwogCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdFODIg
LyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRDIwM0U3MEUxNzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmx1
dC5oICovOyB9OwogCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0RFM0FCMTBFNkM4
MkNGMDAxNDUzQTcgLyogU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkNFMkZBRkIyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1Nl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFMkZB
RkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZEMjYwOTE2RkYwMDBBNTEwRiAvKiBX
ZWFrR0NTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZG
MjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBX
ZWFrR0NIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjA1MTIwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIy
RUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkRGQ0IyQkJFOTBGNDEzNDlFMUIwQkVEIC8qIEpTU291cmNl
Q29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzAz
MjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODkyLDYgKzQ4OTUsOSBAQAogCQlC
Q0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGNvZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNERTNBQjAwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0RFM0FCMTBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0
dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0UyRkFGQTI2MDkxNkVGMDAwQTUxMEYgLyogV2Vh
a0dDU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrR0NTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vha0dDSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyZ0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTAsOCArNzg5NiwxMSBAQAogCQkJCUZFNkY1NkRE
MUU2NEU5MjAwMEQxNzgwMSAvKiBWTVRyYXBzLmggKi8sCiAJCQkJRkVEOTRGMkIxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmNwcCAqLywKIAkJCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCAqLywKKwkJCQlCQ0UyRkFGRTI2MDkxNzgyMDAwQTUxMEYgLyogV2Vha0dD
SGFzaFRhYmxlLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01h
cC5oICovLAogCQkJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVz
LmggKi8sCisJCQkJQkNFMkZBRkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovLAor
CQkJCUJDRTJGQUZDMjYwOTE2RkYwMDBBNTEwRiAvKiBXZWFrR0NTZXRJbmxpbmVzLmggKi8sCiAJ
CQkJQTdDQTNBREQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgKi8s
CiAJCQkJQTdDQTNBREUxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oICov
LAogCQkJCUUzQTMyQkM1MUZDODMxMkQwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCkBA
IC05MjEzLDYgKzkyMjIsNyBAQAogCQkJCThCQzA2NDhCMUUxQUJBOTQwMEIyQjhDQSAvKiBBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCQzA2
NDhBMUUxQUJBN0IwMEIyQjhDQSAvKiBBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4QkMwNjQ5MjFFMUFEQ0M0MDBCMkI4Q0EgLyogQXN5bmNHZW5l
cmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRTJGQUZGMjYwOTE3ODIwMDBB
NTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCThCM0JGNUU0MUUz
RDM2OEIwMDc2QTg3QSAvKiBBc3luY0dlbmVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCQzA2NDk2MUUxRDg0NUMwMEIyQjhDQSAvKiBBc3luY0l0ZXJhdG9yUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5
bmNTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NzYsNiArOTY4Niw3IEBACiAJCQkJ
MTQzODZBNzUxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjM3MzA4RjFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU0REVGRjFFOEQ3NkZB
MDBBODkyQzUgLyogRGlzYWxsb3dTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZBRkIy
NjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1NERF
RkIxRThDNkQ4ODAwQTg5MkM1IC8qIERpc2FsbG93Vk1FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTMxNjE4MTMxRUM1RkUxNzAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtMTAzMzMsNiArMTAzNDQsNyBAQAogCQkJCTE0Rjc5RjcwMjE2RUFGRDIw
MDA0NkQzOSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjQ4NzJFMjE0MUQwNDgw
MEFCMEQzRSAvKiBPcGNvZGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEE0NjgwRDIx
NkZBNTZBMDAwRDJCMUEgLyogT3Bjb2RlU2l6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZB
RkQyNjA5MTZGRjAwMEE1MTBGIC8qIFdlYWtHQ1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpy
dW5FbmRQaGFzZShHQ0NvCiAgICAgICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxl
cygpOwogCiAgICAgICAgIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICBwcnVuZVN0YWxlRW50
cmllc0Zyb21XZWFrR0NNYXBzKCk7CisgICAgICAgIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtH
Q0hhc2hUYWJsZXMoKTsKICAgICAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICAgICAgc25h
cHNob3RVbnN3ZXB0KCk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMo
KTsgLy8gV2UgcmVseSBvbiB0aGVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMgcnVubmluZyBi
ZWZvcmUgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcgc2luY2UgQ29kZUJsb2NrJ3MgZmluYWxpemVy
IHJlbGllcyBvbiBxdWVyeWluZyBjdXJyZW50bHkgZXhlY3V0aW5nLgpAQCAtMjIxNywxMiArMjIx
NywxMiBAQCB2b2lkIEhlYXA6OnJlYXBXZWFrSGFuZGxlcygpCiAgICAgbV9vYmplY3RTcGFjZS5y
ZWFwV2Vha1NldHMoKTsKIH0KIAotdm9pZCBIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFr
R0NNYXBzKCkKK3ZvaWQgSGVhcDo6cHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDSGFzaFRhYmxl
cygpCiB7CiAgICAgaWYgKCFtX2NvbGxlY3Rpb25TY29wZSB8fCBtX2NvbGxlY3Rpb25TY29wZS52
YWx1ZSgpICE9IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgcmV0dXJuOwotICAgIGZv
ciAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwIDogbV93ZWFrR0NNYXBzKQotICAgICAgICB3ZWFr
R0NNYXAtPnBydW5lU3RhbGVFbnRyaWVzKCk7CisgICAgZm9yIChhdXRvKiB3ZWFrR0NIYXNoVGFi
bGUgOiBtX3dlYWtHQ0hhc2hUYWJsZXMpCisgICAgICAgIHdlYWtHQ0hhc2hUYWJsZS0+cHJ1bmVT
dGFsZUVudHJpZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCkBAIC0y
Njc0LDE0ICsyNjc0LDE0IEBAIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWYKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKLXZvaWQgSGVhcDo6cmVn
aXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjpyZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqIHdlYWtHQ0hhc2hUYWJsZSkKIHsK
LSAgICBtX3dlYWtHQ01hcHMuYWRkKHdlYWtHQ01hcCk7CisgICAgbV93ZWFrR0NIYXNoVGFibGVz
LmFkZCh3ZWFrR0NIYXNoVGFibGUpOwogfQogCi12b2lkIEhlYXA6OnVucmVnaXN0ZXJXZWFrR0NN
YXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjp1bnJlZ2lzdGVyV2Vha0dD
SGFzaFRhYmxlKFdlYWtHQ0hhc2hUYWJsZSogd2Vha0dDSGFzaFRhYmxlKQogewotICAgIG1fd2Vh
a0dDTWFwcy5yZW1vdmUod2Vha0dDTWFwKTsKKyAgICBtX3dlYWtHQ0hhc2hUYWJsZXMucmVtb3Zl
KHdlYWtHQ0hhc2hUYWJsZSk7CiB9CiAKIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVCbG9jayhzaXpl
X3QgY2FwYWNpdHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAy
NzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDcgKzg3LDcgQEAgY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBT
d2VlcGluZ1Njb3BlOwogY2xhc3MgVk07CiBjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwotY2xh
c3MgV2Vha0dDTWFwQmFzZTsKK2NsYXNzIFdlYWtHQ0hhc2hUYWJsZTsKIHN0cnVjdCBDdXJyZW50
VGhyZWFkU3RhdGU7CiAKICNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRApAQCAtMjg5LDggKzI4
OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbGVhc2VTb29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NH
TGliV3JhcHBlck9iamVjdD4mJik7CiAjZW5kaWYKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vh
a0dDTWFwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDSGFzaFRh
YmxlKFdlYWtHQ0hhc2hUYWJsZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5yZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqKTsKIAogICAgIHZvaWQgYWRkTG9n
aWNhbGx5RW1wdHlXZWFrQmxvY2soV2Vha0Jsb2NrKik7CiAKQEAgLTUyNiw3ICs1MjYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZW5kTWFya2luZygpOwogCiAgICAgdm9pZCByZWFwV2Vha0hhbmRs
ZXMoKTsKLSAgICB2b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKKyAgICB2
b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ0hhc2hUYWJsZXMoKTsKICAgICB2b2lkIHN3
ZWVwQXJyYXlCdWZmZXJzKCk7CiAgICAgdm9pZCBzbmFwc2hvdFVuc3dlcHQoKTsKICAgICB2b2lk
IGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CkBAIC02ODksNyArNjg5LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIHVuc2lnbmVkIG1fZGVmZXJyYWxEZXB0aCB7IDAgfTsKIAotICAgIEhh
c2hTZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKKyAgICBIYXNoU2V0PFdlYWtHQ0hh
c2hUYWJsZSo+IG1fd2Vha0dDSGFzaFRhYmxlczsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjc1
MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCwzICs1NCw0IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgi
CisjaW5jbHVkZSAiV2Vha0dDU2V0SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KIAogICAgIEpTQ3VzdG9tR2V0dGVy
RnVuY3Rpb24qIGN1c3RvbUdldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyRnVu
Y3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmdldHRlcigpOworICAgIGF1dG8gZ2V0dGVyID0gY3VzdG9tR2V0dGVy
RnVuY3Rpb24tPmdldHRlcigpOwogCiAgICAgaWYgKGF1dG8gZG9tQXR0cmlidXRlID0gY3VzdG9t
R2V0dGVyRnVuY3Rpb24tPmRvbUF0dHJpYnV0ZSgpKSB7CiAgICAgICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpCkBAIC01MCw3ICs1MCw3IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGdldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlz
VmFsdWUpLCBjdXN0b21HZXR0ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpKTsKIH0KIAotSlND
dXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgR2V0
VmFsdWVGdW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0
cmlidXRlKQorSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3Bl
cnR5TmFtZSwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmli
dXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3Byb3BlcnR5TmFtZShJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQpAQCAtNTgsNyArNTgsNyBAQCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRl
ckZ1CiB7CiB9CiAKLUpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2V0dGVyRnVuY3Rp
b246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFBy
b3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0dGVyLCBPcHRpb25hbDxE
T01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCitKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgQ3VzdG9t
RnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlKQogewogICAgIEFTU0VSVChnZXR0ZXIpOwogICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY3VzdG9tR2V0dGVyRnVuY3Rpb25D
YWxsLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgU3RyaW5nKHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3Vz
dG9tR2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Z1bmN0
aW9uIEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCisgICAgdXNpbmcgQ3VzdG9tRnVuY3Rpb25Qb2ludGVy
ID0gR2V0VmFsdWVGdW5jOworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKQEAgLTQ5
LDE5ICs1MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyLCBPcHRpb25hbDxET01BdHRy
aWJ1dGVBbm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eU5hbWU7IH0KLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nZXR0ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZ2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0
b21GdW5jdGlvblBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlcjsgfTsKICAgICBPcHRp
b25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVy
biBtX2RvbUF0dHJpYnV0ZTsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1c3RvbUdldHRlckZ1bmN0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
Y29uc3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPik7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFByb3BlcnR5TmFtZSYs
IEN1c3RvbUZ1bmN0aW9uUG9pbnRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4p
OwogCiAgICAgSWRlbnRpZmllciBtX3Byb3BlcnR5TmFtZTsKLSAgICBHZXRWYWx1ZUZ1bmMgbV9n
ZXR0ZXI7CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIG1fZ2V0dGVyOwogICAgIE9wdGlvbmFs
PERPTUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
OSArMzYsMTkgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3VzdG9tUwogSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGN1c3RvbVNldHRlckZ1bmN0aW9uQ2FsbCwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBhdXRv
IGN1c3RvbVNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qPihj
YWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwotICAgIFB1dFZhbHVlRnVuYyBzZXR0ZXIgPSBjdXN0b21T
ZXR0ZXJGdW5jdGlvbi0+c2V0dGVyKCk7CisgICAgYXV0byBzZXR0ZXIgPSBjdXN0b21TZXR0ZXJG
dW5jdGlvbi0+c2V0dGVyKCk7CiAgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5j
b2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSksIGN1c3RvbVNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotSlNDdXN0b21TZXR0
ZXJGdW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5j
IHNldHRlcikKK0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24o
Vk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9w
ZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiAgICAgOiBCYXNlKHZtLCBl
eGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fcHJvcGVydHlOYW1l
KElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpCiAgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCiB7CiB9CiAKLUpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tU2V0
dGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMgc2V0dGVyKQor
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBw
cm9wZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiB7CiAgICAgQVNTRVJU
KHNldHRlcik7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RG
dW5jdGlvbihjdXN0b21TZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rp
b24uaAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKKyAg
ICB1c2luZyBDdXN0b21GdW5jdGlvblBvaW50ZXIgPSBQdXRWYWx1ZUZ1bmM7CisKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIApAQCAtNDksMTggKzUxLDE5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiog
Y3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUmLCBQdXRWYWx1
ZUZ1bmMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0
aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEN1
c3RvbUZ1bmN0aW9uUG9pbnRlcik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eU5hbWU7IH0KLSAgICBQdXRWYWx1ZUZ1bmMgc2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0
ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIHNldHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0b21GdW5jdGlvblBv
aW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlcjsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1
c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgUHV0VmFsdWVGdW5jKTsKKyAgICBK
U0N1c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2lu
dGVyKTsKIAogICAgIElkZW50aWZpZXIgbV9wcm9wZXJ0eU5hbWU7Ci0gICAgUHV0VmFsdWVGdW5j
IG1fc2V0dGVyOworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBtX3NldHRlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDcsOCArNTA3LDggQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgUwog
ICAgICwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQogICAgICwgbV9y
dW50aW1lRmxhZ3MoKQogICAgICwgbV9zdGFja1RyYWNlTGltaXQoT3B0aW9uczo6ZGVmYXVsdEVy
cm9yU3RhY2tUcmFjZUxpbWl0KCkpCi0gICAgLCBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwKHZt
KQotICAgICwgbV9jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCh2bSkKKyAgICAsIG1fY3VzdG9tR2V0
dGVyRnVuY3Rpb25TZXQodm0pCisgICAgLCBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU2V0KHZtKQog
ICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKICNpbmNs
dWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJMYXp5
UHJvcGVydHkuaCIKICNpbmNsdWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJM
YXp5UHJvcGVydHkuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJQ
YXJzZXJNb2Rlcy5oIgogI2luY2x1ZGUgIlJlZ0V4cEdsb2JhbERhdGEuaCIKQEAgLTQ1LDYgKzQ1
LDcgQEAKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJXZWFrR0NTZXQuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgpAQCAtNTQ2LDggKzU0Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFwUHJv
dG90eXBlU2V0RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKICAgICBib29sIGlzU2V0UHJvdG90eXBl
QWRkRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIAotICAgIFdlYWtHQ01hcDxHZXRWYWx1ZUZ1bmMs
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+JiBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCgpIHsgcmV0
dXJuIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25NYXA7IH0KLSAgICBXZWFrR0NNYXA8UHV0VmFsdWVG
dW5jLCBKU0N1c3RvbVNldHRlckZ1bmN0aW9uPiYgY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAoKSB7
IHJldHVybiBtX2N1c3RvbVNldHRlckZ1bmN0aW9uTWFwOyB9CiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICB1c2luZyBSZWZlcmVuY2VkR2xvYmFsUHJvcGVydHlXYXRjaHBvaW50U2V0cyA9IEhh
c2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgUmVmPFdhdGNocG9pbnRTZXQ+LCBJZGVu
dGlmaWVyUmVwSGFzaD47CkBAIC01NjMsOCArNTYyLDIxIEBAIHB1YmxpYzoKICAgICBSdW50aW1l
RmxhZ3MgbV9ydW50aW1lRmxhZ3M7CiAgICAgQ29uc29sZUNsaWVudCogbV9jb25zb2xlQ2xpZW50
IHsgbnVsbHB0ciB9OwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YWNrVHJhY2VMaW1pdDsK
LSAgICBXZWFrR0NNYXA8R2V0VmFsdWVGdW5jLCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uPiBtX2N1
c3RvbUdldHRlckZ1bmN0aW9uTWFwOwotICAgIFdlYWtHQ01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3Vz
dG9tU2V0dGVyRnVuY3Rpb24+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXA7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNo
IHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2VhazxUPiYpOworICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPFQ+JiwgY29uc3QgV2VhazxUPiYpOworICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eU5hbWUmLCB0eXBlbmFtZSBU
OjpDdXN0b21GdW5jdGlvblBvaW50ZXIpOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBX
ZWFrR0NTZXQ8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9yU2V0dGVy
SGFzaDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblNldDsK
KyAgICBXZWFrR0NTZXQ8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9y
U2V0dGVySGFzaDxKU0N1c3RvbVNldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21TZXR0ZXJGdW5jdGlv
blNldDsKKworICAgIFdlYWtHQ1NldDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uLCBXZWFrQ3VzdG9t
R2V0dGVyT3JTZXR0ZXJIYXNoPEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+PiYgY3VzdG9tR2V0dGVy
RnVuY3Rpb25TZXQoKSB7IHJldHVybiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uU2V0OyB9CisgICAg
V2Vha0dDU2V0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24sIFdlYWtDdXN0b21HZXR0ZXJPclNldHRl
ckhhc2g8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj4+JiBjdXN0b21TZXR0ZXJGdW5jdGlvblNldCgp
IHsgcmV0dXJuIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TZXQ7IH0KIAogI2lmIEFTU0VSVF9FTkFC
TEVECiAgICAgY29uc3QgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVu
dHJ5IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3NTEyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0N1c3RvbUdldHRl
ckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMaW5rVGltZUNvbnN0YW50LmgiCiAjaW5jbHVk
ZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC0xMjQsNCArMTI2LDI5IEBAIEFMV0FZU19JTkxJTkUg
Vk0mIGdldFZNKEpTR2xvYmFsT2JqZWN0KiAKICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT52bSgp
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHVuc2lnbmVkIEpTR2xvYmFsT2Jq
ZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjpoYXNoKGNvbnN0IFdlYWs8VD4m
IHZhbHVlKQoreworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBoYXNoKHZhbHVlLT5wcm9wZXJ0eU5hbWUoKSwgdmFsdWUtPmN1c3RvbUZ1bmN0aW9uUG9pbnRl
cigpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIEpTR2xvYmFsT2Jq
ZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjplcXVhbChjb25zdCBXZWFrPFQ+
JiBhLCBjb25zdCBXZWFrPFQ+JiBiKQoreworICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBhID09IGI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitpbmxpbmUgdW5zaWduZWQgSlNHbG9iYWxPYmplY3Q6OldlYWtDdXN0b21HZXR0ZXJPclNldHRl
ckhhc2g8VD46Omhhc2goY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUsIHR5cGVuYW1l
IFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlciBmdW5jdGlvblBvaW50ZXIpCit7CisgICAgdW5zaWdu
ZWQgaGFzaCA9IERlZmF1bHRIYXNoPHR5cGVuYW1lIFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlcj46
Omhhc2goZnVuY3Rpb25Qb2ludGVyKTsKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc051bGwoKSkK
KyAgICAgICAgaGFzaCA9IFdURjo6cGFpckludEhhc2goaGFzaCwgcHJvcGVydHlOYW1lLnVpZCgp
LT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCShyZXZpc2lvbiAyNzUxMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MjEsMjIgKzM1MjEsNDUgQEAg
QnV0dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaQogICAgIHJldHVybiBCdXR0
ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShidXR0ZXJmbHkoKSwgdm0sIHRoaXMs
IHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorc3RydWN0IFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yIHsKKyAg
ICB1c2luZyBCYXNlSGFzaCA9IEpTR2xvYmFsT2JqZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0
ZXJIYXNoPFQ+OworCisgICAgdXNpbmcgS2V5ID0gc3RkOjp0dXBsZTxQcm9wZXJ0eU5hbWUsIHR5
cGVuYW1lIFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlcj47CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBLZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlSGFzaDo6aGFz
aChzdGQ6OmdldDwwPihrZXkpLCBzdGQ6OmdldDwxPihrZXkpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPFQ+JiBhLCBjb25zdCBLZXkmIGIpCisgICAgeworICAg
ICAgICBpZiAoIWEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBh
LT5wcm9wZXJ0eU5hbWUoKSA9PSBzdGQ6OmdldDwwPihiKSAmJiBhLT5jdXN0b21GdW5jdGlvblBv
aW50ZXIoKSA9PSBzdGQ6OmdldDwxPihiKTsKKyAgICB9Cit9OworCiBzdGF0aWMgSlNDdXN0b21H
ZXR0ZXJGdW5jdGlvbiogY3JlYXRlQ3VzdG9tR2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBHZXRWYWx1
ZUZ1bmMgZ2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21B
dHRyaWJ1dGUpCiB7Ci0gICAgLy8gV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVz
dCBub3QgaW52b2tlIEdDIHNpbmNlIEdDIGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRk
bGUgb2YgSGFzaE1hcDo6ZW5zdXJlLgotICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5v
dCB0byBpbnZva2UgR0Mgd2hlbiBleGVjdXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQg
KDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAgSGFzaE1hcCB0d2ljZS4KKyAgICB1c2luZyBUcmFuc2xh
dG9yID0gV2Vha0N1c3RvbUdldHRlck9yU2V0dGVySGFzaFRyYW5zbGF0b3I8SlNDdXN0b21HZXR0
ZXJGdW5jdGlvbj47CisKKyAgICAvLyBXZWFrR0NTZXQ6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBt
dXN0IG5vdCBpbnZva2UgR0Mgc2luY2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NTZXQgaW4gdGhlIG1p
ZGRsZSBvZiBIYXNoU2V0OjplbnN1cmUuCisgICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkg
bm90IHRvIGludm9rZSBHQyB3aGVuIGV4ZWN1dGluZyBXZWFrR0NTZXQ6OmVuc3VyZVZhbHVlIGFu
ZCAoMikgdG8gYXZvaWQgbG9va2luZyB1cCBIYXNoU2V0IHR3aWNlLgogICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5jdXN0b21HZXR0ZXJGdW5j
dGlvbk1hcCgpLmVuc3VyZVZhbHVlKGdldFZhbHVlRnVuYywgWyZdIHsKKyAgICByZXR1cm4gZ2xv
YmFsT2JqZWN0LT5jdXN0b21HZXR0ZXJGdW5jdGlvblNldCgpLmVuc3VyZVZhbHVlPFRyYW5zbGF0
b3I+KHN0ZDo6bWFrZV90dXBsZShwcm9wZXJ0eU5hbWUsIGdldFZhbHVlRnVuYyksIFsmXSB7CiAg
ICAgICAgIHJldHVybiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lLCBnZXRWYWx1ZUZ1bmMsIGRvbUF0dHJpYnV0ZSk7CiAgICAgfSk7
CiB9CiAKIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKiBjcmVhdGVDdXN0b21TZXR0ZXJG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFB1dFZhbHVlRnVuYyBwdXRWYWx1ZUZ1bmMpCiB7Ci0gICAgLy8gV2Vh
a0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDIHNpbmNlIEdD
IGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6ZW5zdXJlLgot
ICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mgd2hlbiBleGVj
dXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAg
SGFzaE1hcCB0d2ljZS4KKyAgICB1c2luZyBUcmFuc2xhdG9yID0gV2Vha0N1c3RvbUdldHRlck9y
U2V0dGVySGFzaFRyYW5zbGF0b3I8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj47CisKKyAgICAvLyBX
ZWFrR0NTZXQ6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mgc2luY2Ug
R0MgY2FuIG1vZGlmeSBXZWFrR0NTZXQgaW4gdGhlIG1pZGRsZSBvZiBIYXNoU2V0OjplbnN1cmUu
CisgICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGludm9rZSBHQyB3aGVuIGV4
ZWN1dGluZyBXZWFrR0NTZXQ6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8gYXZvaWQgbG9va2luZyB1
cCBIYXNoU2V0IHR3aWNlLgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICByZXR1
cm4gZ2xvYmFsT2JqZWN0LT5jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCgpLmVuc3VyZVZhbHVlKHB1
dFZhbHVlRnVuYywgWyZdIHsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5jdXN0b21TZXR0ZXJG
dW5jdGlvblNldCgpLmVuc3VyZVZhbHVlPFRyYW5zbGF0b3I+KHN0ZDo6bWFrZV90dXBsZShwcm9w
ZXJ0eU5hbWUsIHB1dFZhbHVlRnVuYyksIFsmXSB7CiAgICAgICAgIHJldHVybiBKU0N1c3RvbVNl
dHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBwdXRW
YWx1ZUZ1bmMpOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha0dDSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha0dDSGFzaFRhYmxlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgV2Vha0dDSGFzaFRhYmxlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWFrR0NI
YXNoVGFibGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSA9IDA7
Cit9OworCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAu
aAkocmV2aXNpb24gMjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a0dDTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIxICsyNywxNSBAQAogCiAjaW5jbHVkZSAi
RGVmZXJHQy5oIgogI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNsdWRlICJXZWFrR0NIYXNoVGFibGUu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogLy8gQSBI
YXNoTWFwIHdpdGggV2VhazxKU0NlbGw+IHZhbHVlcywgd2hpY2ggYXV0b21hdGljYWxseSByZW1v
dmVzIHZhbHVlcyBvbmNlIHRoZXkncmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAKLWNsYXNzIFdlYWtH
Q01hcEJhc2UgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYWtHQ01hcEJhc2UoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSA9IDA7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVm
YXVsdEhhc2g8S2V5QXJnPiwKLSAgICB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRz
PEtleUFyZz4+Ci1jbGFzcyBXZWFrR0NNYXAgZmluYWwgOiBwdWJsaWMgV2Vha0dDTWFwQmFzZSB7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBI
YXNoQXJnID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFz
aFRyYWl0czxLZXlBcmc+PgorY2xhc3MgV2Vha0dDTWFwIGZpbmFsIDogcHVibGljIFdlYWtHQ0hh
c2hUYWJsZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgdHlwZWRlZiBXZWFr
PFZhbHVlQXJnPiBWYWx1ZVR5cGU7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgVmFsdWVU
eXBlLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hNYXBUeXBlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcElubGluZXMuaAkocmV2aXNpb24g
Mjc1MTIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJnLCB0eXBlbmFtZSBWYWx1ZQogaW5saW5lIFdlYWtHQ01hcDxLZXlBcmcsIFZhbHVlQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmc+OjpXZWFrR0NNYXAoVk0mIHZtKQogICAgIDogbV92bSh2
bSkKIHsKLSAgICB2bS5oZWFwLnJlZ2lzdGVyV2Vha0dDTWFwKHRoaXMpOworICAgIHZtLmhlYXAu
cmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUodGhpcyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRy
YWl0c0FyZz4KIGlubGluZSBXZWFrR0NNYXA8S2V5QXJnLCBWYWx1ZUFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnPjo6fldlYWtHQ01hcCgpCiB7Ci0gICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFr
R0NNYXAodGhpcyk7CisgICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUodGhp
cyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5
cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYWsuaCIK
KyNpbmNsdWRlICJXZWFrR0NIYXNoVGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gQSBIYXNoU2V0IHdpdGggV2VhazxKU0NlbGw+IHZhbHVl
cywgd2hpY2ggYXV0b21hdGljYWxseSByZW1vdmVzIHZhbHVlcyBvbmNlIHRoZXkncmUgZ2FyYmFn
ZSBjb2xsZWN0ZWQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBXZWFrR0NTZXRIYXNo
VHJhaXRzIDogSGFzaFRyYWl0czxXZWFrPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGhhc0lzUmVsZWFzZWRXZWFrVmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGJvb2wg
aXNSZWxlYXNlZFdlYWtWYWx1ZShjb25zdCBXZWFrPFQ+JiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiAhdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSAmJiAhdmFsdWUuaXNIYXNo
VGFibGVFbXB0eVZhbHVlKCkgJiYgIXZhbHVlOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8V2VhazxWYWx1ZUFy
Zz4+LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBXZWFrR0NTZXRIYXNoVHJhaXRzPFZhbHVlQXJnPj4K
K2NsYXNzIFdlYWtHQ1NldCBmaW5hbCA6IHB1YmxpYyBXZWFrR0NIYXNoVGFibGUgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IFdlYWs8VmFsdWVB
cmc+OworICAgIHVzaW5nIEhhc2hTZXRUeXBlID0gSGFzaFNldDxWYWx1ZVR5cGUsIEhhc2hBcmcs
IFRyYWl0c0FyZz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBBZGRSZXN1bHQgPSB0eXBlbmFtZSBI
YXNoU2V0VHlwZTo6QWRkUmVzdWx0OworICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgSGFz
aFNldFR5cGU6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gdHlwZW5hbWUg
SGFzaFNldFR5cGU6OmNvbnN0X2l0ZXJhdG9yOworCisgICAgZXhwbGljaXQgV2Vha0dDU2V0KFZN
Jik7CisgICAgfldlYWtHQ1NldCgpIGZpbmFsOworCisgICAgdm9pZCBjbGVhcigpCisgICAgewor
ICAgICAgICBtX3NldC5jbGVhcigpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhh
c2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIFZhbHVlQXJn
KiBlbnN1cmVWYWx1ZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IC8vIElmIGZ1bmN0b3IgaW52b2tlcyBHQywgR0MgY2FuIHBydW5lIFdlYWtHQ1NldCwgYW5kIG1h
bmlwdWxhdGUgSGFzaFNldCB3aGlsZSB3ZSBhcmUgdG91Y2hpbmcgaXQgaW4gdGhlIGVuc3VyZSBm
dW5jdGlvbi4KKyAgICAgICAgLy8gVGhlIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDLgorICAg
ICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgIAorICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fc2V0LnRlbXBsYXRlIGVuc3VyZTxIYXNoVHJhbnNsYXRvcj4oc3RkOjpmb3J3YXJkPFQ+
KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPmdldCgpOworICAgIH0KKworICAgIGlubGluZSBpdGVyYXRvciBmaW5k
KGNvbnN0IFZhbHVlVHlwZSYga2V5KTsKKyAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IgZmluZChj
b25zdCBWYWx1ZVR5cGUmIGtleSkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgY29udGFpbnMoY29u
c3QgVmFsdWVUeXBlJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcnVuZVN0YWxlRW50
cmllcygpIGZpbmFsOworCisgICAgSGFzaFNldFR5cGUgbV9zZXQ7CisgICAgVk0mIG1fdm07Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtHQ1NldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrR0NTZXRJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkhl
YXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2Vha0dDU2V0LmgiCisjaW5jbHVkZSAiV2Vha0lubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0
eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+CitpbmxpbmUgV2Vha0dDU2V0PFZh
bHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+OjpXZWFrR0NTZXQoVk0mIHZtKQorICAgIDogbV92
bSh2bSkKK3sKKyAgICB2bS5oZWFwLnJlZ2lzdGVyV2Vha0dDSGFzaFRhYmxlKHRoaXMpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUg
VHJhaXRzQXJnPgoraW5saW5lIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJn
Pjo6fldlYWtHQ1NldCgpCit7CisgICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFi
bGUodGhpcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+CitpbmxpbmUgdHlwZW5hbWUgV2Vha0dDU2V0PFZhbHVl
QXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+OjppdGVyYXRvciBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhh
c2hBcmcsIFRyYWl0c0FyZz46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3sKKyAgICBp
dGVyYXRvciBpdCA9IG1fc2V0LmZpbmQodmFsdWUpOworICAgIGl0ZXJhdG9yIGVuZCA9IG1fc2V0
LmVuZCgpOworICAgIGlmIChpdCAhPSBlbmQgJiYgISppdCkgLy8gRm91bmQgYSB6b21iaWUgdmFs
dWUuCisgICAgICAgIHJldHVybiBlbmQ7CisgICAgcmV0dXJuIGl0OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgor
aW5saW5lIHR5cGVuYW1lIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6
Y29uc3RfaXRlcmF0b3IgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+Ojpm
aW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8V2Vha0dDU2V0Kj4odGhpcyktPmZpbmQodmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgoraW5saW5l
IGJvb2wgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+Ojpjb250YWlucyhj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBmaW5kKHZhbHVlKSAh
PSBtX3NldC5lbmQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK05FVkVSX0lOTElORSB2b2lkIFdlYWtHQ1Nl
dDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6cHJ1bmVTdGFsZUVudHJpZXMoKQorewor
ICAgIG1fc2V0LnJlbW92ZUlmKFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiAhZW50
cnk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
NTEyMykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDEgQEAKKzIwMjEtMDMtMjcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAg
ICAgIEpTR2xvYmFsT2JqZWN0J3MgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCBhbmQgbV9jdXN0
b21TZXR0ZXJGdW5jdGlvbk1hcCBzaG91bGQgYmUgc2V0cywgbm90IG1hcHMsIGFuZCBzaG91bGQg
dXNlIGJvdGggdGhlIGlkZW50aWZpZXIgYW5kIGZ1bmN0aW9uIHBvaW50ZXIgYXMgdGhlIGtleQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzNjEzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIGhl
dGVyb2dlbm91cyBIYXNoU2V0OjplbnN1cmUsIHdoaWNoIGFsbG93cyBsYXp5IGNvbnN0cnVjdGlv
biBvZiB0aGUgdmFsdWUgdG8KKyAgICAgICAgaW5zZXJ0IGludG8gdGhlIEhhc2hTZXQgb25seSBp
ZiB0aGUgaGV0ZXJvZ2Vub3VzIGtleSAoZS5nLiBhIGtleSArIEhhc2hUcmFuc2xhdG9yCisgICAg
ICAgIHRoYXQgYXJlIG5vdCB0aGUgc2FtZSBhcyB0aGUgSGFzaFNldCdzIFZhbHVlVHlwZSkgZG9l
cyBub3QgbWF0Y2ggYW55IGl0ZW0gaW4gdGhlCisgICAgICAgIHNldC4gRm9yIGV4YW1wbGUgZ2l2
ZW4gYSBzZXQgb2YgRXhwZW5zaXZlVG9Db25zdHJ1Y3QsIGJ1dCB1bmlxdWVseSBpZGVudGlmaWFi
bGUKKyAgICAgICAgYnkgQ2hlYXBUb0NvbnN0cnVjdDoKKyAgICAgICAgCisgICAgICAgICAgICBI
YXNoU2V0PEV4cGVuc2l2ZVRvQ29uc3RydWN0PiBoYXNoU2V0OworICAgICAgICAgICAgLi4uCisg
ICAgICAgICAgICBzdHJ1Y3QgVHJhbnNsYXRvciB7CisgICAgICAgICAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ2hlYXBUb0NvbnN0cnVjdCYga2V5KQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEV4cGVuc2l2ZVRv
Q29uc3RydWN0JiBhLCBjb25zdCBDaGVhcFRvQ29uc3RydWN0JiBiKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXNoU2V0LmVuc3Vy
ZTxUcmFuc2xhdG9yPihDaGVhcFRvQ29uc3RydWN0IHsgLi4uIH0sIFtdIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRXhwZW5zaXZlVG9Db25zdHJ1Y3QgeyAuLi4gfTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgIFRoaXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBjdXN0b20gZ2V0dGVyL3NldHRl
ciBzZXRzIHRvIGF2b2lkIGNvbnN0cnVjdGluZyB0aGUgR0Mgb2JqZWN0cworICAgICAgICB1bmxl
c3MgdGhleSBhcmUgcmVhbGx5IG5lZWRlZC4KKworICAgICAgICBBbHNvIHRvb2sgdGhlIG9wZXJ0
dW5pdHkgdG8gcmVwbGFjZSBzb21lIHR5cGVkZWZzIHdpdGggdXNpbmdzLCBhbmQgZml4ZWQgc29t
ZSBjb21tZW50cy4KKworICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6OlRy
YWl0cz46OmVuc3VyZSk6CisKIDIwMjEtMDMtMjYgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIFBVSUNRdWlja2JvYXJkQ29udHJvbGxlciBmb3Ig
dGV4dCBpbnB1dCB3aGVuIEhBVkUoUVVJQ0tCT0FSRF9DT05UUk9MTEVSKSBpcyBkZWZpbmVkCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvSGFzaFNldC5oCShyZXZpc2lvbiAyNzUxMjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDM2ICszMywzMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZUFyZywgdHlwZW5hbWUgSGFzCiBjbGFzcyBIYXNoU2V0IGZpbmFsIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoQXJnIEhhc2hGdW5j
dGlvbnM7Ci0gICAgdHlwZWRlZiBUcmFpdHNBcmcgVmFsdWVUcmFpdHM7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBWYWx1ZVRyYWl0czo6VGFrZVR5cGUgVGFrZVR5cGU7CisgICAgdXNpbmcgSGFzaEZ1
bmN0aW9ucyA9IEhhc2hBcmc7CisgICAgdXNpbmcgVmFsdWVUcmFpdHMgPSBUcmFpdHNBcmc7Cisg
ICAgdXNpbmcgVGFrZVR5cGUgPSB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VGFrZVR5cGU7CiAKIHB1
YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGUgVmFsdWVU
eXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5
cGU7CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoVGFibGU8VmFsdWVUeXBlLCBWYWx1ZVR5
cGUsIElkZW50aXR5RXh0cmFjdG9yLAotICAgICAgICBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0
cywgVmFsdWVUcmFpdHM+IEhhc2hUYWJsZVR5cGU7CisgICAgdXNpbmcgSGFzaFRhYmxlVHlwZSA9
IEhhc2hUYWJsZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1ZVRyYWl0cz47CiAKIHB1YmxpYzoKLSAgICAvKgot
ICAgICAqIFNpbmNlIGZpZ3VyaW5nIG91dCB0aGUgZW50cmllcyBvZiBhbiBpdGVyYXRvciBpcyBj
b25mdXNpbmcsIGhlcmUgaXMgYSBjaGVhdCBzaGVldDoKLSAgICAgKiBjb25zdCBLZXlUeXBlJiBr
ZXkgPSBpdGVyYXRvci0+a2V5OwotICAgICAqLwotICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJ
dGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgVmFsdWVUeXBlPiBpdGVyYXRvcjsKLSAgICB0
eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVl
VHlwZT4gY29uc3RfaXRlcmF0b3I7Ci0KLSAgICAvKgotICAgICAqIFNpbmNlIGZpZ3VyaW5nIG91
dCB0aGUgZW50cmllcyBvZiBhbiBBZGRSZXN1bHQgaXMgY29uZnVzaW5nLCBoZXJlIGlzIGEgY2hl
YXQgc2hlZXQ6Ci0gICAgICogaXRlcmF0b3IgaXRlciA9IGFkZFJlc3VsdC5pdGVyYXRvcjsKLSAg
ICAgKiBib29sIGlzTmV3RW50cnkgPSBhZGRSZXN1bHQuaXNOZXdFbnRyeTsKLSAgICAgKi8KLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hUYWJsZVR5cGU6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7Ci0K
LSAgICBIYXNoU2V0KCkKLSAgICB7Ci0gICAgfQorICAgIC8vIEhhc2hTZXQgaXRlcmF0b3JzIGhh
dmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisgICAgLy8gICAgICBjb25zdCBWYWx1ZVR5cGUq
IGdldCgpIGNvbnN0OworICAgIC8vICAgICAgY29uc3QgVmFsdWVUeXBlJiBvcGVyYXRvciooKSBj
b25zdDsKKyAgICAvLyAgICAgIGNvbnN0IFZhbHVlVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0Owor
ICAgIHVzaW5nIGl0ZXJhdG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRh
YmxlVHlwZSwgVmFsdWVUeXBlPjsKKyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT47CisKKyAgICAv
LyBIYXNoU2V0IEFkZFJlc3VsdHMgaGF2ZSB0aGUgZm9sbG93aW5nIGZpZWxkczoKKyAgICAvLyAg
ICAgIEl0ZXJhdG9yVHlwZSBpdGVyYXRvcjsKKyAgICAvLyAgICAgIGJvb2wgaXNOZXdFbnRyeTsK
KyAgICB1c2luZyBBZGRSZXN1bHQgPSB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpBZGRSZXN1bHQ7
CiAKKyAgICBIYXNoU2V0KCkgPSBkZWZhdWx0OwogICAgIEhhc2hTZXQoc3RkOjppbml0aWFsaXpl
cl9saXN0PFZhbHVlQXJnPiBpbml0aWFsaXplckxpc3QpCiAgICAgewogICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHZhbHVlIDogaW5pdGlhbGl6ZXJMaXN0KQpAQCAtOTMsNiArODcsNyBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0
ZXJhdG9yIGZpbmQoY29uc3QgVCYpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBib29sIGNvbnRhaW5zKGNvbnN0IFQmKSBjb25zdDsKIAor
CiAgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpbmNsdWRlcyBib3RoIGFuIGl0ZXJhdG9yIHRvIHRo
ZSBhZGRlZCB2YWx1ZSdzIGxvY2F0aW9uLAogICAgIC8vIGFuZCBhbiBpc05ld0VudHJ5IGJvb2wg
dGhhdCBpbmRpY2F0ZXMgaWYgaXQgaXMgYSBuZXcgb3IgZXhpc3RpbmcgZW50cnkgaW4gdGhlIHNl
dC4KICAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYpOwpAQCAtMTEwLDYgKzEwNSwx
NiBAQCBwdWJsaWM6CiAgICAgLy8gICBzdGF0aWMgdHJhbnNsYXRlKFZhbHVlVHlwZSYsIGNvbnN0
IFQmLCB1bnNpZ25lZCBoYXNoQ29kZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYpOwogICAgIAorICAgIC8v
IEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIHRyYW5zbGF0ZWQgYWRkKCksIGVuc3VyZSgpIHdpbGwg
c3RpbGwgZG8gdHJhbnNsYXRpb24KKyAgICAvLyBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcgd2l0
aCBzb21lIG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUKKyAgICAvLyBjb252
ZXJzaW9uIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgdGFibGUsIGJ1dCByYXRoZXIg
dGhhbiBhIHN0YXRpYworICAgIC8vIHRyYW5zbGF0ZSgpIGZ1bmN0aW9uLCB1c2VzIHRoZSBwYXNz
ZWQgaW4gZnVuY3RvciB0byBwZXJmb3JtIGxhenkgY3JlYXRpb24gb2YKKyAgICAvLyB0aGUgdmFs
dWUgb25seSBpZiBpdCBpcyBub3QgYWxyZWFkeSB0aGVyZS4gSGFzaFRyYW5zbGF0b3IgbXVzdCBo
YXZlIHRoZSBmb2xsb3dpbmcKKyAgICAvLyBmdW5jdGlvbiBtZW1iZXJzOgorICAgIC8vICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYpOworICAgIC8vICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgVmFsdWVUeXBlJiwgY29uc3QgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPiBBZGRSZXN1bHQgZW5zdXJl
KFQmJiwgRnVuY3RvciYmKTsKKwogICAgIC8vIEF0dGVtcHRzIHRvIGFkZCBhIGxpc3Qgb2YgdGhp
bmdzIHRvIHRoZSBzZXQuIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YKICAgICAvLyB0aGVtIGFyZSBu
ZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CkBAIC0xNzEsNiArMTc2LDE2IEBAIHN0
cnVjdCBIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXIgewogICAgIH0KIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHJhaXRzLCB0eXBlbmFtZSBUcmFuc2xhdG9yPgorc3RydWN0IEhhc2hTZXRF
bnN1cmVUcmFuc2xhdG9yQWRhcHRvciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgVCYga2V5KSB7IHJldHVybiBUcmFuc2xhdG9yOjpoYXNoKGtl
eSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChh
LCBiKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1
bmN0b3I+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlvbiwgVSYmLCBGdW5jdG9yJiYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0VtcHR5KGxvY2F0
aW9uLCBmdW5jdG9yKCkpOworICAgIH0KK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+CiBpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+Ojpzd2FwKEhh
c2hTZXQmIG90aGVyKQogewpAQCAtMjMzLDYgKzI0OCwxMyBAQCBpbmxpbmUgYm9vbCBIYXNoU2V0
PFZhbHVlLCBIYXNoRnVuY3Rpb25zCiAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWlu
czxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5zbGF0b3I+Pih2YWx1ZSk7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwg
dHlwZW5hbWUgRnVuY3Rvcj4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cz46OmVuc3VyZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikgLT4gQWRkUmVz
dWx0Cit7CisgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8SGFzaFNldEVuc3VyZVRyYW5z
bGF0b3JBZGFwdG9yPFRyYWl0cywgSGFzaFRyYW5zbGF0b3I+PihzdGQ6OmZvcndhcmQ8VD4oa2V5
KSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwg
Vj46OmFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSAtPiBBZGRSZXN1bHQKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424690</attachid>
            <date>2021-03-30 13:56:26 -0700</date>
            <delta_ts>2021-03-30 14:20:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223613-20210330135625.patch</filename>
            <type>text/plain</type>
            <size>48352</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMS0wMy0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QncyBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwIGFuZCBtX2N1c3RvbVNl
dHRlckZ1bmN0aW9uTWFwIHNob3VsZCBiZSBzZXRzLCBub3QgbWFwcywgYW5kIHNob3VsZCB1c2Ug
Ym90aCB0aGUgaWRlbnRpZmllciBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcyB0aGUga2V5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM2MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICAtIEFkZHMgYSBnZW5lcmlj
IFdlYWtHQ1NldCBjbGFzcyB0byBnbyB3aXRoIHRoZSBleGlzdGluZyBXZWFrR0NNYXAuCisgICAg
ICAgIC0gUmVuYW1lcyBXZWFrR0NNYXBCYXNlIHRvIFdlYWtHQ0hhc2hUYWJsZSwgbW92ZXMgaXQg
dG8gaXRzIG93biBmaWxlCisgICAgICAgICAgYW5kIG5vdyB1c2VzIGl0IGFzIHRoZSBiYXNlIGNs
YXNzIG9mIGJvdGggV2Vha0dDU2V0IGFuZCBXZWFrR0NNYXAuCisgICAgICAgIC0gUmVwbGFjZXMg
SlNHbG9iYWxPYmplY3QncyBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9jdXN0b21TZXR0ZXJGdW5j
dGlvbk1hcAorICAgICAgICAgIHdpdGggY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvY3VzdG9tU2V0
dGVyRnVuY3Rpb25TZXQsIHVzaW5nIHRoZSBuZXcKKyAgICAgICAgICBXZWFrR0NTZXQsIGFuZCB1
cGRhdGVzIHRoZW0gdG8gdXNlIGJvdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIAorICAgICAg
ICAgIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBrZXksIHJhdGhlciB0aGFuIGp1c3QgdGhlIGZ1bmN0
aW9uIHBvaW50ZXIgd2hpY2gKKyAgICAgICAgICBpcyB3aGF0IHRoZSBwcmV2aW91cyBjb2RlIGRp
ZC4gVGhpcyBhbGxvd3MgbXVsdGlwbGUgY3VzdG9tIGZ1bmN0aW9ucworICAgICAgICAgIHRvIHVz
ZSB0aGUgc2FtZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHBvaW50ZXIgYXMgbG9uZyBhcyB0aGV5IGhh
dmUgZGlzdGluY3QKKyAgICAgICAgICBwcm9wZXJ0eSBuYW1lcywgd2hpY2ggaXMgZ29pbmcgdG8g
YmUgdXNlZCB0byBvcHRpbWl6ZSB0aGUgYmluZGluZ3MgZm9yCisgICAgICAgICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgZmls
ZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5F
bmRQaGFzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtH
Q0hhc2hUYWJsZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZWdpc3RlcldlYWtHQ0hhc2hUYWJs
ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6cmVnaXN0ZXJXZWFrR0NNYXApOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpIZWFwOjp1bnJlZ2lzdGVyV2Vha0dDTWFwKTogRGVsZXRlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZS4gV2Vha0dDTWFwQmFz
ZSAtPiBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoK
KyAgICAgICAgQWRkIFdlYWtHQ1NldElubGluZXMuaAorCisgICAgICAgICogcnVudGltZS9KU0N1
c3RvbUdldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21H
ZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgICogcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21TZXR0ZXJG
dW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3VzdG9t
U2V0dGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbVNldHRl
ckZ1bmN0aW9uLmg6CisgICAgICAgIEFkZCBoZWxwZXIgdHlwZSBDdXN0b21GdW5jdGlvblBvaW50
ZXIgYW5kIGhlbHBlciBmdW5jdGlvbiBjdXN0b21GdW5jdGlvblBvaW50ZXIoKQorICAgICAgICB0
byBhbGxvdyBzb21lIGdlbmVyaWMgaGFzaGluZyBjb2RlIHRvIHJ1biBvbiBlaXRoZXIgSlNDdXN0
b21HZXR0ZXJGdW5jdGlvbgorICAgICAgICBvciBKU0N1c3RvbVNldHRlckZ1bmN0aW9uLgorCisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6V2Vha0N1c3RvbUdldHRlck9y
U2V0dGVySGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpXZWFrQ3Vz
dG9tR2V0dGVyT3JTZXR0ZXJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAg
IFJlcGxhY2UgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9tX2N1c3RvbVNldHRlckZ1bmN0aW9u
TWFwIHdpdGggCisgICAgICAgIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvbV9jdXN0b21TZXR0
ZXJGdW5jdGlvblNldC4gQXMgdGhlIGtleSBpcyBpbmNsdWRlZAorICAgICAgICBpbiB0aGUgdmFs
dWUsIGl0IHNhdmVzIHNwYWNlIHRvIHVzZSBhIHNldCByYXRoZXIgdGhhbiBhIG1hcC4gV2Ugbm93
IGFsc28KKyAgICAgICAgaGFzaCBhbmQgY29tcGFyZSBib3RoIHRoZSBmdW5jdGlvbiBwb2ludGVy
IGFuZCB0aGUgcHJvcGVydHkgbmFtZSB0byBhbGxvdworICAgICAgICBzaGFyaW5nIGltcGxlbWVu
dGF0aW9ucy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAgICAg
IChKU0M6OldlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yOjplcXVhbCk6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgorICAgICAgICBVcGRhdGUgY3JlYXRpb24gZnVu
Y3Rpb25zIHRvIHVzZSB0aGUgbmV3IHNldHMsIG1ha2luZyB1c2Ugb2YgdGhlCisgICAgICAgIGVu
c3VyZVZhbHVlIGZ1bmN0aW9uIGFuZCBhIEhhc2hUcmFuc2xhdG9yIGFsbG93aW5nIHRoZSB1c2Ug
b2YgYQorICAgICAgICBzdGQ6OnBhaXI8UHJvcGVydHlOYW1lLCBGdW5jdGlvblBvaW50ZXI+IGFz
IGFuIGFsdGVybmF0aXZlIGxvb2t1cAorICAgICAgICBrZXkuIFRoaXMgYWxsb3dzIHVzIHRvIGF2
b2lkIGNyZWF0aW5nIHRoZSBKU0N1c3RvbUdldHRlckZ1bmN0aW9uL0pTQ3VzdG9tU2V0dGVyRnVu
Y3Rpb24KKyAgICAgICAgcG9pbnRlciBpZiBvbmUgd2l0aCB0aGUgc2FtZSBwcm9wZXJ0eSBuYW1l
IGFuZCBmdW5jdGlvbiBwb2ludGVyIGFyZQorICAgICAgICBhbHJlYWR5IGluIHRoZSBzZXQuCisK
KyAgICAgICAgKiBydW50aW1lL1dlYWtHQ0hhc2hUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6V2Vha0dDSGFzaFRhYmxlOjp+V2Vha0dDSGFzaFRhYmxlKToKKyAgICAgICAgTW92ZWQgZnJv
bSBXZWFrR0NNYXAgYW5kIHJlbmFtZWQgYXMgaXQgaXMgbm93IHRoZSBiYXNlIG9mIGJvdGgKKyAg
ICAgICAgV2Vha0dDTWFwIGFuZCBXZWFrR0NTZXQuCisgCisgICAgICAgICogcnVudGltZS9XZWFr
R0NNYXAuaDoKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgV2Vha0dDSGFzaFRhYmxlIGJhc2Ug
Y2xhc3MuCisKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6S2V5VHJhaXRzQXJnPjo6V2Vha0dDTWFwKToKKyAgICAgICAgKEpTQzo6S2V5VHJhaXRz
QXJnPjo6fldlYWtHQ01hcCk6CisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IEhlYXAgZnVuY3Rpb24g
bmFtZXMgZm9yIFdlYWtHQ0hhc2hUYWJsZS4KKworICAgICAgICAqIHJ1bnRpbWUvV2Vha0dDU2V0
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6V2Vha0dDU2V0KToKKyAgICAgICAgKEpTQzo6VHJh
aXRzQXJnPjo6fldlYWtHQ1NldCk6CisgICAgICAgIChKU0M6OlRyYWl0c0FyZz46OmZpbmQpOgor
ICAgICAgICAoSlNDOjpUcmFpdHNBcmc+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHJh
aXRzQXJnPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpUcmFpdHNBcmc+OjpwcnVu
ZVN0YWxlRW50cmllcyk6CisgICAgICAgIEFkZGVkIGEgbWluaW1hbCBXZWFrR0NTZXQgYmFzZWQg
b24gV2Vha0dDTWFwLiAKKwogMjAyMS0wMy0yOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFICYgRU5BQkxFX0lO
REVYRURfREFUQUJBU0VfSU5fV09SS0VSUywgaXQgc2VlbXMgbGlrZSBpdCBpcyBvbiBmb3IgYWxs
IHBvcnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAy
NzUxNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOTcsOCArMTA5NywxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9WTVRyYXBzLmgKICAgICBydW50aW1lL1Zhck9mZnNl
dC5oCiAgICAgcnVudGltZS9XYXRjaGRvZy5oCisgICAgcnVudGltZS9XZWFrR0NIYXNoVGFibGUu
aAogICAgIHJ1bnRpbWUvV2Vha0dDTWFwLmgKICAgICBydW50aW1lL1dlYWtHQ01hcElubGluZXMu
aAorICAgIHJ1bnRpbWUvV2Vha0dDU2V0LmgKKyAgICBydW50aW1lL1dlYWtHQ1NldElubGluZXMu
aAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmllcklu
bGluZXMuaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc1
MTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MjksNiArMTcyOSw5IEBACiAJCUJD
RDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QyMDM0ODBFMTcxMzVFMDAyQzdFODIg
LyogRGF0ZVByb3RvdHlwZS5oICovOyB9OwogCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdFODIgLyog
RGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRDIwM0U3MEUxNzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmx1dC5o
ICovOyB9OwogCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0RFM0FCMTBFNkM4MkNG
MDAxNDUzQTcgLyogU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQkNFMkZBRkIyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFMkZBRkEy
NjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZEMjYwOTE2RkYwMDBBNTEwRiAvKiBXZWFr
R0NTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZGMjYw
OTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFr
R0NIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjA1MTIwRTIwM0VGODAwQjlB
NjREIC8qIEFyZ0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkRGQ0IyQkJFOTBGNDEzNDlFMUIwQkVEIC8qIEpTU291cmNlQ29k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzAzMjE3
NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODkyLDYgKzQ4OTUsOSBAQAogCQlCQ0RE
NTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGNvZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkNERTNBQjAwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0RFM0FCMTBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0dXJl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQ0UyRkFGQTI2MDkxNkVGMDAwQTUxMEYgLyogV2Vha0dD
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWFrR0NTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2Vha0dDSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyZ0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTAsOCArNzg5NiwxMSBAQAogCQkJCUZFNkY1NkREMUU2
NEU5MjAwMEQxNzgwMSAvKiBWTVRyYXBzLmggKi8sCiAJCQkJRkVEOTRGMkIxNzFFM0UyMzAwQkU3
N0E0IC8qIFdhdGNoZG9nLmNwcCAqLywKIAkJCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyog
V2F0Y2hkb2cuaCAqLywKKwkJCQlCQ0UyRkFGRTI2MDkxNzgyMDAwQTUxMEYgLyogV2Vha0dDSGFz
aFRhYmxlLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5o
ICovLAogCQkJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmgg
Ki8sCisJCQkJQkNFMkZBRkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovLAorCQkJ
CUJDRTJGQUZDMjYwOTE2RkYwMDBBNTEwRiAvKiBXZWFrR0NTZXRJbmxpbmVzLmggKi8sCiAJCQkJ
QTdDQTNBREQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJ
CQkJQTdDQTNBREUxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oICovLAog
CQkJCUUzQTMyQkM1MUZDODMxMkQwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCkBAIC05
MjEzLDYgKzkyMjIsNyBAQAogCQkJCThCQzA2NDhCMUUxQUJBOTQwMEIyQjhDQSAvKiBBc3luY0dl
bmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCQzA2NDhB
MUUxQUJBN0IwMEIyQjhDQSAvKiBBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4QkMwNjQ5MjFFMUFEQ0M0MDBCMkI4Q0EgLyogQXN5bmNHZW5lcmF0
b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRTJGQUZGMjYwOTE3ODIwMDBBNTEw
RiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCThCM0JGNUU0MUUzRDM2
OEIwMDc2QTg3QSAvKiBBc3luY0dlbmVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCThCQzA2NDk2MUUxRDg0NUMwMEIyQjhDQSAvKiBBc3luY0l0ZXJhdG9yUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5bmNT
dGFja1RyYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NzYsNiArOTY4Niw3IEBACiAJCQkJMTQz
ODZBNzUxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjM3MzA4RjFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU0REVGRjFFOEQ3NkZBMDBB
ODkyQzUgLyogRGlzYWxsb3dTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZBRkIyNjA5
MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1NERFRkIx
RThDNkQ4ODAwQTg5MkM1IC8qIERpc2FsbG93Vk1FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMxNjE4MTMxRUM1RkUxNzAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCBpbiBIZWFk
ZXJzICovLApAQCAtMTAzMzMsNiArMTAzNDQsNyBAQAogCQkJCTE0Rjc5RjcwMjE2RUFGRDIwMDA0
NkQzOSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjQ4NzJFMjE0MUQwNDgwMEFC
MEQzRSAvKiBPcGNvZGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEE0NjgwRDIxNkZB
NTZBMDAwRDJCMUEgLyogT3Bjb2RlU2l6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZBRkQy
NjA5MTZGRjAwMEE1MTBGIC8qIFdlYWtHQ1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDI3NTE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5F
bmRQaGFzZShHQ0NvCiAgICAgICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygp
OwogCiAgICAgICAgIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICBwcnVuZVN0YWxlRW50cmll
c0Zyb21XZWFrR0NNYXBzKCk7CisgICAgICAgIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ0hh
c2hUYWJsZXMoKTsKICAgICAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICAgICAgc25hcHNo
b3RVbnN3ZXB0KCk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsg
Ly8gV2UgcmVseSBvbiB0aGVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMgcnVubmluZyBiZWZv
cmUgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcgc2luY2UgQ29kZUJsb2NrJ3MgZmluYWxpemVyIHJl
bGllcyBvbiBxdWVyeWluZyBjdXJyZW50bHkgZXhlY3V0aW5nLgpAQCAtMjIxNywxMiArMjIxNywx
MiBAQCB2b2lkIEhlYXA6OnJlYXBXZWFrSGFuZGxlcygpCiAgICAgbV9vYmplY3RTcGFjZS5yZWFw
V2Vha1NldHMoKTsKIH0KIAotdm9pZCBIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NN
YXBzKCkKK3ZvaWQgSGVhcDo6cHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDSGFzaFRhYmxlcygp
CiB7CiAgICAgaWYgKCFtX2NvbGxlY3Rpb25TY29wZSB8fCBtX2NvbGxlY3Rpb25TY29wZS52YWx1
ZSgpICE9IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAo
V2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwIDogbV93ZWFrR0NNYXBzKQotICAgICAgICB3ZWFrR0NN
YXAtPnBydW5lU3RhbGVFbnRyaWVzKCk7CisgICAgZm9yIChhdXRvKiB3ZWFrR0NIYXNoVGFibGUg
OiBtX3dlYWtHQ0hhc2hUYWJsZXMpCisgICAgICAgIHdlYWtHQ0hhc2hUYWJsZS0+cHJ1bmVTdGFs
ZUVudHJpZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCkBAIC0yNjc0
LDE0ICsyNjc0LDE0IEBAIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWYK
ICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKLXZvaWQgSGVhcDo6cmVnaXN0
ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjpyZWdpc3Rl
cldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqIHdlYWtHQ0hhc2hUYWJsZSkKIHsKLSAg
ICBtX3dlYWtHQ01hcHMuYWRkKHdlYWtHQ01hcCk7CisgICAgbV93ZWFrR0NIYXNoVGFibGVzLmFk
ZCh3ZWFrR0NIYXNoVGFibGUpOwogfQogCi12b2lkIEhlYXA6OnVucmVnaXN0ZXJXZWFrR0NNYXAo
V2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjp1bnJlZ2lzdGVyV2Vha0dDSGFz
aFRhYmxlKFdlYWtHQ0hhc2hUYWJsZSogd2Vha0dDSGFzaFRhYmxlKQogewotICAgIG1fd2Vha0dD
TWFwcy5yZW1vdmUod2Vha0dDTWFwKTsKKyAgICBtX3dlYWtHQ0hhc2hUYWJsZXMucmVtb3ZlKHdl
YWtHQ0hhc2hUYWJsZSk7CiB9CiAKIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVCbG9jayhzaXplX3Qg
Y2FwYWNpdHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyNzUx
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDcgKzg3LDcgQEAgY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBTd2Vl
cGluZ1Njb3BlOwogY2xhc3MgVk07CiBjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwotY2xhc3Mg
V2Vha0dDTWFwQmFzZTsKK2NsYXNzIFdlYWtHQ0hhc2hUYWJsZTsKIHN0cnVjdCBDdXJyZW50VGhy
ZWFkU3RhdGU7CiAKICNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRApAQCAtMjg5LDggKzI4OSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbGVhc2VTb29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NHTGli
V3JhcHBlck9iamVjdD4mJik7CiAjZW5kaWYKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dD
TWFwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDSGFzaFRhYmxl
KFdlYWtHQ0hhc2hUYWJsZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5yZWdpc3Rl
cldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqKTsKIAogICAgIHZvaWQgYWRkTG9naWNh
bGx5RW1wdHlXZWFrQmxvY2soV2Vha0Jsb2NrKik7CiAKQEAgLTUyNiw3ICs1MjYsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZW5kTWFya2luZygpOwogCiAgICAgdm9pZCByZWFwV2Vha0hhbmRsZXMo
KTsKLSAgICB2b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKKyAgICB2b2lk
IHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ0hhc2hUYWJsZXMoKTsKICAgICB2b2lkIHN3ZWVw
QXJyYXlCdWZmZXJzKCk7CiAgICAgdm9pZCBzbmFwc2hvdFVuc3dlcHQoKTsKICAgICB2b2lkIGRl
bGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CkBAIC02ODksNyArNjg5LDcgQEAgcHJpdmF0ZToK
ICNlbmRpZgogICAgIHVuc2lnbmVkIG1fZGVmZXJyYWxEZXB0aCB7IDAgfTsKIAotICAgIEhhc2hT
ZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKKyAgICBIYXNoU2V0PFdlYWtHQ0hhc2hU
YWJsZSo+IG1fd2Vha0dDSGFzaFRhYmxlczsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a1N0YWNrQXJyYXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjc1MTcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCwzICs1NCw0IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
I2luY2x1ZGUgIlRocm93U2NvcGUuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCisj
aW5jbHVkZSAiV2Vha0dDU2V0SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAJKHJldmlz
aW9uIDI3NTE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0
dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KIAogICAgIEpTQ3VzdG9tR2V0dGVyRnVu
Y3Rpb24qIGN1c3RvbUdldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyRnVuY3Rp
b24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKTsKLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gY3VzdG9tR2V0
dGVyRnVuY3Rpb24tPmdldHRlcigpOworICAgIGF1dG8gZ2V0dGVyID0gY3VzdG9tR2V0dGVyRnVu
Y3Rpb24tPmdldHRlcigpOwogCiAgICAgaWYgKGF1dG8gZG9tQXR0cmlidXRlID0gY3VzdG9tR2V0
dGVyRnVuY3Rpb24tPmRvbUF0dHJpYnV0ZSgpKSB7CiAgICAgICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpCkBAIC01MCw3ICs1MCw3IEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGdldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFs
dWUpLCBjdXN0b21HZXR0ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpKTsKIH0KIAotSlNDdXN0
b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgR2V0VmFs
dWVGdW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmli
dXRlKQorSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYg
dm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5
TmFtZSwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRl
QW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3Byb3BlcnR5TmFtZShJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQpA
QCAtNTgsNyArNTgsNyBAQCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRlckZ1
CiB7CiB9CiAKLUpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246
OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFByb3Bl
cnR5TmFtZSYgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0dGVyLCBPcHRpb25hbDxET01B
dHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCitKU0N1c3RvbUdldHRlckZ1bmN0aW9u
KiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgQ3VzdG9tRnVu
Y3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9t
QXR0cmlidXRlKQogewogICAgIEFTU0VSVChnZXR0ZXIpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY3VzdG9tR2V0dGVyRnVuY3Rpb25DYWxs
LCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgU3RyaW5nKHByb3BlcnR5TmFtZS5wdWJs
aWNOYW1lKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3NTE3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Z1bmN0aW9u
IEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogCisgICAgdXNpbmcgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyID0g
R2V0VmFsdWVGdW5jOworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKQEAgLTQ5LDE5
ICs1MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5v
dGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpT
Q3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
UHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyLCBPcHRpb25hbDxET01BdHRyaWJ1
dGVBbm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0eU5hbWU7IH0KLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyKCkgY29uc3QgeyByZXR1
cm4gbV9nZXR0ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZ2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0b21G
dW5jdGlvblBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlcjsgfTsKICAgICBPcHRpb25h
bDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBt
X2RvbUF0dHJpYnV0ZTsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1c3RvbUdldHRlckZ1bmN0aW9u
KFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgY29u
c3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5v
dGF0aW9uPik7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFi
bGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEN1
c3RvbUZ1bmN0aW9uUG9pbnRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4pOwog
CiAgICAgSWRlbnRpZmllciBtX3Byb3BlcnR5TmFtZTsKLSAgICBHZXRWYWx1ZUZ1bmMgbV9nZXR0
ZXI7CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIG1fZ2V0dGVyOwogICAgIE9wdGlvbmFsPERP
TUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDI3NTE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxOSAr
MzYsMTkgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3VzdG9tUwogSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGN1c3RvbVNldHRlckZ1bmN0aW9uQ2FsbCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBhdXRvIGN1
c3RvbVNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpOwotICAgIFB1dFZhbHVlRnVuYyBzZXR0ZXIgPSBjdXN0b21TZXR0
ZXJGdW5jdGlvbi0+c2V0dGVyKCk7CisgICAgYXV0byBzZXR0ZXIgPSBjdXN0b21TZXR0ZXJGdW5j
dGlvbi0+c2V0dGVyKCk7CiAgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2Rl
KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSksIGN1c3RvbVNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotSlNDdXN0b21TZXR0ZXJG
dW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5jIHNl
dHRlcikKK0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24oVk0m
IHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0
eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiAgICAgOiBCYXNlKHZtLCBleGVj
dXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fcHJvcGVydHlOYW1lKElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpCiAgICAgLCBtX3NldHRl
cihzZXR0ZXIpCiB7CiB9CiAKLUpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tU2V0dGVy
RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMgc2V0dGVyKQorSlND
dXN0b21TZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9w
ZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiB7CiAgICAgQVNTRVJUKHNl
dHRlcik7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5j
dGlvbihjdXN0b21TZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVj
dG9yLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24u
aAkocmV2aXNpb24gMjc1MTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
dXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKKyAgICB1
c2luZyBDdXN0b21GdW5jdGlvblBvaW50ZXIgPSBQdXRWYWx1ZUZ1bmM7CisKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKIApAQCAtNDksMTggKzUxLDE5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiogY3Jl
YXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUmLCBQdXRWYWx1ZUZ1
bmMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0aW9u
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEN1c3Rv
bUZ1bmN0aW9uUG9pbnRlcik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU5h
bWU7IH0KLSAgICBQdXRWYWx1ZUZ1bmMgc2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0ZXI7
IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIHNldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0b21GdW5jdGlvblBvaW50
ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlcjsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1c3Rv
bVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgUHV0VmFsdWVGdW5jKTsKKyAgICBKU0N1
c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVy
KTsKIAogICAgIElkZW50aWZpZXIgbV9wcm9wZXJ0eU5hbWU7Ci0gICAgUHV0VmFsdWVGdW5jIG1f
c2V0dGVyOworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBtX3NldHRlcjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDcs
OCArNTA3LDggQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgUwogICAg
ICwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQogICAgICwgbV9ydW50
aW1lRmxhZ3MoKQogICAgICwgbV9zdGFja1RyYWNlTGltaXQoT3B0aW9uczo6ZGVmYXVsdEVycm9y
U3RhY2tUcmFjZUxpbWl0KCkpCi0gICAgLCBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwKHZtKQot
ICAgICwgbV9jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCh2bSkKKyAgICAsIG1fY3VzdG9tR2V0dGVy
RnVuY3Rpb25TZXQodm0pCisgICAgLCBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU2V0KHZtKQogICAg
ICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/IGds
b2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDI3NTE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKICNpbmNsdWRl
ICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAj
aW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJMYXp5UHJv
cGVydHkuaCIKICNpbmNsdWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJMYXp5
UHJvcGVydHkuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJQYXJz
ZXJNb2Rlcy5oIgogI2luY2x1ZGUgIlJlZ0V4cEdsb2JhbERhdGEuaCIKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJXZWFrR0NTZXQuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgpAQCAtNTQ2LDggKzU0Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFwUHJvdG90
eXBlU2V0RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKICAgICBib29sIGlzU2V0UHJvdG90eXBlQWRk
RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIAotICAgIFdlYWtHQ01hcDxHZXRWYWx1ZUZ1bmMsIEpT
Q3VzdG9tR2V0dGVyRnVuY3Rpb24+JiBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCgpIHsgcmV0dXJu
IG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25NYXA7IH0KLSAgICBXZWFrR0NNYXA8UHV0VmFsdWVGdW5j
LCBKU0N1c3RvbVNldHRlckZ1bmN0aW9uPiYgY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAoKSB7IHJl
dHVybiBtX2N1c3RvbVNldHRlckZ1bmN0aW9uTWFwOyB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICB1c2luZyBSZWZlcmVuY2VkR2xvYmFsUHJvcGVydHlXYXRjaHBvaW50U2V0cyA9IEhhc2hN
YXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgUmVmPFdhdGNocG9pbnRTZXQ+LCBJZGVudGlm
aWVyUmVwSGFzaD47CkBAIC01NjMsOCArNTYyLDIxIEBAIHB1YmxpYzoKICAgICBSdW50aW1lRmxh
Z3MgbV9ydW50aW1lRmxhZ3M7CiAgICAgQ29uc29sZUNsaWVudCogbV9jb25zb2xlQ2xpZW50IHsg
bnVsbHB0ciB9OwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YWNrVHJhY2VMaW1pdDsKLSAg
ICBXZWFrR0NNYXA8R2V0VmFsdWVGdW5jLCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uPiBtX2N1c3Rv
bUdldHRlckZ1bmN0aW9uTWFwOwotICAgIFdlYWtHQ01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3VzdG9t
U2V0dGVyRnVuY3Rpb24+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXA7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoIHsK
KyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2VhazxUPiYpOworICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPFQ+JiwgY29uc3QgV2VhazxUPiYpOworICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eU5hbWUmLCB0eXBlbmFtZSBUOjpD
dXN0b21GdW5jdGlvblBvaW50ZXIpOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBXZWFr
R0NTZXQ8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9yU2V0dGVySGFz
aDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblNldDsKKyAg
ICBXZWFrR0NTZXQ8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9yU2V0
dGVySGFzaDxKU0N1c3RvbVNldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21TZXR0ZXJGdW5jdGlvblNl
dDsKKworICAgIFdlYWtHQ1NldDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uLCBXZWFrQ3VzdG9tR2V0
dGVyT3JTZXR0ZXJIYXNoPEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+PiYgY3VzdG9tR2V0dGVyRnVu
Y3Rpb25TZXQoKSB7IHJldHVybiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uU2V0OyB9CisgICAgV2Vh
a0dDU2V0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24sIFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhh
c2g8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj4+JiBjdXN0b21TZXR0ZXJGdW5jdGlvblNldCgpIHsg
cmV0dXJuIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TZXQ7IH0KIAogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgY29uc3QgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVudHJ5
IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3NTE3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0N1c3RvbUdldHRlckZ1
bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMaW5rVGltZUNvbnN0YW50LmgiCiAjaW5jbHVkZSAi
T2JqZWN0UHJvdG90eXBlLmgiCkBAIC0xMjQsNCArMTI2LDI5IEBAIEFMV0FZU19JTkxJTkUgVk0m
IGdldFZNKEpTR2xvYmFsT2JqZWN0KiAKICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT52bSgpOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHVuc2lnbmVkIEpTR2xvYmFsT2JqZWN0
OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjpoYXNoKGNvbnN0IFdlYWs8VD4mIHZh
bHVlKQoreworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBo
YXNoKHZhbHVlLT5wcm9wZXJ0eU5hbWUoKSwgdmFsdWUtPmN1c3RvbUZ1bmN0aW9uUG9pbnRlcigp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIEpTR2xvYmFsT2JqZWN0
OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjplcXVhbChjb25zdCBXZWFrPFQ+JiBh
LCBjb25zdCBXZWFrPFQ+JiBiKQoreworICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBhID09IGI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citp
bmxpbmUgdW5zaWduZWQgSlNHbG9iYWxPYmplY3Q6OldlYWtDdXN0b21HZXR0ZXJPclNldHRlckhh
c2g8VD46Omhhc2goY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUsIHR5cGVuYW1lIFQ6
OkN1c3RvbUZ1bmN0aW9uUG9pbnRlciBmdW5jdGlvblBvaW50ZXIpCit7CisgICAgdW5zaWduZWQg
aGFzaCA9IERlZmF1bHRIYXNoPHR5cGVuYW1lIFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlcj46Omhh
c2goZnVuY3Rpb25Qb2ludGVyKTsKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc051bGwoKSkKKyAg
ICAgICAgaGFzaCA9IFdURjo6cGFpckludEhhc2goaGFzaCwgcHJvcGVydHlOYW1lLnVpZCgpLT5l
eGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzUxNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MjEsMjIgKzM1MjEsNDUgQEAgQnV0
dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaQogICAgIHJldHVybiBCdXR0ZXJm
bHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShidXR0ZXJmbHkoKSwgdm0sIHRoaXMsIHN0
cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yIHsKKyAgICB1
c2luZyBCYXNlSGFzaCA9IEpTR2xvYmFsT2JqZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJI
YXNoPFQ+OworCisgICAgdXNpbmcgS2V5ID0gc3RkOjpwYWlyPFByb3BlcnR5TmFtZSwgdHlwZW5h
bWUgVDo6Q3VzdG9tRnVuY3Rpb25Qb2ludGVyPjsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IEtleSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VIYXNoOjpoYXNoKHN0
ZDo6Z2V0PDA+KGtleSksIHN0ZDo6Z2V0PDE+KGtleSkpOworICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFdlYWs8VD4mIGEsIGNvbnN0IEtleSYgYikKKyAgICB7CisgICAgICAg
IGlmICghYSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGEtPnBy
b3BlcnR5TmFtZSgpID09IHN0ZDo6Z2V0PDA+KGIpICYmIGEtPmN1c3RvbUZ1bmN0aW9uUG9pbnRl
cigpID09IHN0ZDo6Z2V0PDE+KGIpOworICAgIH0KK307CisKIHN0YXRpYyBKU0N1c3RvbUdldHRl
ckZ1bmN0aW9uKiBjcmVhdGVDdXN0b21HZXR0ZXJGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEdldFZhbHVlRnVu
YyBnZXRWYWx1ZUZ1bmMsIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJp
YnV0ZSkKIHsKLSAgICAvLyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5v
dCBpbnZva2UgR0Mgc2luY2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBv
ZiBIYXNoTWFwOjplbnN1cmUuCi0gICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRv
IGludm9rZSBHQyB3aGVuIGV4ZWN1dGluZyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAoMikg
dG8gYXZvaWQgbG9va2luZyB1cCBIYXNoTWFwIHR3aWNlLgorICAgIHVzaW5nIFRyYW5zbGF0b3Ig
PSBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjxKU0N1c3RvbUdldHRlckZ1
bmN0aW9uPjsKKworICAgIC8vIFdlYWtHQ1NldDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11c3Qg
bm90IGludm9rZSBHQyBzaW5jZSBHQyBjYW4gbW9kaWZ5IFdlYWtHQ1NldCBpbiB0aGUgbWlkZGxl
IG9mIEhhc2hTZXQ6OmVuc3VyZS4KKyAgICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgxKSBub3Qg
dG8gaW52b2tlIEdDIHdoZW4gZXhlY3V0aW5nIFdlYWtHQ1NldDo6ZW5zdXJlVmFsdWUgYW5kICgy
KSB0byBhdm9pZCBsb29raW5nIHVwIEhhc2hTZXQgdHdpY2UuCiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmN1c3RvbUdldHRlckZ1bmN0aW9u
TWFwKCkuZW5zdXJlVmFsdWUoZ2V0VmFsdWVGdW5jLCBbJl0geworICAgIHJldHVybiBnbG9iYWxP
YmplY3QtPmN1c3RvbUdldHRlckZ1bmN0aW9uU2V0KCkuZW5zdXJlVmFsdWU8VHJhbnNsYXRvcj4o
c3RkOjptYWtlX3R1cGxlKHByb3BlcnR5TmFtZSwgZ2V0VmFsdWVGdW5jKSwgWyZdIHsKICAgICAg
ICAgcmV0dXJuIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIGdldFZhbHVlRnVuYywgZG9tQXR0cmlidXRlKTsKICAgICB9KTsKIH0K
IAogc3RhdGljIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIGNyZWF0ZUN1c3RvbVNldHRlckZ1bmN0
aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5jIHB1dFZhbHVlRnVuYykKIHsKLSAgICAvLyBXZWFrR0NN
YXA6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mgc2luY2UgR0MgY2Fu
IG1vZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBvZiBIYXNoTWFwOjplbnN1cmUuCi0gICAg
Ly8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGludm9rZSBHQyB3aGVuIGV4ZWN1dGlu
ZyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8gYXZvaWQgbG9va2luZyB1cCBIYXNo
TWFwIHR3aWNlLgorICAgIHVzaW5nIFRyYW5zbGF0b3IgPSBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0
ZXJIYXNoVHJhbnNsYXRvcjxKU0N1c3RvbVNldHRlckZ1bmN0aW9uPjsKKworICAgIC8vIFdlYWtH
Q1NldDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBHQyBzaW5jZSBHQyBj
YW4gbW9kaWZ5IFdlYWtHQ1NldCBpbiB0aGUgbWlkZGxlIG9mIEhhc2hTZXQ6OmVuc3VyZS4KKyAg
ICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgxKSBub3QgdG8gaW52b2tlIEdDIHdoZW4gZXhlY3V0
aW5nIFdlYWtHQ1NldDo6ZW5zdXJlVmFsdWUgYW5kICgyKSB0byBhdm9pZCBsb29raW5nIHVwIEhh
c2hTZXQgdHdpY2UuCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIHJldHVybiBn
bG9iYWxPYmplY3QtPmN1c3RvbVNldHRlckZ1bmN0aW9uTWFwKCkuZW5zdXJlVmFsdWUocHV0VmFs
dWVGdW5jLCBbJl0geworICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmN1c3RvbVNldHRlckZ1bmN0
aW9uU2V0KCkuZW5zdXJlVmFsdWU8VHJhbnNsYXRvcj4oc3RkOjptYWtlX3R1cGxlKHByb3BlcnR5
TmFtZSwgcHV0VmFsdWVGdW5jKSwgWyZdIHsKICAgICAgICAgcmV0dXJuIEpTQ3VzdG9tU2V0dGVy
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHB1dFZhbHVl
RnVuYyk7CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrR0NIYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrR0NIYXNoVGFibGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrR0NIYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBXZWFrR0NIYXNoVGFibGUgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYWtHQ0hhc2hU
YWJsZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcnVuZVN0YWxlRW50cmllcygpID0gMDsKK307
CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCShy
ZXZpc2lvbiAyNzUxNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjEgKzI3LDE1IEBACiAKICNpbmNsdWRlICJEZWZl
ckdDLmgiCiAjaW5jbHVkZSAiV2Vhay5oIgorI2luY2x1ZGUgIldlYWtHQ0hhc2hUYWJsZS5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBBIEhhc2hN
YXAgd2l0aCBXZWFrPEpTQ2VsbD4gdmFsdWVzLCB3aGljaCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMg
dmFsdWVzIG9uY2UgdGhleSdyZSBnYXJiYWdlIGNvbGxlY3RlZC4KIAotY2xhc3MgV2Vha0dDTWFw
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2Vha0dDTWFwQmFzZSgpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBwcnVuZVN0YWxlRW50cmllcygpID0gMDsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBEZWZhdWx0
SGFzaDxLZXlBcmc+LAotICAgIHR5cGVuYW1lIEtleVRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8S2V5
QXJnPj4KLWNsYXNzIFdlYWtHQ01hcCBmaW5hbCA6IHB1YmxpYyBXZWFrR0NNYXBCYXNlIHsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hB
cmcgPSBEZWZhdWx0SGFzaDxLZXlBcmc+LCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJh
aXRzPEtleUFyZz4+CitjbGFzcyBXZWFrR0NNYXAgZmluYWwgOiBwdWJsaWMgV2Vha0dDSGFzaFRh
YmxlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICB0eXBlZGVmIFdlYWs8VmFs
dWVBcmc+IFZhbHVlVHlwZTsKICAgICB0eXBlZGVmIEhhc2hNYXA8S2V5QXJnLCBWYWx1ZVR5cGUs
IEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNzUx
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXBJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlB
cmcsIHR5cGVuYW1lIFZhbHVlCiBpbmxpbmUgV2Vha0dDTWFwPEtleUFyZywgVmFsdWVBcmcsIEhh
c2hBcmcsIEtleVRyYWl0c0FyZz46OldlYWtHQ01hcChWTSYgdm0pCiAgICAgOiBtX3ZtKHZtKQog
ewotICAgIHZtLmhlYXAucmVnaXN0ZXJXZWFrR0NNYXAodGhpcyk7CisgICAgdm0uaGVhcC5yZWdp
c3RlcldlYWtHQ0hhc2hUYWJsZSh0aGlzKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRz
QXJnPgogaW5saW5lIFdlYWtHQ01hcDxLZXlBcmcsIFZhbHVlQXJnLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmc+Ojp+V2Vha0dDTWFwKCkKIHsKLSAgICBtX3ZtLmhlYXAudW5yZWdpc3RlcldlYWtHQ01h
cCh0aGlzKTsKKyAgICBtX3ZtLmhlYXAudW5yZWdpc3RlcldlYWtHQ0hhc2hUYWJsZSh0aGlzKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2Vhay5oIgorI2lu
Y2x1ZGUgIldlYWtHQ0hhc2hUYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25h
bWVzcGFjZSBKU0MgeworCisvLyBBIEhhc2hTZXQgd2l0aCBXZWFrPEpTQ2VsbD4gdmFsdWVzLCB3
aGljaCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgdmFsdWVzIG9uY2UgdGhleSdyZSBnYXJiYWdlIGNv
bGxlY3RlZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBXZWFrR0NTZXRIYXNoVHJh
aXRzIDogSGFzaFRyYWl0czxXZWFrPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c0lzUmVsZWFzZWRXZWFrVmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGJvb2wgaXNS
ZWxlYXNlZFdlYWtWYWx1ZShjb25zdCBXZWFrPFQ+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAhdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSAmJiAhdmFsdWUuaXNIYXNoVGFi
bGVFbXB0eVZhbHVlKCkgJiYgIXZhbHVlOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhhc2g8V2VhazxWYWx1ZUFyZz4+
LCB0eXBlbmFtZSBUcmFpdHNBcmcgPSBXZWFrR0NTZXRIYXNoVHJhaXRzPFZhbHVlQXJnPj4KK2Ns
YXNzIFdlYWtHQ1NldCBmaW5hbCA6IHB1YmxpYyBXZWFrR0NIYXNoVGFibGUgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IFdlYWs8VmFsdWVBcmc+
OworICAgIHVzaW5nIEhhc2hTZXRUeXBlID0gSGFzaFNldDxWYWx1ZVR5cGUsIEhhc2hBcmcsIFRy
YWl0c0FyZz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBBZGRSZXN1bHQgPSB0eXBlbmFtZSBIYXNo
U2V0VHlwZTo6QWRkUmVzdWx0OworICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgSGFzaFNl
dFR5cGU6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gdHlwZW5hbWUgSGFz
aFNldFR5cGU6OmNvbnN0X2l0ZXJhdG9yOworCisgICAgZXhwbGljaXQgV2Vha0dDU2V0KFZNJik7
CisgICAgfldlYWtHQ1NldCgpIGZpbmFsOworCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAg
ICAgICBtX3NldC5jbGVhcigpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIFZhbHVlQXJnKiBl
bnN1cmVWYWx1ZShUJiYga2V5LCBGdW5jdG9yJiYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIC8v
IElmIGZ1bmN0b3IgaW52b2tlcyBHQywgR0MgY2FuIHBydW5lIFdlYWtHQ1NldCwgYW5kIG1hbmlw
dWxhdGUgSGFzaFNldCB3aGlsZSB3ZSBhcmUgdG91Y2hpbmcgaXQgaW4gdGhlIGVuc3VyZSBmdW5j
dGlvbi4KKyAgICAgICAgLy8gVGhlIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDLgorICAgICAg
ICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgIAorICAgICAgICBhdXRvIHJlc3VsdCA9
IG1fc2V0LnRlbXBsYXRlIGVuc3VyZTxIYXNoVHJhbnNsYXRvcj4oc3RkOjpmb3J3YXJkPFQ+KGtl
eSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPmdldCgpOworICAgIH0KKworICAgIGlubGluZSBpdGVyYXRvciBmaW5kKGNv
bnN0IFZhbHVlVHlwZSYga2V5KTsKKyAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IgZmluZChjb25z
dCBWYWx1ZVR5cGUmIGtleSkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgY29udGFpbnMoY29uc3Qg
VmFsdWVUeXBlJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcnVuZVN0YWxlRW50cmll
cygpIGZpbmFsOworCisgICAgSGFzaFNldFR5cGUgbV9zZXQ7CisgICAgVk0mIG1fdm07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dlYWtHQ1NldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9XZWFrR0NTZXRJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkhlYXBJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2Vha0dDU2V0LmgiCisjaW5jbHVkZSAiV2Vha0lubGluZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBl
bmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+CitpbmxpbmUgV2Vha0dDU2V0PFZhbHVl
QXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+OjpXZWFrR0NTZXQoVk0mIHZtKQorICAgIDogbV92bSh2
bSkKK3sKKyAgICB2bS5oZWFwLnJlZ2lzdGVyV2Vha0dDSGFzaFRhYmxlKHRoaXMpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJh
aXRzQXJnPgoraW5saW5lIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6
fldlYWtHQ1NldCgpCit7CisgICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUo
dGhpcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJn
LCB0eXBlbmFtZSBUcmFpdHNBcmc+CitpbmxpbmUgdHlwZW5hbWUgV2Vha0dDU2V0PFZhbHVlQXJn
LCBIYXNoQXJnLCBUcmFpdHNBcmc+OjppdGVyYXRvciBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hB
cmcsIFRyYWl0c0FyZz46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKK3sKKyAgICBpdGVy
YXRvciBpdCA9IG1fc2V0LmZpbmQodmFsdWUpOworICAgIGl0ZXJhdG9yIGVuZCA9IG1fc2V0LmVu
ZCgpOworICAgIGlmIChpdCAhPSBlbmQgJiYgISppdCkgLy8gRm91bmQgYSB6b21iaWUgdmFsdWUu
CisgICAgICAgIHJldHVybiBlbmQ7CisgICAgcmV0dXJuIGl0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgoraW5s
aW5lIHR5cGVuYW1lIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6Y29u
c3RfaXRlcmF0b3IgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+OjpmaW5k
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
V2Vha0dDU2V0Kj4odGhpcyktPmZpbmQodmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgoraW5saW5lIGJv
b2wgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+Ojpjb250YWlucyhjb25z
dCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBmaW5kKHZhbHVlKSAhPSBt
X3NldC5lbmQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK05FVkVSX0lOTElORSB2b2lkIFdlYWtHQ1NldDxW
YWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6cHJ1bmVTdGFsZUVudHJpZXMoKQoreworICAg
IG1fc2V0LnJlbW92ZUlmKFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiAhZW50cnk7
CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NTE3
OSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMjEtMDMtMzAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IEpTR2xvYmFsT2JqZWN0J3MgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCBhbmQgbV9jdXN0b21T
ZXR0ZXJGdW5jdGlvbk1hcCBzaG91bGQgYmUgc2V0cywgbm90IG1hcHMsIGFuZCBzaG91bGQgdXNl
IGJvdGggdGhlIGlkZW50aWZpZXIgYW5kIGZ1bmN0aW9uIHBvaW50ZXIgYXMgdGhlIGtleQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzNjEzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgQWRkcyBhIGhldGVyb2dl
bm91cyBIYXNoU2V0OjplbnN1cmUsIHdoaWNoIGFsbG93cyBsYXp5IGNvbnN0cnVjdGlvbiBvZiB0
aGUgdmFsdWUgdG8KKyAgICAgICAgaW5zZXJ0IGludG8gdGhlIEhhc2hTZXQgb25seSBpZiB0aGUg
aGV0ZXJvZ2Vub3VzIGtleSAoZS5nLiBhIGtleSArIEhhc2hUcmFuc2xhdG9yCisgICAgICAgIHRo
YXQgYXJlIG5vdCB0aGUgc2FtZSBhcyB0aGUgSGFzaFNldCdzIFZhbHVlVHlwZSkgZG9lcyBub3Qg
bWF0Y2ggYW55IGl0ZW0gaW4gdGhlCisgICAgICAgIHNldC4gRm9yIGV4YW1wbGUgZ2l2ZW4gYSBz
ZXQgb2YgRXhwZW5zaXZlVG9Db25zdHJ1Y3QsIGJ1dCB1bmlxdWVseSBpZGVudGlmaWFibGUKKyAg
ICAgICAgYnkgQ2hlYXBUb0NvbnN0cnVjdDoKKyAgICAgICAgCisgICAgICAgICAgICBIYXNoU2V0
PEV4cGVuc2l2ZVRvQ29uc3RydWN0PiBoYXNoU2V0OworICAgICAgICAgICAgLi4uCisgICAgICAg
ICAgICBzdHJ1Y3QgVHJhbnNsYXRvciB7CisgICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQ2hlYXBUb0NvbnN0cnVjdCYga2V5KQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEV4cGVuc2l2ZVRvQ29uc3Ry
dWN0JiBhLCBjb25zdCBDaGVhcFRvQ29uc3RydWN0JiBiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXNoU2V0LmVuc3VyZTxUcmFu
c2xhdG9yPihDaGVhcFRvQ29uc3RydWN0IHsgLi4uIH0sIFtdIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRXhwZW5zaXZlVG9Db25zdHJ1Y3QgeyAuLi4gfTsKKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgIFRoaXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBjdXN0b20gZ2V0dGVyL3NldHRlciBzZXRz
IHRvIGF2b2lkIGNvbnN0cnVjdGluZyB0aGUgR0Mgb2JqZWN0cworICAgICAgICB1bmxlc3MgdGhl
eSBhcmUgcmVhbGx5IG5lZWRlZC4KKworICAgICAgICBBbHNvIHRvb2sgdGhlIG9wZXJ0dW5pdHkg
dG8gcmVwbGFjZSBzb21lIHR5cGVkZWZzIHdpdGggdXNpbmdzLCBhbmQgZml4ZWQgc29tZSBjb21t
ZW50cy4KKworICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6OlRyYWl0cz46
OmVuc3VyZSk6CisKIDIwMjEtMDMtMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBVc2UgdGVybWluYXRlX3dpdGhfcmVhc29uIGluc3RlYWQg
b2YgeHBjX2Nvbm5lY3Rpb25fa2lsbApJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMjc1MTc5KQor
KysgU291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywzNiArMzMs
MzAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhcwogY2xhc3MgSGFz
aFNldCBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwcml2YXRlOgotICAg
IHR5cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOwotICAgIHR5cGVkZWYgVHJhaXRzQXJnIFZh
bHVlVHJhaXRzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRha2VUeXBlIFRh
a2VUeXBlOworICAgIHVzaW5nIEhhc2hGdW5jdGlvbnMgPSBIYXNoQXJnOworICAgIHVzaW5nIFZh
bHVlVHJhaXRzID0gVHJhaXRzQXJnOworICAgIHVzaW5nIFRha2VUeXBlID0gdHlwZW5hbWUgVmFs
dWVUcmFpdHM6OlRha2VUeXBlOwogCiBwdWJsaWM6Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1
ZVRyYWl0czo6VHJhaXRUeXBlIFZhbHVlVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBl
bmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFz
aFRhYmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwKLSAgICAgICAg
SGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPiBIYXNoVGFibGVUeXBlOwor
ICAgIHVzaW5nIEhhc2hUYWJsZVR5cGUgPSBIYXNoVGFibGU8VmFsdWVUeXBlLCBWYWx1ZVR5cGUs
IElkZW50aXR5RXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBWYWx1ZVRyYWl0cywgVmFsdWVUcmFp
dHM+OwogCiBwdWJsaWM6Ci0gICAgLyoKLSAgICAgKiBTaW5jZSBmaWd1cmluZyBvdXQgdGhlIGVu
dHJpZXMgb2YgYW4gaXRlcmF0b3IgaXMgY29uZnVzaW5nLCBoZXJlIGlzIGEgY2hlYXQgc2hlZXQ6
Ci0gICAgICogY29uc3QgS2V5VHlwZSYga2V5ID0gaXRlcmF0b3ItPmtleTsKLSAgICAgKi8KLSAg
ICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZh
bHVlVHlwZT4gaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRh
cHRlcjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+IGNvbnN0X2l0ZXJhdG9yOwotCi0gICAgLyoK
LSAgICAgKiBTaW5jZSBmaWd1cmluZyBvdXQgdGhlIGVudHJpZXMgb2YgYW4gQWRkUmVzdWx0IGlz
IGNvbmZ1c2luZywgaGVyZSBpcyBhIGNoZWF0IHNoZWV0OgotICAgICAqIGl0ZXJhdG9yIGl0ZXIg
PSBhZGRSZXN1bHQuaXRlcmF0b3I7Ci0gICAgICogYm9vbCBpc05ld0VudHJ5ID0gYWRkUmVzdWx0
LmlzTmV3RW50cnk7Ci0gICAgICovCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBl
OjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgSGFzaFNldCgpCi0gICAgewotICAgIH0KKyAg
ICAvLyBIYXNoU2V0IGl0ZXJhdG9ycyBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorICAg
IC8vICAgICAgY29uc3QgVmFsdWVUeXBlKiBnZXQoKSBjb25zdDsKKyAgICAvLyAgICAgIGNvbnN0
IFZhbHVlVHlwZSYgb3BlcmF0b3IqKCkgY29uc3Q7CisgICAgLy8gICAgICBjb25zdCBWYWx1ZVR5
cGUqIG9wZXJhdG9yLT4oKSBjb25zdDsKKyAgICB1c2luZyBpdGVyYXRvciA9IEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT47CisgICAgdXNpbmcg
Y29uc3RfaXRlcmF0b3IgPSBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVU
eXBlLCBWYWx1ZVR5cGU+OworCisgICAgLy8gSGFzaFNldCBBZGRSZXN1bHRzIGhhdmUgdGhlIGZv
bGxvd2luZyBmaWVsZHM6CisgICAgLy8gICAgICBJdGVyYXRvclR5cGUgaXRlcmF0b3I7CisgICAg
Ly8gICAgICBib29sIGlzTmV3RW50cnk7CisgICAgdXNpbmcgQWRkUmVzdWx0ID0gdHlwZW5hbWUg
SGFzaFRhYmxlVHlwZTo6QWRkUmVzdWx0OwogCisgICAgSGFzaFNldCgpID0gZGVmYXVsdDsKICAg
ICBIYXNoU2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxWYWx1ZUFyZz4gaW5pdGlhbGl6ZXJMaXN0
KQogICAgIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGluaXRpYWxpemVyTGlz
dCkKQEAgLTkzLDYgKzg3LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gYm9vbCBjb250
YWlucyhjb25zdCBUJikgY29uc3Q7CiAKKwogICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaW5jbHVk
ZXMgYm90aCBhbiBpdGVyYXRvciB0byB0aGUgYWRkZWQgdmFsdWUncyBsb2NhdGlvbiwKICAgICAv
LyBhbmQgYW4gaXNOZXdFbnRyeSBib29sIHRoYXQgaW5kaWNhdGVzIGlmIGl0IGlzIGEgbmV3IG9y
IGV4aXN0aW5nIGVudHJ5IGluIHRoZSBzZXQuCiAgICAgQWRkUmVzdWx0IGFkZChjb25zdCBWYWx1
ZVR5cGUmKTsKQEAgLTExMCw2ICsxMDUsMTYgQEAgcHVibGljOgogICAgIC8vICAgc3RhdGljIHRy
YW5zbGF0ZShWYWx1ZVR5cGUmLCBjb25zdCBUJiwgdW5zaWduZWQgaGFzaENvZGUpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFtZSBUPiBBZGRSZXN1bHQgYWRk
KGNvbnN0IFQmKTsKICAgICAKKyAgICAvLyBBbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0cmFuc2xh
dGVkIGFkZCgpLCBlbnN1cmUoKSB3aWxsIHN0aWxsIGRvIHRyYW5zbGF0aW9uCisgICAgLy8gYnkg
aGFzaGluZyBhbmQgY29tcGFyaW5nIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUg
Y29zdCBvZiB0eXBlCisgICAgLy8gY29udmVyc2lvbiBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkg
aW4gdGhlIHRhYmxlLCBidXQgcmF0aGVyIHRoYW4gYSBzdGF0aWMKKyAgICAvLyB0cmFuc2xhdGUo
KSBmdW5jdGlvbiwgdXNlcyB0aGUgcGFzc2VkIGluIGZ1bmN0b3IgdG8gcGVyZm9ybSBsYXp5IGNy
ZWF0aW9uIG9mCisgICAgLy8gdGhlIHZhbHVlIG9ubHkgaWYgaXQgaXMgbm90IGFscmVhZHkgdGhl
cmUuIEhhc2hUcmFuc2xhdG9yIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nCisgICAgLy8gZnVuY3Rp
b24gbWVtYmVyczoKKyAgICAvLyAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmKTsKKyAg
ICAvLyAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlVHlwZSYsIGNvbnN0IFQmKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
RnVuY3Rvcj4gQWRkUmVzdWx0IGVuc3VyZShUJiYsIEZ1bmN0b3ImJik7CisKICAgICAvLyBBdHRl
bXB0cyB0byBhZGQgYSBsaXN0IG9mIHRoaW5ncyB0byB0aGUgc2V0LiBSZXR1cm5zIHRydWUgaWYg
YW55IG9mCiAgICAgLy8gdGhlbSBhcmUgbmV3IHRvIHRoZSBzZXQuIFJldHVybnMgZmFsc2UgaWYg
dGhlIHNldCBpcyB1bmNoYW5nZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBl
PgpAQCAtMTcxLDYgKzE3NiwxNiBAQCBzdHJ1Y3QgSGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyIHsK
ICAgICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRyYWl0cywgdHlwZW5hbWUgVHJh
bnNsYXRvcj4KK3N0cnVjdCBIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0b3IgeworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyBy
ZXR1cm4gVHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyBy
ZXR1cm4gVHJhbnNsYXRvcjo6ZXF1YWwoYSwgYik7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBGdW5jdG9yPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYg
bG9jYXRpb24sIFUmJiwgRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBWYWx1ZVRy
YWl0czo6YXNzaWduVG9FbXB0eShsb2NhdGlvbiwgZnVuY3RvcigpKTsKKyAgICB9Cit9OworCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogaW5saW5lIHZvaWQg
SGFzaFNldDxULCBVLCBWPjo6c3dhcChIYXNoU2V0JiBvdGhlcikKIHsKQEAgLTIzMyw2ICsyNDgs
MTMgQEAgaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucwogICAgIHJldHVy
biBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhhc2hU
cmFuc2xhdG9yPj4odmFsdWUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+CitpbmxpbmUgYXV0byBI
YXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjplbnN1cmUoVCYmIGtleSwgRnVu
Y3RvciYmIGZ1bmN0b3IpIC0+IEFkZFJlc3VsdAoreworICAgIHJldHVybiBtX2ltcGwudGVtcGxh
dGUgYWRkPEhhc2hTZXRFbnN1cmVUcmFuc2xhdG9yQWRhcHRvcjxUcmFpdHMsIEhhc2hUcmFuc2xh
dG9yPj4oc3RkOjpmb3J3YXJkPFQ+KGtleSksIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9y
KSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CiBp
bmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkg
LT4gQWRkUmVzdWx0CiB7Cg==
</data>
<flag name="commit-queue"
          id="444435"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424694</attachid>
            <date>2021-03-30 14:10:45 -0700</date>
            <delta_ts>2021-03-30 19:55:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223613-20210330141044.patch</filename>
            <type>text/plain</type>
            <size>48350</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMS0wMy0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QncyBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwIGFuZCBtX2N1c3RvbVNl
dHRlckZ1bmN0aW9uTWFwIHNob3VsZCBiZSBzZXRzLCBub3QgbWFwcywgYW5kIHNob3VsZCB1c2Ug
Ym90aCB0aGUgaWRlbnRpZmllciBhbmQgZnVuY3Rpb24gcG9pbnRlciBhcyB0aGUga2V5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM2MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICAtIEFkZHMgYSBnZW5lcmlj
IFdlYWtHQ1NldCBjbGFzcyB0byBnbyB3aXRoIHRoZSBleGlzdGluZyBXZWFrR0NNYXAuCisgICAg
ICAgIC0gUmVuYW1lcyBXZWFrR0NNYXBCYXNlIHRvIFdlYWtHQ0hhc2hUYWJsZSwgbW92ZXMgaXQg
dG8gaXRzIG93biBmaWxlCisgICAgICAgICAgYW5kIG5vdyB1c2VzIGl0IGFzIHRoZSBiYXNlIGNs
YXNzIG9mIGJvdGggV2Vha0dDU2V0IGFuZCBXZWFrR0NNYXAuCisgICAgICAgIC0gUmVwbGFjZXMg
SlNHbG9iYWxPYmplY3QncyBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9jdXN0b21TZXR0ZXJGdW5j
dGlvbk1hcAorICAgICAgICAgIHdpdGggY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvY3VzdG9tU2V0
dGVyRnVuY3Rpb25TZXQsIHVzaW5nIHRoZSBuZXcKKyAgICAgICAgICBXZWFrR0NTZXQsIGFuZCB1
cGRhdGVzIHRoZW0gdG8gdXNlIGJvdGggdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIAorICAgICAg
ICAgIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBrZXksIHJhdGhlciB0aGFuIGp1c3QgdGhlIGZ1bmN0
aW9uIHBvaW50ZXIgd2hpY2gKKyAgICAgICAgICBpcyB3aGF0IHRoZSBwcmV2aW91cyBjb2RlIGRp
ZC4gVGhpcyBhbGxvd3MgbXVsdGlwbGUgY3VzdG9tIGZ1bmN0aW9ucworICAgICAgICAgIHRvIHVz
ZSB0aGUgc2FtZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHBvaW50ZXIgYXMgbG9uZyBhcyB0aGV5IGhh
dmUgZGlzdGluY3QKKyAgICAgICAgICBwcm9wZXJ0eSBuYW1lcywgd2hpY2ggaXMgZ29pbmcgdG8g
YmUgdXNlZCB0byBvcHRpbWl6ZSB0aGUgYmluZGluZ3MgZm9yCisgICAgICAgICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgZmls
ZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpydW5F
bmRQaGFzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtH
Q0hhc2hUYWJsZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZWdpc3RlcldlYWtHQ0hhc2hUYWJs
ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6cmVnaXN0ZXJXZWFrR0NNYXApOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpIZWFwOjp1bnJlZ2lzdGVyV2Vha0dDTWFwKTogRGVsZXRlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZS4gV2Vha0dDTWFwQmFz
ZSAtPiBXZWFrR0NIYXNoVGFibGUuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ0lubGluZXMuaDoK
KyAgICAgICAgQWRkIFdlYWtHQ1NldElubGluZXMuaAorCisgICAgICAgICogcnVudGltZS9KU0N1
c3RvbUdldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21H
ZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgICogcnVudGltZS9KU0N1c3RvbVNldHRlckZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6SlNDdXN0b21TZXR0ZXJG
dW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTQ3VzdG9t
U2V0dGVyRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0N1c3RvbVNldHRl
ckZ1bmN0aW9uLmg6CisgICAgICAgIEFkZCBoZWxwZXIgdHlwZSBDdXN0b21GdW5jdGlvblBvaW50
ZXIgYW5kIGhlbHBlciBmdW5jdGlvbiBjdXN0b21GdW5jdGlvblBvaW50ZXIoKQorICAgICAgICB0
byBhbGxvdyBzb21lIGdlbmVyaWMgaGFzaGluZyBjb2RlIHRvIHJ1biBvbiBlaXRoZXIgSlNDdXN0
b21HZXR0ZXJGdW5jdGlvbgorICAgICAgICBvciBKU0N1c3RvbVNldHRlckZ1bmN0aW9uLgorCisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6V2Vha0N1c3RvbUdldHRlck9y
U2V0dGVySGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpXZWFrQ3Vz
dG9tR2V0dGVyT3JTZXR0ZXJIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvblNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjpjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpjdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCk6IERlbGV0ZWQuCisgICAgICAg
IFJlcGxhY2UgbV9jdXN0b21HZXR0ZXJGdW5jdGlvbk1hcC9tX2N1c3RvbVNldHRlckZ1bmN0aW9u
TWFwIHdpdGggCisgICAgICAgIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TZXQvbV9jdXN0b21TZXR0
ZXJGdW5jdGlvblNldC4gQXMgdGhlIGtleSBpcyBpbmNsdWRlZAorICAgICAgICBpbiB0aGUgdmFs
dWUsIGl0IHNhdmVzIHNwYWNlIHRvIHVzZSBhIHNldCByYXRoZXIgdGhhbiBhIG1hcC4gV2Ugbm93
IGFsc28KKyAgICAgICAgaGFzaCBhbmQgY29tcGFyZSBib3RoIHRoZSBmdW5jdGlvbiBwb2ludGVy
IGFuZCB0aGUgcHJvcGVydHkgbmFtZSB0byBhbGxvdworICAgICAgICBzaGFyaW5nIGltcGxlbWVu
dGF0aW9ucy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjo6aGFzaCk6CisgICAgICAg
IChKU0M6OldlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yOjplcXVhbCk6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgorICAgICAgICBVcGRhdGUgY3JlYXRpb24gZnVu
Y3Rpb25zIHRvIHVzZSB0aGUgbmV3IHNldHMsIG1ha2luZyB1c2Ugb2YgdGhlCisgICAgICAgIGVu
c3VyZVZhbHVlIGZ1bmN0aW9uIGFuZCBhIEhhc2hUcmFuc2xhdG9yIGFsbG93aW5nIHRoZSB1c2Ug
b2YgYQorICAgICAgICBzdGQ6OnBhaXI8UHJvcGVydHlOYW1lLCBGdW5jdGlvblBvaW50ZXI+IGFz
IGFuIGFsdGVybmF0aXZlIGxvb2t1cAorICAgICAgICBrZXkuIFRoaXMgYWxsb3dzIHVzIHRvIGF2
b2lkIGNyZWF0aW5nIHRoZSBKU0N1c3RvbUdldHRlckZ1bmN0aW9uL0pTQ3VzdG9tU2V0dGVyRnVu
Y3Rpb24KKyAgICAgICAgcG9pbnRlciBpZiBvbmUgd2l0aCB0aGUgc2FtZSBwcm9wZXJ0eSBuYW1l
IGFuZCBmdW5jdGlvbiBwb2ludGVyIGFyZQorICAgICAgICBhbHJlYWR5IGluIHRoZSBzZXQuCisK
KyAgICAgICAgKiBydW50aW1lL1dlYWtHQ0hhc2hUYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6V2Vha0dDSGFzaFRhYmxlOjp+V2Vha0dDSGFzaFRhYmxlKToKKyAgICAgICAgTW92ZWQgZnJv
bSBXZWFrR0NNYXAgYW5kIHJlbmFtZWQgYXMgaXQgaXMgbm93IHRoZSBiYXNlIG9mIGJvdGgKKyAg
ICAgICAgV2Vha0dDTWFwIGFuZCBXZWFrR0NTZXQuCisgCisgICAgICAgICogcnVudGltZS9XZWFr
R0NNYXAuaDoKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgV2Vha0dDSGFzaFRhYmxlIGJhc2Ug
Y2xhc3MuCisKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6S2V5VHJhaXRzQXJnPjo6V2Vha0dDTWFwKToKKyAgICAgICAgKEpTQzo6S2V5VHJhaXRz
QXJnPjo6fldlYWtHQ01hcCk6CisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IEhlYXAgZnVuY3Rpb24g
bmFtZXMgZm9yIFdlYWtHQ0hhc2hUYWJsZS4KKworICAgICAgICAqIHJ1bnRpbWUvV2Vha0dDU2V0
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6VHJhaXRzQXJnPjo6V2Vha0dDU2V0KToKKyAgICAgICAgKEpTQzo6VHJh
aXRzQXJnPjo6fldlYWtHQ1NldCk6CisgICAgICAgIChKU0M6OlRyYWl0c0FyZz46OmZpbmQpOgor
ICAgICAgICAoSlNDOjpUcmFpdHNBcmc+OjpmaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHJh
aXRzQXJnPjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpUcmFpdHNBcmc+OjpwcnVu
ZVN0YWxlRW50cmllcyk6CisgICAgICAgIEFkZGVkIGEgbWluaW1hbCBXZWFrR0NTZXQgYmFzZWQg
b24gV2Vha0dDTWFwLiAKKwogMjAyMS0wMy0yOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFICYgRU5BQkxFX0lO
REVYRURfREFUQUJBU0VfSU5fV09SS0VSUywgaXQgc2VlbXMgbGlrZSBpdCBpcyBvbiBmb3IgYWxs
IHBvcnRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAy
NzUxNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOTcsOCArMTA5NywxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9WTVRyYXBzLmgKICAgICBydW50aW1lL1Zhck9mZnNl
dC5oCiAgICAgcnVudGltZS9XYXRjaGRvZy5oCisgICAgcnVudGltZS9XZWFrR0NIYXNoVGFibGUu
aAogICAgIHJ1bnRpbWUvV2Vha0dDTWFwLmgKICAgICBydW50aW1lL1dlYWtHQ01hcElubGluZXMu
aAorICAgIHJ1bnRpbWUvV2Vha0dDU2V0LmgKKyAgICBydW50aW1lL1dlYWtHQ1NldElubGluZXMu
aAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmllcklu
bGluZXMuaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc1
MTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MjksNiArMTcyOSw5IEBACiAJCUJD
RDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QyMDM0ODBFMTcxMzVFMDAyQzdFODIg
LyogRGF0ZVByb3RvdHlwZS5oICovOyB9OwogCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdFODIgLyog
RGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRDIwM0U3MEUxNzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmx1dC5o
ICovOyB9OwogCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0RFM0FCMTBFNkM4MkNG
MDAxNDUzQTcgLyogU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQkNFMkZBRkIyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFMkZBRkEy
NjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZEMjYwOTE2RkYwMDBBNTEwRiAvKiBXZWFr
R0NTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRTJGQUZGMjYw
OTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFr
R0NIYXNoVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjA1MTIwRTIwM0VGODAwQjlB
NjREIC8qIEFyZ0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkRGQ0IyQkJFOTBGNDEzNDlFMUIwQkVEIC8qIEpTU291cmNlQ29k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzAzMjE3
NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODkyLDYgKzQ4OTUsOSBAQAogCQlCQ0RE
NTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRPcGNvZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkNERTNBQjAwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0RFM0FCMTBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0dXJl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQ0UyRkFGQTI2MDkxNkVGMDAwQTUxMEYgLyogV2Vha0dD
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQ0UyRkFGQzI2MDkxNkZGMDAwQTUxMEYgLyogV2Vha0dDU2V0SW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWFrR0NTZXRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRTJGQUZFMjYwOTE3ODIwMDBBNTEwRiAvKiBXZWFrR0NIYXNoVGFibGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2Vha0dDSGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyZ0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTAsOCArNzg5NiwxMSBAQAogCQkJCUZFNkY1NkREMUU2
NEU5MjAwMEQxNzgwMSAvKiBWTVRyYXBzLmggKi8sCiAJCQkJRkVEOTRGMkIxNzFFM0UyMzAwQkU3
N0E0IC8qIFdhdGNoZG9nLmNwcCAqLywKIAkJCQlGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyog
V2F0Y2hkb2cuaCAqLywKKwkJCQlCQ0UyRkFGRTI2MDkxNzgyMDAwQTUxMEYgLyogV2Vha0dDSGFz
aFRhYmxlLmggKi8sCiAJCQkJMTRCRkNFNjgxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5o
ICovLAogCQkJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmgg
Ki8sCisJCQkJQkNFMkZBRkEyNjA5MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oICovLAorCQkJ
CUJDRTJGQUZDMjYwOTE2RkYwMDBBNTEwRiAvKiBXZWFrR0NTZXRJbmxpbmVzLmggKi8sCiAJCQkJ
QTdDQTNBREQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJ
CQkJQTdDQTNBREUxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oICovLAog
CQkJCUUzQTMyQkM1MUZDODMxMkQwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5jcHAgKi8sCkBAIC05
MjEzLDYgKzkyMjIsNyBAQAogCQkJCThCQzA2NDhCMUUxQUJBOTQwMEIyQjhDQSAvKiBBc3luY0dl
bmVyYXRvckZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCQzA2NDhB
MUUxQUJBN0IwMEIyQjhDQSAvKiBBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4QkMwNjQ5MjFFMUFEQ0M0MDBCMkI4Q0EgLyogQXN5bmNHZW5lcmF0
b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRTJGQUZGMjYwOTE3ODIwMDBBNTEw
RiAvKiBXZWFrR0NIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCThCM0JGNUU0MUUzRDM2
OEIwMDc2QTg3QSAvKiBBc3luY0dlbmVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCThCQzA2NDk2MUUxRDg0NUMwMEIyQjhDQSAvKiBBc3luY0l0ZXJhdG9yUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2QTM4Q0ZBQTFFMzJCNUFCMDA2MDIwNkYgLyogQXN5bmNT
dGFja1RyYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NzYsNiArOTY4Niw3IEBACiAJCQkJMTQz
ODZBNzUxREQ2OTg5NTAwODY1MkM0IC8qIERpcmVjdEV2YWxFeGVjdXRhYmxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjM3MzA4RjFDMENENjg1MDAwNTJCRkEgLyogRGlzYWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU0REVGRjFFOEQ3NkZBMDBB
ODkyQzUgLyogRGlzYWxsb3dTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZBRkIyNjA5
MTZFRjAwMEE1MTBGIC8qIFdlYWtHQ1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1NERFRkIx
RThDNkQ4ODAwQTg5MkM1IC8qIERpc2FsbG93Vk1FbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMxNjE4MTMxRUM1RkUxNzAwMDZBMjE4IC8qIERPTUFubm90YXRpb24uaCBpbiBIZWFk
ZXJzICovLApAQCAtMTAzMzMsNiArMTAzNDQsNyBAQAogCQkJCTE0Rjc5RjcwMjE2RUFGRDIwMDA0
NkQzOSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjQ4NzJFMjE0MUQwNDgwMEFC
MEQzRSAvKiBPcGNvZGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEE0NjgwRDIxNkZB
NTZBMDAwRDJCMUEgLyogT3Bjb2RlU2l6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMkZBRkQy
NjA5MTZGRjAwMEE1MTBGIC8qIFdlYWtHQ1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDI3NTE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5F
bmRQaGFzZShHQ0NvCiAgICAgICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygp
OwogCiAgICAgICAgIHJlYXBXZWFrSGFuZGxlcygpOwotICAgICAgICBwcnVuZVN0YWxlRW50cmll
c0Zyb21XZWFrR0NNYXBzKCk7CisgICAgICAgIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ0hh
c2hUYWJsZXMoKTsKICAgICAgICAgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICAgICAgc25hcHNo
b3RVbnN3ZXB0KCk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsg
Ly8gV2UgcmVseSBvbiB0aGVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnMgcnVubmluZyBiZWZv
cmUgY2xlYXJDdXJyZW50bHlFeGVjdXRpbmcgc2luY2UgQ29kZUJsb2NrJ3MgZmluYWxpemVyIHJl
bGllcyBvbiBxdWVyeWluZyBjdXJyZW50bHkgZXhlY3V0aW5nLgpAQCAtMjIxNywxMiArMjIxNywx
MiBAQCB2b2lkIEhlYXA6OnJlYXBXZWFrSGFuZGxlcygpCiAgICAgbV9vYmplY3RTcGFjZS5yZWFw
V2Vha1NldHMoKTsKIH0KIAotdm9pZCBIZWFwOjpwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NN
YXBzKCkKK3ZvaWQgSGVhcDo6cHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDSGFzaFRhYmxlcygp
CiB7CiAgICAgaWYgKCFtX2NvbGxlY3Rpb25TY29wZSB8fCBtX2NvbGxlY3Rpb25TY29wZS52YWx1
ZSgpICE9IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAo
V2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwIDogbV93ZWFrR0NNYXBzKQotICAgICAgICB3ZWFrR0NN
YXAtPnBydW5lU3RhbGVFbnRyaWVzKCk7CisgICAgZm9yIChhdXRvKiB3ZWFrR0NIYXNoVGFibGUg
OiBtX3dlYWtHQ0hhc2hUYWJsZXMpCisgICAgICAgIHdlYWtHQ0hhc2hUYWJsZS0+cHJ1bmVTdGFs
ZUVudHJpZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpzd2VlcEFycmF5QnVmZmVycygpCkBAIC0yNjc0
LDE0ICsyNjc0LDE0IEBAIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWYK
ICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKLXZvaWQgSGVhcDo6cmVnaXN0
ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjpyZWdpc3Rl
cldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqIHdlYWtHQ0hhc2hUYWJsZSkKIHsKLSAg
ICBtX3dlYWtHQ01hcHMuYWRkKHdlYWtHQ01hcCk7CisgICAgbV93ZWFrR0NIYXNoVGFibGVzLmFk
ZCh3ZWFrR0NIYXNoVGFibGUpOwogfQogCi12b2lkIEhlYXA6OnVucmVnaXN0ZXJXZWFrR0NNYXAo
V2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKQordm9pZCBIZWFwOjp1bnJlZ2lzdGVyV2Vha0dDSGFz
aFRhYmxlKFdlYWtHQ0hhc2hUYWJsZSogd2Vha0dDSGFzaFRhYmxlKQogewotICAgIG1fd2Vha0dD
TWFwcy5yZW1vdmUod2Vha0dDTWFwKTsKKyAgICBtX3dlYWtHQ0hhc2hUYWJsZXMucmVtb3ZlKHdl
YWtHQ0hhc2hUYWJsZSk7CiB9CiAKIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGVCbG9jayhzaXplX3Qg
Y2FwYWNpdHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyNzUx
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDcgKzg3LDcgQEAgY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBTd2Vl
cGluZ1Njb3BlOwogY2xhc3MgVk07CiBjbGFzcyBWZXJpZmllclNsb3RWaXNpdG9yOwotY2xhc3Mg
V2Vha0dDTWFwQmFzZTsKK2NsYXNzIFdlYWtHQ0hhc2hUYWJsZTsKIHN0cnVjdCBDdXJyZW50VGhy
ZWFkU3RhdGU7CiAKICNpZmRlZiBKU0NfR0xJQl9BUElfRU5BQkxFRApAQCAtMjg5LDggKzI4OSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbGVhc2VTb29uKHN0ZDo6dW5pcXVlX3B0cjxKU0NHTGli
V3JhcHBlck9iamVjdD4mJik7CiAjZW5kaWYKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dDTWFwKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHVucmVnaXN0ZXJXZWFrR0NNYXAoV2Vha0dDTWFwQmFzZSogd2Vha0dD
TWFwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlZ2lzdGVyV2Vha0dDSGFzaFRhYmxl
KFdlYWtHQ0hhc2hUYWJsZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5yZWdpc3Rl
cldlYWtHQ0hhc2hUYWJsZShXZWFrR0NIYXNoVGFibGUqKTsKIAogICAgIHZvaWQgYWRkTG9naWNh
bGx5RW1wdHlXZWFrQmxvY2soV2Vha0Jsb2NrKik7CiAKQEAgLTUyNiw3ICs1MjYsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZW5kTWFya2luZygpOwogCiAgICAgdm9pZCByZWFwV2Vha0hhbmRsZXMo
KTsKLSAgICB2b2lkIHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ01hcHMoKTsKKyAgICB2b2lk
IHBydW5lU3RhbGVFbnRyaWVzRnJvbVdlYWtHQ0hhc2hUYWJsZXMoKTsKICAgICB2b2lkIHN3ZWVw
QXJyYXlCdWZmZXJzKCk7CiAgICAgdm9pZCBzbmFwc2hvdFVuc3dlcHQoKTsKICAgICB2b2lkIGRl
bGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CkBAIC02ODksNyArNjg5LDcgQEAgcHJpdmF0ZToK
ICNlbmRpZgogICAgIHVuc2lnbmVkIG1fZGVmZXJyYWxEZXB0aCB7IDAgfTsKIAotICAgIEhhc2hT
ZXQ8V2Vha0dDTWFwQmFzZSo+IG1fd2Vha0dDTWFwczsKKyAgICBIYXNoU2V0PFdlYWtHQ0hhc2hU
YWJsZSo+IG1fd2Vha0dDSGFzaFRhYmxlczsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a1N0YWNrQXJyYXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2aXNpb24gMjc1MTcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCwzICs1NCw0IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
I2luY2x1ZGUgIlRocm93U2NvcGUuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCisj
aW5jbHVkZSAiV2Vha0dDU2V0SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21HZXR0ZXJGdW5jdGlvbi5jcHAJKHJldmlz
aW9uIDI3NTE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0
dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KIAogICAgIEpTQ3VzdG9tR2V0dGVyRnVu
Y3Rpb24qIGN1c3RvbUdldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tR2V0dGVyRnVuY3Rp
b24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKTsKLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyID0gY3VzdG9tR2V0
dGVyRnVuY3Rpb24tPmdldHRlcigpOworICAgIGF1dG8gZ2V0dGVyID0gY3VzdG9tR2V0dGVyRnVu
Y3Rpb24tPmdldHRlcigpOwogCiAgICAgaWYgKGF1dG8gZG9tQXR0cmlidXRlID0gY3VzdG9tR2V0
dGVyRnVuY3Rpb24tPmRvbUF0dHJpYnV0ZSgpKSB7CiAgICAgICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKHZtLCBkb21BdHRyaWJ1dGUtPmNsYXNzSW5mbykpCkBAIC01MCw3ICs1MCw3IEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihjdXN0b21HZXR0ZXJGdW4KICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGdldHRlcihnbG9iYWxPYmplY3QsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFs
dWUpLCBjdXN0b21HZXR0ZXJGdW5jdGlvbi0+cHJvcGVydHlOYW1lKCkpKTsKIH0KIAotSlNDdXN0
b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgR2V0VmFs
dWVGdW5jIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmli
dXRlKQorSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6SlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYg
dm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5
TmFtZSwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRl
QW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3Byb3BlcnR5TmFtZShJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKQogICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQpA
QCAtNTgsNyArNTgsNyBAQCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpKU0N1c3RvbUdldHRlckZ1
CiB7CiB9CiAKLUpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246
OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFByb3Bl
cnR5TmFtZSYgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0dGVyLCBPcHRpb25hbDxET01B
dHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCitKU0N1c3RvbUdldHRlckZ1bmN0aW9u
KiBKU0N1c3RvbUdldHRlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgQ3VzdG9tRnVu
Y3Rpb25Qb2ludGVyIGdldHRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9t
QXR0cmlidXRlKQogewogICAgIEFTU0VSVChnZXR0ZXIpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY3VzdG9tR2V0dGVyRnVuY3Rpb25DYWxs
LCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgU3RyaW5nKHByb3BlcnR5TmFtZS5wdWJs
aWNOYW1lKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9t
R2V0dGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0N1c3RvbUdldHRlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDI3NTE3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tR2V0dGVyRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Z1bmN0aW9u
IEJhc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOwogCisgICAgdXNpbmcgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyID0g
R2V0VmFsdWVGdW5jOworCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKQEAgLTQ5LDE5
ICs1MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5v
dGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpT
Q3VzdG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
UHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyLCBPcHRpb25hbDxET01BdHRyaWJ1
dGVBbm5vdGF0aW9uPiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCiAgICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0eU5hbWU7IH0KLSAgICBHZXRWYWx1ZUZ1bmMgZ2V0dGVyKCkgY29uc3QgeyByZXR1
cm4gbV9nZXR0ZXI7IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIGdldHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZ2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0b21G
dW5jdGlvblBvaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlcjsgfTsKICAgICBPcHRpb25h
bDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiBt
X2RvbUF0dHJpYnV0ZTsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1c3RvbUdldHRlckZ1bmN0aW9u
KFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgY29u
c3QgUHJvcGVydHlOYW1lJiwgR2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5v
dGF0aW9uPik7CisgICAgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFi
bGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEN1
c3RvbUZ1bmN0aW9uUG9pbnRlciwgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4pOwog
CiAgICAgSWRlbnRpZmllciBtX3Byb3BlcnR5TmFtZTsKLSAgICBHZXRWYWx1ZUZ1bmMgbV9nZXR0
ZXI7CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIG1fZ2V0dGVyOwogICAgIE9wdGlvbmFsPERP
TUF0dHJpYnV0ZUFubm90YXRpb24+IG1fZG9tQXR0cmlidXRlOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDI3NTE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxOSAr
MzYsMTkgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3VzdG9tUwogSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGN1c3RvbVNldHRlckZ1bmN0aW9uQ2FsbCwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBhdXRvIGN1
c3RvbVNldHRlckZ1bmN0aW9uID0ganNDYXN0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpOwotICAgIFB1dFZhbHVlRnVuYyBzZXR0ZXIgPSBjdXN0b21TZXR0
ZXJGdW5jdGlvbi0+c2V0dGVyKCk7CisgICAgYXV0byBzZXR0ZXIgPSBjdXN0b21TZXR0ZXJGdW5j
dGlvbi0+c2V0dGVyKCk7CiAgICAgc2V0dGVyKGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZW5jb2Rl
KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLCBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSksIGN1c3RvbVNldHRlckZ1bmN0aW9uLT5wcm9wZXJ0eU5hbWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAotSlNDdXN0b21TZXR0ZXJG
dW5jdGlvbjo6SlNDdXN0b21TZXR0ZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5jIHNl
dHRlcikKK0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb246OkpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24oVk0m
IHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0
eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiAgICAgOiBCYXNlKHZtLCBleGVj
dXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fcHJvcGVydHlOYW1lKElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpCiAgICAgLCBtX3NldHRl
cihzZXR0ZXIpCiB7CiB9CiAKLUpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIEpTQ3VzdG9tU2V0dGVy
RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMgc2V0dGVyKQorSlND
dXN0b21TZXR0ZXJGdW5jdGlvbiogSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9w
ZXJ0eU5hbWUsIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBzZXR0ZXIpCiB7CiAgICAgQVNTRVJUKHNl
dHRlcik7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5j
dGlvbihjdXN0b21TZXR0ZXJGdW5jdGlvbkNhbGwsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVj
dG9yLCBTdHJpbmcocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ3VzdG9tU2V0dGVyRnVuY3Rpb24u
aAkocmV2aXNpb24gMjc1MTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
dXN0b21TZXR0ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKKyAgICB1
c2luZyBDdXN0b21GdW5jdGlvblBvaW50ZXIgPSBQdXRWYWx1ZUZ1bmM7CisKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKIApAQCAtNDksMTggKzUxLDE5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiogY3Jl
YXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUmLCBQdXRWYWx1ZUZ1
bmMpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0aW9u
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYsIEN1c3Rv
bUZ1bmN0aW9uUG9pbnRlcik7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU5h
bWU7IH0KLSAgICBQdXRWYWx1ZUZ1bmMgc2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0ZXI7
IH07CisgICAgQ3VzdG9tRnVuY3Rpb25Qb2ludGVyIHNldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2V0dGVyOyB9OworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBjdXN0b21GdW5jdGlvblBvaW50
ZXIoKSBjb25zdCB7IHJldHVybiBtX3NldHRlcjsgfTsKIAogcHJpdmF0ZToKLSAgICBKU0N1c3Rv
bVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgUHV0VmFsdWVGdW5jKTsKKyAgICBKU0N1
c3RvbVNldHRlckZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgY29uc3QgUHJvcGVydHlOYW1lJiwgQ3VzdG9tRnVuY3Rpb25Qb2ludGVy
KTsKIAogICAgIElkZW50aWZpZXIgbV9wcm9wZXJ0eU5hbWU7Ci0gICAgUHV0VmFsdWVGdW5jIG1f
c2V0dGVyOworICAgIEN1c3RvbUZ1bmN0aW9uUG9pbnRlciBtX3NldHRlcjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjc1MTcyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDcs
OCArNTA3LDggQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgUwogICAg
ICwgbV9udW1iZXJUb1N0cmluZ1dhdGNocG9pbnRTZXQoSXNXYXRjaGVkKQogICAgICwgbV9ydW50
aW1lRmxhZ3MoKQogICAgICwgbV9zdGFja1RyYWNlTGltaXQoT3B0aW9uczo6ZGVmYXVsdEVycm9y
U3RhY2tUcmFjZUxpbWl0KCkpCi0gICAgLCBtX2N1c3RvbUdldHRlckZ1bmN0aW9uTWFwKHZtKQot
ICAgICwgbV9jdXN0b21TZXR0ZXJGdW5jdGlvbk1hcCh2bSkKKyAgICAsIG1fY3VzdG9tR2V0dGVy
RnVuY3Rpb25TZXQodm0pCisgICAgLCBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU2V0KHZtKQogICAg
ICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/IGds
b2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDI3NTE3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKICNpbmNsdWRl
ICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAj
aW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJMYXp5UHJv
cGVydHkuaCIKICNpbmNsdWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJMYXp5
UHJvcGVydHkuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJQYXJz
ZXJNb2Rlcy5oIgogI2luY2x1ZGUgIlJlZ0V4cEdsb2JhbERhdGEuaCIKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1
ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJXZWFrR0NTZXQuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgpAQCAtNTQ2LDggKzU0Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzTWFwUHJvdG90
eXBlU2V0RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKICAgICBib29sIGlzU2V0UHJvdG90eXBlQWRk
RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIAotICAgIFdlYWtHQ01hcDxHZXRWYWx1ZUZ1bmMsIEpT
Q3VzdG9tR2V0dGVyRnVuY3Rpb24+JiBjdXN0b21HZXR0ZXJGdW5jdGlvbk1hcCgpIHsgcmV0dXJu
IG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25NYXA7IH0KLSAgICBXZWFrR0NNYXA8UHV0VmFsdWVGdW5j
LCBKU0N1c3RvbVNldHRlckZ1bmN0aW9uPiYgY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAoKSB7IHJl
dHVybiBtX2N1c3RvbVNldHRlckZ1bmN0aW9uTWFwOyB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICB1c2luZyBSZWZlcmVuY2VkR2xvYmFsUHJvcGVydHlXYXRjaHBvaW50U2V0cyA9IEhhc2hN
YXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgUmVmPFdhdGNocG9pbnRTZXQ+LCBJZGVudGlm
aWVyUmVwSGFzaD47CkBAIC01NjMsOCArNTYyLDIxIEBAIHB1YmxpYzoKICAgICBSdW50aW1lRmxh
Z3MgbV9ydW50aW1lRmxhZ3M7CiAgICAgQ29uc29sZUNsaWVudCogbV9jb25zb2xlQ2xpZW50IHsg
bnVsbHB0ciB9OwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YWNrVHJhY2VMaW1pdDsKLSAg
ICBXZWFrR0NNYXA8R2V0VmFsdWVGdW5jLCBKU0N1c3RvbUdldHRlckZ1bmN0aW9uPiBtX2N1c3Rv
bUdldHRlckZ1bmN0aW9uTWFwOwotICAgIFdlYWtHQ01hcDxQdXRWYWx1ZUZ1bmMsIEpTQ3VzdG9t
U2V0dGVyRnVuY3Rpb24+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25NYXA7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoIHsK
KyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2VhazxUPiYpOworICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPFQ+JiwgY29uc3QgV2VhazxUPiYpOworICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm9wZXJ0eU5hbWUmLCB0eXBlbmFtZSBUOjpD
dXN0b21GdW5jdGlvblBvaW50ZXIpOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBXZWFr
R0NTZXQ8SlNDdXN0b21HZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9yU2V0dGVySGFz
aDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblNldDsKKyAg
ICBXZWFrR0NTZXQ8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbiwgV2Vha0N1c3RvbUdldHRlck9yU2V0
dGVySGFzaDxKU0N1c3RvbVNldHRlckZ1bmN0aW9uPj4gbV9jdXN0b21TZXR0ZXJGdW5jdGlvblNl
dDsKKworICAgIFdlYWtHQ1NldDxKU0N1c3RvbUdldHRlckZ1bmN0aW9uLCBXZWFrQ3VzdG9tR2V0
dGVyT3JTZXR0ZXJIYXNoPEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb24+PiYgY3VzdG9tR2V0dGVyRnVu
Y3Rpb25TZXQoKSB7IHJldHVybiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uU2V0OyB9CisgICAgV2Vh
a0dDU2V0PEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24sIFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhh
c2g8SlNDdXN0b21TZXR0ZXJGdW5jdGlvbj4+JiBjdXN0b21TZXR0ZXJGdW5jdGlvblNldCgpIHsg
cmV0dXJuIG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TZXQ7IH0KIAogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgY29uc3QgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0QXREZWJ1Z2dlckVudHJ5
IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDI3NTE3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0N1c3RvbUdldHRlckZ1
bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNDdXN0b21TZXR0ZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMaW5rVGltZUNvbnN0YW50LmgiCiAjaW5jbHVkZSAi
T2JqZWN0UHJvdG90eXBlLmgiCkBAIC0xMjQsNCArMTI2LDI5IEBAIEFMV0FZU19JTkxJTkUgVk0m
IGdldFZNKEpTR2xvYmFsT2JqZWN0KiAKICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT52bSgpOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHVuc2lnbmVkIEpTR2xvYmFsT2JqZWN0
OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjpoYXNoKGNvbnN0IFdlYWs8VD4mIHZh
bHVlKQoreworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBo
YXNoKHZhbHVlLT5wcm9wZXJ0eU5hbWUoKSwgdmFsdWUtPmN1c3RvbUZ1bmN0aW9uUG9pbnRlcigp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIEpTR2xvYmFsT2JqZWN0
OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoPFQ+OjplcXVhbChjb25zdCBXZWFrPFQ+JiBh
LCBjb25zdCBXZWFrPFQ+JiBiKQoreworICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBhID09IGI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citp
bmxpbmUgdW5zaWduZWQgSlNHbG9iYWxPYmplY3Q6OldlYWtDdXN0b21HZXR0ZXJPclNldHRlckhh
c2g8VD46Omhhc2goY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUsIHR5cGVuYW1lIFQ6
OkN1c3RvbUZ1bmN0aW9uUG9pbnRlciBmdW5jdGlvblBvaW50ZXIpCit7CisgICAgdW5zaWduZWQg
aGFzaCA9IERlZmF1bHRIYXNoPHR5cGVuYW1lIFQ6OkN1c3RvbUZ1bmN0aW9uUG9pbnRlcj46Omhh
c2goZnVuY3Rpb25Qb2ludGVyKTsKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc051bGwoKSkKKyAg
ICAgICAgaGFzaCA9IFdURjo6cGFpckludEhhc2goaGFzaCwgcHJvcGVydHlOYW1lLnVpZCgpLT5l
eGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpKTsKKyAgICByZXR1cm4gaGFzaDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzUxNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MjEsMjIgKzM1MjEsNDUgQEAgQnV0
dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaQogICAgIHJldHVybiBCdXR0ZXJm
bHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShidXR0ZXJmbHkoKSwgdm0sIHRoaXMsIHN0
cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IFdlYWtDdXN0b21HZXR0ZXJPclNldHRlckhhc2hUcmFuc2xhdG9yIHsKKyAgICB1
c2luZyBCYXNlSGFzaCA9IEpTR2xvYmFsT2JqZWN0OjpXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJI
YXNoPFQ+OworCisgICAgdXNpbmcgS2V5ID0gc3RkOjpwYWlyPFByb3BlcnR5TmFtZSwgdHlwZW5h
bWUgVDo6Q3VzdG9tRnVuY3Rpb25Qb2ludGVyPjsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IEtleSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VIYXNoOjpoYXNoKHN0
ZDo6Z2V0PDA+KGtleSksIHN0ZDo6Z2V0PDE+KGtleSkpOworICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFdlYWs8VD4mIGEsIGNvbnN0IEtleSYgYikKKyAgICB7CisgICAgICAg
IGlmICghYSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGEtPnBy
b3BlcnR5TmFtZSgpID09IHN0ZDo6Z2V0PDA+KGIpICYmIGEtPmN1c3RvbUZ1bmN0aW9uUG9pbnRl
cigpID09IHN0ZDo6Z2V0PDE+KGIpOworICAgIH0KK307CisKIHN0YXRpYyBKU0N1c3RvbUdldHRl
ckZ1bmN0aW9uKiBjcmVhdGVDdXN0b21HZXR0ZXJGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEdldFZhbHVlRnVu
YyBnZXRWYWx1ZUZ1bmMsIE9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJp
YnV0ZSkKIHsKLSAgICAvLyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5v
dCBpbnZva2UgR0Mgc2luY2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBv
ZiBIYXNoTWFwOjplbnN1cmUuCi0gICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRv
IGludm9rZSBHQyB3aGVuIGV4ZWN1dGluZyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAoMikg
dG8gYXZvaWQgbG9va2luZyB1cCBIYXNoTWFwIHR3aWNlLgorICAgIHVzaW5nIFRyYW5zbGF0b3Ig
PSBXZWFrQ3VzdG9tR2V0dGVyT3JTZXR0ZXJIYXNoVHJhbnNsYXRvcjxKU0N1c3RvbUdldHRlckZ1
bmN0aW9uPjsKKworICAgIC8vIFdlYWtHQ1NldDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11c3Qg
bm90IGludm9rZSBHQyBzaW5jZSBHQyBjYW4gbW9kaWZ5IFdlYWtHQ1NldCBpbiB0aGUgbWlkZGxl
IG9mIEhhc2hTZXQ6OmVuc3VyZS4KKyAgICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgxKSBub3Qg
dG8gaW52b2tlIEdDIHdoZW4gZXhlY3V0aW5nIFdlYWtHQ1NldDo6ZW5zdXJlVmFsdWUgYW5kICgy
KSB0byBhdm9pZCBsb29raW5nIHVwIEhhc2hTZXQgdHdpY2UuCiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmN1c3RvbUdldHRlckZ1bmN0aW9u
TWFwKCkuZW5zdXJlVmFsdWUoZ2V0VmFsdWVGdW5jLCBbJl0geworICAgIHJldHVybiBnbG9iYWxP
YmplY3QtPmN1c3RvbUdldHRlckZ1bmN0aW9uU2V0KCkuZW5zdXJlVmFsdWU8VHJhbnNsYXRvcj4o
c3RkOjptYWtlX3BhaXIocHJvcGVydHlOYW1lLCBnZXRWYWx1ZUZ1bmMpLCBbJl0gewogICAgICAg
ICByZXR1cm4gSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSwgZ2V0VmFsdWVGdW5jLCBkb21BdHRyaWJ1dGUpOwogICAgIH0pOwogfQog
CiBzdGF0aWMgSlNDdXN0b21TZXR0ZXJGdW5jdGlvbiogY3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rp
b24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMgcHV0VmFsdWVGdW5jKQogewotICAgIC8vIFdlYWtHQ01h
cDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBHQyBzaW5jZSBHQyBjYW4g
bW9kaWZ5IFdlYWtHQ01hcCBpbiB0aGUgbWlkZGxlIG9mIEhhc2hNYXA6OmVuc3VyZS4KLSAgICAv
LyBXZSB1c2UgRGVmZXJHQyBoZXJlICgxKSBub3QgdG8gaW52b2tlIEdDIHdoZW4gZXhlY3V0aW5n
IFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUgYW5kICgyKSB0byBhdm9pZCBsb29raW5nIHVwIEhhc2hN
YXAgdHdpY2UuCisgICAgdXNpbmcgVHJhbnNsYXRvciA9IFdlYWtDdXN0b21HZXR0ZXJPclNldHRl
ckhhc2hUcmFuc2xhdG9yPEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24+OworCisgICAgLy8gV2Vha0dD
U2V0OjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDIHNpbmNlIEdDIGNh
biBtb2RpZnkgV2Vha0dDU2V0IGluIHRoZSBtaWRkbGUgb2YgSGFzaFNldDo6ZW5zdXJlLgorICAg
IC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mgd2hlbiBleGVjdXRp
bmcgV2Vha0dDU2V0OjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAgSGFz
aFNldCB0d2ljZS4KICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgcmV0dXJuIGds
b2JhbE9iamVjdC0+Y3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAoKS5lbnN1cmVWYWx1ZShwdXRWYWx1
ZUZ1bmMsIFsmXSB7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Y3VzdG9tU2V0dGVyRnVuY3Rp
b25TZXQoKS5lbnN1cmVWYWx1ZTxUcmFuc2xhdG9yPihzdGQ6Om1ha2VfcGFpcihwcm9wZXJ0eU5h
bWUsIHB1dFZhbHVlRnVuYyksIFsmXSB7CiAgICAgICAgIHJldHVybiBKU0N1c3RvbVNldHRlckZ1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBwdXRWYWx1ZUZ1
bmMpOwogICAgIH0pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a0dDSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha0dDSGFzaFRhYmxlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha0dDSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgV2Vha0dDSGFzaFRhYmxlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWFrR0NIYXNoVGFi
bGUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSA9IDA7Cit9Owor
Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkocmV2
aXNpb24gMjc1MTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIxICsyNywxNSBAQAogCiAjaW5jbHVkZSAiRGVmZXJH
Qy5oIgogI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNsdWRlICJXZWFrR0NIYXNoVGFibGUuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogLy8gQSBIYXNoTWFw
IHdpdGggV2VhazxKU0NlbGw+IHZhbHVlcywgd2hpY2ggYXV0b21hdGljYWxseSByZW1vdmVzIHZh
bHVlcyBvbmNlIHRoZXkncmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAKLWNsYXNzIFdlYWtHQ01hcEJh
c2UgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYWtHQ01hcEJhc2UoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMoKSA9IDA7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gRGVmYXVsdEhh
c2g8S2V5QXJnPiwKLSAgICB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRzPEtleUFy
Zz4+Ci1jbGFzcyBXZWFrR0NNYXAgZmluYWwgOiBwdWJsaWMgV2Vha0dDTWFwQmFzZSB7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJn
ID0gRGVmYXVsdEhhc2g8S2V5QXJnPiwgdHlwZW5hbWUgS2V5VHJhaXRzQXJnID0gSGFzaFRyYWl0
czxLZXlBcmc+PgorY2xhc3MgV2Vha0dDTWFwIGZpbmFsIDogcHVibGljIFdlYWtHQ0hhc2hUYWJs
ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgdHlwZWRlZiBXZWFrPFZhbHVl
QXJnPiBWYWx1ZVR5cGU7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgVmFsdWVUeXBlLCBI
YXNoQXJnLCBLZXlUcmFpdHNBcmc+IEhhc2hNYXBUeXBlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcElubGluZXMuaAkocmV2aXNpb24gMjc1MTcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBWYWx1ZQogaW5saW5lIFdlYWtHQ01hcDxLZXlBcmcsIFZhbHVlQXJnLCBIYXNo
QXJnLCBLZXlUcmFpdHNBcmc+OjpXZWFrR0NNYXAoVk0mIHZtKQogICAgIDogbV92bSh2bSkKIHsK
LSAgICB2bS5oZWFwLnJlZ2lzdGVyV2Vha0dDTWFwKHRoaXMpOworICAgIHZtLmhlYXAucmVnaXN0
ZXJXZWFrR0NIYXNoVGFibGUodGhpcyk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0Fy
Zz4KIGlubGluZSBXZWFrR0NNYXA8S2V5QXJnLCBWYWx1ZUFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnPjo6fldlYWtHQ01hcCgpCiB7Ci0gICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFrR0NNYXAo
dGhpcyk7CisgICAgbV92bS5oZWFwLnVucmVnaXN0ZXJXZWFrR0NIYXNoVGFibGUodGhpcyk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1l
IEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYWsuaCIKKyNpbmNs
dWRlICJXZWFrR0NIYXNoVGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworLy8gQSBIYXNoU2V0IHdpdGggV2VhazxKU0NlbGw+IHZhbHVlcywgd2hp
Y2ggYXV0b21hdGljYWxseSByZW1vdmVzIHZhbHVlcyBvbmNlIHRoZXkncmUgZ2FyYmFnZSBjb2xs
ZWN0ZWQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgV2Vha0dDU2V0SGFzaFRyYWl0
cyA6IEhhc2hUcmFpdHM8V2VhazxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNJ
c1JlbGVhc2VkV2Vha1ZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBib29sIGlzUmVs
ZWFzZWRXZWFrVmFsdWUoY29uc3QgV2VhazxUPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gIXZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgJiYgIXZhbHVlLmlzSGFzaFRhYmxl
RW1wdHlWYWx1ZSgpICYmICF2YWx1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IERlZmF1bHRIYXNoPFdlYWs8VmFsdWVBcmc+Piwg
dHlwZW5hbWUgVHJhaXRzQXJnID0gV2Vha0dDU2V0SGFzaFRyYWl0czxWYWx1ZUFyZz4+CitjbGFz
cyBXZWFrR0NTZXQgZmluYWwgOiBwdWJsaWMgV2Vha0dDSGFzaFRhYmxlIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSBXZWFrPFZhbHVlQXJnPjsK
KyAgICB1c2luZyBIYXNoU2V0VHlwZSA9IEhhc2hTZXQ8VmFsdWVUeXBlLCBIYXNoQXJnLCBUcmFp
dHNBcmc+OworCitwdWJsaWM6CisgICAgdXNpbmcgQWRkUmVzdWx0ID0gdHlwZW5hbWUgSGFzaFNl
dFR5cGU6OkFkZFJlc3VsdDsKKyAgICB1c2luZyBpdGVyYXRvciA9IHR5cGVuYW1lIEhhc2hTZXRU
eXBlOjppdGVyYXRvcjsKKyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IHR5cGVuYW1lIEhhc2hT
ZXRUeXBlOjpjb25zdF9pdGVyYXRvcjsKKworICAgIGV4cGxpY2l0IFdlYWtHQ1NldChWTSYpOwor
ICAgIH5XZWFrR0NTZXQoKSBmaW5hbDsKKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAg
ICAgbV9zZXQuY2xlYXIoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBWYWx1ZUFyZyogZW5z
dXJlVmFsdWUoVCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICAvLyBJ
ZiBmdW5jdG9yIGludm9rZXMgR0MsIEdDIGNhbiBwcnVuZSBXZWFrR0NTZXQsIGFuZCBtYW5pcHVs
YXRlIEhhc2hTZXQgd2hpbGUgd2UgYXJlIHRvdWNoaW5nIGl0IGluIHRoZSBlbnN1cmUgZnVuY3Rp
b24uCisgICAgICAgIC8vIFRoZSBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBHQy4KKyAgICAgICAg
RGlzYWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAgICAKKyAgICAgICAgYXV0byByZXN1bHQgPSBt
X3NldC50ZW1wbGF0ZSBlbnN1cmU8SGFzaFRyYW5zbGF0b3I+KHN0ZDo6Zm9yd2FyZDxUPihrZXkp
LCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT5nZXQoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgaXRlcmF0b3IgZmluZChjb25z
dCBWYWx1ZVR5cGUmIGtleSk7CisgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qg
VmFsdWVUeXBlJiBrZXkpIGNvbnN0OworICAgIGlubGluZSBib29sIGNvbnRhaW5zKGNvbnN0IFZh
bHVlVHlwZSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgcHJ1bmVTdGFsZUVudHJpZXMo
KSBmaW5hbDsKKworICAgIEhhc2hTZXRUeXBlIG1fc2V0OworICAgIFZNJiBtX3ZtOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrR0NTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIZWFwSW5s
aW5lcy5oIgorI2luY2x1ZGUgIldlYWtHQ1NldC5oIgorI2luY2x1ZGUgIldlYWtJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgoraW5saW5lIFdlYWtHQ1NldDxWYWx1ZUFy
ZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6V2Vha0dDU2V0KFZNJiB2bSkKKyAgICA6IG1fdm0odm0p
Cit7CisgICAgdm0uaGVhcC5yZWdpc3RlcldlYWtHQ0hhc2hUYWJsZSh0aGlzKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0
c0FyZz4KK2lubGluZSBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46On5X
ZWFrR0NTZXQoKQoreworICAgIG1fdm0uaGVhcC51bnJlZ2lzdGVyV2Vha0dDSGFzaFRhYmxlKHRo
aXMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywg
dHlwZW5hbWUgVHJhaXRzQXJnPgoraW5saW5lIHR5cGVuYW1lIFdlYWtHQ1NldDxWYWx1ZUFyZywg
SGFzaEFyZywgVHJhaXRzQXJnPjo6aXRlcmF0b3IgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJn
LCBUcmFpdHNBcmc+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit7CisgICAgaXRlcmF0
b3IgaXQgPSBtX3NldC5maW5kKHZhbHVlKTsKKyAgICBpdGVyYXRvciBlbmQgPSBtX3NldC5lbmQo
KTsKKyAgICBpZiAoaXQgIT0gZW5kICYmICEqaXQpIC8vIEZvdW5kIGEgem9tYmllIHZhbHVlLgor
ICAgICAgICByZXR1cm4gZW5kOworICAgIHJldHVybiBpdDsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK2lubGlu
ZSB0eXBlbmFtZSBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46OmNvbnN0
X2l0ZXJhdG9yIFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6ZmluZChj
b25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdl
YWtHQ1NldCo+KHRoaXMpLT5maW5kKHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK2lubGluZSBib29s
IFdlYWtHQ1NldDxWYWx1ZUFyZywgSGFzaEFyZywgVHJhaXRzQXJnPjo6Y29udGFpbnMoY29uc3Qg
VmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmluZCh2YWx1ZSkgIT0gbV9z
ZXQuZW5kKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNo
QXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+CitORVZFUl9JTkxJTkUgdm9pZCBXZWFrR0NTZXQ8VmFs
dWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46OnBydW5lU3RhbGVFbnRyaWVzKCkKK3sKKyAgICBt
X3NldC5yZW1vdmVJZihbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gIWVudHJ5Owor
ICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzUxNzkp
CisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDIxLTAzLTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0dsb2JhbE9iamVjdCdzIG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25NYXAgYW5kIG1fY3VzdG9tU2V0
dGVyRnVuY3Rpb25NYXAgc2hvdWxkIGJlIHNldHMsIG5vdCBtYXBzLCBhbmQgc2hvdWxkIHVzZSBi
b3RoIHRoZSBpZGVudGlmaWVyIGFuZCBmdW5jdGlvbiBwb2ludGVyIGFzIHRoZSBrZXkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzYxMworCisgICAg
ICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIEFkZHMgYSBoZXRlcm9nZW5v
dXMgSGFzaFNldDo6ZW5zdXJlLCB3aGljaCBhbGxvd3MgbGF6eSBjb25zdHJ1Y3Rpb24gb2YgdGhl
IHZhbHVlIHRvCisgICAgICAgIGluc2VydCBpbnRvIHRoZSBIYXNoU2V0IG9ubHkgaWYgdGhlIGhl
dGVyb2dlbm91cyBrZXkgKGUuZy4gYSBrZXkgKyBIYXNoVHJhbnNsYXRvcgorICAgICAgICB0aGF0
IGFyZSBub3QgdGhlIHNhbWUgYXMgdGhlIEhhc2hTZXQncyBWYWx1ZVR5cGUpIGRvZXMgbm90IG1h
dGNoIGFueSBpdGVtIGluIHRoZQorICAgICAgICBzZXQuIEZvciBleGFtcGxlIGdpdmVuIGEgc2V0
IG9mIEV4cGVuc2l2ZVRvQ29uc3RydWN0LCBidXQgdW5pcXVlbHkgaWRlbnRpZmlhYmxlCisgICAg
ICAgIGJ5IENoZWFwVG9Db25zdHJ1Y3Q6CisgICAgICAgIAorICAgICAgICAgICAgSGFzaFNldDxF
eHBlbnNpdmVUb0NvbnN0cnVjdD4gaGFzaFNldDsKKyAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgc3RydWN0IFRyYW5zbGF0b3IgeworICAgICAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IENoZWFwVG9Db25zdHJ1Y3QmIGtleSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBrZXkuaGFzaCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBFeHBlbnNpdmVUb0NvbnN0cnVj
dCYgYSwgY29uc3QgQ2hlYXBUb0NvbnN0cnVjdCYgYikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGFzaFNldC5lbnN1cmU8VHJhbnNs
YXRvcj4oQ2hlYXBUb0NvbnN0cnVjdCB7IC4uLiB9LCBbXSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEV4cGVuc2l2ZVRvQ29uc3RydWN0IHsgLi4uIH07CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICBUaGlzIHdpbGwgYmUgdXNlZCBieSB0aGUgY3VzdG9tIGdldHRlci9zZXR0ZXIgc2V0cyB0
byBhdm9pZCBjb25zdHJ1Y3RpbmcgdGhlIEdDIG9iamVjdHMKKyAgICAgICAgdW5sZXNzIHRoZXkg
YXJlIHJlYWxseSBuZWVkZWQuCisKKyAgICAgICAgQWxzbyB0b29rIHRoZSBvcGVydHVuaXR5IHRv
IHJlcGxhY2Ugc29tZSB0eXBlZGVmcyB3aXRoIHVzaW5ncywgYW5kIGZpeGVkIHNvbWUgY29tbWVu
dHMuCisKKyAgICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpl
bnN1cmUpOgorCiAyMDIxLTAzLTI5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVXNlIHRlcm1pbmF0ZV93aXRoX3JlYXNvbiBpbnN0ZWFkIG9m
IHhwY19jb25uZWN0aW9uX2tpbGwKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHJldmlzaW9uIDI3NTE3OSkKKysr
IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzYgKzMzLDMw
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXMKIGNsYXNzIEhhc2hT
ZXQgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHJpdmF0ZToKLSAgICB0
eXBlZGVmIEhhc2hBcmcgSGFzaEZ1bmN0aW9uczsKLSAgICB0eXBlZGVmIFRyYWl0c0FyZyBWYWx1
ZVRyYWl0czsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUYWtlVHlwZSBUYWtl
VHlwZTsKKyAgICB1c2luZyBIYXNoRnVuY3Rpb25zID0gSGFzaEFyZzsKKyAgICB1c2luZyBWYWx1
ZVRyYWl0cyA9IFRyYWl0c0FyZzsKKyAgICB1c2luZyBUYWtlVHlwZSA9IHR5cGVuYW1lIFZhbHVl
VHJhaXRzOjpUYWtlVHlwZTsKIAogcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVU
cmFpdHM6OlRyYWl0VHlwZSBWYWx1ZVR5cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5h
bWUgVmFsdWVUcmFpdHM6OlRyYWl0VHlwZTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hU
YWJsZTxWYWx1ZVR5cGUsIFZhbHVlVHlwZSwgSWRlbnRpdHlFeHRyYWN0b3IsCi0gICAgICAgIEhh
c2hGdW5jdGlvbnMsIFZhbHVlVHJhaXRzLCBWYWx1ZVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKKyAg
ICB1c2luZyBIYXNoVGFibGVUeXBlID0gSGFzaFRhYmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJ
ZGVudGl0eUV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRz
PjsKIAogcHVibGljOgotICAgIC8qCi0gICAgICogU2luY2UgZmlndXJpbmcgb3V0IHRoZSBlbnRy
aWVzIG9mIGFuIGl0ZXJhdG9yIGlzIGNvbmZ1c2luZywgaGVyZSBpcyBhIGNoZWF0IHNoZWV0Ogot
ICAgICAqIGNvbnN0IEtleVR5cGUmIGtleSA9IGl0ZXJhdG9yLT5rZXk7Ci0gICAgICovCi0gICAg
dHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBWYWx1
ZVR5cGU+IGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0
ZXI8SGFzaFRhYmxlVHlwZSwgVmFsdWVUeXBlPiBjb25zdF9pdGVyYXRvcjsKLQotICAgIC8qCi0g
ICAgICogU2luY2UgZmlndXJpbmcgb3V0IHRoZSBlbnRyaWVzIG9mIGFuIEFkZFJlc3VsdCBpcyBj
b25mdXNpbmcsIGhlcmUgaXMgYSBjaGVhdCBzaGVldDoKLSAgICAgKiBpdGVyYXRvciBpdGVyID0g
YWRkUmVzdWx0Lml0ZXJhdG9yOwotICAgICAqIGJvb2wgaXNOZXdFbnRyeSA9IGFkZFJlc3VsdC5p
c05ld0VudHJ5OwotICAgICAqLwotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxlVHlwZTo6
QWRkUmVzdWx0IEFkZFJlc3VsdDsKLQotICAgIEhhc2hTZXQoKQotICAgIHsKLSAgICB9CisgICAg
Ly8gSGFzaFNldCBpdGVyYXRvcnMgaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKyAgICAv
LyAgICAgIGNvbnN0IFZhbHVlVHlwZSogZ2V0KCkgY29uc3Q7CisgICAgLy8gICAgICBjb25zdCBW
YWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0OworICAgIC8vICAgICAgY29uc3QgVmFsdWVUeXBl
KiBvcGVyYXRvci0+KCkgY29uc3Q7CisgICAgdXNpbmcgaXRlcmF0b3IgPSBIYXNoVGFibGVDb25z
dEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBWYWx1ZVR5cGU+OworICAgIHVzaW5nIGNv
bnN0X2l0ZXJhdG9yID0gSGFzaFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlw
ZSwgVmFsdWVUeXBlPjsKKworICAgIC8vIEhhc2hTZXQgQWRkUmVzdWx0cyBoYXZlIHRoZSBmb2xs
b3dpbmcgZmllbGRzOgorICAgIC8vICAgICAgSXRlcmF0b3JUeXBlIGl0ZXJhdG9yOworICAgIC8v
ICAgICAgYm9vbCBpc05ld0VudHJ5OworICAgIHVzaW5nIEFkZFJlc3VsdCA9IHR5cGVuYW1lIEhh
c2hUYWJsZVR5cGU6OkFkZFJlc3VsdDsKIAorICAgIEhhc2hTZXQoKSA9IGRlZmF1bHQ7CiAgICAg
SGFzaFNldChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VmFsdWVBcmc+IGluaXRpYWxpemVyTGlzdCkK
ICAgICB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiBpbml0aWFsaXplckxpc3Qp
CkBAIC05Myw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvciwgdHlwZW5hbWUgVD4gaXRlcmF0b3IgZmluZChjb25zdCBUJikgY29uc3Q7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFp
bnMoY29uc3QgVCYpIGNvbnN0OwogCisKICAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluY2x1ZGVz
IGJvdGggYW4gaXRlcmF0b3IgdG8gdGhlIGFkZGVkIHZhbHVlJ3MgbG9jYXRpb24sCiAgICAgLy8g
YW5kIGFuIGlzTmV3RW50cnkgYm9vbCB0aGF0IGluZGljYXRlcyBpZiBpdCBpcyBhIG5ldyBvciBl
eGlzdGluZyBlbnRyeSBpbiB0aGUgc2V0LgogICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVU
eXBlJik7CkBAIC0xMTAsNiArMTA1LDE2IEBAIHB1YmxpYzoKICAgICAvLyAgIHN0YXRpYyB0cmFu
c2xhdGUoVmFsdWVUeXBlJiwgY29uc3QgVCYsIHVuc2lnbmVkIGhhc2hDb2RlKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4gQWRkUmVzdWx0IGFkZChj
b25zdCBUJik7CiAgICAgCisgICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgdHJhbnNsYXRl
ZCBhZGQoKSwgZW5zdXJlKCkgd2lsbCBzdGlsbCBkbyB0cmFuc2xhdGlvbgorICAgIC8vIGJ5IGhh
c2hpbmcgYW5kIGNvbXBhcmluZyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNv
c3Qgb2YgdHlwZQorICAgIC8vIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGlu
IHRoZSB0YWJsZSwgYnV0IHJhdGhlciB0aGFuIGEgc3RhdGljCisgICAgLy8gdHJhbnNsYXRlKCkg
ZnVuY3Rpb24sIHVzZXMgdGhlIHBhc3NlZCBpbiBmdW5jdG9yIHRvIHBlcmZvcm0gbGF6eSBjcmVh
dGlvbiBvZgorICAgIC8vIHRoZSB2YWx1ZSBvbmx5IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHRoZXJl
LiBIYXNoVHJhbnNsYXRvciBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZworICAgIC8vIGZ1bmN0aW9u
IG1lbWJlcnM6CisgICAgLy8gICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJik7CisgICAg
Ly8gICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBWYWx1ZVR5cGUmLCBjb25zdCBUJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1
bmN0b3I+IEFkZFJlc3VsdCBlbnN1cmUoVCYmLCBGdW5jdG9yJiYpOworCiAgICAgLy8gQXR0ZW1w
dHMgdG8gYWRkIGEgbGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFu
eSBvZgogICAgIC8vIHRoZW0gYXJlIG5ldyB0byB0aGUgc2V0LiBSZXR1cm5zIGZhbHNlIGlmIHRo
ZSBzZXQgaXMgdW5jaGFuZ2VkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4K
QEAgLTE3MSw2ICsxNzYsMTYgQEAgc3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlciB7CiAg
ICAgfQogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUcmFpdHMsIHR5cGVuYW1lIFRyYW5z
bGF0b3I+CitzdHJ1Y3QgSGFzaFNldEVuc3VyZVRyYW5zbGF0b3JBZGFwdG9yIHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0
dXJuIFRyYW5zbGF0b3I6Omhhc2goa2V5KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpIHsgcmV0
dXJuIFRyYW5zbGF0b3I6OmVxdWFsKGEsIGIpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuY3Rvcj4gc3RhdGljIHZvaWQgdHJhbnNsYXRlKFQmIGxv
Y2F0aW9uLCBVJiYsIEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgVmFsdWVUcmFp
dHM6OmFzc2lnblRvRW1wdHkobG9jYXRpb24sIGZ1bmN0b3IoKSk7CisgICAgfQorfTsKKwogdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KIGlubGluZSB2b2lkIEhh
c2hTZXQ8VCwgVSwgVj46OnN3YXAoSGFzaFNldCYgb3RoZXIpCiB7CkBAIC0yMzMsNiArMjQ4LDEz
IEBAIGlubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMKICAgICByZXR1cm4g
bV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJh
bnNsYXRvcj4+KHZhbHVlKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hU
cmFuc2xhdG9yLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPgoraW5saW5lIGF1dG8gSGFz
aFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZW5zdXJlKFQmJiBrZXksIEZ1bmN0
b3ImJiBmdW5jdG9yKSAtPiBBZGRSZXN1bHQKK3sKKyAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGFkZDxIYXNoU2V0RW5zdXJlVHJhbnNsYXRvckFkYXB0b3I8VHJhaXRzLCBIYXNoVHJhbnNsYXRv
cj4+KHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rvcikp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogaW5s
aW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIC0+
IEFkZFJlc3VsdAogewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>